Create Case Input
Push raw material on a case (a call transcript, CRM notes, a chat thread, a parsed email as JSON) and let Penbox turn it into case data, the way an inbound email is read.
This is the front door for writing to a case. data covers POST /cases/{id}/data, contacts covers POST /cases/{id}/contacts, and content is what neither can take. Use the atomic routes when you already know exactly which key to write; use this route when you hold material Penbox should read, or when you want to know what was written and what was refused.
At least one of content, data, contacts is required. A call carrying only data / contacts runs no AI.
automode (the default, configurable per case template) writes the values right away, within the case’s Email Intelligence fill setting: by default an input fills empty fields and never overwrites a value the case already holds.suggestmode keeps every row as a proposal. Review it withPOST /cases/{id}/inputs/{input_id}/apply.
Explicit values always win over what the AI reads. Values land on the case in a single write, so automations and Document Intelligence fire as they do for POST /cases/{id}/data; Document Intelligence runs after the response, so re-read the case a moment later if a file field with a template was written.
POST /cases/{id}/data when you already know exactly which key to write.
The response is the input resource: what Penbox proposed or wrote, row by row, and what it refused and why. The refreshed case is embedded under case.
Contacts sent in contacts are the caller’s own word: the role is created when the
case does not declare it, an already-bound role is replaced, and the identity fields
you send override the ones on an existing contact. A contact the AI read is more
conservative: it fills a declared role, and only when that role is empty.Authorizations
API token (starts with pnbx_). Create at https://app.penbox.io/workspace/settings/api. Include as: Authorization: Bearer {token}
Path Parameters
Case UUID
Body
What this material is and where it comes from: free text, or any JSON (call id, agent, duration…)
"Transcript of an 11-minute call with the client on 2026-09-01"
The material itself: a string (transcript, notes, OCR…) or any JSON value (a parsed email, a webhook payload). Sent to the model as-is. Max 100 000 characters once serialized.
Explicit values, written as-is. An unknown key lands in the case's extra data, as with POST /cases/{id}/data.
Explicit contacts, same shape as POST /cases/{id}/contacts
Response
The input resource with its change list, plus the refreshed case
The case. On the write routes and on the single read it is the full case (same shape as GET /cases/{id}).
Provenance, inferred from your token: api
"api"
What the material is, derived by Penbox from the context and the content
call, note, chat, message, document, other What you sent as context
suggest, auto proposed, partially_applied, applied One paragraph on what the material is about, in the case language
Facts read in the content that no case field can hold. Never written.
The raw material, verbatim. Only returned by GET /cases/{id}/inputs/{input_id}.