Upsert Case Field
Declare a field on a case, rename it, or mark a date as a deadline
- The
keyidentifies the field and never changes. To rename a field, send a newname. - A field that does not exist yet needs a
type. - The call is idempotent: replaying it lands on the same field.
Deadlines
A deadline is adate field with is_deadline: true. Its name says what the deadline is
(an appeal deadline, a hearing), its value says when. Only a date field can be a deadline:
is_deadline on any other type is refused with a 422.
Deadlines show in Get Case under schema.data, with
is_deadline: true. To clear a deadline’s date and keep the deadline, write null to its
value with Update Case Data. To remove the deadline itself, use
Delete Case Field.
Authorizations
API token (starts with pnbx_). Create at https://app.penbox.io/workspace/settings/api. Include as: Authorization: Bearer {token}
Path Parameters
Case UUID
Field key: letters, digits and _, up to 120 characters
^[a-zA-Z0-9_]{1,120}$Body
Field label
255"Délai d'appel"
Field type. Required when the field does not exist yet.
text, number, date, file, checkbox, checkboxes, choices, signature Mark a date field as a deadline. Only a date field can be one.
Response
The case, as Get Case returns it
Case UUID
Case title
Parent status
draft, pending, in_progress, closed, cancelled Creation timestamp
Last update timestamp
Workspace the case belongs to
Case description
The case agent, as far as the API exposes it.
Language/locale code
Custom reference number
Key of the current status
Human-readable label of the current status. Custom statuses return the label configured on the case template, in the language it was written in. Built-in statuses (draft, pending, in_progress, closed, cancelled) return an English label, as the API has no notion of the reader's language.
"Waiting for documents"
Who the case is waiting for
none, owner, contact Statuses available on this case, inherited from its case template. Use it to resolve the status key into a readable label. Null when no status is configured.
Timestamp when archived
True for a Silent case: created from a connected mailbox, not picked up by anyone yet, and kept out of the team's case views. It is picked up, for good, at the first action a person takes on it.
Array of contact objects
Template reference
Case owner information
Who decided to create the case: human a person, ai a model, automation a rule configured on a case template, partner a partner integration, system Penbox itself or an API token. Read-only, and null on cases created before this was recorded.
human, ai, automation, partner, system The surface the case came through: the Penbox app, the Outlook add-in, an AI assistant, this API, an email, a completed form, a connection or Penbox itself. Read-only, and null on cases created before this was recorded.
app, outlook, mcp, api, email, form, connection, system The workspace member who created the case. Null when no person created it, and null on cases created before this was recorded. Read-only.
Array of step objects representing the case workflow
The data of the case: its declared fields with their current values, and the values written without a declared field.
One embed link per contact who has the customer portal on this case. Empty when the case runs no portal, when the contact's role has no portal, or when the case requires a verification code.