External data is for server-side integrations that display read-only information from external systems. For visitor-provided input fields that are collected during sign-in, see the
extra fields in the Tickets overview.API Endpoint
POST and PUT are accepted with identical behavior.
Parameters
Parameters are sent as form-encoded fields (not a JSON body). Thedata field contains a JSON string, which must be URL-encoded.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | string | Yes | Unique identifier for your integration (e.g., "salesforce", "epic"). Max 100 characters. |
title | string | Yes | Display title shown as the section header in the Service View. Max 100 characters. |
data | string | Yes | JSON string conforming to the data schema described below. |
Example Request
Data Structure
Thedata parameter must be a JSON string containing an object with a fields array:
text, email, phoneNumber), and list. You can mix and combine them freely within the fields array.
Message Fields
Displays a colored alert banner. Use messages to highlight important information that clerks should see immediately.| Property | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be "message" |
content | string | Yes | The message text to display |
importance | string | Yes | "error", "warning", or "info" |
importance level controls the visual styling:
error — red background, for critical alerts:

warning — orange background, for important notices:

info — gray background, for general information:

Textual Fields
Displays a key-value row. Three subtypes are available:text for plain text, email for email addresses, and phoneNumber for phone numbers.
| Property | Type | Required | Description |
|---|---|---|---|
type | string | Yes | "text", "email", or "phoneNumber" |
title | string | Yes | Label displayed on the left side |
value | string | Yes | Value displayed on the right side |

List Fields
Displays a titled section with a collection of items. Each item has a required title and optional metadata.| Property | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be "list" |
title | string | Yes | Section header (displayed in uppercase) |
items | array | Yes | Array of list item objects |
| Property | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Bold item title |
text | string | No | Description text below the title |
url | string | No | Clickable link displayed below the title |
footer | string | No | Displayed as a tag/badge pill |
timestamp | string | No | Date in YYYY-MM-DD format, displayed below other content |



Key Behaviors
- Upsert semantics: One record per
(ticketId, provider)pair. Calling the endpoint again with the same provider replaces the previous data entirely. - Multiple providers: A single ticket can have external data from many providers (e.g., both
"salesforce"and"epic"). Each appears as a separate section in the Service View. - Schema validation: The
dataJSON is validated server-side. Invalid structures or unknown properties return a 400 error. - Real-time updates: After storing, the Service View updates immediately — no page refresh needed.
Reading External Data
External data attached to a ticket can be read back via the GraphQL API using theexternal field on the Ticket type. The data field returns a JSON scalar — a parsed JSON object matching the structure you originally sent:
Error Responses
| Status | Description | Example |
|---|---|---|
| 400 | Invalid JSON | "Data is not valid JSON object" |
| 400 | Schema validation failed | "Data does not match the schema" |
| 403 | Non-SECRET API key used | Forbidden |
| 404 | Ticket not found | "Ticket with id 12345 not found" |