E-Sign API Python Example

---

title: E-Sign API Python Example

description: E-Sign API Python Example guide for developers: Bearer auth, envelope create paths, review URL, and status polling. Includes five free sends on signup.

date: 2026-06-28

updated: 2026-06-28

---

If you typed "esign api python example" into a search bar, you likely have a ticket to wire signing this sprint. Start with POST /api/envelope and finish with a webhook handler.

Share: One POST to create, one review click, one webhook when signed.

This guide walks through e-sign api python example on the Atlas REST API. PDF and DOCX are supported on every upload path.

Python example

import os, requests, uuid

resp = requests.post(
    "https://atlaswork.ai/api/envelope",
    headers={
        "Authorization": f"Bearer {os.environ['ATLAS_API_KEY']}",
        "Idempotency-Key": f"create-{uuid.uuid4()}",
    },
    json={
        "document_url": "https://example.com/msa.pdf",
        "parties": [{"email": "signer@example.com", "name": "Jane Signer", "role": "Customer"}],
    },
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
envelope_id = data["envelope_id"]
review_url = data["review_url"]

Quick reference

Base URL: https://atlaswork.ai/api/. Singular /api/envelope for resource ops, plural /api/envelopes for list.

FAQ

Does Atlas support PDF and DOCX? Yes on every create path. DOCX converts to PDF at ingest.

How do I authenticate? Authorization: Bearer with an API key from dashboard settings. OAuth is for MCP connectors.

What does send cost? One credit per envelope dispatched. Five free credits on signup.

Can I skip review? REST supports auto_send: true on create or template send after legal approval. Default is review-first.

Where is the full API reference? /dev and /docs/guides/e-signature-api.

Next steps

Open /dev for OpenAPI detail. Sign up when you are ready to send.

Testing

Run one loop in staging: create with a two-page PDF, open review, send to a mailbox you control, sign on mobile, confirm webhook delivery. Use is_test: true in metadata when you want internal accounts skipped from Slack alerts.

Security

Store API keys server-side. Rotate keys from dashboard settings if leaked. Verify webhook signatures before updating production database rows.

Observability

Log envelope_id, fields_status, and webhook event types. When send fails, read metadata.send_error on the envelope row via GET /api/envelope/{id}.

Additional context for e-sign api python example

Atlas charges per send, not per seat. Detection and drafts are free. Multi-party envelopes sign sequentially. Each party receives a tokenized sign URL. Platform mode scopes child tenants with Atlas-Account. OpenAPI lives at /openapi.json. Agents can use MCP at /mcp while your backend uses REST for production traffic.

Send after review

When fields_status is ready, open review_url in a browser or call send from your backend:

curl -X POST https://atlaswork.ai/api/envelope/{id}/send \
  -H "Authorization: Bearer $ATLAS_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: send-{id}-001" \
  -d '{
    "parties": [{"email": "signer@example.com", "name": "Jane Signer", "role": "Customer"}],
    "fields_version": 1
  }'

Send consumes one credit. Drafts are free. Match fields_version from GET /api/envelope/{id} or receive 409 on conflict.

Poll status

Lightweight progress:

curl https://atlaswork.ai/api/envelope/{id}/status \
  -H "Authorization: Bearer $ATLAS_API_KEY"

Returns status, signed_count, total, and next_signer_email. Prefer webhooks in production.

Sequential signing

Multi-party envelopes sign in order. Each sign_url includes ?t=<token>. Fields filter server-side per party. See Sequential signing.

Field detection

Upload triggers async detection on PDF or DOCX. Poll until fields_status is not pending. Manual placement fallback when status is recovered_empty. Guide: Field detection.

Templates

Repeat sends use POST /api/templates/{id}/send. Do not pass template_id to envelope create (returns 400).

Platform mode

Multi-tenant SaaS can provision POST /api/platform/connected-accounts and scope with Atlas-Account: ext_<id>. See /platforms.

Credits and billing

Five free credits on signup. One credit per send. 402 when exhausted. Purchase more in dashboard billing. No seat minimums.

MCP parity

Agents use MCP at /mcp. Production backends typically use REST. Both share envelope rows.

Security checklist

Store API keys server-side only. Verify webhook HMAC before updating database rows. Rotate keys from dashboard settings if leaked.

Troubleshooting

409 on send while fields_status is pending means detection still running. 409 on version mismatch means refresh fields_version. Log envelope_id on every create for support traces.

Webhook events

Set webhook_url at create. Atlas POSTs JSON with X-Atlas-Signature: sha256=.... Verify HMAC with your API key.

EventWhen
envelope.sentEmail dispatched to first signer
envelope.signedAll parties finished
envelope.declinedA signer declined
envelope.voidedSender voided pending envelope
contract.extractedPost-sign structured extract ready

See platform webhooks.

Void and remind

Cancel pending work:

curl -X POST https://atlaswork.ai/api/envelope/{id}/void \
  -H "Authorization: Bearer $ATLAS_API_KEY"

Nudge the next signer:

curl -X POST https://atlaswork.ai/api/envelope/{id}/remind \
  -H "Authorization: Bearer $ATLAS_API_KEY"

Download signed PDF

When status is signed, GET /api/envelope/{id} returns signed download URLs if the artifact is archived.

OpenAPI reference

Interactive docs: /dev. Machine-readable: /openapi.json. Agent instructions: /llms.txt.

Getting started checklist

  1. Sign up and copy an API key.
  2. Run create with Idempotency-Key.
  3. Poll fields_status or watch review UI.
  4. Send after review.
  5. Wire webhooks before production traffic.

API reference

Full route list and request schemas live at /dev. Start with E-signature API for the mental model, then use this guide for copy-paste examples.

Password login applies to dashboard users. API integrations use Bearer keys. SAML SSO is optional for orgs that enable it on the dashboard.