> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt

# Linking ZapSign as a source - Docs

Copy page

# Linking ZapSign as a source - Docs

![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_9608fcca70)

![](https://res.cloudinary.com/dmukukwp6/image/upload/texture_tan_dark_a92b0e022d)

Let AI connect your sources for you

Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog.

`npx @posthog/wizard warehouse`

[Learn more](/wizard.md)

![PostHog Wizard hedgehog](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)

![](https://res.cloudinary.com/dmukukwp6/image/upload/wizard_3f8bb7a240.png)Let AI connect your sources for you

**Alpha release**

This source is currently in **alpha**. The interface and available tables may change.

The ZapSign connector syncs your e-signature data – documents, signers, and templates – into PostHog, so you can analyze signing funnels and completion rates alongside your product data. With webhooks enabled, document events (created, signed, refused, deleted) arrive in real time.

## Prerequisites

You need a ZapSign account with API access. The API token is available in ZapSign under **Settings** > **Integrations** > **ZapSign API**.

## Adding a data source

1.  In PostHog, go to the [Sources tab](https://app.posthog.com/data-management/sources) of the data pipeline section.
2.  Click **\+ New source** and click **Link** next to this source.
3.  Enter your credentials (see [Configuration](#configuration) below) and click **Next**.
4.  Select the tables you want to sync, choose a sync method and frequency, then click **Import**.

Once the syncs are complete, you can start querying this data in PostHog.

When linking ZapSign, you'll need:

-   **API token** – found in ZapSign under **Settings** > **Integrations** > **ZapSign API**.
-   **Environment** – choose **Production** for your live account, or **Sandbox** if the token belongs to a sandbox account (`sandbox.api.zapsign.com.br`).

## Sync modes

Each table can be synced in one of several modes, depending on what the source supports:

-   **Webhook** (when available) – the source pushes changes to PostHog in real time. Fastest freshness, lowest ongoing cost, and the only mode that reliably captures updates and deletes.
-   **Incremental** – only new or updated rows are synced on each run, using a cursor field (such as an `updated_at` timestamp). Cheaper than a full refresh, but deletes aren't captured.
-   **Append only** – new rows are appended using a cursor field; existing rows are never updated. Ideal for immutable, append-only tables like event logs.
-   **Full refresh** – the whole table is reloaded on every sync. Use it when a table has no reliable cursor or when you need deletions reflected.

See [sync methods](/docs/cdp/sources.md#sync-methods) for a full explanation of how each mode works and how to choose between them.

Documents support incremental syncs on their creation date (`created_at`). ZapSign's API can only filter by creation date, so an incremental sync picks up newly created documents but not status changes on older ones – enable webhooks to keep document statuses current, or use full refresh. Signers and templates always sync with full refresh.

The signers table is built by fetching each document's detail, so syncing it makes one API request per document.

## Webhooks

With webhooks enabled on the documents table, ZapSign pushes document events (created, signed, refused, deleted) to PostHog as they happen.

1.  Go to your ZapSign source in the [data pipeline sources tab](https://app.posthog.com/data-management/sources) and open the **Webhook** tab.
2.  Click **Create webhook**. PostHog registers the webhook in ZapSign using your API token and generates a secret authorization header to verify deliveries.

If automatic registration fails, create the webhook manually:

1.  Copy the **webhook URL** from the **Webhook** tab.
2.  In ZapSign, go to **Settings** > **Integrations** > **ZapSign API** > **Webhooks** and add a webhook pointing at that URL, subscribed to all document events.
3.  Add an **Authorization** header with a secret value you generate, and paste the same value into the **Authorization header** field in PostHog.

> ZapSign's API has no way to look up or remove webhooks later, so if you disconnect the source, delete the webhook in ZapSign manually.

## Configuration

| Option | Type | Required |
| --- | --- | --- |
| API token | password | Yes |
| Environment | select | Yes |

## Supported tables

| Table | Description | Sync method | Incremental field | Primary key |
| --- | --- | --- | --- | --- |
| documents | A document sent for electronic signature, with its signing status and signer list. | Webhook, Incremental, Full refresh | created_at | — |
| templates | A reusable document template ('model') used to generate documents for signature. | Full refresh | — | — |
| signers | A person who is asked to sign a document, with their signing status and authentication details. | Full refresh | — | — |

## Troubleshooting

The `original_file` and `signed_file` columns contain temporary download links that expire about 60 minutes after they're generated – re-fetch the document from the ZapSign API when you need a fresh link.

If syncs fail with a `403 Forbidden` error, the API token is missing or invalid (ZapSign responds with `403` rather than `401` for bad tokens). Copy a fresh token from **Settings** > **Integrations** > **ZapSign API** and update the source.

If your sync is failing or data looks wrong, see the [Data warehouse troubleshooting guide](/docs/data-warehouse/troubleshooting.md). If that doesn't help, [contact support](https://us.posthog.com/#panel=support%3Asupport%3Adata_warehouse%3A%3Atrue) – we're happy to help.

### Was this page useful?

HelpfulCould be better