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

# DocsAutomator eSign

> Collect legally binding electronic signatures on generated documents

DocsAutomator eSign enables collection of legally binding electronic signatures on generated documents with support for unlimited signers, multiple field types, and comprehensive compliance tracking.

<Frame>
  <iframe width="100%" height="400" src="https://www.youtube.com/embed/ee21qEAe93E" title="DocsAutomator eSign Overview" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />
</Frame>

## Feature Overview

| Feature             | Description                                       |
| ------------------- | ------------------------------------------------- |
| Multiple Signers    | Unlimited signers per document                    |
| Signing Order       | Parallel or sequential workflows                  |
| Field Types         | Signatures, dates, text, checkboxes               |
| Email Customization | Custom invitation, reminder, completion emails    |
| Branding            | Custom logo support                               |
| Reminders           | Automated follow-up emails                        |
| Audit Trail         | Complete signing activity record                  |
| Data Integration    | Save PDFs and field values to data sources        |
| Google Drive        | Save signed PDFs to a Google Drive folder         |
| Webhooks            | POST notifications on completion                  |
| Landscape Support   | Automatic zoom adjustment for landscape documents |

## Adding eSign Fields to Templates

Fields use the format: `{{esign.TYPE_SIGNER}}`

* **TYPE**: Field type (signature, date, text, checkbox)
* **SIGNER**: Signer number (1, 2, 3, etc.)

### Field Types

| Type      | Example                      | Purpose                                                                                        |
| --------- | ---------------------------- | ---------------------------------------------------------------------------------------------- |
| Signature | `{{esign.signature_1}}`      | Full signature capture                                                                         |
| Date      | `{{esign.date_1}}`           | Date picker — the calendar day the signer selects is rendered verbatim, no timezone conversion |
| Text      | `{{esign.text_1_name}}`      | Text input field (append `_name` for a unique label per field)                                 |
| Checkbox  | `{{esign.checkbox_1_label}}` | Agreement checkbox (append `_label` for a unique name per field)                               |

## E-Sign Fields in Conditional Sections

E-sign fields placed inside a [conditional section](/features/sections) are automatically excluded from the signing workflow when that section is hidden. If all e-sign fields are in hidden sections, no signing session is created and no charge is billed. This lets you build a single template that supports both e-sign and wet-ink workflows by toggling a section.

## Review Before Signing (skipEsign)

By default, generating a document from an e-sign-enabled automation starts the signing workflow immediately. To review a document first — for example, have your team check a contract before it goes out — pass `skipEsign: true` in the [createDocument](/api-reference/documents/create-from-api) request:

```json theme={null}
{
  "docId": "YOUR_AUTOMATION_ID",
  "recId": "rec1234567890",
  "skipEsign": true
}
```

The document is generated and delivered normally (Drive save, email, webhook), but no signing session is created, no signing invitations are sent, and nothing is billed for e-signing. For Google Docs and Word templates, the `{{esign.*}}` tags remain visible in the output so reviewers can see where signature blocks will be placed; PDF templates simply leave those areas blank. Once the document is approved, run the same request again **without** `skipEsign` to send it for signing.

This makes two-step approval flows easy to build — e.g. two Airtable buttons triggering the same automation: "Draft for Review" (with `skipEsign: true`) and "Send for Signing" (without it).

## Configuring Signers

### Required Information

* **Email**: Signing invitation recipient
* **Name**: Optional, displayed in signing portal

### Dynamic Signer Information

<Tabs>
  <Tab title="Airtable / Google Sheets / SmartSuite">
    Select fields from the dropdown menu to dynamically populate signer information.
  </Tab>

  <Tab title="Other Sources">
    Use placeholders like `{{buyer_email}}`, `{{client_name}}` in your configuration.
  </Tab>
</Tabs>

### Signing Order Options

