Signature requests

A signature request (an envelope) is one round of sending a document for signing: who must sign, in which order, by when, and the tamper-evident audit trail of everything that happened to it.

POST /documents/{document}/send creates one for you and is the recommended way to send. Use these endpoints to follow a request in detail, to download its audit trail, and to cancel it.

Status. sent → partially_signed (some have signed) → completed (every signer has signed). It ends as declined when a signer declines, expired when expires_at passes (an hourly sweep, and signing is refused the moment it passes), or canceled when it is canceled or replaced by a new send.

Webhooks. signature.requested when it is created, document.viewed when a signer first opens their link, signer.signed for each signature, signature.completed when the last one is in, and signature.canceled. A decline or an expiry sends no webhook — watch status.

How recipients sign. Each signer opens their private link in a browser — no account needed. When the document's signer_otp_required is on (the default for new documents), they first enter a six-digit code emailed to their address. They then sign with a typed or drawn signature (signature_type), accepting the terms, or decline with a reason, which the sender is emailed. Time, IP address, user agent and the SHA-256 of the file are recorded; a file that changed after sending can no longer be signed. When the last signer signs, a completion certificate is issued and every party is emailed links to the signed document and the certificate. BankID signing is not part of this flow.

List signature requests

GET/signatures

Every signature request in the organization, newest first, a page at a time, each with its document and signers. The audit trail (events) is only returned by GET /signatures/{signature}.

filter[status] takes one value or several (filter[status][]=sent&filter[status][]=partially_signed).

curl 'https://api.closepact.com/v1/api/signatures' \
  -H "Authorization: Bearer $CLOSEPACT_API_KEY"
Response · 200
{
  "data": [
    {
      "id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
      "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
      "message": "Hej Erik! Här kommer serviceavtalet för 2027 enligt vårt samtal.",
      "status": "partially_signed",
      "signing_order": "sequential",
      "sent_at": "2026-10-12T08:14:03+00:00",
      "completed_at": null,
      "expires_at": "2026-11-11T22:59:59+00:00",
      "canceled_at": null,
      "cancel_reason": null,
      "document": {
        "id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
        "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
        "mime_type": "application/pdf",
        "size_bytes": 284516
      },
      "signers": [
        {
          "id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
          "email": "erik.johansson@byggbolaget.se",
          "name": "Erik Johansson",
          "order_index": 0,
          "status": "signed",
          "opened_at": "2026-10-13T06:48:02+00:00",
          "signed_at": "2026-10-13T06:52:44+00:00",
          "declined_at": null,
          "decline_reason": null,
          "signature_type": "drawn"
        },
        {
          "id": "01a15a31-0c2e-71aa-9c3d-6b1e8f2a4d59",
          "email": "anna@nordiskfastighet.se",
          "name": "Anna Lindqvist",
          "order_index": 1,
          "status": "pending",
          "opened_at": null,
          "signed_at": null,
          "declined_at": null,
          "decline_reason": null,
          "signature_type": null
        }
      ],
      "deal_room_id": null,
      "created_at": "2026-10-12T08:14:03+00:00"
    }
  ],
  "links": {
    "first": null,
    "last": null,
    "prev": null,
    "next": null
  },
  "meta": {
    "path": "https://api.closepact.com/v1/api/signatures",
    "per_page": 25,
    "next_cursor": null,
    "prev_cursor": null
  }
}

Query parameters

  • filter[status]string

    Only requests in this status. Repeat as filter[status][] for several.

    One ofdraftsentpartially_signedcompleteddeclinedexpiredcanceled

  • filter[deal_room_id]string(uuid)

    Only requests linked to this deal room.

  • limitinteger

    Items per page. Values outside 1–100 are clamped.

    Default 251–100

  • cursorstring

    Opaque cursor from meta.next_cursor or meta.prev_cursor of the previous page.

