Developers

REST API

Server-to-server calls use `Authorization: Bearer esk_test_…` or `esk_live_…`. The tenant comes from the key. Upload, the envelope wizard, and webhook registration use the admin session.

What a tenant API key can call

CallScope on the keyWhat you get back
GET /api/v1/zapier/auth/testintegrations:zapierYour tenant id and name. Use this to confirm the key.
GET /api/v1/zapier/triggers/{event}/sampleintegrations:zapierSample payloads for document.signed, document.completed, document.expired, and template.created.
POST /api/v1/zapier/actions/create-from-templateintegrations:zapierA new document id from a template you already have.
POST /api/v1/zapier/actions/send-for-signingintegrations:zapierThe document moves to link-sent and the signer is emailed.
POST /api/v1/signing-sessions/{sessionId}/tokenssigning:writeA short-lived st_… token for the embed. The browser uses that token, not the API key.

Admin session

Sign in to the admin app for these. A Bearer API key on these routes is refused.

WorkWhere
Upload a PDF, customers, templatesAdmin documents and customers
Envelope wizard: create, send, cancelAdmin envelopes
Register, rotate, and replay webhooksAdmin → Developer → Webhooks

Confirm the key, then send a template document

Prerequisites: an `esk_test_…` or `esk_live_…` key with `integrations:zapier`, and a template id. Expected output: HTTP 200 from the auth test, HTTP 201 with `documentId`, then `status: "link-sent"`.

bash
curl -sS https://api.endorsedsign.com/api/v1/zapier/auth/test \
  -H "Authorization: Bearer $ENDORSED_API_KEY"

curl -sS -X POST https://api.endorsedsign.com/api/v1/zapier/actions/create-from-template \
  -H "Authorization: Bearer $ENDORSED_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "templateId": "'"$ENDORSED_TEMPLATE_ID"'",
    "recipientEmail": "signer@example.com",
    "recipientName": "Signer Example"
  }'

curl -sS -X POST https://api.endorsedsign.com/api/v1/zapier/actions/send-for-signing \
  -H "Authorization: Bearer $ENDORSED_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "documentId": "'"$ENDORSED_DOCUMENT_ID"'",
    "channel": "email"
  }'

New integrations should call `/api/v1/…` or `/api/v2/…`. `/api/v2` is the 2026-09-01 contract. Mutating calls that support it should send `Idempotency-Key`.

Common questions

API keys in the tenant developer workspace

Create a named key, assign scopes, and see the prefix in the same admin chrome your operators already use.

EndorsedSign developer API keys list with a production CRM sync key
API Keys — Northshore Legal CRM sync, production prefix, six scopes, active.

SDK quickstarts beside active credentials

Operators can rotate keys and hand off language-specific SDK onboarding from the same tenant developer workspace.

SDK quickstarts page in the tenant developer workspace
SDK quickstarts — active key context with Node.js, Python, and .NET onboarding.

Developer workspace with live data

A single developer surface showing active tenant API key controls in the admin workspace.

Developer API keys list
API Keys

Get your API key in one call

POST /api/auth/register with `mode: sandbox` returns an `esk_test_` key. Confirm it with GET /api/v1/zapier/auth/test. OpenAPI is at /api/docs.json on an API host that has docs enabled.