Help centerIntegrations

For: Admins

Send e-signs and read signatures with a hub key

Raise an e-sign on a case from a template, choose who signs each field, publish it for signing, and download the locked copy once everyone has signed.

In this article9 sections

Before you start

This page covers sending e-signsE-sign A document sent for electronic signature, signed in the browser. and following their signatures with a hub key. Paths are under https://prd-api-app.caseactive.com/v1/<hub id>/<case id>.

Calls

CallWhat it does
GET /signs/templatesLists your e-sign templates
POST /signsCreates an e-sign on the case, unpublished
PUT /signs/<sign_id>/schemaChooses who signs each field
PUT /signs/<sign_id>Changes its name, due date or reminders, before publishing
PUT /signs/<sign_id>/publishPublishes it, which sends it to its signers
GET /signs?filter=allLists the case's e-signs
GET /signs/<sign_id>Reads one e-sign, with its status
DELETE /signs/<sign_id>Deletes it, with its signatures
GET /signs/<sign_id>/responsesLists its signatures
GET /signs/<sign_id>/responses/<response_id>Reads one signature

An e-sign goes out in steps: create it, check who signs each field, then publish it. Until it's published, its signers don't see it and nobody is told. Once it's published, nothing about it can change.

Creating an e-sign

GET /signs/templates lists your published e-sign templatesTemplate A reusable feed post, form, e-sign, note or task kept in the Library and copied onto cases., oldest first, with each one's asset_id, title, description, due_mins (how many minutes after it's sent it's due), notifications, and role_field_participants, the roles that sign each field.

POST /signs takes:

FieldWhat it doesRequiredDefault
nameThe e-sign's title. Letters, numbers, spaces and & ' - _ ( ) . /; no commas or colons.Yes—
duration{"due_date": "2026-10-09T17:00:00-04:00"}, with its time zone offset. E-signs don't repeat: a repeat rule is refused.Yes—
template{"owner": "host", "template_id": "<asset_id>"} to use a template's document and signersNoNone
descriptionA note shown with the e-signNoThe template's
notificationsReminders: {"names": ["days"], "values": [-1440]}, each value in minutes before the due dateNoThe template's, or none
instant_notifyfalse to send no request at publishing, only the remindersNoThe template's, or true
curl -X POST https://prd-api-app.caseactive.com/v1/ca-7e6d5c4b3a2f10/cc-1a2b3c4d5e6f70/signs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Retainer Agreement", "duration": {"due_date": "2026-10-09T17:00:00-04:00"}, "template": {"owner": "host", "template_id": "sign::20260915101500_7a6b5c4d3e2f10"}}'

It answers 201 with the sign_id. The template's document is copied in the background: read the e-sign until it has no copying.

To send your own PDF instead, create the e-sign without template, upload the PDF as its document and wait until it's ready, then assign its fields; see Upload and attach files with a hub key.

Choosing who signs

From a template, each field goes to the people on the case who hold its roles when the e-sign is created, so put the client on the case first. The e-sign's field_participants shows the result: each field's name, with the user IDs who sign it.

To change it, send the whole map to PUT /signs/<sign_id>/schema:

{"field_participants": {"Client Signature": ["cu-4f1c2a9e8b7d60"], "Attorney Signature": ["cu-9d8c7b6a5f4e30"]}}
  • Every ID must be someone on the case. The Virtual Assistant can't sign.
  • Field names are the ones in the document.
  • The map replaces the old one: a field you leave out has no signer.

Publishing

PUT /signs/<sign_id>/publish takes no body and answers 200. At least one field must have a signer; a field with none stays empty.

  • Each signer is emailed a request to sign, or texted if they have no confirmed email, at once, unless instant_notify is false. It appears on their To DoTo Do The list on a case of things waiting for you, such as forms to fill in, documents to sign or events to confirm. and in their portal notifications.
  • Reminders go out at each time in notifications still ahead, until they've signed.
  • Someone removed from the case stops holding it up.

Following the signatures

The e-sign's status reads completed once everyone has signed, and completed_on says when, in UTC, such as 2026-10-06T21:42:10.123456+00:00. Until then it has neither, and responses maps each signer who has signed to their response_id.

GET /signs/<sign_id>/responses lists each signer's signature, oldest first, all on one page. Each holds the signer's user_id, when they signed, the fields they filled under response.formFieldValues, their signature under response.annotations and response.attachments, and the ip address they signed from.

The staff on the case are told each time someone signs, and again when the signed copy is ready, as they would be if they'd sent it themselves. Every signer is told when the signed copy is ready, too.

The locked copy

Once everyone has signed, a locked copy with every signature is made. The document's entry under media.schemas.items gains flat, the copy's path, and flat_status, SUCCEEDED or FAILED. Download it as any file; see Upload and attach files with a hub key.

Listing and deleting

GET /signs needs filter: all lists every e-sign on the case, unpublished ones included, newest first; self lists those the Virtual Assistant sent, by any of your keys or by automations. completed and uncompleted list the caller's own, so they're always empty for a key: check each e-sign's status and completed_on instead.

DELETE /signs/<sign_id> deletes an e-sign at any time, with its signatures, and takes it off everyone's To Do. Nobody is told.

If a call is refused

StatusmessageWhy
400SchemaFieldsExceptionA field is missing or invalid, such as a comma in name, a repeat rule, or a signer who isn't on the case; errors names it
400SchemaFieldsException, with ItemCopyNotAllowedException at templateThe template isn't published, isn't open to the Bots role, or its files are still being processed
403PublishAlreadyPublishedExceptionIt's already published, so it can't change
403PublishAlreadyAnsweredExceptionSomeone has already signed it
403PublishParticipantsMissingExceptionNo field has a signer
403PublishMediaMissingExceptionIt has no document yet
403PublishMediaNotReadyExceptionIts document is still being copied or converted
403PublishMediaFailedExceptionIts document failed to convert
403PublishDocumentUnreadableExceptionIts document can't be read: delete the e-sign and create it again
403PublishDueTimePassedExceptionIts due date has passed
403BotNotAllowedExceptionA key tried to sign it, or to remove someone's signature
403CaseClosedExceptionThe case is closed
404ItemNotFoundExceptionThe e-sign or signature doesn't exist

For the error body and the rest of the codes, see Handle API errors and status codes.

Related articles

Send forms and read answers with a hub keyRaise a form on a case from a template, publish it to the people who should fill it in, and read their answers.IntegrationsUpload and attach files with a hub keyGet an upload address, upload a file, attach it to an update, note, task, form or e-sign, and download a case's files.IntegrationsHandle API errors and status codesRead the error body, what 400, 401, 403, 404, 500 and 503 mean, and why an item your key can't see answers 404.Integrations