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

# Zapier Integration

> Connect DocuTrust to 6,000+ apps with Zapier triggers and actions.

# Zapier Integration

DocuTrust integrates with [Zapier](https://zapier.com) to connect your document signing workflows to 6,000+ other applications. Automate actions when documents are signed, create submissions from external data sources, and keep your tools in sync without writing code.

## Setup

1. Log in to your [Zapier account](https://zapier.com/app/login).
2. Search for **DocuTrust** in the app directory.
3. Click **Connect** and provide your connection details:

| Field       | Value                  | Description                                       |
| ----------- | ---------------------- | ------------------------------------------------- |
| `Base URL`  | `https://spitshake.io` | The URL of your DocuTrust instance                |
| `API Token` | Your API token         | Generate one at **Settings > API > Create Token** |

4. Click **Test Connection** to verify.

<Note>
  Your API token must have sufficient scopes for the triggers and actions you plan to use. At minimum, the token needs `read` scope for triggers and `write` scope for actions.
</Note>

***

## Triggers

Triggers fire when an event occurs in DocuTrust, starting your Zap.

### Form Completed

Fires when an individual signer completes their portion of a submission.

**Trigger data:**

```json theme={null}
{
  "id": 142,
  "submission_id": 89,
  "template_id": 15,
  "email": "jane.doe@example.com",
  "name": "Jane Doe",
  "role": "Recipient",
  "status": "completed",
  "phone": "+15551234567",
  "completed_at": "2026-04-09T14:32:18.000Z",
  "opened_at": "2026-04-09T14:28:05.000Z",
  "sent_at": "2026-04-09T10:00:00.000Z",
  "external_id": null,
  "metadata": {
    "customer_id": "cust_8472",
    "deal_id": "deal_291"
  },
  "values": [
    {
      "field": "Full Name",
      "value": "Jane Doe"
    },
    {
      "field": "Email",
      "value": "jane.doe@example.com"
    },
    {
      "field": "Company",
      "value": "Acme Inc"
    },
    {
      "field": "Title",
      "value": "VP of Operations"
    },
    {
      "field": "Date",
      "value": "2026-04-09"
    },
    {
      "field": "Signature",
      "value": "https://spitshake.io/blobs/proxy/eyJfcm..."
    }
  ],
  "documents": [
    {
      "name": "Employment Agreement - Signed",
      "url": "https://spitshake.io/blobs/proxy/eyJfcm...",
      "content_type": "application/pdf",
      "size": 284716
    }
  ],
  "submission": {
    "id": 89,
    "status": "completed",
    "created_at": "2026-04-09T09:00:00.000Z",
    "completed_at": "2026-04-09T14:32:18.000Z",
    "source": "api",
    "template": {
      "id": 15,
      "name": "Employment Agreement"
    }
  }
}
```

### Submission Completed

Fires when all signers in a submission have completed signing.

**Trigger data:**

```json theme={null}
{
  "id": 89,
  "template_id": 15,
  "status": "completed",
  "source": "api",
  "submitters_order": "random",
  "created_at": "2026-04-09T09:00:00.000Z",
  "completed_at": "2026-04-09T15:45:30.000Z",
  "archived_at": null,
  "expire_at": null,
  "metadata": {
    "deal_id": "deal_291",
    "source": "api_client"
  },
  "template": {
    "id": 15,
    "name": "Employment Agreement",
    "created_at": "2026-03-01T10:00:00.000Z"
  },
  "submitters": [
    {
      "id": 142,
      "email": "jane.doe@example.com",
      "name": "Jane Doe",
      "role": "Recipient",
      "status": "completed",
      "completed_at": "2026-04-09T14:32:18.000Z"
    },
    {
      "id": 143,
      "email": "hr@example.com",
      "name": "HR Department",
      "role": "Sender",
      "status": "completed",
      "completed_at": "2026-04-09T15:45:30.000Z"
    }
  ],
  "documents": [
    {
      "name": "Employment Agreement - Fully Executed",
      "url": "https://spitshake.io/blobs/proxy/eyJfcm...",
      "content_type": "application/pdf",
      "size": 312450
    }
  ],
  "audit_log_url": "https://spitshake.io/submissions/89/audit_log"
}
```

***

## Actions

Actions are steps that Zapier performs in DocuTrust when triggered by another app.

### Create Submission

Creates a new submission from an existing template and sends it to the specified recipients.

**Input fields:**

| Field                | Type    | Required | Description                                                 |
| -------------------- | ------- | -------- | ----------------------------------------------------------- |
| `template_id`        | string  | Yes      | The template to create a submission from                    |
| `send_email`         | boolean | No       | Whether to send invitation emails (default: `true`)         |
| `submitters_order`   | string  | No       | Signing order: `random` or `sequential` (default: `random`) |
| `submitter_email`    | string  | Yes      | Email address of the first submitter                        |
| `submitter_name`     | string  | No       | Name of the first submitter                                 |
| `submitter_role`     | string  | No       | Role name (must match a role in the template)               |
| `submitter_phone`    | string  | No       | Phone number for SMS delivery                               |
| `submitter_values`   | object  | No       | Pre-filled field values                                     |
| `submitter_metadata` | object  | No       | Custom metadata for the submitter                           |
| `message_subject`    | string  | No       | Custom email subject line                                   |
| `message_body`       | string  | No       | Custom email body (supports merge tokens)                   |

**Output data:**

```json theme={null}
{
  "id": 90,
  "template_id": 15,
  "status": "pending",
  "source": "api",
  "submitters_order": "random",
  "created_at": "2026-04-09T16:00:00.000Z",
  "completed_at": null,
  "archived_at": null,
  "expire_at": null,
  "metadata": {},
  "submitters": [
    {
      "id": 144,
      "email": "new.signer@example.com",
      "name": "New Signer",
      "role": "Recipient",
      "status": "sent",
      "slug": "cD5eF7gHiJ",
      "signing_url": "https://spitshake.io/s/cD5eF7gHiJ",
      "sent_at": "2026-04-09T16:00:01.000Z",
      "opened_at": null,
      "completed_at": null,
      "phone": "+15551234567",
      "values": {
        "Full Name": "New Signer",
        "Company": "Widget Corp"
      },
      "metadata": {
        "source": "zapier"
      }
    }
  ]
}
```

### Create from Emails

Creates submissions from a list of email addresses. Each email becomes a separate submission with its own signing link.

**Input fields:**

| Field             | Type    | Required | Description                                         |
| ----------------- | ------- | -------- | --------------------------------------------------- |
| `template_id`     | string  | Yes      | The template to use                                 |
| `emails`          | string  | Yes      | Comma-separated email addresses                     |
| `send_email`      | boolean | No       | Whether to send invitation emails (default: `true`) |
| `message_subject` | string  | No       | Custom email subject                                |
| `message_body`    | string  | No       | Custom email body                                   |

**Output data:**

```json theme={null}
{
  "submissions": [
    {
      "id": 91,
      "template_id": 15,
      "status": "pending",
      "submitters": [
        {
          "id": 145,
          "email": "signer1@example.com",
          "role": "Recipient",
          "status": "sent",
          "slug": "kL8mN0pQrS",
          "signing_url": "https://spitshake.io/s/kL8mN0pQrS"
        }
      ]
    },
    {
      "id": 92,
      "template_id": 15,
      "status": "pending",
      "submitters": [
        {
          "id": 146,
          "email": "signer2@example.com",
          "role": "Recipient",
          "status": "sent",
          "slug": "tU2vW4xYzA",
          "signing_url": "https://spitshake.io/s/tU2vW4xYzA"
        }
      ]
    }
  ]
}
```

***

## Searches

Searches let Zapier look up existing data in DocuTrust.

### Find Submission

Searches for a submission by ID or template ID.

**Search fields:**

| Field           | Type   | Required | Description                                          |
| --------------- | ------ | -------- | ---------------------------------------------------- |
| `submission_id` | number | No       | Find by exact submission ID                          |
| `template_id`   | string | No       | Find submissions for a specific template             |
| `status`        | string | No       | Filter by status: `pending`, `completed`, `archived` |

**Output data:**

```json theme={null}
{
  "id": 89,
  "template_id": 15,
  "status": "completed",
  "source": "api",
  "submitters_order": "random",
  "created_at": "2026-04-09T09:00:00.000Z",
  "completed_at": "2026-04-09T15:45:30.000Z",
  "archived_at": null,
  "expire_at": null,
  "metadata": {
    "deal_id": "deal_291"
  },
  "template": {
    "id": 15,
    "name": "Employment Agreement"
  },
  "submitters": [
    {
      "id": 142,
      "email": "jane.doe@example.com",
      "name": "Jane Doe",
      "role": "Recipient",
      "status": "completed",
      "completed_at": "2026-04-09T14:32:18.000Z"
    },
    {
      "id": 143,
      "email": "hr@example.com",
      "name": "HR Department",
      "role": "Sender",
      "status": "completed",
      "completed_at": "2026-04-09T15:45:30.000Z"
    }
  ],
  "documents": [
    {
      "name": "Employment Agreement - Fully Executed",
      "url": "https://spitshake.io/blobs/proxy/eyJfcm...",
      "content_type": "application/pdf",
      "size": 312450
    }
  ]
}
```

***

## Example Zaps

### When form completed, add row to Google Sheet

Track every completed signing in a spreadsheet for reporting.

**Configuration:**

1. **Trigger**: DocuTrust - Form Completed
2. **Action**: Google Sheets - Create Spreadsheet Row

**Field mapping:**

| Sheet Column  | Zapier Value                     |
| ------------- | -------------------------------- |
| Signer Name   | `{{name}}`                       |
| Signer Email  | `{{email}}`                      |
| Role          | `{{role}}`                       |
| Completed At  | `{{completed_at}}`               |
| Template      | `{{submission__template__name}}` |
| Document URL  | `{{documents__0__url}}`          |
| Submission ID | `{{submission_id}}`              |

### When new row in Airtable, create submission

Automatically send documents for signing when a new record appears in your CRM or project tracker.

**Configuration:**

1. **Trigger**: Airtable - New Record in View
2. **Action**: DocuTrust - Create Submission

**Field mapping:**

| DocuTrust Field | Airtable Value                                             |
| --------------- | ---------------------------------------------------------- |
| Template ID     | `15` (your template)                                       |
| Submitter Email | `{{Email}}`                                                |
| Submitter Name  | `{{Full Name}}`                                            |
| Send Email      | `true`                                                     |
| Message Subject | `Your contract is ready for signing`                       |
| Message Body    | `Hi {{Full Name}}, please sign your employment agreement.` |

### When submission completed, send Slack notification

Notify your team channel when all parties have signed.

**Configuration:**

1. **Trigger**: DocuTrust - Submission Completed
2. **Action**: Slack - Send Channel Message

**Message template:**

```
All parties have signed "{{template__name}}"

Submitters:
{{submitters__0__name}} ({{submitters__0__email}}) - completed {{submitters__0__completed_at}}
{{submitters__1__name}} ({{submitters__1__email}}) - completed {{submitters__1__completed_at}}

Document: {{documents__0__url}}
Audit log: {{audit_log_url}}
```

### When form completed, create HubSpot contact

Add signers to your CRM automatically.

**Configuration:**

1. **Trigger**: DocuTrust - Form Completed
2. **Action**: HubSpot - Create Contact

**Field mapping:**

| HubSpot Field | Zapier Value                                                |
| ------------- | ----------------------------------------------------------- |
| Email         | `{{email}}`                                                 |
| First Name    | `{{name}}` (split)                                          |
| Company       | `{{values__Company}}`                                       |
| Job Title     | `{{values__Title}}`                                         |
| Notes         | `Signed {{submission__template__name}} on {{completed_at}}` |

***

## Troubleshooting

### Connection fails

* Verify your API token is valid and has not been revoked.
* Confirm your Base URL is correct and accessible from the internet.
* Check that your token has the required scopes (`read` for triggers, `write` for actions).

### Trigger not firing

* Zapier polls for new data at intervals (typically every 1-15 minutes depending on your Zapier plan).
* For near-real-time updates, consider using [webhooks](/guides/webhooks) directly instead of Zapier triggers.
* Verify the template ID filter (if set) matches the template being signed.

### Rate limits

DocuTrust enforces a rate limit of 120 requests per minute per API token. Zapier typically stays well within this limit, but high-volume Zaps with multiple actions may approach it. If you see `429 Too Many Requests` errors in your Zap history, add a delay step between actions.