<CardGroup cols={2}>
  <Card title="Parallel Signing (Default)" icon="users">
    All signers receive invitations simultaneously and can complete in any order. Faster for multi-party documents.
  </Card>

  <Card title="Sequential Signing" icon="list-ol">
    Signers receive invitations one at a time. Ensures specific signing sequence with "Signs first" and "Signs after" labels.
  </Card>
</CardGroup>

## Email Configuration

### Email Sender Options

| Option        | Details                                           |
| ------------- | ------------------------------------------------- |
| DocsAutomator | Sent from `esign@docsautomator.co`                |
| Your Gmail    | Sent from a connected Gmail account               |
| Your Outlook  | Sent from a connected Microsoft (Outlook) account |

With Gmail or Outlook selected, you can additionally enable **Send from the team member who generates the document**: invitations, reminders, and completion emails are then sent from the generating member's own connected account, with the configured account as the fallback. See [Send Email](/features/actions-after-document-generation/send-email#sending-from-the-team-member-who-generates-the-document) for how matching works.

### Customizable Email Types

1. **Invitation Email** - Initial signature request
2. **Reminder Email** - Follow-up for unsigned documents
3. **Completion Email** - All parties have signed

### Template Variables

**All Emails:**

* `{{documentName}}` - Document name
* `{{signerName}}` - Signer's name
* `{{signerEmail}}` - Signer's email

**Invitation & Reminder:**

* `{{expirationDate}}` - Link expiration date
* `{{signButton:text}}` - Sign button
* `{{signLink:text}}` - Sign link

**Completion:**

* `{{downloadButton:text}}` - Download button
* `{{downloadLink:text}}` - Download link

## Reminder Settings

| Setting           | Default | Range     |
| ----------------- | ------- | --------- |
| Enable Reminders  | Off     | —         |
| Reminder Interval | 3 days  | 1-30 days |
| Maximum Reminders | 3       | 1-10      |

<Note>
  Only unsigned documents receive reminders; they stop upon completion.
</Note>

## Branding

### Custom Logo

* **Formats**: PNG, JPG, WEBP, SVG
* **Maximum size**: 2MB
* **Location**: Top of signing page
* **Default**: DocsAutomator logo if not provided

## Expiration Settings

| Setting         | Default | Range      |
| --------------- | ------- | ---------- |
| Link Expiration | 30 days | 1-365 days |

After expiration, links become invalid and sessions change to "Expired" status. When a session expires without being completed, DocsAutomator sends an **expiration email** to the workspace's notification recipients (falling back to workspace owners) and fires an **[`esign.session_expired` webhook](#session-expired)** if one is configured.

## The Signing Experience

### Signer Interface

1. **Document View** - Full PDF with interactive field zones
2. **Field Navigator** - Progress indicator through fields
3. **Signers Panel** - Status of all signers

### Field Completion

* **Signature**: Draw via mouse, trackpad, or touch
* **Date**: Calendar picker or manual selection
* **Text**: Type required information
* **Checkbox**: Toggle to select

### Completion Flow

1. Complete all required fields
2. Click "Complete" button
3. Receive confirmation and download link

<Info>
  Signers can decline with optional reason. The session is marked as declined and administrator is notified.
</Info>

## Signed PDF Delivery

### Save to Google Drive

Automatically save the signed PDF to a Google Drive folder after all signers complete.

1. Enable "Save to Google Drive" in the Signed PDF Delivery section
2. Select a Google Drive folder using the folder picker
3. The signed PDF is uploaded with a `_signed` suffix after all signatures are collected

<Note>
  This is separate from the "Save PDFs in Google Drive" output action, which saves the **unsigned** PDF at generation time. The e-sign Google Drive option saves the **signed** PDF after the signing process completes.
</Note>

### Save to Data Source

| Source        | Save Method       |
| ------------- | ----------------- |
| Airtable      | Attachment field  |
| Google Sheets | HYPERLINK in cell |
| SmartSuite    | File field        |
| ClickUp       | Task attachment   |

### Saving Field Values

