Skip to content
Docs
Reference

Interface: webhooks

Interface: webhooks in @ticketlayer/backstage.

@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;
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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

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_01J8ZQ2R6M
post.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-02
post.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]: unknown

put?#

optional put: undefined;

trace?#

optional trace: undefined;