REFERENCE

Documents reference

Create, list, send, cancel, remind, replace recipients and fields, download files, and mint embed links.

All documentation

Ten endpoints covering the whole life of a document. For a worked example rather than a reference, read send a document from a file.

The document object

json
{
  "id": "doc_7a1b...",
  "status": "in_progress",
  "title": "NDA - Acme Inc",
  "mode": "LIVE",
  "recipients": [
    { "id": "rcp_3d9e...", "name": "Sam Rivera",
      "email": "sam@example.com", "role": "Client", "status": "sent" }
  ],
  "created_at": "2026-09-01T10:00:00.000Z"
}
Status values
FieldTypeNotes
draftdocumentCreated but not sent.
in_progressdocumentOut for signature.
completeddocumentEveryone signed; PDF sealed.
declineddocumentA recipient refused.
cancelleddocumentWithdrawn by the sender.
expireddocumentPassed its expiry unsigned.
waitingrecipientTheir turn has not come yet.
sentrecipientAsked, not yet opened.
viewedrecipientOpened it.
signedrecipientDone.
reassignedrecipientForwarded to someone else.

role is populated only on documents created from a template.

GET/v1/documents
Requires documents:read
Query parameters
FieldTypeNotes
statusstringFilter by one of the document statuses above.
limitinteger1 to 100. Defaults to 20.
cursorstringPass next_cursor from the previous page.
bash
curl "https://api.documentesign.com/v1/documents?status=in_progress&limit=20" \
  -H "Authorization: Bearer $ESIGN_API_KEY"
200 OK
{ "data": [ /* documents */ ], "has_more": true, "next_cursor": "doc_5f2a..." }

Only documents in your key's mode are ever returned.

POST/v1/documents
Requires documents:write

Returns 201 with the document. Full body reference is on the sending guide; the short version is files and recipients are required, fields and routing are optional, and send defaults to false.

GET/v1/documents/{id}
Requires documents:read

Returns the document object. Wrong mode returns 404.

POST/v1/documents/{id}/send
Requires documents:write

No body. The document must be a draft, otherwise 409 document_not_draft. Every signer must have at least one signature field.

POST/v1/documents/{id}/cancel
Requires documents:write

No body. Requires an in-progress document. Writes an audit event and emits document.cancelled.

POST/v1/documents/{id}/remind
Requires documents:write
Body (optional)
FieldTypeNotes
recipient_idstringRemind one person. Omit to remind everyone still outstanding.
200 OK
{ "reminded": 2 }

If nobody was eligible, you get 409 no_recipients_to_remind rather than a zero.

PUT/v1/documents/{id}/recipients
Requires documents:write

A full replacement, not a patch - anything you leave out is removed. 1 to 10 recipients.

This response uses raw status values
Unlike every other document response, the statuses here come back in their internal form (REQUESTED, WAITING) rather than the lowercase public ones. Read the document back with GET /documents/{id} if you need the normalised shape.
PUT/v1/documents/{id}/fields
Requires documents:write

Also a full replacement, up to 500 fields. Rows are recreated, so field ids are not stable across calls - do not store them.

200 OK
{ "fields": [ { "id": "fld_...", "type": "SIGNATURE", "page": 1,
             "recipient_id": "rcp_3d9e...", "field_key": null,
             "fill_mode": "SIGNER_FILLED" } ] }
GET/v1/documents/{id}/files/{variant}
Requires documents:read
Variants
FieldTypeNotes
signedpathThe sealed PDF. Available once the document completes.
certificatepathThe audit certificate: who signed, when, from where.
originalpathThe merged source document before signatures.
200 OK
{ "url": "https://...", "expires_in": 600 }

The URL lasts ten minutes. Mint it when you need it rather than storing it. A variant that does not exist yet returns 404 - signed_not_available, certificate_not_available or original_not_available.

Mints a short-lived signing URL for one recipient. See embedded signing for the full flow, the browser events and the origin allowlist.

Body (optional)
FieldTypeNotes
expires_ininteger60 to 3600 seconds. Defaults to 900.
redirect_urlstringMust start with https://.