Documents
GET
/v1/documents
List Documents
Query
-
statusstring | null -
folderstring (uuid) | null -
qstring (max length 200) | null -
sortstring default"created" -
batchstring (uuid) | null. A bulk send id: list only its member documents. Without it, members of bulk sends are hidden (the batch is the first-class object, BS-4). -
limitinteger (>= 1, <= 200) default50 -
offsetinteger (>= 0, <= 9223372036854776000) default0
Responses
- 200 DocumentPage (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
POST
/v1/documents
Create Document
Create a document in one call: a `multipart/form-data` request with two parts. `document` is the JSON body (title, recipients, fields and settings), sent as a part of type `application/json` or as a plain form field. `file` is the PDF, at most 50 MB. The answer is the draft, with its recipient and field ids, ready to read, change, send or delete. Everything is checked in this call, and a refusal creates nothing: a body that is not this form, or a missing, repeated or unknown part, is a 422 `request-invalid` naming it; a bad `document` part is a 422 `request-invalid` naming the member; an empty file, anything that is not a PDF, a damaged PDF, a password-protected PDF, one with no pages, or a field placed off its pages is a 422 `validation-failed` whose `detail` says which; more than 50 MB is a 422 `pdf-too-large`. The `Content-Type` of the file part is not consulted; the bytes are. (Register: D180, ADR 0078.) curl https://api.signenvoy.com/v1/documents \ -H "Authorization: Bearer $SIGNENVOY_API_KEY" \ -F 'document={"title":"NDA","recipients":[...]};type=application/json' \ -F file=@nda.pdf
Request body (multipart/form-data, required)
| Member | Type | Notes |
|---|---|---|
document required |
CreateDocumentReq
CreateDocumentReq
|
|
file required |
string (binary)
|
The PDF, at most 50 MB. |
Responses
- 201 DocumentOut (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 409 ProblemDetails (application/problem+json): Invalid state, conflict, or idempotency key conflict.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
GET
/v1/documents/{doc_id}
Get Document
Read a document. Every response carries an `ETag`; send it back as `If-None-Match` and an unchanged document answers 304. While the document can still change on its own, responses advise `X-SignEnvoy-Poll-Interval: 30` and link the webhook docs: prefer the `document.completed` and `document.sealed` webhooks to reading on a timer. One key may read one document 10 times at once, then once every 15 seconds (429 `polling-too-fast` beyond). `doc_id` may also be the Reference printed on the Certificate of Completion (`env_…`) or the UUID in it; the response carries the `doc_…` id.
Path
doc_idstring
Query
-
waitinteger (>= 1, <= 30) | null. Long poll: hold the request up to this many seconds (1–30) until the document differs from the version named in `If-None-Match` (or from the version at the start of the request), then answer 200. At the deadline the answer is 304 when `If-None-Match` still matches, otherwise 200. Prefer webhooks; see /guides/polling.
Headers
if-none-matchstring | null. An `ETag` from an earlier read. A match is a 304 with no body.
Responses
- 200 DocumentOut (application/json): Successful Response
- 304 no body: Not Modified: `If-None-Match` matched the current `ETag`. No body.
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/polling-too-fast when one key reads one document more than 10 times at once, then faster than once every 15 s; /problems/rate-limited for the workspace limit or more than 10 concurrent `wait` reads. Retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
PATCH
/v1/documents/{doc_id}
Patch Document
Path
doc_idstring
Request body (application/json, required)
| Member | Type | Notes |
|---|---|---|
clear_folder |
boolean
|
Default false.
|
date_format |
"YYYY-MM-DD" | "MM/DD/YYYY" | "DD/MM/YYYY" | "D MMM YYYY" | null
|
How date fields are written into the signed PDF. One of the listed values; any other value is a 422. |
display_timezone |
string | null
|
IANA time zone name used to show dates and times to signers and on the Certificate of Completion, such as `America/New_York` or `UTC`. Matched exactly, including case. Display only: storage is UTC. Any other value is a 422. |
folder_id |
string (uuid) | null
|
|
locale |
string | null
|
|
message |
string (max length 1000) | null
|
|
redirect_url |
string | null
|
|
reminder_cadence_days |
integer (>= 0) | null
|
|
subject |
string (max length 200) | null
|
|
visibility |
"everyone" | "managers" | null
|
Responses
- 200 DocumentOut (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
DELETE
/v1/documents/{doc_id}
Delete Document
Permanently delete a document. Allowed while the document's `status` is `draft`, `voided`, `expired`, `completed`, or `rejected`. Deletion removes the document, its recipients, its fields, its activity record, and its stored PDFs, including the sealed PDF and its certificate; the id then answers 404 everywhere. It cannot be undone: download a completed document first if you need to keep it. Sent and partially signed documents cannot be deleted (409 `invalid-state`): void the document first, then delete it. Deleting a document does not change this month's usage count. (Register: D87, ADR 0018; D122, ADR 0033.)
Path
doc_idstring
Responses
- 204 no body: Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 409 ProblemDetails (application/problem+json): /problems/invalid-state: only draft, voided, and expired documents can be deleted.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
GET
/v1/documents/{doc_id}/download
Download Document
Path
doc_idstring
Query
-
variantstring default"signed"
Responses
-
200
string (binary)(application/pdf): PDF bytes - 307 no body: Redirect to a short-lived artifact URL
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): /problems/not-found, or /problems/not-ready when the artifact is not yet available.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
POST
/v1/documents/{doc_id}/duplicate
Duplicate Document
T-5 "use as new" (D54): a fresh draft from the original PDF with the same recipients, fields, and display preferences. No signing links exist until it is sent; nothing is emailed.
Path
doc_idstring
Request body (application/json)
Type: DuplicateDocumentIn | null
Responses
- 201 DocumentOut (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 409 ProblemDetails (application/problem+json): Invalid state, conflict, or idempotency key conflict.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
GET
/v1/documents/{doc_id}/events
Document Events
Path
doc_idstring
Query
-
after_seqinteger (>= 0, <= 2147483647) default0
Responses
-
200
array of EventOut(application/json): Successful Response - 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
PUT
/v1/documents/{doc_id}/fields
Put Fields
Path
doc_idstring
Request body (application/json, required)
Type: array of FieldSpec
Responses
-
200
array of FieldOut(application/json): Successful Response - 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
PUT
/v1/documents/{doc_id}/recipients
Put Recipients
Path
doc_idstring
Request body (application/json, required)
Type: array of RecipientSpec
Responses
-
200
array of RecipientOut(application/json): Successful Response - 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
POST
/v1/documents/{doc_id}/recipients/{recipient_id}/embed-session
Create Embed Session
Start an embedded signing session for one recipient. Returns a ceremony URL for your iframe or WebView that works once, for ten minutes. Opening it issues that recipient's signing link (any earlier link stops working, as with the signing-link mint) and shows the ceremony in place. How you hear `ready`, `completed`, `rejected` and `error` is `event_delivery`: postMessage to your page (framed) or to the ceremony's own window (top-level, for an injected script), or a `signenvoy-message://` navigation your WebView intercepts. A framed page's origin must be on the workspace's embed origins list (Settings → Workspace) or the browser refuses to frame the ceremony. Mint a fresh session on every render. 409 `invalid-state` unless the document is in flight and the recipient has not signed or declined; 404 for a recipient outside the document. A `message` session from a workspace with **no** embed origins can be shown by no page of yours: with a live-mode key it is refused, 409 `embed-origins-missing` (nothing is minted); with a test-mode key it is minted and the 201 carries `warnings` (and a `Warning` header) saying so, so you learn on the first call rather than from a blank frame. `redirect` and `none` sessions (a WebView, loaded top-level) need no origin and are never refused or warned.
Path
doc_idstringrecipient_idstring (uuid)
Request body (application/json)
Type: EmbedSessionReq | null
Responses
- 201 EmbedSessionOut (application/json): The session; `warnings` when a test-mode mint cannot be shown as asked
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 409 ProblemDetails (application/problem+json): /problems/invalid-state unless the document is in flight and the recipient has not acted; /problems/embed-origins-missing for a live-mode key when event_delivery is message and the workspace has no embed origins (a test-mode key gets a 201 with `warnings`).
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
POST
/v1/documents/{doc_id}/recipients/{recipient_id}/signing-link
Mint Signing Link
D86(e): a fresh signing link for one recipient. This ROTATES the recipient's link: the previous one (emailed, or returned earlier) stops working. No mail is sent. 409 `invalid-state` unless the document is in flight and the recipient has not signed or declined.
Path
doc_idstringrecipient_idstring (uuid)
Responses
- 201 MintedLinkOut (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 409 ProblemDetails (application/problem+json): Invalid state, conflict, or idempotency key conflict.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
POST
/v1/documents/{doc_id}/send
Send Document
Path
doc_idstring
Request body (application/json)
Type: SendReq | null
Responses
- 202 SendOut (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 409 ProblemDetails (application/problem+json): Invalid state, conflict, or idempotency key conflict.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.
POST
/v1/documents/{doc_id}/void
Void Document
Path
doc_idstring
Request body (application/json, required)
| Member | Type | Notes |
|---|---|---|
reason required |
string (min length 1, max length 1000)
|
Responses
- 202 VoidOut (application/json): Successful Response
- 401 ProblemDetails (application/problem+json): /problems/unauthenticated
- 402 ProblemDetails (application/problem+json): /problems/live-mode-unavailable
- 403 ProblemDetails (application/problem+json): Workspace entitlement or access denied.
- 404 ProblemDetails (application/problem+json): Resource not found or not accessible to this key.
- 409 ProblemDetails (application/problem+json): Invalid state, conflict, or idempotency key conflict.
- 422 ProblemDetails (application/problem+json): Request schema or semantic validation failed; inspect type and detail.
- 429 ProblemDetails (application/problem+json): /problems/rate-limited; retry after Retry-After seconds.
- 500 ProblemDetails (application/problem+json): /problems/engine-error
- default ProblemDetails (application/problem+json): API error; type identifies the stable problem.
Problem types and recovery steps: error reference.