1. Open field mapping configuration
2. Select eSign fields to save
3. Choose destination data source fields
4. Values save automatically on completion

**Mappable types:**

* Text fields → Text columns
* Checkbox fields → Yes/No columns
* Date fields → Date columns

<Note>
  Signature images are not mapped to data sources.
</Note>

## Webhook Integration

If your automation has a webhook URL configured, DocsAutomator will send webhook notifications for e-signature events. The webhook URL and `webhookParams` are the same ones configured in your automation's [output settings](/features/actions-after-document-generation/notify-webhook).

### Session Completed

Fires once when all signers complete and the final signed PDF is generated.

```json theme={null}
{
  "signedPdfUrl": "https://...",
  "sessionId": "unique-identifier",
  "documentName": "Document name",
  "status": "completed",
  "completedAt": "ISO date string",
  "signers": [
    {
      "email": "signer@example.com",
      "name": "Signer Name",
      "signedAt": "ISO date string"
    }
  ],
  "fieldValues": {
    "text_1_field": {
      "type": "text",
      "value": "entered value"
    }
  },
  "googleDriveFileId": "1aBcDeFgHiJkLmNoPqRsTuVwXyZ",
  "googleDriveUrl": "https://drive.google.com/file/d/1aBcDeFgHiJkLmNoPqRsTuVwXyZ/view",
  "googleDriveFolderId": "0BxAbCdEfGhIjKlMnOpQrStUvWx",
  "sourceData": { },
  "webhookParams": { },
  "additionalParams": { }
}
```

<Info>
  The `sourceData` field contains the original data from your data source that was used to generate the document. The `webhookParams` field contains any `webhookParams` you passed in the API request; `additionalParams` is an identical copy that exists only for legacy reasons — use `webhookParams` in new integrations.

  The identifier of the triggering record is included automatically, so you can identify which record the e-sign session belongs to: `recId` for Airtable, SmartSuite, and Notion, `taskId` for ClickUp, and `rowNumber` for Google Sheets.
</Info>

<Info>
  The `googleDriveFileId`, `googleDriveUrl`, and `googleDriveFolderId` fields are only included when the signed PDF is saved to Google Drive (i.e., "Save to Google Drive" is enabled in the Signed PDF Delivery section). If Google Drive is not configured, these fields are omitted from the payload.
</Info>

### Session Declined

Fires when a signer declines to sign the document.

```json theme={null}
{
  "event": "esign.session_declined",
  "sessionId": "unique-identifier",
  "documentName": "Document name",
  "status": "declined",
  "declinedAt": "ISO date string",
  "declinedBy": {
    "email": "signer@example.com",
    "name": "Signer Name",
    "signerIndex": 1
  },
  "reason": "Optional reason provided by the signer",
  "sourceData": { },
  "webhookParams": { },
  "additionalParams": { }
}
```

<Info>
  The `sourceData` field contains the original data from your data source that was used to generate the document. The `webhookParams` field contains any `webhookParams` you passed in the API request, plus the automatically included trigger record identifier (`recId` for Airtable, SmartSuite, and Notion, `taskId` for ClickUp, `rowNumber` for Google Sheets). `additionalParams` is an identical copy that exists only for legacy reasons — use `webhookParams` in new integrations.
</Info>

### Signer Signed

Fires once every time a signer completes all of their required fields — including the final signer. Use this to track multi-party signing progress in real time without waiting for the `Session Completed` event.

```json theme={null}
{
  "event": "esign.signer_signed",
  "sessionId": "unique-identifier",
  "documentName": "Document name",
  "status": "in_progress",
  "signer": {
    "email": "signer@example.com",
    "name": "Signer Name",
    "signerIndex": 1,
    "role": "buyer",
    "signedAt": "ISO date string"
  },
  "progress": {
    "completed": 1,
    "total": 2,
    "allSigned": false
  },
  "sourceData": { },
  "webhookParams": { },
  "additionalParams": { }
}
```

