> ## Documentation Index
> Fetch the complete documentation index at: https://docs.haloagents.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# PandaDoc

> Sync contracts and signer activity. Auto-link contracts to companies by signer email and surface contract events in Slack.

## What PandaDoc adds to Halo

PandaDoc is an ingest-only integration:

| Mode | What it does |
| - | - |
| **Ingest** | Contracts sync into Halo, signer details are matched to companies by email/domain, and contract content is indexed as searchable knowledge. |

Used for two main things:

1. **Renewal tracking** — Halo can pull renewal dates and contract terms from PandaDoc directly
2. **Contract awareness** — the AI knows what's been signed, by whom, and when, so it can answer questions like "When does our contract expire?" or "Did we sign the data processing addendum?"

Connect at **Integrations > PandaDoc**.

## Setup

### Connecting

PandaDoc uses **API key** auth with an optional **webhook shared key**:

1. In PandaDoc, generate an API key.
2. In Halo, click **Connect PandaDoc**.
3. Paste the key (and optionally a webhook shared key for verification).
4. Submit.

Halo validates the key against PandaDoc's documents list endpoint and stores it encrypted.

### Webhook

Webhook URL: `{appUrl}/api/integrations/pandadoc/webhook?team={orgId}`

PandaDoc appends `&signature=...` to the URL when sending. Verification uses HMAC-SHA256 hex of the body with your webhook shared key.

Events processed:

* `document_state_changed`
* `document_completed`
* `document_sent`
* `document_viewed`
* `document_creation_completed`
* `recipient_completed`

You can update the webhook shared key later with **PATCH** on the integration.

## Ingest mode

When ingest is on:

| Data | Where it lands |
| - | - |
| **Contracts** | `contracts` table with `provider: pandadoc` |
| **Signer details** | Linked to `end_users` and `companies` by email match |
| **Contract content** | Indexed in knowledge under `pandadoc:` |

### Status mapping

PandaDoc has many internal status codes; Halo normalizes them to a simpler set:

| PandaDoc status | Halo normalized |
| - | - |
| `document.uploaded` | Created |
| `document.draft` | Draft |
| `document.sent` | Sent |
| `document.viewed` | Viewed |
| `document.completed` | Signed |
| `document.expired` | Expired |
| `document.declined` | Declined |
| ... | ... |

The normalized status drives renewal status auto-rules.

## Renewals from PandaDoc

When you sign a renewal contract in PandaDoc, Halo can pull:

* **Renewal date** from the contract's effective period
* **Contract term** from the contract length
* **`on_contract`** flag

Configure source priority at **Settings > Renewals** — see [Renewals](https://docs.haloagents.ai/contacts/renewals.md).

## Notifications

PandaDoc doesn't have its own notifications mode. When **Slack** is connected and the `contract_event` notification type is enabled, Halo posts to Slack on every relevant PandaDoc webhook event:

* Contract signed
* Contract sent
* Contract viewed
* Contract expired
* Recipient completed

Use this to keep your sales/CS team in the loop without monitoring PandaDoc directly.

## Stats

The integration page shows:

* Total contracts synced
* Recent activity
* Webhook configuration status

## Where to go next

> **[Renewals](https://docs.haloagents.ai/contacts/renewals.md)**
>
> PandaDoc as a renewal data source.

> **[Slack](https://docs.haloagents.ai/integrations/slack.md)**
>
> Set up contract event notifications.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.