Early access — Cases are in preview and may change in backwards-incompatible ways before they are marked stable. Reach out before building on them in production.
How cases work
Any time between when you submit a filing and when it completes, Palm may need additional information. When that happens, Palm opens a case on the filing describing exactly what it needs, and you respond with the requested values. There’s no fixed list of cases. Today there’s a single kind,missing_information, used whenever Palm needs data it doesn’t already have — for example:
- Additional information a filing requires that wasn’t collected at submission.
- A correction to a value you submitted.
- A clarification needed while the filing is processed.
request.fields[] array describing exactly what to collect. Render your form from that array and a single generic handler covers every case — no per-case UI.
The case object
Request fields
Each entry inrequest.fields tells you everything you need to render one prompt:
Lifecycle
A case has two open states and two terminal states. The status tells you who acts next.
When a case closes,
resolution_reason records why: response_received, no_response_needed, parent_canceled, parent_completed, or parent_failed.
Webhook events
Each payload’sdata.object is the full case object. See Webhooks for delivery, retries, and signature verification.
case.opened — JSON
Respond to a case
- Receive
case.opened. Use the payload, or fetch the case withGET /v1/case/{case_id}. - Render prompts from
request.fields. Label, type, and required flag are all there. - Submit a response while the case is in
needs_response, with afieldsmap keyed by each requested field’sname:
Bash
Request body — JSON
under_review and fires case.updated. Once the work behind it is done, Palm closes the case and fires case.resolved. If Palm needs more, it opens another round on the same filing — each round is recorded for audit purposes.
Read cases
Bash
parent_type, parent_id, status, and kind, with cursor-based pagination (limit, cursor).