<Info>
  For the final signer, `progress.allSigned` is `true`, but the session `status` will still be `in_progress` at this point. The separate [Session Completed](#session-completed) webhook fires once the final signed PDF is generated.
</Info>

### Session Expired

Fires when a signing session expires before all signers complete it. An expiration email is also sent to your workspace's notification recipients.

```json theme={null}
{
  "event": "esign.session_expired",
  "sessionId": "unique-identifier",
  "documentName": "Document name",
  "status": "expired",
  "expiredAt": "ISO date string",
  "expiresAt": "ISO date string",
  "pendingSigners": [
    {
      "email": "signer@example.com",
      "name": "Signer Name",
      "signerIndex": 2,
      "status": "invited"
    }
  ],
  "sourceData": { },
  "webhookParams": { },
  "additionalParams": { }
}
```

<Info>
  `pendingSigners` lists signers who had not yet signed or declined when the session expired. If a session has already been declined, cancelled, or completed before the expiration time, this webhook does **not** fire.
</Info>

## Signer Language

Localize the entire signing experience for your signers. The selected language applies to the signing page UI, email notifications, field labels, and date month names.

### Supported Languages

| Language               | Code |
| ---------------------- | ---- |
| English                | `en` |
| Deutsch (German)       | `de` |
| Español (Spanish)      | `es` |
| Suomi (Finnish)        | `fi` |
| Français (French)      | `fr` |
| Português (Portuguese) | `pt` |
| עברית (Hebrew)         | `he` |
| Nederlands (Dutch)     | `nl` |

### How to Set

1. Open your automation
2. Go to **Output Settings**
3. Under **E-Signature**, select a **Signer Language** from the dropdown

<Info>
  The default language is English. The language setting affects the signing page, all email templates (invitation, reminder, completion), and date month name localization (e.g., `MMMM` renders as "januari" in Dutch).
</Info>

## Session Statuses

| Status      | Meaning                        |
| ----------- | ------------------------------ |
| Pending     | Created, awaiting signers      |
| In Progress | At least one signer started    |
| Completed   | All signers finished           |
| Expired     | Link expired before completion |
| Cancelled   | Admin cancelled                |
| Declined    | Signer declined                |

## Security Features

DocsAutomator eSign includes:

* Secure access tokens
* Time-limited signing links
* Rate limiting
* SHA-256 document integrity hashing
* TLS encryption

## Availability

| Plan               | eSign Access           |
| ------------------ | ---------------------- |
| Free               | Preview/Test mode only |
| Paid (no add-on)   | Preview/Test mode only |
| Paid (with add-on) | Full production access |

## FAQ

<AccordionGroup>
  <Accordion title="How many signers can I add?">
    Unlimited signers using incrementing field tags (`{{esign.signature_1}}`, `{{esign.signature_2}}`, etc.).
  </Accordion>

  <Accordion title="Can signers use mobile devices?">
    Yes. The portal is fully responsive with touch-based signature capture, and the "Complete Signing" button pins to the bottom of the screen as soon as all required fields are filled.
  </Accordion>

  <Accordion title="What happens if a signer doesn't complete?">
    Sessions remain pending/in progress until expiration. Enable reminders to prompt completion.
  </Accordion>

  <Accordion title="Can I cancel a signing request?">
    Yes, any uncompleted session. Cancelled links become invalid.
  </Accordion>

  <Accordion title="How long are signed documents stored?">
    Indefinitely. eSign-enabled automations automatically set PDF expiration to "never" for legal validity.
  </Accordion>
</AccordionGroup>

## Related Pages

<CardGroup cols={2}>
  <Card title="Compliance & Legal Validity" icon="scale-balanced" href="/features/docsautomator-esign/compliance-and-legal-validity">
    Learn about legal standards and compliance
  </Card>

  <Card title="eSign API Reference" icon="code" href="/features/docsautomator-esign/docsautomator-esign-api-reference">
    Programmatic control of signing sessions
  </Card>
</CardGroup>
