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:

FieldValue
MethodPOST
URLhttps://atlaswork.ai/api/envelope
AuthenticationHeader Auth Authorization: Bearer {{$credentials.atlasApiKey}}
BodyJSON

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_id and execution URL for support

n8n vs Zapier vs MCP

ToolBest for
n8nSelf-hosted, complex branching, EU data residency
ZapierFast citizen-developer prototypes
Atlas MCPAgents 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

ActionAtlas route
CreatePOST /api/envelope
ReadGET /api/envelope/{id}
SendPOST /api/envelope/{id}/send
VoidPOST /api/envelope/{id}/void
RemindPOST /api/envelope/{id}/remind
Template sendPOST /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.