Tracking a document signature
Poll a single task by id or list many tasks with filters, pagination, and optional attachments.
After Create Task you get a taskId. Use that id to watch status, wait until the document is in the signer’s inbox, and download the signed PDF when the task completes.
There are two read endpoints:
- Read Task By Id: one task
- Bulk Read Tasks: a filtered, paginated list
Both require the x-api-key header. Results are limited to tasks created by the organization on that key.
Task statuses
| Status | When you see it |
|---|---|
Received | Immediately after create. Ingestion has not finished. |
Processing | Matching or annotation placement is still running. |
Pending | In the signer’s inbox. documentId is set. There is no signed PDF yet. |
Completed | Signed. output.attachment is the signed PDF (Base64) unless you exclude it. |
Rejected | Signer rejected the document in Inbox. No output attachment. |
Retracted | You retracted a pending task. |
Failed | Ingestion could not finish. Read output.statusReason. |
Cancelled | The task will not complete. |
Received on create is not the same as “ready for the signer.” Poll until Pending or a terminal status.
Track one task
GET /api/v1/signature/tasks/{id}
GET /api/v1/signature/tasks/184392
Host: partner-api.demo.suturehealth.com
x-api-key: YOUR_API_KEY
Query parameters
| Parameter | Default | Purpose |
|---|---|---|
includeOutputAttachment | true | When Completed, include the signed PDF on output.attachment. Set false if you only need status. |
includeInputJson | false | Return the original create payload as inputJson (attachment stripped unless you also ask for it). |
includeInputAttachment | false | Only used with includeInputJson=true. Puts the original PDF back into that JSON. |
A pending task has no signed file:
{
"taskId": 184392,
"documentId": 77821,
"externalDocumentId": "ehr-doc-1234",
"status": "Pending",
"inputJson": null,
"isModifiedBySigner": false,
"createdAt": "2026-08-14T15:02:11Z",
"updatedAt": "2026-08-14T15:02:48Z",
"output": {
"statusReason": null,
"attachment": null,
"eventTime": "2026-08-14T15:02:48Z",
"externalSavedDocumentId": null,
"isArchived": false,
"isFiled": false
}
}After the signer signs, the same call (default includeOutputAttachment=true) returns status: Completed and a Base64 PDF on output.attachment.
To confirm completion without pulling the PDF:
GET /api/v1/signature/tasks/184392?includeOutputAttachment=false
To inspect what you originally sent:
GET /api/v1/signature/tasks/184392?includeInputJson=true
GET /api/v1/signature/tasks/184392?includeInputJson=true&includeInputAttachment=true
Polling
- Create the task and store
taskIdandexternalDocId. - GET by id every few seconds until
statusisPending,Failed, orCancelled. - When you need the signed file, GET again after
Completed. PreferincludeOutputAttachment=falseon intermediate polls.
documentId is SutureHealth’s inbox request id. It is null until the task reaches Pending.
Errors
| Request | Response |
|---|---|
| Unknown numeric id | 400: no task with that id for this API key |
| Non-numeric id | 404 |
Missing or invalid x-api-key | 401 or 403 |
Track many tasks
GET /api/v1/signature/tasks
Use the list endpoint to reconcile a queue, catch completions you did not poll, or find a task by the id you stored at create time.
GET /api/v1/signature/tasks?statuses=Pending&page=1&pageSize=20
Host: partner-api.demo.suturehealth.com
x-api-key: YOUR_API_KEY
Filters
| Parameter | Use |
|---|---|
statuses | One or more of Received, Processing, Pending, Completed, Rejected, Retracted, Failed, Cancelled. Repeat the query key for multiple values. |
externalDocumentIds | The externalDocId values you sent on create. |
externalSavedDocumentIds | Ids you later stored with Update Task. |
documentIds | SutureHealth inbox request ids (documentId on a task). |
createdAfter / createdBefore | Create-time window (YYYY-MM-DD or ISO-8601). |
updatedAfter / updatedBefore | Last update window. |
isArchived | Archived via Update Task. |
isFiled | Filed / saved via Update Task (saved=true). |
isModifiedBySigner | Signer edited the document before signing. |
The same includeInputJson, includeInputAttachment, and includeOutputAttachment flags from read-by-id apply here. Default includeOutputAttachment is true. Set it to false on large pages unless you need every signed PDF.
Pagination
| Parameter | Default | Notes |
|---|---|---|
page | 1 | 1-based. |
pageSize | 10 | Capped at 100. A request for pageSize=200 is served as 100. |
Response envelope:
{
"tasks": [
{
"taskId": 184392,
"documentId": 77821,
"externalDocumentId": "ehr-doc-1234",
"status": "Pending",
"createdAt": "2026-08-14T15:02:11Z",
"updatedAt": "2026-08-14T15:02:48Z",
"output": {
"attachment": null,
"isArchived": false,
"isFiled": false
}
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalCount": 1
}
}Useful list calls
Find the task you just created:
GET /api/v1/signature/tasks?externalDocumentIds=ehr-doc-1234&pageSize=10
Inbox still waiting on a signer:
GET /api/v1/signature/tasks?statuses=Pending&page=1&pageSize=50&includeOutputAttachment=false
Signed since this morning:
GET /api/v1/signature/tasks?statuses=Completed&updatedAfter=2026-08-14T00:00:00Z&includeOutputAttachment=false
Created today:
GET /api/v1/signature/tasks?createdAfter=2026-08-14T00:00:00Z&createdBefore=2026-08-15T00:00:00Z
Recommended integration pattern
- Create the task and persist
taskId+externalDocId. - Prefer status webhooks for status changes (
Pending,Completed,Rejected,Failed, …). Use poll by id only as a fallback (for example after downtime, or if you have not registered a webhook yet). - On a schedule, bulk read
statuses=Completed(andRejected) for tasks you have not yet stored. Filter withupdatedAfterorexternalDocumentIds. - Download
output.attachmentonce, store it in your system, then update the task with yourexternalSavedDocumentId. - Retract from your side only while the task is still
Pending.
Webhooks
Preferred for status updates: register an HTTPS endpoint and verify signed deliveries when a task moves (for example to Pending, Completed, Rejected, or Failed).
Full guide: Receiving status webhooks — subscribe, delivery payload, HMAC verification, deactivate / delete.
Keep the read endpoints on this page for PDF download, ad-hoc checks, and reconciliation if a delivery was missed.
Updated about 2 months ago
