Skip to main content

API reference

The Doc E Sign REST API lets you send documents for signature, list and retrieve envelopes, resend signing invitations, and verify document integrity — all programmatically.

API key authentication — Phase 2

API key authentication is not yet available. It ships in Phase 2. At Phase 1, the API uses session cookie authentication only — suitable for server-side integrations where you control a Doc E Sign session.

This reference documents the current Phase 1 API surface. The Phase 2 update will add Authorization: Bearer <api_key> support and API key management in the dashboard.


Base URL

https://doc-e-sign.com/api/v1

Authentication

All endpoints require authentication. At Phase 1, pass your Doc E Sign session cookie with every request.

To obtain a session cookie, sign in at doc-e-sign.com/sign-in and copy the session cookie from your browser's DevTools (Application → Cookies). See the Sandbox page for a step-by-step guide.

curl https://doc-e-sign.com/api/v1/envelopes \
-H "Cookie: sb-access-token=<your-session-cookie>"

Endpoints

Upload a document

Before creating an envelope, upload the PDF to obtain a storagePath.

POST /api/v1/upload

Request body: raw PDF bytes (Content-Type: application/pdf). Maximum 20 MB.

curl -X POST https://doc-e-sign.com/api/v1/upload \
-H "Content-Type: application/pdf" \
-H "Cookie: sb-access-token=<your-session-cookie>" \
--data-binary @contract.pdf

Response 201 Created:

{
"storagePath": "user-id/a1b2c3d4/envelope-uuid/original.pdf",
"removed": []
}

removed lists any elements stripped from the PDF (e.g. embedded scripts). An empty array means nothing was removed.

Error responses:

StatusCodeReason
401UNAUTHORIZEDNo valid session
422FILE_TOO_LARGEFile exceeds 20 MB
422INVALID_TYPENot a PDF (verified from file content, not Content-Type)
422PDF_SANITIZE_FAILEDPDF could not be processed

Create an envelope

POST /api/v1/envelopes

curl -X POST https://doc-e-sign.com/api/v1/envelopes \
-H "Content-Type: application/json" \
-H "Cookie: sb-access-token=<your-session-cookie>" \
-d '{
"title": "NDA — Acme Corp",
"signerEmail": "signer@example.com",
"storagePathTemp": "user-id/a1b2c3d4/envelope-uuid/original.pdf",
"signingExpiresAfter": "5_days"
}'

Request body:

FieldTypeRequiredDescription
titlestringDocument title — shown in the signing invitation email
signerEmailstringSigner's email address
storagePathTempstringstoragePath returned by the upload endpoint
signingExpiresAfterstringLink expiry — one of: 1_day, 3_days, 5_days, 7_days, 14_days, 30_days

Response 201 Created:

{
"envelopeId": "550e8400-e29b-41d4-a716-446655440000"
}

The signing invitation is sent to the signer immediately. The signer receives a link that expires after the specified duration.

Error responses:

StatusCodeReason
400VALIDATION_ERRORMissing or invalid fields
400FILE_NOT_FOUNDstoragePathTemp does not exist or does not belong to your account
401UNAUTHORIZEDNo valid session
402USAGE_LIMIT_REACHEDMonthly envelope limit reached
500SENDER_EMAIL_MISSINGAccount email not available
502EMAIL_SEND_FAILEDSigning invitation could not be sent — document is saved, resend from dashboard

List envelopes

GET /api/v1/envelopes

Returns all envelopes for the authenticated account, ordered by creation date descending.

curl https://doc-e-sign.com/api/v1/envelopes \
-H "Cookie: sb-access-token=<your-session-cookie>"

Response 200 OK:

{
"envelopes": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "NDA — Acme Corp",
"status": "sent",
"createdAt": "2026-05-30T14:22:05Z"
}
]
}

Envelope statuses:

StatusMeaning
draftCreated but sending failed — resend from the dashboard
sentInvitation sent, awaiting signing
partially_signedSome signers have signed (Phase 2 — multiple signers)
sealingSigning submitted, document being sealed
completedSigned PDF produced and stored
expiredSigning link expired before signing completed
voidedEnvelope cancelled (Phase 2)

Resend a signing invitation

POST /api/v1/envelopes/{envelopeId}/resend

Resends the signing invitation for a sent or expired envelope. Generates a new signing link.

curl -X POST https://doc-e-sign.com/api/v1/envelopes/550e8400-e29b-41d4-a716-446655440000/resend \
-H "Cookie: sb-access-token=<your-session-cookie>"

Response 200 OK:

{
"signerId": "signer-uuid",
"status": "sent"
}

Error responses:

StatusCodeReason
400INVALID_STATEEnvelope is not in a resendable state
401UNAUTHORIZEDNo valid session
403FORBIDDENEnvelope does not belong to your account
404NOT_FOUNDEnvelope not found

Verify a document

GET /api/v1/verify?hash={signingChainFingerprint}

Verifies a Signing chain fingerprint against Doc E Sign's database. Returns signing context if found.

curl "https://doc-e-sign.com/api/v1/verify?hash=a1b2c3d4e5f6..."

Response 200 OK (verified):

{
"valid": true,
"completedAt": "2026-05-30T14:35:22Z",
"documentTitle": "NDA — Acme Corp",
"signerEmailDomain": "example.com"
}

Response 200 OK (not found):

{
"valid": false
}

No authentication is required for this endpoint. The hash is not sensitive — it is printed on every signed PDF.

For offline verification without Doc E Sign, see Manual verification.


Rate limits

Requests are rate-limited per account. Limits are not published — if you encounter a 429 Too Many Requests response, implement exponential backoff.