E-signature API
---
title: E-signature API
description: Ship your first signed contract with Atlas REST API. Upload PDF or DOCX, review detected fields, send to signers, and get webhooks when everyone finishes.
date: 2026-06-25
updated: 2026-06-25
---
Your PM dropped a Slack message on Tuesday: "Can we get NDAs signed from the app by Friday?" You have a PDF, a list of signer emails,. And no patience for a two-week OAuth setup. You need one HTTP flow you can test tonight and wire into production next week.
Atlas gives you that flow. Create an envelope, open a review link to confirm fields, send, then listen for a webhook when the signed PDF is ready. PDF and DOCX both work on create.
Share: One POST to create, one review click, one webhook when signed.
What you will build
Picture a simple backend job:
- Your server uploads the contract (PDF or DOCX).
- Atlas detects signature fields and returns a review URL.
- Someone on your team opens review and clicks Send.
- Signers get email in order if there are multiple parties.
- Your webhook handler marks the deal closed and stores the signed file.
That is the whole product surface for most integrations. Everything below maps to those five steps.
Step 1: Authenticate and create
All routes live at https://atlaswork.ai/api/. Send your API key as a Bearer token. Copy the key from Dashboard → Settings.
POST /api/envelope accepts three transports:
| Transport | Content-Type | Body |
|---|---|---|
| File upload | multipart/form-data | file, optional parties[] |
| Base64 | application/json | document, optional parties[] |
| Remote URL | application/json | document_url, optional parties[] |
Example create with a public PDF URL:
curl -X POST https://atlaswork.ai/api/envelope \
-H "Authorization: Bearer $ATLAS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: nda-pilot-001" \
-d '{
"document_url": "https://cdn.example.com/nda.pdf",
"webhook_url": "https://api.example.com/webhooks/atlas",
"parties": [
{"email": "founder@startup.com", "name": "Alex", "role": "Company"}
]
}'
Response:
{
"envelope_id": "uuid",
"review_url": "https://atlaswork.ai/review/uuid?rt=..."
}
Save envelope_id in your database right away. Support will ask for it if anything stalls.
Pass Idempotency-Key on every create. Retries from Zapier, CI, or your job runner must not spawn duplicate envelopes. Keys dedupe within 24 hours.
Step 2: Wait for field detection
Field detection runs async after create. Poll GET /api/envelope/{id} until fields_status is one of:
| Status | Meaning |
|---|---|
pending | Still running. Do not send yet. |
ready | Fields found. Safe to review and send. |
failed | Error. Check review page banner. |
recovered_empty | Zero fields. Place them manually on review. |
Sending while status is pending returns 409. Drafts and detection are free. You only pay when email goes out.
Step 3: Review before send
Open review_url in a browser. Confirm field placement, party binding, and any prefill values. This is the compliance gate for ad-hoc uploads: software prepares, a human authorizes outbound signature requests.
When the shape is trusted (repeat NDAs, order forms), save a template and skip manual review on later sends. See template signing API.
Step 4: Send and collect signatures
After review, dispatch signers:
curl -X POST "https://atlaswork.ai/api/envelope/$ENVELOPE_ID/send" \
-H "Authorization: Bearer $ATLAS_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: send-$ENVELOPE_ID-001" \
-d '{
"parties": [
{"email": "founder@startup.com", "name": "Alex", "role": "Company"}
],
"fields_version": 1
}'
Send consumes one credit. You get five free sends on signup. Resends on an already-sent envelope do not charge again.
Multi-party envelopes sign in order. Each party gets a tokenized sign_url with ?t=<token>. Signers only see fields assigned to their party. See sequential signing.
Lightweight progress polling:
curl "https://atlaswork.ai/api/envelope/$ENVELOPE_ID/status" \ -H "Authorization: Bearer $ATLAS_API_KEY"
Returns status, signed_count, total, and next_signer_email.
Step 5: Webhooks and signed PDF
Set webhook_url at create. Atlas POSTs JSON with X-Atlas-Signature: sha256=HMAC(raw_body, api_key). Verify HMAC before you update CRM or billing state.
Common events:
envelope.sent: first signer got emailenvelope.signed: all parties finishedenvelope.declined: a signer declinedenvelope.voided: sender canceledcontract.extracted: structured post-sign data ready
When status is signed, GET /api/envelope/{id} includes signed download URLs if the artifact is archived.
Other routes you will touch
| Action | Route |
|---|---|
| Full state | GET /api/envelope/{id} |
| List | GET /api/envelopes |
| Update fields | PATCH /api/envelope/{id}/fields (needs fields_version) |
| Void | POST /api/envelope/{id}/void |
| Remind | POST /api/envelope/{id}/remind |
| Template repeat send | POST /api/templates/{id}/send |
Do not pass template_id to envelope create. That path returns 400. Templates use their own send route.
Platform and agents
Multi-tenant SaaS can provision connected accounts via POST /api/platform/connected-accounts and scope requests with Atlas-Account: ext_<id>. See /platforms.
Agents use ten MCP tools at /mcp. Machine-readable API spec: /openapi.json. Agent instructions: /llms.txt.
Error codes
| Code | Meaning |
|---|---|
| 402 | No credits remaining at send time |
| 409 | Version mismatch, or send while fields pending |
| 400 | Invalid body or unsupported param |
Document formats
Upload PDF or DOCX. DOCX converts to PDF at create. Review and sign always render PDF. Signed output includes an audit certificate when complete.
FAQ
Does Atlas accept PDF and DOCX?
Yes. Upload either format when you create an envelope.
How do I authenticate?
Bearer API key from dashboard settings. MCP connectors in ChatGPT and Claude use OAuth instead.
When do credits get used?
One credit per send, not per upload.
Can I skip review?
Templates and auto_send: true on REST can skip review once legal trusts the shape. Ad-hoc uploads default to review-first.
Where should I compare vendors?
See /compare/docusign.
Pilot one NDA end to end before you wire production CRM webhooks. Full reference lives here; browse the developer guides index for every API topic, or sign up for five free sends and copy your API key tonight.