Skip to main content
POST
Create Case Input
Push raw material on a case and let Penbox read it into case data, the way an inbound email is read. Use this route when you hold something Penbox should read: a call transcript, CRM notes, a chat thread, a parsed email. Use 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

Authorization
string
header
required

API token (starts with pnbx_). Create at https://app.penbox.io/workspace/settings/api. Include as: Authorization: Bearer {token}

Path Parameters

id
string<uuid>
required

Case UUID

Body

application/json
context

What this material is and where it comes from: free text, or any JSON (call id, agent, duration…)

Example:

"Transcript of an 11-minute call with the client on 2026-09-01"

content

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.

data
object

Explicit values, written as-is. An unknown key lands in the case's extra data, as with POST /cases/{id}/data.

contacts
object[]

Explicit contacts, same shape as POST /cases/{id}/contacts

options
object

Response

The input resource with its change list, plus the refreshed case

id
string<uuid>
created_at
string<date-time>
case
object

The case. On the write routes and on the single read it is the full case (same shape as GET /cases/{id}).

source
string

Provenance, inferred from your token: api

Example:

"api"

type
enum<string> | null

What the material is, derived by Penbox from the context and the content

Available options:
call,
note,
chat,
message,
document,
other
context
any | null

What you sent as context

mode
enum<string>
Available options:
suggest,
auto
status
enum<string>
Available options:
proposed,
partially_applied,
applied
intelligence
object
summary
string | null

One paragraph on what the material is about, in the case language

changes
object[]
unmapped
object[]

Facts read in the content that no case field can hold. Never written.

reviewed_at
string<date-time> | null
content
any | null

The raw material, verbatim. Only returned by GET /cases/{id}/inputs/{input_id}.