Responses

  • Headers

    • X-RateLimit-Limit — Requests this key may make per minute.
    • X-RateLimit-Remaining — Requests left in the current minute.
    • dataarray of objectsrequired
      • idstring(uuid)required
      • titlestringrequired
      • messagestringnullablerequired
      • statusstringrequired

        sent → partially_signed → completed; or declined, expired, canceled. draft is not used by the API.

        One ofdraftsentpartially_signedcompleteddeclinedexpiredcanceled

      • signing_orderstringrequired

        One ofparallelsequential

      • sent_atstring(date-time)nullablerequired
      • completed_atstring(date-time)nullablerequired

        When the last signer signed.

      • expires_atstring(date-time)nullablerequired
      • canceled_atstring(date-time)nullablerequired
      • cancel_reasonstringnullablerequired
      • documentobjectnullablerequired

        The document being signed; null once it has been deleted.

      • signersarray of objectsrequired

        In signing order.

      • eventsarray of objects

        The audit trail, oldest first. Only on GET /signatures/{signature} and the cancel response; chain beside it says whether it verifies.

      • chainobject

        The audit chain of one signature request, recomputed by the server.

      • deal_room_idstring(uuid)nullablerequired
      • created_atstring(date-time)required
    • linksobjectrequired
    • metaobjectrequired
  • 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.
    Errors
  • 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs: feature names the capability (the operation's x-feature) and required_tier the cheapest tier that grants it. Every operation answers this with "feature": "core.api" when no module the organization holds is on a tier that includes the API.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 429The key has made more requests this minute than its limit allows.
    Errors

Create a signature request

POST/signatures
Scope write Permission signatures.create

Creates a signature request for a document directly and emails every signer their link.

Prefer POST /documents/{document}/send. This lower-level call differs in four ways: every person is a signer (there are no cc or viewer roles); it does not replace a request already out for the same document, so both stay open; it does not move the document's lifecycle_status to sent (it still becomes signed when this request completes); and it always returns each signer's link and token in signer_links.

signer_links holds private credentials: anyone with a link or token can sign as that person. Deliver them only to their owner, and do not log them.

document_id must be a document of this organization: an id that does not exist fails validation (422), and another organization's document answers 404. The signature.requested webhook fires; when every signer has signed, the request becomes completed and signature.completed fires.

curl -X POST 'https://api.closepact.com/v1/api/signatures' \
  -H "Authorization: Bearer $CLOSEPACT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "document_id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
  "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
  "message": "Hej Erik! Signera gärna avtalet före den 11 november.",
  "signing_order": "sequential",
  "expires_at": "2026-11-11T22:59:59+00:00",
  "signers": [
    {
      "email": "erik.johansson@byggbolaget.se",
      "name": "Erik Johansson"
    },
    {
      "email": "anna@nordiskfastighet.se",
      "name": "Anna Lindqvist"
    }
  ]
}'
Response · 201
{
  "data": {
    "id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
    "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
    "message": "Hej Erik! Signera gärna avtalet före den 11 november.",
    "status": "sent",
    "signing_order": "sequential",
    "sent_at": "2026-10-12T08:14:03+00:00",
    "completed_at": null,
    "expires_at": "2026-11-11T22:59:59+00:00",
    "canceled_at": null,
    "cancel_reason": null,
    "document": {
      "id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
      "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
      "mime_type": "application/pdf",
      "size_bytes": 284516
    },
    "signers": [
      {
        "id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
        "email": "erik.johansson@byggbolaget.se",
        "name": "Erik Johansson",
        "order_index": 0,
        "status": "pending",
        "opened_at": null,
        "signed_at": null,
        "declined_at": null,
        "decline_reason": null,
        "signature_type": null
      },
      {
        "id": "01a15a31-0c2e-71aa-9c3d-6b1e8f2a4d59",
        "email": "anna@nordiskfastighet.se",
        "name": "Anna Lindqvist",
        "order_index": 1,
        "status": "pending",
        "opened_at": null,
        "signed_at": null,
        "declined_at": null,
        "decline_reason": null,
        "signature_type": null
      }
    ],
    "deal_room_id": null,
    "created_at": "2026-10-12T08:14:03+00:00"
  },
  "signer_links": [
    {
      "signer_id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
      "email": "erik.johansson@byggbolaget.se",
      "name": "Erik Johansson",
      "token": "Xk3pQ9vB2mR7tY4wN8cL1zF6hJ0sD5gA2eK9uP3oW7iV4bM1",
      "url": "https://app.closepact.com/sign/Xk3pQ9vB2mR7tY4wN8cL1zF6hJ0sD5gA2eK9uP3oW7iV4bM1"
    },
    {
      "signer_id": "01a15a31-0c2e-71aa-9c3d-6b1e8f2a4d59",
      "email": "anna@nordiskfastighet.se",
      "name": "Anna Lindqvist",
      "token": "q7Wm2Lx9Rb4Tn8Vc1Pz6Hd3Kf0Gs5Ja2Ye7Uo9Ii4Ob1Na6M",
      "url": "https://app.closepact.com/sign/q7Wm2Lx9Rb4Tn8Vc1Pz6Hd3Kf0Gs5Ja2Ye7Uo9Ii4Ob1Na6M"
    }
  ]
}

