n8n e-sign
---
title: n8n e-sign
description: n8n e-sign: create envelopes from PDF or DOCX, review fields before email, and track signing with webhooks. Includes five free sends on signup.
date: 2026-06-05
updated: 2026-06-05
---
n8n e-sign workflows connect self-hosted automation to Atlas REST signing. PDF and DOCX supported on create. Webhooks notify your n8n instance when envelopes complete.
Share: n8n orchestrates CRM and storage. Atlas handles signing and audit PDFs.
Reference workflow
Webhook (CRM deal stage) → HTTP Request POST /api/envelope → Set node stores envelope_id + review_url → Slack node posts review link → Webhook node waits for Atlas envelope.signed → HTTP GET signed PDF → Google Drive upload → HubSpot node updates deal
Import this mentally as three n8n workflows: create, notify, complete. Splitting keeps retry scopes small.
Node 1: Create envelope
HTTP Request node:
| Field | Value |
|---|---|
| Method | POST |
| URL | https://atlaswork.ai/api/envelope |
| Authentication | Header Auth Authorization: Bearer {{$credentials.atlasApiKey}} |
| Body | JSON |
Example JSON body with expressions:
{
"document_url": "{{ $json.document_url }}",
"webhook_url": "https://n8n.example.com/webhook/atlas-signed",
"metadata": {
"client_reference_id": "deal-{{ $json.deal_id }}",
"external_id": "{{ $json.deal_id }}"
},
"parties": [
{
"email": "{{ $json.signer_email }}",
"name": "{{ $json.signer_name }}",
"role": "Customer"
}
]
}
Add header Idempotency-Key: n8n-{{ $json.deal_id }}-create so n8n retries on timeout do not duplicate envelopes.
Node 2: Wait for signature
Option A: Dedicated Webhook node path /webhook/atlas-signed. Atlas POSTs JSON with event type. Verify signature in a Function node before branching.
Option B: Schedule + HTTP GET /api/envelope/{{$json.envelope_id}} every five minutes until status is signed or declined. Webhooks are cheaper at scale.
Function node signature verification:
const crypto = require('crypto');
const key = $credentials.atlasApiKey;
const sig = $input.first().headers['x-atlas-signature'];
const raw = $input.first().bodyRaw;
const expected = 'sha256=' + crypto.createHmac('sha256', key).update(raw).digest('hex');
if (sig !== expected) throw new Error('Bad Atlas signature');
return $input.all();
Node 3: Download and file
When event is envelope.signed, call GET /api/envelope/{id} with your API key. Response includes download URL when archived. Upload bytes to Drive, S3, or SharePoint with the next HTTP node.
Credentials
Store the Atlas API key in n8n credentials, not inline in JSON. Rotate keys from dashboard settings when someone leaves ops.
Separate credentials for sandbox vs production if you use different Atlas accounts.
Template branch
Add an IF node on document_type === 'standard_nda'. True branch calls POST /api/templates/{template_id}/send with prefill map. False branch uses ad-hoc create + manual review.
See API document templates for prefill keys.
Error workflows
Attach an Error Trigger workflow:
- 402 responses route to email billing admin
- 409 on send means fields still pending. Wait and poll
fields_status - Log
envelope_idand execution URL for support
n8n vs Zapier vs MCP
| Tool | Best for |
|---|---|
| n8n | Self-hosted, complex branching, EU data residency |
| Zapier | Fast citizen-developer prototypes |
| Atlas MCP | Agents in Claude/Cursor preparing envelopes |
Many teams run n8n for CRM automation and MCP for founder chat sends on the same Atlas account.
Sub-workflow exports
Export n8n workflows as JSON in git for review. Include Atlas HTTP node headers minus secrets. New hires import template and attach credentials locally.
Batch operations
When importing 50 deals from CSV, loop HTTP create with rate awareness. Atlas idempotency keys should include row id to survive n8n item retries on partial batch failure.
Self-hosted n8n on Kubernetes
Mount Atlas API key from Kubernetes secret into n8n deployment env. Webhook URL must be public ingress. Confirm TLS cert covers hostname Atlas calls back.
AI agent steps inside n8n
You can add an OpenAI or Anthropic node to draft party names from unstructured deal notes. Keep the model output schema strict (email, name, role). Pass only validated JSON into the Atlas HTTP node. Review URL still gates Send for new PDFs.
Implementation depth for n8n e-sign
Production signing integrations fail on edge cases, not happy-path demos. Always pass Idempotency-Key on POST /api/envelope. Retries from n8n must not spawn duplicate envelopes.
Atlas defaults to review-first on ad-hoc creates. Your workflow uploads the file; a human opens review_url, confirms fields, then clicks Send.
Set webhook_url at create. Verify X-Atlas-Signature HMAC with your API key before you mutate CRM state.
Atlas signs in order. Multi-party sign URLs must include ?t=<token> so each signer only sees their fields.
API surface map
| Action | Atlas route |
|---|---|
| Create | POST /api/envelope |
| Read | GET /api/envelope/{id} |
| Send | POST /api/envelope/{id}/send |
| Void | POST /api/envelope/{id}/void |
| Remind | POST /api/envelope/{id}/remind |
| Template send | POST /api/templates/{id}/send |
OpenAPI: /openapi.json. Agent instructions: /llms.txt.
Pilot success metrics
Time from upload to first signed PDF on a test envelope. Webhook delivery latency p95 under load. Cost per signed document at peak volume.
Pick one metric and measure it this week on Atlas with five free sends at /signup.
FAQ
Can n8n upload PDF binaries? Yes. Use HTTP Request with multipart form and binary property from a prior node.
Does Atlas support OAuth for n8n? API key auth is the integration path. MCP OAuth is for chat clients, not n8n.
Sequential signers? Pass multiple parties in order in the parties array. Atlas promotes signers one at a time.
Webhook retries? Atlas retries failed webhook delivery. Your n8n Webhook node must respond 2xx within ten seconds and process async if needed.