Interface: webhooks
Interface: webhooks in @ticketlayer/backstage.
@ticketlayer/backstage / webhooks
Defined in: generated/types.ts:9988
Properties#
case.created#
case.created: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10407
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer case was opened. Sent to the endpoints of the account that owns the case; re-fetch the case for its subject and activities.
Description
A customer case was opened. Sent to the endpoints of the account that owns the case; re-fetch the case for its subject and activities.
Sent to every enabled endpoint in the account that subscribes to `case.created`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.created";
version: string;
};
};
};Description
A delivery of case.created.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.created";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.created";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};post.requestBody.content.application/json.data.caseId
caseId: string;Description
The case (cas_).
post.requestBody.content.application/json.data.changed
changed: string[];Description
What changed (created on case.created; field names, links or state on case.updated).
post.requestBody.content.application/json.data.channel
channel:
| "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";Description
The channel the case came in on.
post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.number
number: number;Description
The case's number in its organisation.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the change happened (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.owningAccountId
owningAccountId: string | null;Description
The account that owns what the case is about; null when the organisation owns it.
post.requestBody.content.application/json.data.priority
priority: "low" | "normal" | "high" | "urgent";post.requestBody.content.application/json.data.resolutionReason
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;post.requestBody.content.application/json.data.resolverKind
resolverKind: "user" | "ai" | "workflow" | null;post.requestBody.content.application/json.data.state
state:
| "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";post.requestBody.content.application/json.data.stateCategory
stateCategory: "cancelled" | "open" | "waiting" | "done";Description
The fixed category the state belongs to.
post.requestBody.content.application/json.data.version
version: number;Description
The case's version after the change.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "case.created";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;case.message_received#
case.message_received: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
activityId: string;
attachments: number;
caseId: string;
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
newCase: boolean;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
};
id: string;
type: "case.message_received";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10583
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
activityId: string;
attachments: number;
caseId: string;
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
newCase: boolean;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
};
id: string;
type: "case.message_received";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer's message arrived on a case (an email today), opening the case or adding to it. Sent to the endpoints of the account that owns the case; re-fetch its activities for the message.
Description
A customer's message arrived on a case (an email today), opening the case or adding to it. Sent to the endpoints of the account that owns the case; re-fetch its activities for the message.
Sent to every enabled endpoint in the account that subscribes to `case.message_received`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
activityId: string;
attachments: number;
caseId: string;
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
newCase: boolean;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
};
id: string;
type: "case.message_received";
version: string;
};
};
};Description
A delivery of case.message_received.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
activityId: string;
attachments: number;
caseId: string;
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
newCase: boolean;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
};
id: string;
type: "case.message_received";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
activityId: string;
attachments: number;
caseId: string;
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
newCase: boolean;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
};
id: string;
type: "case.message_received";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
activityId: string;
attachments: number;
caseId: string;
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
newCase: boolean;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
};post.requestBody.content.application/json.data.activityId
activityId: string;Description
The activity the message became (act_).
post.requestBody.content.application/json.data.attachments
attachments: number;Description
How many attachments were kept.
post.requestBody.content.application/json.data.caseId
caseId: string;Description
The case (cas_).
post.requestBody.content.application/json.data.channel
channel:
| "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";Description
The channel it arrived on (email).
post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.newCase
newCase: boolean;Description
Whether the message opened the case.
post.requestBody.content.application/json.data.number
number: number;Description
The case's number in its organisation.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the message was received (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.owningAccountId
owningAccountId: string | null;post.requestBody.content.application/json.data.state
state:
| "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";Description
The case's state after the message.
post.requestBody.content.application/json.data.stateCategory
stateCategory: "cancelled" | "open" | "waiting" | "done";post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "case.message_received";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;case.resolved#
case.resolved: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.resolved";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10451
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.resolved";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer case was resolved, with a resolution reason and who resolved it (a person, the AI or a workflow).
Description
A customer case was resolved, with a resolution reason and who resolved it (a person, the AI or a workflow).
Sent to every enabled endpoint in the account that subscribes to `case.resolved`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.resolved";
version: string;
};
};
};Description
A delivery of case.resolved.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.resolved";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.resolved";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};post.requestBody.content.application/json.data.caseId
caseId: string;Description
The case (cas_).
post.requestBody.content.application/json.data.changed
changed: string[];Description
What changed (created on case.created; field names, links or state on case.updated).
post.requestBody.content.application/json.data.channel
channel:
| "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";Description
The channel the case came in on.
post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.number
number: number;Description
The case's number in its organisation.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the change happened (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.owningAccountId
owningAccountId: string | null;Description
The account that owns what the case is about; null when the organisation owns it.
post.requestBody.content.application/json.data.priority
priority: "low" | "normal" | "high" | "urgent";post.requestBody.content.application/json.data.resolutionReason
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;post.requestBody.content.application/json.data.resolverKind
resolverKind: "user" | "ai" | "workflow" | null;post.requestBody.content.application/json.data.state
state:
| "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";post.requestBody.content.application/json.data.stateCategory
stateCategory: "cancelled" | "open" | "waiting" | "done";Description
The fixed category the state belongs to.
post.requestBody.content.application/json.data.version
version: number;Description
The case's version after the change.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "case.resolved";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;case.sla_breached#
case.sla_breached: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
assigneeUserId: string | null;
breachedAt: string;
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
dueAt: string;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueKey: string | null;
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
target: "first_response" | "next_response";
version: number;
};
id: string;
type: "case.sla_breached";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10473
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
assigneeUserId: string | null;
breachedAt: string;
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
dueAt: string;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueKey: string | null;
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
target: "first_response" | "next_response";
version: number;
};
id: string;
type: "case.sla_breached";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer case's SLA clock passed its due time with the customer still waiting for a reply: the first response, or the reply to a later message. Sent once per clock, when the breach sweep stamps it.
Description
A customer case's SLA clock passed its due time with the customer still waiting for a reply: the first response, or the reply to a later message. Sent once per clock, when the breach sweep stamps it.
Sent to every enabled endpoint in the account that subscribes to `case.sla_breached`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
assigneeUserId: string | null;
breachedAt: string;
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
dueAt: string;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueKey: string | null;
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
target: "first_response" | "next_response";
version: number;
};
id: string;
type: "case.sla_breached";
version: string;
};
};
};Description
A delivery of case.sla_breached.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
assigneeUserId: string | null;
breachedAt: string;
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
dueAt: string;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueKey: string | null;
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
target: "first_response" | "next_response";
version: number;
};
id: string;
type: "case.sla_breached";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
assigneeUserId: string | null;
breachedAt: string;
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
dueAt: string;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueKey: string | null;
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
target: "first_response" | "next_response";
version: number;
};
id: string;
type: "case.sla_breached";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
assigneeUserId: string | null;
breachedAt: string;
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
dueAt: string;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueKey: string | null;
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
target: "first_response" | "next_response";
version: number;
};post.requestBody.content.application/json.data.assigneeUserId
assigneeUserId: string | null;Description
Who was working the case, if anyone.
post.requestBody.content.application/json.data.breachedAt
breachedAt: string;Description
The breach, which is the due time (ISO-8601).
post.requestBody.content.application/json.data.caseId
caseId: string;Description
The case (cas_).
post.requestBody.content.application/json.data.changed
changed: string[];Description
What changed (created on case.created; field names, links or state on case.updated).
post.requestBody.content.application/json.data.channel
channel:
| "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";Description
The channel the case came in on.
post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.dueAt
dueAt: string;Description
When the reply fell due, in business time (ISO-8601).
post.requestBody.content.application/json.data.number
number: number;Description
The case's number in its organisation.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the change happened (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.owningAccountId
owningAccountId: string | null;Description
The account that owns what the case is about; null when the organisation owns it.
post.requestBody.content.application/json.data.priority
priority: "low" | "normal" | "high" | "urgent";post.requestBody.content.application/json.data.queueKey
queueKey: string | null;Description
The queue the case sits in, if any.
post.requestBody.content.application/json.data.resolutionReason
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;post.requestBody.content.application/json.data.resolverKind
resolverKind: "user" | "ai" | "workflow" | null;post.requestBody.content.application/json.data.state
state:
| "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";post.requestBody.content.application/json.data.stateCategory
stateCategory: "cancelled" | "open" | "waiting" | "done";Description
The fixed category the state belongs to.
post.requestBody.content.application/json.data.target
target: "first_response" | "next_response";Description
first_response (nobody has answered the case yet) or next_response (a later message is unanswered).
post.requestBody.content.application/json.data.version
version: number;Description
The case's version after the change.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "case.sla_breached";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;case.updated#
case.updated: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.updated";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10429
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.updated";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer case changed: its fields, its links, or its state (other than being resolved, which is case.resolved). changed names what moved.
Description
A customer case changed: its fields, its links, or its state (other than being resolved, which is case.resolved). changed names what moved.
Sent to every enabled endpoint in the account that subscribes to `case.updated`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.updated";
version: string;
};
};
};Description
A delivery of case.updated.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.updated";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};
id: string;
type: "case.updated";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
caseId: string;
changed: string[];
channel: | "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";
customerId: string | null;
number: number;
occurredAt: string;
organisationId: string;
owningAccountId: string | null;
priority: "low" | "normal" | "high" | "urgent";
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;
resolverKind: "user" | "ai" | "workflow" | null;
state: | "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";
stateCategory: "cancelled" | "open" | "waiting" | "done";
version: number;
};post.requestBody.content.application/json.data.caseId
caseId: string;Description
The case (cas_).
post.requestBody.content.application/json.data.changed
changed: string[];Description
What changed (created on case.created; field names, links or state on case.updated).
post.requestBody.content.application/json.data.channel
channel:
| "email"
| "phone"
| "sms"
| "in_person"
| "chat"
| "concierge"
| "manage"
| "box_office"
| "api";Description
The channel the case came in on.
post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.number
number: number;Description
The case's number in its organisation.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the change happened (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.owningAccountId
owningAccountId: string | null;Description
The account that owns what the case is about; null when the organisation owns it.
post.requestBody.content.application/json.data.priority
priority: "low" | "normal" | "high" | "urgent";post.requestBody.content.application/json.data.resolutionReason
resolutionReason: "answered" | "refunded" | "exchanged" | "no_action" | "duplicate" | null;post.requestBody.content.application/json.data.resolverKind
resolverKind: "user" | "ai" | "workflow" | null;post.requestBody.content.application/json.data.state
state:
| "new"
| "open"
| "waiting_on_customer"
| "waiting_on_internal"
| "resolved"
| "closed"
| "spam";post.requestBody.content.application/json.data.stateCategory
stateCategory: "cancelled" | "open" | "waiting" | "done";Description
The fixed category the state belongs to.
post.requestBody.content.application/json.data.version
version: number;Description
The case's version after the change.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "case.updated";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;cash_session.closed#
cash_session.closed: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cardMachineBatchTotal: number | null;
cardMachineRecordedTotal: number | null;
closedAt: string;
closedBy: string | null;
countedAmount: number;
currency: string;
expectedAmount: number;
floatAmount: number;
id: string;
locationId: string | null;
status: "closed" | "closed_pending_review";
variance: number;
varianceReason: string | null;
};
id: string;
type: "cash_session.closed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10517
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cardMachineBatchTotal: number | null;
cardMachineRecordedTotal: number | null;
closedAt: string;
closedBy: string | null;
countedAmount: number;
currency: string;
expectedAmount: number;
floatAmount: number;
id: string;
locationId: string | null;
status: "closed" | "closed_pending_review";
variance: number;
varianceReason: string | null;
};
id: string;
type: "cash_session.closed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A cash drawer's session was closed with a blind count: what was expected, what was counted, and the variance. A variance over the threshold closes it pending review.
Description
A cash drawer's session was closed with a blind count: what was expected, what was counted, and the variance. A variance over the threshold closes it pending review.
Sent to every enabled endpoint in the account that subscribes to `cash_session.closed`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cardMachineBatchTotal: number | null;
cardMachineRecordedTotal: number | null;
closedAt: string;
closedBy: string | null;
countedAmount: number;
currency: string;
expectedAmount: number;
floatAmount: number;
id: string;
locationId: string | null;
status: "closed" | "closed_pending_review";
variance: number;
varianceReason: string | null;
};
id: string;
type: "cash_session.closed";
version: string;
};
};
};Description
A delivery of cash_session.closed.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cardMachineBatchTotal: number | null;
cardMachineRecordedTotal: number | null;
closedAt: string;
closedBy: string | null;
countedAmount: number;
currency: string;
expectedAmount: number;
floatAmount: number;
id: string;
locationId: string | null;
status: "closed" | "closed_pending_review";
variance: number;
varianceReason: string | null;
};
id: string;
type: "cash_session.closed";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
cardMachineBatchTotal: number | null;
cardMachineRecordedTotal: number | null;
closedAt: string;
closedBy: string | null;
countedAmount: number;
currency: string;
expectedAmount: number;
floatAmount: number;
id: string;
locationId: string | null;
status: "closed" | "closed_pending_review";
variance: number;
varianceReason: string | null;
};
id: string;
type: "cash_session.closed";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
cardMachineBatchTotal: number | null;
cardMachineRecordedTotal: number | null;
closedAt: string;
closedBy: string | null;
countedAmount: number;
currency: string;
expectedAmount: number;
floatAmount: number;
id: string;
locationId: string | null;
status: "closed" | "closed_pending_review";
variance: number;
varianceReason: string | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.cardMachineBatchTotal
cardMachineBatchTotal: number | null;post.requestBody.content.application/json.data.cardMachineRecordedTotal
cardMachineRecordedTotal: number | null;post.requestBody.content.application/json.data.closedAt
closedAt: string;post.requestBody.content.application/json.data.closedBy
closedBy: string | null;post.requestBody.content.application/json.data.countedAmount
countedAmount: number;Description
What was counted, blind.
post.requestBody.content.application/json.data.currency
currency: string;post.requestBody.content.application/json.data.expectedAmount
expectedAmount: number;Description
What the drawer should hold, from the ledger.
post.requestBody.content.application/json.data.floatAmount
floatAmount: number;post.requestBody.content.application/json.data.id
id: string;Description
The cash session (css_).
post.requestBody.content.application/json.data.locationId
locationId: string | null;post.requestBody.content.application/json.data.status
status: "closed" | "closed_pending_review";Description
closed_pending_review when the variance was over the threshold and needs someone else to sign it off.
post.requestBody.content.application/json.data.variance
variance: number;Description
counted minus expected: negative is short, positive is over.
post.requestBody.content.application/json.data.varianceReason
varianceReason: string | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "cash_session.closed";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;customer.created#
customer.created: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
createdAt: string | null;
email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
};
id: string;
type: "customer.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10077
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
createdAt: string | null;
email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
};
id: string;
type: "customer.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A new customer was created.
Description
A new customer was created.
Sent to every enabled endpoint in the account that subscribes to `customer.created`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
createdAt: string | null;
email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
};
id: string;
type: "customer.created";
version: string;
};
};
};Description
A delivery of customer.created.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
createdAt: string | null;
email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
};
id: string;
type: "customer.created";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string | null;
createdAt: string | null;
email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
};
id: string;
type: "customer.created";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string | null;
createdAt: string | null;
email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
};post.requestBody.content.application/json.data.accountId
accountId: string | null;post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.email
email: string | null;post.requestBody.content.application/json.data.firstName
firstName: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.lastName
lastName: string | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "customer.created";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;customer.tag_extended#
customer.tag_extended: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
previousExpiresAt: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_extended";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10297
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
previousExpiresAt: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_extended";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer's tag was renewed before it expired: the same grant (customerTagId) now expires later (expiresAt), or no longer expires (null). previousExpiresAt is the expiry it replaced. A renewal after the tag expired is a new grant, announced as customer.tag_granted.
Description
A customer's tag was renewed before it expired: the same grant (customerTagId) now expires later (expiresAt), or no longer expires (null). previousExpiresAt is the expiry it replaced. A renewal after the tag expired is a new grant, announced as customer.tag_granted.
Sent to every enabled endpoint in the account that subscribes to `customer.tag_extended`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
previousExpiresAt: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_extended";
version: string;
};
};
};Description
A delivery of customer.tag_extended.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
previousExpiresAt: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_extended";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
previousExpiresAt: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_extended";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
previousExpiresAt: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};post.requestBody.content.application/json.data.accountId
accountId: string | null;Description
The customer's account. Null for a customer the organisation's accounts share; such an event is delivered to the endpoints of every account in the organisation.
post.requestBody.content.application/json.data.customerId
customerId: string;post.requestBody.content.application/json.data.customerTagId
customerTagId: string;Description
The grant (cent_). One grant is announced granted once and, if it ends, revoked once.
post.requestBody.content.application/json.data.expiresAt
expiresAt: string | null;Description
The new expiry (ISO-8601); null when the grant no longer expires.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the grant was extended (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.previousExpiresAt
previousExpiresAt: string;Description
The expiry the grant had before this extension (ISO-8601).
post.requestBody.content.application/json.data.source
source: "manual" | "membership" | "import" | "presale";Description
Where the grant came from: manual (staff or an API key), membership, import or presale (a presale code redemption).
post.requestBody.content.application/json.data.tag
tag: string;Description
The tag definition's slug, e.g. member.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "customer.tag_extended";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;customer.tag_granted#
customer.tag_granted: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_granted";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10275
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_granted";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer was granted a tag: by staff, by an API key, by a presale code redemption, or by an import or membership.
Description
A customer was granted a tag: by staff, by an API key, by a presale code redemption, or by an import or membership.
Sent to every enabled endpoint in the account that subscribes to `customer.tag_granted`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_granted";
version: string;
};
};
};Description
A delivery of customer.tag_granted.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_granted";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_granted";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
source: "manual" | "membership" | "import" | "presale";
tag: string;
};post.requestBody.content.application/json.data.accountId
accountId: string | null;Description
The customer's account. Null for a customer the organisation's accounts share; such an event is delivered to the endpoints of every account in the organisation.
post.requestBody.content.application/json.data.customerId
customerId: string;post.requestBody.content.application/json.data.customerTagId
customerTagId: string;Description
The grant (cent_). One grant is announced granted once and, if it ends, revoked once.
post.requestBody.content.application/json.data.expiresAt
expiresAt: string | null;Description
When the grant stops applying (ISO-8601); null when it does not expire.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the tag was granted (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.source
source: "manual" | "membership" | "import" | "presale";Description
Where the grant came from: manual (staff or an API key), membership, import or presale (a presale code redemption).
post.requestBody.content.application/json.data.tag
tag: string;Description
The tag definition's slug, e.g. member.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "customer.tag_granted";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;customer.tag_revoked#
customer.tag_revoked: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
reason: "revoked" | "expired";
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_revoked";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10319
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
reason: "revoked" | "expired";
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_revoked";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A customer's tag stopped applying: it was revoked (reason: revoked) or its expiry passed (reason: expired). Sent at most once per grant.
Description
A customer's tag stopped applying: it was revoked (reason: revoked) or its expiry passed (reason: expired). Sent at most once per grant.
Sent to every enabled endpoint in the account that subscribes to `customer.tag_revoked`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
reason: "revoked" | "expired";
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_revoked";
version: string;
};
};
};Description
A delivery of customer.tag_revoked.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
reason: "revoked" | "expired";
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_revoked";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
reason: "revoked" | "expired";
source: "manual" | "membership" | "import" | "presale";
tag: string;
};
id: string;
type: "customer.tag_revoked";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string | null;
customerId: string;
customerTagId: string;
expiresAt: string | null;
occurredAt: string;
organisationId: string;
reason: "revoked" | "expired";
source: "manual" | "membership" | "import" | "presale";
tag: string;
};post.requestBody.content.application/json.data.accountId
accountId: string | null;Description
The customer's account. Null for a customer the organisation's accounts share; such an event is delivered to the endpoints of every account in the organisation.
post.requestBody.content.application/json.data.customerId
customerId: string;post.requestBody.content.application/json.data.customerTagId
customerTagId: string;Description
The grant (cent_). One grant is announced granted once and, if it ends, revoked once.
post.requestBody.content.application/json.data.expiresAt
expiresAt: string | null;Description
When the grant stops applying (ISO-8601); null when it does not expire.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the tag stopped applying (ISO-8601): the revocation, or the expiry instant itself.
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.reason
reason: "revoked" | "expired";Description
revoked: staff or an API key took the tag away. expired: its expiresAt passed.
post.requestBody.content.application/json.data.source
source: "manual" | "membership" | "import" | "presale";Description
Where the grant came from: manual (staff or an API key), membership, import or presale (a presale code redemption).
post.requestBody.content.application/json.data.tag
tag: string;Description
The tag definition's slug, e.g. member.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "customer.tag_revoked";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;event.created#
event.created: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
id: string;
name: string;
status: string | null;
timezone: string | null;
venueId: string | null;
};
id: string;
type: "event.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10099
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
id: string;
name: string;
status: string | null;
timezone: string | null;
venueId: string | null;
};
id: string;
type: "event.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A new event was created.
Description
A new event was created.
Sent to every enabled endpoint in the account that subscribes to `event.created`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
id: string;
name: string;
status: string | null;
timezone: string | null;
venueId: string | null;
};
id: string;
type: "event.created";
version: string;
};
};
};Description
A delivery of event.created.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
id: string;
name: string;
status: string | null;
timezone: string | null;
venueId: string | null;
};
id: string;
type: "event.created";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
id: string;
name: string;
status: string | null;
timezone: string | null;
venueId: string | null;
};
id: string;
type: "event.created";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
createdAt: string | null;
id: string;
name: string;
status: string | null;
timezone: string | null;
venueId: string | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.name
name: string;post.requestBody.content.application/json.data.status
status: string | null;post.requestBody.content.application/json.data.timezone
timezone: string | null;post.requestBody.content.application/json.data.venueId
venueId: string | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "event.created";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;event.deleted#
event.deleted: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
deletedAt: string;
id: string;
organisationId: string;
};
id: string;
type: "event.deleted";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10187
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
deletedAt: string;
id: string;
organisationId: string;
};
id: string;
type: "event.deleted";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};An event was deleted.
Description
An event was deleted.
Sent to every enabled endpoint in the account that subscribes to `event.deleted`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
deletedAt: string;
id: string;
organisationId: string;
};
id: string;
type: "event.deleted";
version: string;
};
};
};Description
A delivery of event.deleted.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
deletedAt: string;
id: string;
organisationId: string;
};
id: string;
type: "event.deleted";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
deletedAt: string;
id: string;
organisationId: string;
};
id: string;
type: "event.deleted";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
deletedAt: string;
id: string;
organisationId: string;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.deletedAt
deletedAt: string;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "event.deleted";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;event.updated#
event.updated: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];
createdAt: string | null;
id: string;
name: string;
organisationId: string;
sequence: number;
status: string | null;
timezone: string | null;
updatedAt: string;
venueId: string | null;
};
id: string;
type: "event.updated";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10165
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];
createdAt: string | null;
id: string;
name: string;
organisationId: string;
sequence: number;
status: string | null;
timezone: string | null;
updatedAt: string;
venueId: string | null;
};
id: string;
type: "event.updated";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};An event's content, images, status, occurrences, prices, venue or layout changed. At most one delivery per event every 30 seconds, naming every area that changed; re-fetch the event, and drop a delivery whose sequence is lower than one already processed.
Description
An event's content, images, status, occurrences, prices, venue or layout changed. At most one delivery per event every 30 seconds, naming every area that changed; re-fetch the event, and drop a delivery whose sequence is lower than one already processed.
Sent to every enabled endpoint in the account that subscribes to `event.updated`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];
createdAt: string | null;
id: string;
name: string;
organisationId: string;
sequence: number;
status: string | null;
timezone: string | null;
updatedAt: string;
venueId: string | null;
};
id: string;
type: "event.updated";
version: string;
};
};
};Description
A delivery of event.updated.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];
createdAt: string | null;
id: string;
name: string;
organisationId: string;
sequence: number;
status: string | null;
timezone: string | null;
updatedAt: string;
venueId: string | null;
};
id: string;
type: "event.updated";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];
createdAt: string | null;
id: string;
name: string;
organisationId: string;
sequence: number;
status: string | null;
timezone: string | null;
updatedAt: string;
venueId: string | null;
};
id: string;
type: "event.updated";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];
createdAt: string | null;
id: string;
name: string;
organisationId: string;
sequence: number;
status: string | null;
timezone: string | null;
updatedAt: string;
venueId: string | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.changes
changes: (
| "content"
| "images"
| "status"
| "occurrences"
| "prices"
| "venue"
| "layout")[];Description
The areas that changed since the previous delivery, as a set. status covers the event status and its listing rules. A hint says what to re-fetch; the payload never carries the content.
post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.name
name: string;post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.sequence
sequence: number;Description
Strictly increasing per event: the event's contentUpdatedAt in epoch milliseconds (or one more than the previous delivery's, if that is not greater). Drop a delivery whose sequence is lower than one already processed.
post.requestBody.content.application/json.data.status
status: string | null;post.requestBody.content.application/json.data.timezone
timezone: string | null;post.requestBody.content.application/json.data.updatedAt
updatedAt: string;Description
When the event's read model last changed (ISO-8601): the event row, an occurrence, a price scheme, the layout or its venue.
post.requestBody.content.application/json.data.venueId
venueId: string | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "event.updated";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;listing.changed#
listing.changed: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
change: "created" | "updated" | "removed";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.changed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10209
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
change: "created" | "updated" | "removed";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.changed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A channel listing's settings were saved: the listing was created, updated or removed. Carries the listing's state for the public as it stands after the write.
Description
A channel listing's settings were saved: the listing was created, updated or removed. Carries the listing's state for the public as it stands after the write.
Sent to every enabled endpoint in the account that subscribes to `listing.changed`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
change: "created" | "updated" | "removed";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.changed";
version: string;
};
};
};Description
A delivery of listing.changed.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
change: "created" | "updated" | "removed";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.changed";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
change: "created" | "updated" | "removed";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.changed";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
change: "created" | "updated" | "removed";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};post.requestBody.content.application/json.data.accountId
accountId: string;Description
The channel's account.
post.requestBody.content.application/json.data.change
change: "created" | "updated" | "removed";post.requestBody.content.application/json.data.channel
channel: {
id: string;
slug: string;
};post.requestBody.content.application/json.data.channel.id
id: string;post.requestBody.content.application/json.data.channel.slug
slug: string;post.requestBody.content.application/json.data.eventId
eventId: string;post.requestBody.content.application/json.data.listingId
listingId: string;post.requestBody.content.application/json.data.nextTransitionAt
nextTransitionAt: string | null;Description
The next window boundary at which the listing's public state can change with no write; null when there is none. A receiver can schedule its own re-fetch for it.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.state
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};post.requestBody.content.application/json.data.state.closesAt
closesAt: string | null;Description
The end of the window the listing is sellable under; null when open-ended or not sellable.
post.requestBody.content.application/json.data.state.discoverable
discoverable: boolean;post.requestBody.content.application/json.data.state.opensAt
opensAt: string | null;Description
The next moment the listing becomes sellable for the public; null when none, or already sellable.
post.requestBody.content.application/json.data.state.sellable
sellable: boolean;post.requestBody.content.application/json.data.state.visible
visible: boolean;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "listing.changed";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;listing.status_changed#
listing.status_changed: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cause: | "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.status_changed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10231
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cause: | "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.status_changed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};What the public sees of a channel listing changed: it became, or stopped being, discoverable, visible or sellable, including when a sale window opens or closes with no write.
Description
What the public sees of a channel listing changed: it became, or stopped being, discoverable, visible or sellable, including when a sale window opens or closes with no write.
Sent to every enabled endpoint in the account that subscribes to `listing.status_changed`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cause: | "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.status_changed";
version: string;
};
};
};Description
A delivery of listing.status_changed.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
cause: | "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.status_changed";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
cause: | "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};
id: string;
type: "listing.status_changed";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
cause: | "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";
channel: {
id: string;
slug: string;
};
eventId: string;
listingId: string;
nextTransitionAt: string | null;
occurredAt: string;
organisationId: string;
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};
};post.requestBody.content.application/json.data.accountId
accountId: string;Description
The channel's account.
post.requestBody.content.application/json.data.cause
cause:
| "scheduled"
| "manual"
| "window_edited"
| "event_status"
| "listed"
| "unlisted";Description
scheduled: a window opened or closed with no write. manual: the rules were changed so the state changed now. window_edited: a window was moved and that moved the state. event_status: the event entered or left a live status, or was deleted. listed, unlisted: the listing was created or removed.
post.requestBody.content.application/json.data.channel
channel: {
id: string;
slug: string;
};post.requestBody.content.application/json.data.channel.id
id: string;post.requestBody.content.application/json.data.channel.slug
slug: string;post.requestBody.content.application/json.data.eventId
eventId: string;post.requestBody.content.application/json.data.listingId
listingId: string;post.requestBody.content.application/json.data.nextTransitionAt
nextTransitionAt: string | null;Description
The next window boundary at which the listing's public state can change with no write; null when there is none. A receiver can schedule its own re-fetch for it.
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.previous
previous: {
discoverable: boolean;
sellable: boolean;
visible: boolean;
};post.requestBody.content.application/json.data.previous.discoverable
discoverable: boolean;post.requestBody.content.application/json.data.previous.sellable
sellable: boolean;post.requestBody.content.application/json.data.previous.visible
visible: boolean;post.requestBody.content.application/json.data.state
state: {
closesAt: string | null;
discoverable: boolean;
opensAt: string | null;
sellable: boolean;
visible: boolean;
};post.requestBody.content.application/json.data.state.closesAt
closesAt: string | null;Description
The end of the window the listing is sellable under; null when open-ended or not sellable.
post.requestBody.content.application/json.data.state.discoverable
discoverable: boolean;post.requestBody.content.application/json.data.state.opensAt
opensAt: string | null;Description
The next moment the listing becomes sellable for the public; null when none, or already sellable.
post.requestBody.content.application/json.data.state.sellable
sellable: boolean;post.requestBody.content.application/json.data.state.visible
visible: boolean;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "listing.status_changed";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;order.cancelled#
order.cancelled: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.cancelled";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10033
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.cancelled";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};An order was cancelled.
Description
An order was cancelled.
Sent to every enabled endpoint in the account that subscribes to `order.cancelled`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.cancelled";
version: string;
};
};
};Description
A delivery of order.cancelled.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.cancelled";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.cancelled";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.currency
currency: string | null;post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.lineItemCount
lineItemCount: number;post.requestBody.content.application/json.data.orderNumber
orderNumber: string | null;post.requestBody.content.application/json.data.status
status: string;post.requestBody.content.application/json.data.subtotalAmount
subtotalAmount: number | null;post.requestBody.content.application/json.data.totalAmount
totalAmount: number | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "order.cancelled";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;order.confirmed#
order.confirmed: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.confirmed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10011
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.confirmed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};An order was paid and confirmed.
Description
An order was paid and confirmed.
Sent to every enabled endpoint in the account that subscribes to `order.confirmed`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.confirmed";
version: string;
};
};
};Description
A delivery of order.confirmed.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.confirmed";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.confirmed";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.currency
currency: string | null;post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.lineItemCount
lineItemCount: number;post.requestBody.content.application/json.data.orderNumber
orderNumber: string | null;post.requestBody.content.application/json.data.status
status: string;post.requestBody.content.application/json.data.subtotalAmount
subtotalAmount: number | null;post.requestBody.content.application/json.data.totalAmount
totalAmount: number | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "order.confirmed";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;order.created#
order.created: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:9989
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A new order was started.
Description
A new order was started.
Sent to every enabled endpoint in the account that subscribes to `order.created`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.created";
version: string;
};
};
};Description
A delivery of order.created.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.created";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.created";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.currency
currency: string | null;post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.lineItemCount
lineItemCount: number;post.requestBody.content.application/json.data.orderNumber
orderNumber: string | null;post.requestBody.content.application/json.data.status
status: string;post.requestBody.content.application/json.data.subtotalAmount
subtotalAmount: number | null;post.requestBody.content.application/json.data.totalAmount
totalAmount: number | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "order.created";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;order.refunded#
order.refunded: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.refunded";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10055
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.refunded";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};An order was refunded.
Description
An order was refunded.
Sent to every enabled endpoint in the account that subscribes to `order.refunded`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.refunded";
version: string;
};
};
};Description
A delivery of order.refunded.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.refunded";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};
id: string;
type: "order.refunded";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
createdAt: string | null;
currency: string | null;
customerId: string | null;
id: string;
lineItemCount: number;
orderNumber: string | null;
status: string;
subtotalAmount: number | null;
totalAmount: number | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.createdAt
createdAt: string | null;post.requestBody.content.application/json.data.currency
currency: string | null;post.requestBody.content.application/json.data.customerId
customerId: string | null;post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.lineItemCount
lineItemCount: number;post.requestBody.content.application/json.data.orderNumber
orderNumber: string | null;post.requestBody.content.application/json.data.status
status: string;post.requestBody.content.application/json.data.subtotalAmount
subtotalAmount: number | null;post.requestBody.content.application/json.data.totalAmount
totalAmount: number | null;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "order.refunded";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;payment.recorded#
payment.recorded: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cashSessionId: string | null;
currency: string;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentType: string;
recordedBy: string | null;
};
id: string;
type: "payment.recorded";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10495
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cashSessionId: string | null;
currency: string;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentType: string;
recordedBy: string | null;
};
id: string;
type: "payment.recorded";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};Staff recorded a payment Ticketlayer did not take itself: cash, a card machine, a bank transfer, a cheque, a voucher, or money a channel collected. It settles the order the same way as an online payment, so order.confirmed follows when it pays the order in full.
Description
Staff recorded a payment Ticketlayer did not take itself: cash, a card machine, a bank transfer, a cheque, a voucher, or money a channel collected. It settles the order the same way as an online payment, so order.confirmed follows when it pays the order in full.
Sent to every enabled endpoint in the account that subscribes to `payment.recorded`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cashSessionId: string | null;
currency: string;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentType: string;
recordedBy: string | null;
};
id: string;
type: "payment.recorded";
version: string;
};
};
};Description
A delivery of payment.recorded.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cashSessionId: string | null;
currency: string;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentType: string;
recordedBy: string | null;
};
id: string;
type: "payment.recorded";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cashSessionId: string | null;
currency: string;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentType: string;
recordedBy: string | null;
};
id: string;
type: "payment.recorded";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
amount: number;
cashSessionId: string | null;
currency: string;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentType: string;
recordedBy: string | null;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.amount
amount: number;Description
Integer minor units: what this payment paid, which may be part of the order (split tender).
post.requestBody.content.application/json.data.cashSessionId
cashSessionId: string | null;Description
The cash session whose drawer the money went into, for cash taken with a session open.
post.requestBody.content.application/json.data.currency
currency: string;post.requestBody.content.application/json.data.id
id: string;Description
The payment (pay_).
post.requestBody.content.application/json.data.isTest
isTest: boolean;post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When it was recorded (ISO-8601).
post.requestBody.content.application/json.data.orderId
orderId: string;post.requestBody.content.application/json.data.paymentType
paymentType: string;Description
The method recorded: cash, card_machine, bank_transfer, cheque, voucher, other, or external for money a channel collected itself.
post.requestBody.content.application/json.data.recordedBy
recordedBy: string | null;Description
Who recorded it, when a person did.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "payment.recorded";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;task.created#
task.created: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10539
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.created";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A task was raised: by the platform (a payment to review, a failed payout, a failing webhook endpoint), by a person, or by a workflow. Sent to the endpoints of the account the task is for.
Description
A task was raised: by the platform (a payment to review, a failed payout, a failing webhook endpoint), by a person, or by a workflow. Sent to the endpoints of the account the task is for.
Sent to every enabled endpoint in the account that subscribes to `task.created`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.created";
version: string;
};
};
};Description
A delivery of task.created.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.created";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.created";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};post.requestBody.content.application/json.data.accountId
accountId: string | null;Description
The account the task is for; null when the organisation owns it.
post.requestBody.content.application/json.data.assigneeId
assigneeId: string | null;post.requestBody.content.application/json.data.assigneeType
assigneeType: "user" | "role" | "account" | null;post.requestBody.content.application/json.data.dueAt
dueAt: string | null;Description
When it is due (ISO-8601), if it has a deadline.
post.requestBody.content.application/json.data.isTest
isTest: boolean;Description
Raised by a failure in test mode (a test order, a payout from a test balance).
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When it happened (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.outcome
outcome: string | null;Description
The decision's action (resolve, dismiss, ...); on task.decided only.
post.requestBody.content.application/json.data.priority
priority: "low" | "normal" | "high" | "urgent";post.requestBody.content.application/json.data.queueId
queueId: string | null;post.requestBody.content.application/json.data.resolverKind
resolverKind: "user" | "workflow" | "system" | "app" | null;Description
Who decided it: a person (user), or the platform (system) when the condition that raised it cleared.
post.requestBody.content.application/json.data.sourceKind
sourceKind: "user" | "workflow" | "system" | "app";Description
Who raised it: the platform (system), a workflow, a person or an app.
post.requestBody.content.application/json.data.status
status: "expired" | "open" | "done" | "claimed" | "dismissed";post.requestBody.content.application/json.data.subjectId
subjectId: string | null;Description
The prefixed id of what the task is about.
post.requestBody.content.application/json.data.subjectType
subjectType: string | null;Description
The registered object type the task is about, e.g. order.
post.requestBody.content.application/json.data.taskId
taskId: string;Description
The task (tsk_).
post.requestBody.content.application/json.data.title
title: string;post.requestBody.content.application/json.data.type
type: string;Description
The task type, e.g. payment.review, payout.failed, webhook.failing.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "task.created";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;task.decided#
task.decided: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.decided";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10561
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.decided";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A task was closed: decided by a person (resolve, dismiss, ...), or resolved by the platform because the condition that raised it cleared (resolverKind: system).
Description
A task was closed: decided by a person (resolve, dismiss, ...), or resolved by the platform because the condition that raised it cleared (resolverKind: system).
Sent to every enabled endpoint in the account that subscribes to `task.decided`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.decided";
version: string;
};
};
};Description
A delivery of task.decided.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.decided";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};
id: string;
type: "task.decided";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string | null;
assigneeId: string | null;
assigneeType: "user" | "role" | "account" | null;
dueAt: string | null;
isTest: boolean;
occurredAt: string;
organisationId: string;
outcome: string | null;
priority: "low" | "normal" | "high" | "urgent";
queueId: string | null;
resolverKind: "user" | "workflow" | "system" | "app" | null;
sourceKind: "user" | "workflow" | "system" | "app";
status: "expired" | "open" | "done" | "claimed" | "dismissed";
subjectId: string | null;
subjectType: string | null;
taskId: string;
title: string;
type: string;
};post.requestBody.content.application/json.data.accountId
accountId: string | null;Description
The account the task is for; null when the organisation owns it.
post.requestBody.content.application/json.data.assigneeId
assigneeId: string | null;post.requestBody.content.application/json.data.assigneeType
assigneeType: "user" | "role" | "account" | null;post.requestBody.content.application/json.data.dueAt
dueAt: string | null;Description
When it is due (ISO-8601), if it has a deadline.
post.requestBody.content.application/json.data.isTest
isTest: boolean;Description
Raised by a failure in test mode (a test order, a payout from a test balance).
post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When it happened (ISO-8601).
post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.outcome
outcome: string | null;Description
The decision's action (resolve, dismiss, ...); on task.decided only.
post.requestBody.content.application/json.data.priority
priority: "low" | "normal" | "high" | "urgent";post.requestBody.content.application/json.data.queueId
queueId: string | null;post.requestBody.content.application/json.data.resolverKind
resolverKind: "user" | "workflow" | "system" | "app" | null;Description
Who decided it: a person (user), or the platform (system) when the condition that raised it cleared.
post.requestBody.content.application/json.data.sourceKind
sourceKind: "user" | "workflow" | "system" | "app";Description
Who raised it: the platform (system), a workflow, a person or an app.
post.requestBody.content.application/json.data.status
status: "expired" | "open" | "done" | "claimed" | "dismissed";post.requestBody.content.application/json.data.subjectId
subjectId: string | null;Description
The prefixed id of what the task is about.
post.requestBody.content.application/json.data.subjectType
subjectType: string | null;Description
The registered object type the task is about, e.g. order.
post.requestBody.content.application/json.data.taskId
taskId: string;Description
The task (tsk_).
post.requestBody.content.application/json.data.title
title: string;post.requestBody.content.application/json.data.type
type: string;Description
The task type, e.g. payment.review, payout.failed, webhook.failing.
post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "task.decided";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;terminal_payment.cancelled#
terminal_payment.cancelled: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.cancelled";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10385
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.cancelled";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A terminal payment attempt was cancelled before the card was taken. The order is unchanged.
Description
A terminal payment attempt was cancelled before the card was taken. The order is unchanged.
Sent to every enabled endpoint in the account that subscribes to `terminal_payment.cancelled`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.cancelled";
version: string;
};
};
};Description
A delivery of terminal_payment.cancelled.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.cancelled";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.cancelled";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.amount
amount: number;Description
Integer minor units.
post.requestBody.content.application/json.data.cardBrand
cardBrand: string | null;post.requestBody.content.application/json.data.cardLast4
cardLast4: string | null;post.requestBody.content.application/json.data.currency
currency: string;post.requestBody.content.application/json.data.failureCode
failureCode: string | null;Description
Why the card was not taken, when it was not: the provider's decline or reader code.
post.requestBody.content.application/json.data.failureMessage
failureMessage: string | null;post.requestBody.content.application/json.data.id
id: string;Description
The terminal payment attempt (tpa_).
post.requestBody.content.application/json.data.isTest
isTest: boolean;post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the attempt reached this outcome (ISO-8601).
post.requestBody.content.application/json.data.orderId
orderId: string;post.requestBody.content.application/json.data.paymentId
paymentId: string;Description
The payment the attempt recorded its money on (pay_).
post.requestBody.content.application/json.data.readerId
readerId: string;Description
The terminal reader (trd_).
post.requestBody.content.application/json.data.status
status: "succeeded" | "failed" | "cancelled";post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "terminal_payment.cancelled";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;terminal_payment.failed#
terminal_payment.failed: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.failed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10363
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.failed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A terminal payment attempt did not take the card: declined, timed out, or failed on the reader. failureCode says why. The order is unchanged; charge it again on a reader, or take another tender.
Description
A terminal payment attempt did not take the card: declined, timed out, or failed on the reader. failureCode says why. The order is unchanged; charge it again on a reader, or take another tender.
Sent to every enabled endpoint in the account that subscribes to `terminal_payment.failed`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.failed";
version: string;
};
};
};Description
A delivery of terminal_payment.failed.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.failed";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.failed";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.amount
amount: number;Description
Integer minor units.
post.requestBody.content.application/json.data.cardBrand
cardBrand: string | null;post.requestBody.content.application/json.data.cardLast4
cardLast4: string | null;post.requestBody.content.application/json.data.currency
currency: string;post.requestBody.content.application/json.data.failureCode
failureCode: string | null;Description
Why the card was not taken, when it was not: the provider's decline or reader code.
post.requestBody.content.application/json.data.failureMessage
failureMessage: string | null;post.requestBody.content.application/json.data.id
id: string;Description
The terminal payment attempt (tpa_).
post.requestBody.content.application/json.data.isTest
isTest: boolean;post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the attempt reached this outcome (ISO-8601).
post.requestBody.content.application/json.data.orderId
orderId: string;post.requestBody.content.application/json.data.paymentId
paymentId: string;Description
The payment the attempt recorded its money on (pay_).
post.requestBody.content.application/json.data.readerId
readerId: string;Description
The terminal reader (trd_).
post.requestBody.content.application/json.data.status
status: "succeeded" | "failed" | "cancelled";post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "terminal_payment.failed";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;terminal_payment.succeeded#
terminal_payment.succeeded: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.succeeded";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10341
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.succeeded";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A card was taken on a terminal reader for an order. The order payment is recorded through the same path as an online payment, so order.confirmed follows for a pending order.
Description
A card was taken on a terminal reader for an order. The order payment is recorded through the same path as an online payment, so order.confirmed follows for a pending order.
Sent to every enabled endpoint in the account that subscribes to `terminal_payment.succeeded`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.succeeded";
version: string;
};
};
};Description
A delivery of terminal_payment.succeeded.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.succeeded";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};
id: string;
type: "terminal_payment.succeeded";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
amount: number;
cardBrand: string | null;
cardLast4: string | null;
currency: string;
failureCode: string | null;
failureMessage: string | null;
id: string;
isTest: boolean;
occurredAt: string;
orderId: string;
paymentId: string;
readerId: string;
status: "succeeded" | "failed" | "cancelled";
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.amount
amount: number;Description
Integer minor units.
post.requestBody.content.application/json.data.cardBrand
cardBrand: string | null;post.requestBody.content.application/json.data.cardLast4
cardLast4: string | null;post.requestBody.content.application/json.data.currency
currency: string;post.requestBody.content.application/json.data.failureCode
failureCode: string | null;Description
Why the card was not taken, when it was not: the provider's decline or reader code.
post.requestBody.content.application/json.data.failureMessage
failureMessage: string | null;post.requestBody.content.application/json.data.id
id: string;Description
The terminal payment attempt (tpa_).
post.requestBody.content.application/json.data.isTest
isTest: boolean;post.requestBody.content.application/json.data.occurredAt
occurredAt: string;Description
When the attempt reached this outcome (ISO-8601).
post.requestBody.content.application/json.data.orderId
orderId: string;post.requestBody.content.application/json.data.paymentId
paymentId: string;Description
The payment the attempt recorded its money on (pay_).
post.requestBody.content.application/json.data.readerId
readerId: string;Description
The terminal reader (trd_).
post.requestBody.content.application/json.data.status
status: "succeeded" | "failed" | "cancelled";post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "terminal_payment.succeeded";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;ticket.issued#
ticket.issued: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
orderId: string;
passCount: number;
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];
};
id: string;
type: "ticket.issued";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10143
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
orderId: string;
passCount: number;
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];
};
id: string;
type: "ticket.issued";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};Tickets/passes were issued for an order.
Description
Tickets/passes were issued for an order.
Sent to every enabled endpoint in the account that subscribes to `ticket.issued`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
orderId: string;
passCount: number;
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];
};
id: string;
type: "ticket.issued";
version: string;
};
};
};Description
A delivery of ticket.issued.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
orderId: string;
passCount: number;
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];
};
id: string;
type: "ticket.issued";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
orderId: string;
passCount: number;
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];
};
id: string;
type: "ticket.issued";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
orderId: string;
passCount: number;
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.orderId
orderId: string;post.requestBody.content.application/json.data.passCount
passCount: number;post.requestBody.content.application/json.data.passes
passes: {
id: string;
occurrenceId: string | null;
status: string | null;
ticketTypeId: string | null;
}[];post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "ticket.issued";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;ticket.redeemed#
ticket.redeemed: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
entitlementId: string | null;
passId: string;
redemptionId: string;
};
id: string;
type: "ticket.redeemed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10121
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
entitlementId: string | null;
passId: string;
redemptionId: string;
};
id: string;
type: "ticket.redeemed";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A ticket/pass was scanned and redeemed.
Description
A ticket/pass was scanned and redeemed.
Sent to every enabled endpoint in the account that subscribes to `ticket.redeemed`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
entitlementId: string | null;
passId: string;
redemptionId: string;
};
id: string;
type: "ticket.redeemed";
version: string;
};
};
};Description
A delivery of ticket.redeemed.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
entitlementId: string | null;
passId: string;
redemptionId: string;
};
id: string;
type: "ticket.redeemed";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
entitlementId: string | null;
passId: string;
redemptionId: string;
};
id: string;
type: "ticket.redeemed";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
entitlementId: string | null;
passId: string;
redemptionId: string;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.entitlementId
entitlementId: string | null;post.requestBody.content.application/json.data.passId
passId: string;post.requestBody.content.application/json.data.redemptionId
redemptionId: string;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "ticket.redeemed";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;venue.updated#
venue.updated: {
delete?: undefined;
get?: undefined;
head?: undefined;
options?: undefined;
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};
patch?: undefined;
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: string[];
id: string;
organisationId: string;
updatedAt: string;
};
id: string;
type: "venue.updated";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};
put?: undefined;
trace?: undefined;
};Defined in: generated/types.ts:10253
delete?#
optional delete: undefined;get?#
optional get: undefined;head?#
optional head: undefined;options?#
optional options: undefined;parameters#
parameters: {
cookie?: undefined;
header?: undefined;
path?: undefined;
query?: undefined;
};parameters.cookie?
optional cookie: undefined;parameters.header?
optional header: undefined;parameters.path?
optional path: undefined;parameters.query?
optional query: undefined;patch?#
optional patch: undefined;post#
post: {
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};
requestBody?: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: string[];
id: string;
organisationId: string;
updatedAt: string;
};
id: string;
type: "venue.updated";
version: string;
};
};
};
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};
};A venue was edited. The events at it that are on sale also receive event.updated with the venue hint.
Description
A venue was edited. The events at it that are on sale also receive event.updated with the venue hint.
Sent to every enabled endpoint in the account that subscribes to `venue.updated`. Deliveries are at-least-once and are retried with backoff until a 2xx, so handlers must be idempotent on `Ticketlayer-Event-Id`. Verify `Ticketlayer-Signature` before trusting the body.post.parameters
parameters: {
cookie?: undefined;
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};
path?: undefined;
query?: undefined;
};post.parameters.cookie?
optional cookie: undefined;post.parameters.header
header: {
Ticketlayer-Delivery-Id: string;
Ticketlayer-Event-Id: string;
Ticketlayer-Event-Type: string;
Ticketlayer-Signature: string;
};post.parameters.header.Ticketlayer-Delivery-Id
Ticketlayer-Delivery-Id: string;Description
Same value as id in the body.
post.parameters.header.Ticketlayer-Event-Id
Ticketlayer-Event-Id: string;Description
The id of the source event. Stable across endpoints and retries - deduplicate on it.
post.parameters.header.Ticketlayer-Event-Type
Ticketlayer-Event-Type: string;Description
Same value as type in the body.
post.parameters.header.Ticketlayer-Signature
Ticketlayer-Signature: string;Description
HMAC-SHA256 of the raw body, keyed by the endpoint secret, with the timestamp it was signed at. Verify this before trusting the body.
post.parameters.path?
optional path: undefined;post.parameters.query?
optional query: undefined;post.requestBody?
optional requestBody: {
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: string[];
id: string;
organisationId: string;
updatedAt: string;
};
id: string;
type: "venue.updated";
version: string;
};
};
};Description
A delivery of venue.updated.
post.requestBody.content
content: {
application/json: {
createdAt: string;
data: {
accountId: string;
changes: string[];
id: string;
organisationId: string;
updatedAt: string;
};
id: string;
type: "venue.updated";
version: string;
};
};post.requestBody.content.application/json
application/json: {
createdAt: string;
data: {
accountId: string;
changes: string[];
id: string;
organisationId: string;
updatedAt: string;
};
id: string;
type: "venue.updated";
version: string;
};post.requestBody.content.application/json.createdAt
createdAt: string;Format: date-time
Description
When the delivery was enqueued (ISO-8601).
post.requestBody.content.application/json.data
data: {
accountId: string;
changes: string[];
id: string;
organisationId: string;
updatedAt: string;
};post.requestBody.content.application/json.data.accountId
accountId: string;post.requestBody.content.application/json.data.changes
changes: string[];Description
The venue fields that changed, by their API names (for example name, streetAddress).
post.requestBody.content.application/json.data.id
id: string;post.requestBody.content.application/json.data.organisationId
organisationId: string;post.requestBody.content.application/json.data.updatedAt
updatedAt: string;post.requestBody.content.application/json.id
id: string;Description
Delivery id. Unique per (endpoint, event); retries reuse it.
Example
whd_01J8ZQ2R6Mpost.requestBody.content.application/json.type
type: "venue.updated";Description
The public event type.
post.requestBody.content.application/json.version
version: string;Description
The payload version this delivery is shaped to: the version the endpoint pinned when it was created, not necessarily the latest.
Example
2026-10-02post.responses
responses: {
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};
};post.responses.200
200: {
content?: undefined;
headers: {
[name: string]: unknown;
};
};Description
Acknowledged. Any 2xx marks the delivery delivered; anything else is retried.
post.responses.200.content?
optional content: undefined;post.responses.200.headers
headers: {
[name: string]: unknown;
};Index Signature
[name: string]: unknownput?#
optional put: undefined;trace?#
optional trace: undefined;