Request body

application/json · required

  • document_idstring(uuid)required
  • titlestringrequired

    Subject of the request, shown to signers.

    2–255 characters

  • messagestringnullable

    A personal note in every signer's email.

    at most 5,000 characters

  • signing_orderstring

    sequential: signers sign in the order listed.

    One ofparallelsequential

    Default "parallel"

  • expires_atstring(date-time)nullable

    Signing deadline; must be in the future.

  • deal_room_idstring(uuid)nullable

    Link the request to a deal room of this organization. Any other id, including another organization's room, fails validation (422).

  • signersarray of objectsrequired

    1–20 items

Responses

  • Headers

    • X-RateLimit-Limit — Requests this key may make per minute.
    • X-RateLimit-Remaining — Requests left in the current minute.
    • dataobjectrequired

      One round of sending a document for signing.

      • idstring(uuid)required
      • titlestringrequired
      • messagestringnullablerequired
      • statusstringrequired

        sent → partially_signed → completed; or declined, expired, canceled. draft is not used by the API.

        One ofdraftsentpartially_signedcompleteddeclinedexpiredcanceled

      • signing_orderstringrequired

        One ofparallelsequential

      • sent_atstring(date-time)nullablerequired
      • completed_atstring(date-time)nullablerequired

        When the last signer signed.

      • expires_atstring(date-time)nullablerequired
      • canceled_atstring(date-time)nullablerequired
      • cancel_reasonstringnullablerequired
      • documentobjectnullablerequired

        The document being signed; null once it has been deleted.

      • signersarray of objectsrequired

        In signing order.

      • eventsarray of objects

        The audit trail, oldest first. Only on GET /signatures/{signature} and the cancel response; chain beside it says whether it verifies.

      • chainobject

        The audit chain of one signature request, recomputed by the server.

      • deal_room_idstring(uuid)nullablerequired
      • created_atstring(date-time)required
    • signer_linksarray of objectsrequired

      One per signer. Private: each link signs as that person.

  • 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.
    Errors
  • 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs: feature names the capability (the operation's x-feature) and required_tier the cheapest tier that grants it. Every operation answers this with "feature": "core.api" when no module the organization holds is on a tier that includes the API.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 404No such record in this organization.
    Errors
  • 422The request body or query failed validation.
    Errors
  • 429The key has made more requests this minute than its limit allows.
    Errors
  • 503BankID was asked for — on the document, or for a recipient — and this server has no working BankID relying-party certificate. Nothing was changed or sent. bankid_unavailable is the only error here; it is not something a retry fixes.
    Errors

Retrieve a signature request

GET/signatures/{signature}

The request with its document, signers and its audit trail.

The audit trail (events) is the evidence of signing, oldest first. Each event's hash_self is the SHA-256 of the event together with the previous event's hash (hash_prev), so the chain shows whether anything was altered or removed. Event types: signature.requested (with payload.document_sha256, the SHA-256 of the file sent), recipient.added, recipient.removed, signer.opened, signer.code_sent and signer.verified (a one-time code emailed to the signer and entered by them, with payload.channel and the masked payload.destination), signer.signed (with payload.type: typed or drawn, payload.document_sha256 and payload.verification), signer.declined (with payload.reason), signature.refused (a signature refused because the document no longer matched, with payload.reason), reminder.sent, signature.completed, signature.sealed (the completion certificate was issued, with payload.certificate_sha256 and the payload.chain_head it certifies), signature.canceled (with payload.reason). ip_address and user_agent are recorded for what recipients did.

Checking the chain. chain is the server's own verification, recomputed on every request: ok, or broken with the first event that does not add up and why. Events written since October 2026 (hash_version 2) are numbered by sequence and hashed over the JSON of {v, request_id, sequence, signer_id, event_type, payload, ip_address, user_agent, occurred_at, prev} (keys of payload sorted, occurred_at in UTC as YYYY-MM-DDTHH:MM:SSZ), so you can recompute it yourself. Earlier events (hash_version 1, sequence null) are reported as legacy: each hash is checked, but their order rests on a one-second timestamp.

The signature.completed webhook carries this request's id — fetch it here when the webhook arrives, then download the file with GET /documents/{document}/download-link.

curl 'https://api.closepact.com/v1/api/signatures/01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16' \
  -H "Authorization: Bearer $CLOSEPACT_API_KEY"
Response · 200
{
  "data": {
    "id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
    "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
    "message": null,
    "status": "completed",
    "signing_order": "parallel",
    "sent_at": "2026-10-12T08:14:03+00:00",
    "completed_at": "2026-10-13T06:52:44+00:00",
    "expires_at": "2026-11-11T22:59:59+00:00",
    "canceled_at": null,
    "cancel_reason": null,
    "document": {
      "id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
      "title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
      "mime_type": "application/pdf",
      "size_bytes": 284516
    },
    "signers": [
      {
        "id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
        "email": "erik.johansson@byggbolaget.se",
        "name": "Erik Johansson",
        "order_index": 0,
        "status": "signed",
        "opened_at": "2026-10-13T06:48:02+00:00",
        "signed_at": "2026-10-13T06:52:44+00:00",
        "declined_at": null,
        "decline_reason": null,
        "signature_type": "typed"
      }
    ],
    "events": [
      {
        "id": "01a15a31-0c30-7d18-8e2f-4a6c9b1d3e57",
        "signer_id": null,
        "sequence": 1,
        "event_type": "signature.requested",
        "payload": {
          "document_id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
          "signer_count": 1
        },
        "hash_prev": null,
        "hash_self": "65472c7186549f263d194b44aad9908ccfbeed3ee1e33242957e9efe37096e4c",
        "hash_version": 2,
        "ip_address": null,
        "user_agent": null,
        "occurred_at": "2026-10-12T08:14:03+00:00"
      },
      {
        "id": "01a15b07-6e10-7a2b-8c4d-1e3f5a7b9c0d",
        "signer_id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
        "sequence": 2,
        "event_type": "signer.opened",
        "payload": [],
        "hash_prev": "65472c7186549f263d194b44aad9908ccfbeed3ee1e33242957e9efe37096e4c",
        "hash_self": "1d0e7c4b9a2f5e8d3c6b1a0f9e4d7c2b5a8f3e6d1c4b7a0e9f2d5c8b1a4e7f3d",
        "hash_version": 2,
        "ip_address": "81.230.44.17",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
        "occurred_at": "2026-10-13T06:48:02+00:00"
      },
      {
        "id": "01a15b0b-2a41-7f6e-9d3c-5b8a1e4f7c20",
        "signer_id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
        "sequence": 3,
        "event_type": "signer.signed",
        "payload": {
          "type": "typed",
          "has_image": false
        },
        "hash_prev": "1d0e7c4b9a2f5e8d3c6b1a0f9e4d7c2b5a8f3e6d1c4b7a0e9f2d5c8b1a4e7f3d",
        "hash_self": "8a3f6c9e2d5b1a4f7e0c3b6d9a2e5f8c1b4d7a0e3f6c9b2d5a8e1f4c7b0d3a6e",
        "hash_version": 2,
        "ip_address": "81.230.44.17",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
        "occurred_at": "2026-10-13T06:52:44+00:00"
      },
      {
        "id": "01a15b0b-2a43-71c2-8e5f-3d6a9b2c5e81",
        "signer_id": null,
        "sequence": 4,
        "event_type": "signature.completed",
        "payload": {
          "signed_count": 1
        },
        "hash_prev": "8a3f6c9e2d5b1a4f7e0c3b6d9a2e5f8c1b4d7a0e3f6c9b2d5a8e1f4c7b0d3a6e",
        "hash_self": "f2b5e8a1d4c7b0e3a6d9c2f5b8e1a4d7c0f3b6e9a2d5c8f1b4e7a0d3c6f9b2e5",
        "hash_version": 2,
        "ip_address": "81.230.44.17",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
        "occurred_at": "2026-10-13T06:52:44+00:00"
      }
    ],
    "chain": {
      "signature_request_id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
      "status": "ok",
      "format": "current",
      "event_count": 4,
      "head": "f2b5e8a1d4c7b0e3a6d9c2f5b8e1a4d7c0f3b6e9a2d5c8f1b4e7a0d3c6f9b2e5",
      "broken_at": null
    },
    "deal_room_id": null,
    "created_at": "2026-10-12T08:14:03+00:00"
  }
}

Path parameters

  • signaturestring(uuid)required

    The signature request's id — active_send.id on a document, or id in the signature.completed webhook.

    Example 01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16

Responses

  • Headers

    • X-RateLimit-Limit — Requests this key may make per minute.
    • X-RateLimit-Remaining — Requests left in the current minute.
    • dataobjectrequired

      One round of sending a document for signing.

      • idstring(uuid)required
      • titlestringrequired
      • messagestringnullablerequired
      • statusstringrequired

        sent → partially_signed → completed; or declined, expired, canceled. draft is not used by the API.

        One ofdraftsentpartially_signedcompleteddeclinedexpiredcanceled

      • signing_orderstringrequired

        One ofparallelsequential

      • sent_atstring(date-time)nullablerequired
      • completed_atstring(date-time)nullablerequired

        When the last signer signed.

      • expires_atstring(date-time)nullablerequired
      • canceled_atstring(date-time)nullablerequired
      • cancel_reasonstringnullablerequired
      • documentobjectnullablerequired

        The document being signed; null once it has been deleted.

      • signersarray of objectsrequired

        In signing order.

      • eventsarray of objects

        The audit trail, oldest first. Only on GET /signatures/{signature} and the cancel response; chain beside it says whether it verifies.

      • chainobject

        The audit chain of one signature request, recomputed by the server.

      • deal_room_idstring(uuid)nullablerequired
      • created_atstring(date-time)required
  • 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.
    Errors
  • 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs: feature names the capability (the operation's x-feature) and required_tier the cheapest tier that grants it. Every operation answers this with "feature": "core.api" when no module the organization holds is on a tier that includes the API.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 404No such record in this organization.
    Errors
  • 429The key has made more requests this minute than its limit allows.
    Errors

Cancel a signature request

POST/signatures/{signature}/cancel
Scope write Permission signatures.cancel

Withdraws a request that is out for signing. Its status becomes canceled, the signers' links stop working, signature.canceled (with your reason) is added to the audit trail, the signature.canceled webhook fires and the document's lifecycle_status becomes canceled. Nobody is emailed.

A request that is already completed or canceled is returned unchanged — a finished signature is never voided — so check status in the response. To send the document again, call POST /documents/{document}/send.

curl -X POST 'https://api.closepact.com/v1/api/signatures/01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16/cancel' \
  -H "Authorization: Bearer $CLOSEPACT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "reason": "Fel pris i bilaga 2 — skickar en ny version."
}'
Response · 200
{
  "data": {
    "id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
    "title": "Quarterly window cleaning",
    "message": "A short description.",
    "status": "draft",
    "signing_order": "parallel",
    "sent_at": "2026-10-18T09:30:00Z",
    "completed_at": "2026-10-18T09:30:00Z",
    "expires_at": "2026-10-18T09:30:00Z",
    "canceled_at": "2026-10-18T09:30:00Z",
    "cancel_reason": "string",
    "document": {
      "id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
      "title": "Quarterly window cleaning",
      "mime_type": "string",
      "size_bytes": 1
    },
    "signers": [
      {
        "id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
        "email": "anna@nordiskfastighet.se",
        "name": "Anna Lindqvist",
        "order_index": 1,
        "status": "pending",
        "opened_at": "2026-10-18T09:30:00Z",
        "signed_at": "2026-10-18T09:30:00Z",
        "declined_at": "2026-10-18T09:30:00Z",
        "decline_reason": "string",
        "signature_type": "typed"
      }
    ],
    "events": [
      {
        "id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
        "signer_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
        "sequence": 1,
        "event_type": "signature.requested",
        "payload": {},
        "hash_prev": "string",
        "hash_self": "string",
        "hash_version": 1,
        "ip_address": "Södra Hamngatan 1",
        "user_agent": "string",
        "occurred_at": "2026-10-18T09:30:00Z"
      }
    ],
    "chain": {
      "signature_request_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
      "status": "ok",
      "format": "current",
      "event_count": 1,
      "head": "string",
      "broken_at": {
        "event_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
        "position": 1,
        "reason": "hash_mismatch"
      }
    },
    "deal_room_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
    "created_at": "2026-10-18T09:30:00Z"
  }
}

Path parameters

  • signaturestring(uuid)required

    The signature request's id — active_send.id on a document, or id in the signature.completed webhook.

    Example 01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16

Request body

application/json

  • reasonstringnullable

    Why it was canceled; kept in the audit trail and in cancel_reason.

    at most 500 characters

Responses

  • Headers

    • X-RateLimit-Limit — Requests this key may make per minute.
    • X-RateLimit-Remaining — Requests left in the current minute.
    • dataobjectrequired

      One round of sending a document for signing.

      • idstring(uuid)required
      • titlestringrequired
      • messagestringnullablerequired
      • statusstringrequired

        sent → partially_signed → completed; or declined, expired, canceled. draft is not used by the API.

        One ofdraftsentpartially_signedcompleteddeclinedexpiredcanceled

      • signing_orderstringrequired

        One ofparallelsequential

      • sent_atstring(date-time)nullablerequired
      • completed_atstring(date-time)nullablerequired

        When the last signer signed.

      • expires_atstring(date-time)nullablerequired
      • canceled_atstring(date-time)nullablerequired
      • cancel_reasonstringnullablerequired
      • documentobjectnullablerequired

        The document being signed; null once it has been deleted.

      • signersarray of objectsrequired

        In signing order.

      • eventsarray of objects

        The audit trail, oldest first. Only on GET /signatures/{signature} and the cancel response; chain beside it says whether it verifies.

      • chainobject

        The audit chain of one signature request, recomputed by the server.

      • deal_room_idstring(uuid)nullablerequired
      • created_atstring(date-time)required
  • 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.
    Errors
  • 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs: feature names the capability (the operation's x-feature) and required_tier the cheapest tier that grants it. Every operation answers this with "feature": "core.api" when no module the organization holds is on a tier that includes the API.
    Errors
  • 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (module_seat_required — an administrator assigns seats under Settings → Users), or the organization is suspended.
    Errors
  • 404No such record in this organization.
    Errors
  • 422The request body or query failed validation.
    Errors
  • 429The key has made more requests this minute than its limit allows.
    Errors