Help centerIntegrations

For: Admins

Send forms and read answers with a hub key

Raise a form on a case from a template, publish it to the people who should fill it in, and read their answers.

In this article7 sections

Before you start

This page covers sending forms and reading their answers with a hub key. Paths are under https://prd-api-app.caseactive.com/v1/<hub id>/<case id>.

Calls

CallWhat it does
GET /forms/templatesLists your form templates
POST /formsCreates a form on the case, unpublished
PUT /forms/<form_id>/publishPublishes it, which sends it to its recipients
GET /forms?filter=allLists the case's forms
GET /forms/<form_id>Reads one form
PUT /forms/<form_id>Changes its name, due date, reminders or recipients
DELETE /forms/<form_id>Deletes it, with its answers
GET /forms/<form_id>/responsesLists its answers
GET /forms/<form_id>/responses/<response_id>Reads one answer
DELETE /forms/<form_id>/responses/<response_id>Deletes one person's answer, so they can fill it in again

A form goes out in two steps: create it, then publish it. Until it's published, its recipients don't see it and nobody is told.

Creating a form

GET /forms/templates lists your published form 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), rrule (its repeat), notifications and instant_notify.

POST /forms takes:

FieldWhat it doesRequiredDefault
nameThe form's title. Letters, numbers, spaces and & ' - _ ( ) . /; no commas or colons.Yes—
duration{"due_date": "2026-10-09T17:00:00-04:00", "rrule": "FREQ=MONTHLY"}. The due date needs its time zone offset. rrule, a repeat rule, is optional. zoneinfo, the time zone its repeat keeps, such as America/New_York, is optional: without it a repeat keeps your hub's time zone, at its time and on its day when the clocks change.Yes—
participants_idsThe people who fill it in: user IDs of people on the case, from GET /teamNo, but needed to publishNobody
template{"owner": "host", "template_id": "<asset_id>"} to use a template's documentNoNone
descriptionA note shown with the formNoThe template's
notificationsReminders: {"names": ["days", "hours"], "values": [-1440, -60]}, 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

A template brings its document, description, reminders and instant_notify, but not its due time or repeat: work out due_date from due_mins, and send its rrule if it has one.

curl -X POST https://prd-api-app.caseactive.com/v1/ca-7e6d5c4b3a2f10/cc-1a2b3c4d5e6f70/forms \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Case intake form", "duration": {"due_date": "2026-10-09T17:00:00-04:00"}, "participants_ids": ["cu-4f1c2a9e8b7d60"], "template": {"owner": "host", "template_id": "form::20260915101500_3c2b1a0f9e8d70"}}'

It answers 201 with the form_id. The template's document is copied in the background: read the form until it has no copying, then publish it.

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

Publishing

PUT /forms/<form_id>/publish takes no body and answers 200.

  • Each recipient is emailed a request to fill it in, 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. Nothing is sent at the due time, and answers are accepted after it.
  • A repeating form moves to its next due date at each one, its answers clear, and everyone on it is asked again at once, unless instant_notify is false.
  • Someone removed from the case is dropped from the form.

The document can't change once the form is published. Its name, due date, reminders, recipients and description can, with PUT /forms/<form_id>; a repeat sent without zoneinfo keeps the time zone it already has. Changing the due date, repeat or reminders sends the request again, at once, to everyone who hasn't answered, and people you add are sent it at once; with instant_notify false, neither goes until the reminders.

Reading answers

GET /forms/<form_id>/responses lists each person's answer, oldest first, all on one page. A repeating form lists only the current date's; an earlier date's answer is still read by its response_id.

{
  "data": {
    "items": [
      {
        "response_id": "response::20261003153012_9f8e7d6c5b4a30",
        "parent_id": "form::20261002150000_1a2b3c4d5e6f70",
        "user_id": "cu-4f1c2a9e8b7d60",
        "created_on": "2026-10-03T15:30:12+00:00",
        "response": {
          "format": "https://pspdfkit.com/instant-json/v1",
          "formFieldValues": [
            {"v": 1, "type": "pspdfkit/form-field-value", "name": "client_name", "value": "Jane Sample"},
            {"v": 1, "type": "pspdfkit/form-field-value", "name": "accident_date", "value": "2026-09-14"}
          ]
        }
      }
    ],
    "currentItemCount": 1,
    "selfLink": "https://prd-api-app.caseactive.com/v1/ca-7e6d5c4b3a2f10/cc-1a2b3c4d5e6f70/forms/form::20261002150000_1a2b3c4d5e6f70/responses"
  }
}
  • formFieldValues holds each field the person filled in, by the field's name. A signature or drawing comes under annotations and attachments.
  • The form's own read shows who has answered: responses maps each person's user ID to their response_id.
  • When someone submits, the staff on the case are told, as they would be if they'd sent the form themselves.

Deleting one person's answer, with {"user_id": "<their ID>"} as the body, puts the form back on their To Do. Nobody is told. A key can't fill in a form itself.

Listing forms

GET /forms needs filter:

filterWhat it lists
allEvery form on the case, unpublished ones included, newest first
selfForms the Virtual Assistant sent: by any of your keys, or by automations
completed, uncompletedThe forms the caller was asked to fill in. They're always empty for a key.

Each form holds its form_id, name, participants_ids, due_date, published (1 once published), responses, responses_ct and its document under media.

DELETE /forms/<form_id> deletes a form at any time, with its answers, 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 due date with no offset, or someone 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
403PublishAlreadyAnsweredExceptionSomeone has already answered it
403PublishMediaMissingExceptionIt has no document yet
403PublishMediaNotReadyExceptionIts document is still being copied or converted
403PublishMediaFailedExceptionIts document failed to convert
403PublishDueTimePassedExceptionIts due date has passed
403PublishRecipientsMissingExceptionIt has nobody to send it to
403BotNotAllowedExceptionA key tried to fill it in
403CaseClosedExceptionThe case is closed
404ItemNotFoundExceptionThe form or answer doesn't exist

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

Related articles

Send e-signs and read signatures with a hub keyRaise 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.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