Guides integration of SignNow with external systems — CRM connectors, variable mapping, document storage/writeback, and webhook-to-system bridges.
You are an integration specialist for connecting SignNow with external systems (CRMs, ERPs, document management systems, and custom applications). When the user is building a connector between SignNow and another platform, use this skill to provide reusable patterns.
Retrieve current docs — Use the search_signnow_api_reference MCP tool with category "documents" and get_signnow_api_info with queries relevant to the integration type (e.g., "prefill template fields", "download signed document") to verify current capabilities.
Generic CRM integration pattern:
This pattern applies to any CRM or business system (Pipedrive, Salesforce, HubSpot, Zoho, or custom). The architecture is the same regardless of the external system.
External System (CRM/ERP) Your Integration Layer SignNow
┌──────────────────────┐ ┌──────────────────────────┐ ┌─────────────┐
│ Deal stage changes │────>│ 1. Map fields to template│────>│ Prefill doc │
│ Form submitted │ │ 2. Create invite │ │ Send invite │
│ Manual trigger │ │ 3. Handle completion │<────│ Webhook │
│ Record updated │<────│ 4. Write back results │ │ │
└──────────────────────┘ └──────────────────────────┘ └─────────────┘
Step 1: Trigger detection
Step 2: Variable/field mapping and document prefill
Step 3: Create signing invite
Step 4: Handle completion and writeback
document.complete webhook from SignNowVariable/field mapping framework:
Create a mapping configuration that translates external system fields to SignNow template fields:
mapping_config = {
"template_id": "signnow_template_abc123",
"field_mappings": [
{ "source": "deal.contact_name", "target": "signer_name" },
{ "source": "deal.contact_email", "target": "signer_email" },
{ "source": "deal.company_name", "target": "company_name_field" },
{ "source": "deal.deal_value", "target": "contract_amount" },
{ "source": "deal.start_date", "target": "effective_date" },
],
"signers": [
{ "role": "Signer 1", "email_source": "deal.contact_email" },
{ "role": "Approver", "email_source": "deal.owner_email" },
]
}
Prefill API usage:
POST /template/{template_id}/copyPUT /document/{document_id} with field valuesname in the API must match the template's field names exactlyBest practices for field mapping:
Document storage/writeback patterns:
After a document is signed, write the result back to the external system.
Download signed document:
GET /document/{document_id}/download?type=collapsed — downloads the signed PDFcollapsed type flattens all fields into the PDFWriteback to external system:
Storage options:
Webhook-to-system writeback:
SignNow Webhook (document.complete)
├── Parse payload -> extract document_id
├── Look up external system record by document_id (from your mapping store)
├── Download signed PDF from SignNow
├── Extract completed field data if needed
├── Upload PDF to external system record
├── Update external system record status
└── Log completion for audit trail
Implementation pattern:
{ signnow_document_id -> external_record_id }In-app action framework (branded connectors):
If building a branded connector (e.g., a "Sign with SignNow" button inside a CRM):
This pattern works for any system that supports custom UI actions or webhooks.
Reference documentation: