BackstageClient.carts
BackstageClient.carts in @ticketlayer/backstage.
@ticketlayer/backstage / BackstageClient / carts
carts: {
addItem: (cartId: string, request: {
categoryId: string;
eventLayoutAreaId?: string;
eventLayoutSeatIds?: string[];
eventOccurrenceId: string;
quantity?: number;
ticketTypeId: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
addUnlock: (cartId: string, request: {
actAsTags?: string[];
reason: string;
targets?: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
applyCode: (cartId: string, request: {
code?: string;
codeId?: string;
typed?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
changeSeat: (cartId: string, occurrenceId: string, seat: string, request: {
ticketTypeId: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
checkout: (cartId: string, request: {
customerId?: string;
customerNotes?: string;
discount?: {
amount?: number;
label?: string;
percent?: number;
reason: string;
};
formResponses?: Record<string, any>;
metadata?: Record<string, any>;
returnUrl?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
checkout: {
capabilitiesApplied: ("redirect" | "complete_form" | "await_approval")[];
deferred: {
fallback: string;
key: string;
requirement: string;
}[];
expiresAt: string | null;
nextAction: | {
awaitApproval: | {
expiresAt: string | null;
message: string;
orderId: string;
pollAfterSeconds: number;
taskId: string | null;
}
| null;
completeForm: | {
errors: {
code: ...;
index: ...;
key: ...;
lineId: ...;
message: ...;
source: ...;
}[];
form: {
id: string;
questions: ...[];
version: number;
};
}
| null;
payment: | {
amount: number;
connectedAccountId: string | null;
currency: string;
externalPaymentUrl: string | null;
orderId: string;
paymentId: string | null;
paymentType: string | null;
providerClientSecret: string | null;
providerType: string | null;
publishableKey: string | null;
status: string | null;
}
| null;
redirect: | {
expiresAt: string;
reason: "complete_form" | "await_approval" | "payment" | "hook_input";
returnUrl: string;
url: string;
}
| null;
type: "redirect" | "complete_form" | "await_approval" | "payment";
}
| null;
status: | "processing"
| "complete"
| "requires_input"
| "requires_approval"
| "requires_payment";
};
order: | {
accountId: string;
createdAt: string;
currency: string;
customerId: string | null;
expiresAt: string | null;
id: string;
items: {
description: string | null;
id: string;
name: string;
orderId: string;
quantity: number;
subtotal: number;
type: string;
unitPrice: number;
}[];
orderNumber: string;
organisationId: string;
paymentStatus: string;
status: string;
subtotal: number;
total: number;
totalFees: number;
totalPaid: number;
totalTax: number;
updatedAt: string;
}
| null;
}>;
choose: (cartId: string, request: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
shipTo?: | {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
}
| null;
}, requestOptions?: RequestOptions) => Promise<{
cartId: string;
choices: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
};
currency: string | null;
fees: {
amount: number;
basis: "per_ticket" | "per_order";
code: string;
display: "included" | "separate";
kind: string;
label: string;
optional: boolean;
refundable: "always" | "never" | "until_fulfilled" | null;
taxCategory: string | null;
waivedFrom: number | null;
}[];
headline: {
allIn: boolean;
amount: number;
};
lines: {
discount: number;
fees: number;
itemId: string;
quantity: number;
tax: number;
total: number;
unitPrice: number;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
taxes: {
category: string;
inclusive: boolean;
jurisdiction: string;
rate: string | null;
supplier: string;
tax: number;
taxable: number;
treatment: "standard" | "reduced" | "zero" | "exempt" | "outside_scope";
}[];
totals: {
discounts: number;
fees: number;
giftCards: number;
tax: number;
tickets: number;
total: number;
};
}>;
create: (request: {
customerId?: string;
metadata?: Record<string, any>;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
get: (cartId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
getCheckout: (cartId: string, options?: {
returnUrl?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
checkout: {
capabilitiesApplied: ("redirect" | "complete_form" | "await_approval")[];
deferred: {
fallback: string;
key: string;
requirement: string;
}[];
expiresAt: string | null;
nextAction: | {
awaitApproval: | {
expiresAt: string | null;
message: string;
orderId: string;
pollAfterSeconds: number;
taskId: string | null;
}
| null;
completeForm: | {
errors: {
code: ...;
index: ...;
key: ...;
lineId: ...;
message: ...;
source: ...;
}[];
form: {
id: string;
questions: ...[];
version: number;
};
}
| null;
payment: | {
amount: number;
connectedAccountId: string | null;
currency: string;
externalPaymentUrl: string | null;
orderId: string;
paymentId: string | null;
paymentType: string | null;
providerClientSecret: string | null;
providerType: string | null;
publishableKey: string | null;
status: string | null;
}
| null;
redirect: | {
expiresAt: string;
reason: "complete_form" | "await_approval" | "payment" | "hook_input";
returnUrl: string;
url: string;
}
| null;
type: "redirect" | "complete_form" | "await_approval" | "payment";
}
| null;
status: | "processing"
| "complete"
| "requires_input"
| "requires_approval"
| "requires_payment";
};
order: | {
accountId: string;
createdAt: string;
currency: string;
customerId: string | null;
expiresAt: string | null;
id: string;
items: {
description: string | null;
id: string;
name: string;
orderId: string;
quantity: number;
subtotal: number;
type: string;
unitPrice: number;
}[];
orderNumber: string;
organisationId: string;
paymentStatus: string;
status: string;
subtotal: number;
total: number;
totalFees: number;
totalPaid: number;
totalTax: number;
updatedAt: string;
}
| null;
}>;
holders: (cartId: string, requestOptions?: RequestOptions) => Promise<{
addOns: {
cartItemId: string;
eligibleHolders: {
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
};
kind: "person" | "vehicle" | "group";
label: string | null;
remaining: number | null;
}[];
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
how: "automatic" | "explicit" | "unassigned";
ticketTypeId: string;
unitIndex: number;
}[];
existingHolders: {
eventId: string;
kind: "person" | "vehicle" | "group";
label: string;
orderId: string;
slotId: string;
}[];
holders: {
cartItemId: string;
email: string | null;
kind: "person" | "vehicle" | "group";
label: string;
name: string | null;
naming: {
changesCloseAt: string | null;
maxNameChanges: number | null;
nameChangesAllowed: boolean;
namesCloseAt: string | null;
policy: "none" | "at_checkout" | "before_deadline" | "id_at_gate";
required: boolean;
transfersAllowed: boolean;
};
ticketTypeId: string;
unitIndex: number;
}[];
}>;
options: (cartId: string, requestOptions?: RequestOptions) => Promise<{
cartId: string;
delivery: {
available: boolean;
chosen: boolean;
closesAt: string | null;
default: boolean;
fee: number;
kind: "digital" | "physical";
label: string;
method: string;
needsAddress: boolean;
passId: string | null;
reason: string | null;
}[];
payment: {
available: boolean;
chosen: boolean;
closesAt: string | null;
fee: number;
label: string;
method: string;
pending: boolean;
reason: string | null;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
surface: "box_office" | "online";
total: number;
}>;
quote: (cartId: string, requestOptions?: RequestOptions) => Promise<{
cartId: string;
choices: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
};
currency: string | null;
fees: {
amount: number;
basis: "per_ticket" | "per_order";
code: string;
display: "included" | "separate";
kind: string;
label: string;
optional: boolean;
refundable: "always" | "never" | "until_fulfilled" | null;
taxCategory: string | null;
waivedFrom: number | null;
}[];
headline: {
allIn: boolean;
amount: number;
};
lines: {
discount: number;
fees: number;
itemId: string;
quantity: number;
tax: number;
total: number;
unitPrice: number;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
taxes: {
category: string;
inclusive: boolean;
jurisdiction: string;
rate: string | null;
supplier: string;
tax: number;
taxable: number;
treatment: "standard" | "reduced" | "zero" | "exempt" | "outside_scope";
}[];
totals: {
discounts: number;
fees: number;
giftCards: number;
tax: number;
tickets: number;
total: number;
};
}>;
releaseSeat: (cartId: string, occurrenceId: string, seat: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
removeCode: (cartId: string, codeId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
removeItem: (cartId: string, itemId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
removeUnlock: (cartId: string, unlockId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
reserveSeats: (cartId: string, request: {
acceptSingleSeatGap?: boolean;
eventOccurrenceId: string;
planVersion?: string;
seats: number[];
ticketTypeId?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;
setHolders: (cartId: string, request: {
addOns?: {
cartItemId: string;
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
unitIndex: number;
}[];
holders?: {
cartItemId: string;
email?: string | null;
name?: string | null;
unitIndex: number;
}[];
}, requestOptions?: RequestOptions) => Promise<{
addOns: {
cartItemId: string;
eligibleHolders: {
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
};
kind: "person" | "vehicle" | "group";
label: string | null;
remaining: number | null;
}[];
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
how: "automatic" | "explicit" | "unassigned";
ticketTypeId: string;
unitIndex: number;
}[];
existingHolders: {
eventId: string;
kind: "person" | "vehicle" | "group";
label: string;
orderId: string;
slotId: string;
}[];
holders: {
cartItemId: string;
email: string | null;
kind: "person" | "vehicle" | "group";
label: string;
name: string | null;
naming: {
changesCloseAt: string | null;
maxNameChanges: number | null;
nameChangesAllowed: boolean;
namesCloseAt: string | null;
policy: "none" | "at_checkout" | "before_deadline" | "id_at_gate";
required: boolean;
transfersAllowed: boolean;
};
ticketTypeId: string;
unitIndex: number;
}[];
}>;
};Defined in: client.ts:7812
Carts methods
addItem()#
addItem: (cartId: string, request: {
categoryId: string;
eventLayoutAreaId?: string;
eventLayoutSeatIds?: string[];
eventOccurrenceId: string;
quantity?: number;
ticketTypeId: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Add cart item Add an item to the cart, taking a real inventory reservation. The event must be listed on the cart's channel.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
request | { categoryId: string; eventLayoutAreaId?: string; eventLayoutSeatIds?: string[]; eventOccurrenceId: string; quantity?: number; ticketTypeId: string; } |
request.categoryId | string |
request.eventLayoutAreaId? | string |
request.eventLayoutSeatIds? | string[] |
request.eventOccurrenceId? | string |
request.quantity? | number |
request.ticketTypeId? | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
addStaffCartItem
addUnlock()#
addUnlock: (cartId: string, request: {
actAsTags?: string[];
reason: string;
targets?: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Unlock a price for this sale Add a staff unlock to the cart: every locked or hidden price its targets cover, or that one of its tags would unlock, becomes buyable for this cart and the order it becomes, and for nothing else. Also opens a sale window whose audience includes one of its tags, for this cart. Needs orders.unlock_prices on the channel's account, as a person; the reason is required and the order records who applied it, what it opened and why.
Parameters#
| Parameter | Type | Description |
|---|---|---|
cartId | string | - |
request | { actAsTags?: string[]; reason: string; targets?: ( | { eventId: string; type: "event"; } | { occurrenceId: string; type: "occurrence"; } | { ticketTypeId: string; type: "ticket_type"; } | { categoryId: string; ticketTypeId: string; type: "price_cell"; })[]; } | - |
request.actAsTags? | string[] | Description Customer tags (slugs) the cart counts as holding for this sale: opens every price and every sale window they would open. Nothing is granted to any customer Example [ "member" ] |
request.reason? | string | Description Why, recorded on the order and in its audit log Example Comp for the lighting designer |
request.targets? | ( | { eventId: string; type: "event"; } | { occurrenceId: string; type: "occurrence"; } | { ticketTypeId: string; type: "ticket_type"; } | { categoryId: string; ticketTypeId: string; type: "price_cell"; })[] | Description What it opens. At least one target or one tag to act as |
requestOptions? | RequestOptions | - |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
addStaffCartUnlock
applyCode()#
applyCode: (cartId: string, request: {
code?: string;
codeId?: string;
typed?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Apply a code to the cart
Apply a code (TKT-343) to the cart: its effects - prices it unlocks, tags it acts as, its discount and its fee waiver - apply to this cart and the order it becomes, and to nothing else; nothing is granted to any customer. By code, the text the buyer typed: anyone who may sell through the channel, and every attempt counts against the code attempt limits (10 per cart and 30 per caller per channel in 15 minutes; 429 CODE_ATTEMPTS_EXCEEDED, also when the attempt cannot be counted), unless the caller holds codes.read. By codeId, as a counter applies the code a buyer meant after finding it: needs codes.read on the channel's account, and typed records what the buyer typed. The code must be usable on the channel now (404 CODE_NOT_FOUND, 400 CODE_NOT_YET_VALID or CODE_EXPIRED, 409 CODE_EXHAUSTED) and not already applied (409 CODE_ALREADY_APPLIED). Its use is counted when the order is made.
Parameters#
| Parameter | Type | Description |
|---|---|---|
cartId | string | - |
request | { code?: string; codeId?: string; typed?: string; } | - |
request.code? | string | Description The text the buyer typed. Counts against the code attempt limits Example BEST2FORYOU |
request.codeId? | string | Description The code's id, as a counter applies the code a buyer meant after finding it. Needs codes.read Example cod_ab12cd34 |
request.typed? | string | Description With codeId: what the buyer typed, recorded on the order beside the code applied Example BESTTWOFORYOU |
requestOptions? | RequestOptions | - |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
applyStaffCartCode
changeSeat()#
changeSeat: (cartId: string, occurrenceId: string, seat: string, request: {
ticketTypeId: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Change a seat's ticket type Change a seat line's ticket type, repriced, the reservation untouched (422 TICKET_TYPE_NOT_FOR_SEAT when the type is not on offer for the seat's category on the channel).
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
occurrenceId | string |
seat | string |
request | { ticketTypeId: string; } |
request.ticketTypeId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
changeStaffCartSeat
checkout()#
checkout: (cartId: string, request: {
customerId?: string;
customerNotes?: string;
discount?: {
amount?: number;
label?: string;
percent?: number;
reason: string;
};
formResponses?: Record<string, any>;
metadata?: Record<string, any>;
returnUrl?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
checkout: {
capabilitiesApplied: ("redirect" | "complete_form" | "await_approval")[];
deferred: {
fallback: string;
key: string;
requirement: string;
}[];
expiresAt: string | null;
nextAction: | {
awaitApproval: | {
expiresAt: string | null;
message: string;
orderId: string;
pollAfterSeconds: number;
taskId: string | null;
}
| null;
completeForm: | {
errors: {
code: ...;
index: ...;
key: ...;
lineId: ...;
message: ...;
source: ...;
}[];
form: {
id: string;
questions: ...[];
version: number;
};
}
| null;
payment: | {
amount: number;
connectedAccountId: string | null;
currency: string;
externalPaymentUrl: string | null;
orderId: string;
paymentId: string | null;
paymentType: string | null;
providerClientSecret: string | null;
providerType: string | null;
publishableKey: string | null;
status: string | null;
}
| null;
redirect: | {
expiresAt: string;
reason: "complete_form" | "await_approval" | "payment" | "hook_input";
returnUrl: string;
url: string;
}
| null;
type: "redirect" | "complete_form" | "await_approval" | "payment";
}
| null;
status: | "processing"
| "complete"
| "requires_input"
| "requires_approval"
| "requires_payment";
};
order: | {
accountId: string;
createdAt: string;
currency: string;
customerId: string | null;
expiresAt: string | null;
id: string;
items: {
description: string | null;
id: string;
name: string;
orderId: string;
quantity: number;
subtotal: number;
type: string;
unitPrice: number;
}[];
orderNumber: string;
organisationId: string;
paymentStatus: string;
status: string;
subtotal: number;
total: number;
totalFees: number;
totalPaid: number;
totalTax: number;
updatedAt: string;
}
| null;
}>;Checkout cart
Check the cart out under the cart's channel. From API version 2026-10-02 this is a loop: the answer's checkout says where the checkout is (requires_input, requires_approval, requires_payment, processing, complete) and what the client does next (nextAction), and the client does it and calls again until complete. A requirement the client cannot handle (TL-Client-Capabilities) is sent to the hosted completion page if the client declared redirect, and otherwise takes its fallback; a block fallback answers 422 REQUIREMENTS_NOT_MET. Safe to repeat: a cart already checked out answers its checkout as it stands, and an expired or cancelled order answers 409 CHECKOUT_CLOSED. Earlier versions answer as before, without checkout. Manual discounts require the orders.applydiscount permission.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
request | { customerId?: string; customerNotes?: string; discount?: { amount?: number; label?: string; percent?: number; reason: string; }; formResponses?: Record<string, any>; metadata?: Record<string, any>; returnUrl?: string; } |
request.customerId? | string |
request.customerNotes? | string |
request.discount? | { amount?: number; label?: string; percent?: number; reason: string; } |
request.discount.amount? | number |
request.discount.label? | string |
request.discount.percent? | number |
request.discount.reason? | string |
request.formResponses? | Record<string, any> |
request.metadata? | Record<string, any> |
request.returnUrl? | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
checkout: {
capabilitiesApplied: ("redirect" | "complete_form" | "await_approval")[];
deferred: {
fallback: string;
key: string;
requirement: string;
}[];
expiresAt: string | null;
nextAction: | {
awaitApproval: | {
expiresAt: string | null;
message: string;
orderId: string;
pollAfterSeconds: number;
taskId: string | null;
}
| null;
completeForm: | {
errors: {
code: ...;
index: ...;
key: ...;
lineId: ...;
message: ...;
source: ...;
}[];
form: {
id: string;
questions: ...[];
version: number;
};
}
| null;
payment: | {
amount: number;
connectedAccountId: string | null;
currency: string;
externalPaymentUrl: string | null;
orderId: string;
paymentId: string | null;
paymentType: string | null;
providerClientSecret: string | null;
providerType: string | null;
publishableKey: string | null;
status: string | null;
}
| null;
redirect: | {
expiresAt: string;
reason: "complete_form" | "await_approval" | "payment" | "hook_input";
returnUrl: string;
url: string;
}
| null;
type: "redirect" | "complete_form" | "await_approval" | "payment";
}
| null;
status: | "processing"
| "complete"
| "requires_input"
| "requires_approval"
| "requires_payment";
};
order: | {
accountId: string;
createdAt: string;
currency: string;
customerId: string | null;
expiresAt: string | null;
id: string;
items: {
description: string | null;
id: string;
name: string;
orderId: string;
quantity: number;
subtotal: number;
type: string;
unitPrice: number;
}[];
orderNumber: string;
organisationId: string;
paymentStatus: string;
status: string;
subtotal: number;
total: number;
totalFees: number;
totalPaid: number;
totalTax: number;
updatedAt: string;
}
| null;
}>
Operation Id#
checkoutStaffCart
choose()#
choose: (cartId: string, request: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
shipTo?: | {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
}
| null;
}, requestOptions?: RequestOptions) => Promise<{
cartId: string;
choices: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
};
currency: string | null;
fees: {
amount: number;
basis: "per_ticket" | "per_order";
code: string;
display: "included" | "separate";
kind: string;
label: string;
optional: boolean;
refundable: "always" | "never" | "until_fulfilled" | null;
taxCategory: string | null;
waivedFrom: number | null;
}[];
headline: {
allIn: boolean;
amount: number;
};
lines: {
discount: number;
fees: number;
itemId: string;
quantity: number;
tax: number;
total: number;
unitPrice: number;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
taxes: {
category: string;
inclusive: boolean;
jurisdiction: string;
rate: string | null;
supplier: string;
tax: number;
taxable: number;
treatment: "standard" | "reduced" | "zero" | "exempt" | "outside_scope";
}[];
totals: {
discounts: number;
fees: number;
giftCards: number;
tax: number;
tickets: number;
total: number;
};
}>;Choose delivery and payment Set the cart's delivery method, payment method, and the card's funding once known; the quote re-prices and is returned. A payment method the cart is not offered gets 409 PAYMENT_METHOD_NOT_OFFERED, a delivery method 409 DELIVERY_METHOD_NOT_OFFERED.
Parameters#
| Parameter | Type | Description |
|---|---|---|
cartId | string | - |
request | { cardFunding?: "credit" | "debit" | "prepaid" | null; deliveryMethod?: string | null; paymentMethod?: string | null; shipTo?: | { city: string; country: string; line1: string; line2?: string | null; name: string; phone?: string | null; postalCode: string; region?: string | null; } | null; } | - |
request.cardFunding? | "credit" | "debit" | "prepaid" | null | Description The card's funding, once the processor reports it after card entry; a credit-only surcharge waits for it |
request.deliveryMethod? | string | null | Description How the tickets reach the buyer: one of the options' available delivery methods. A delivery fee, where one applies, follows it; none chosen is the options' default (email) Example email |
request.paymentMethod? | string | null | Description How the buyer will pay: one of the options' available payment methods. A surcharge, where one applies, follows it Example card |
request.shipTo? | | { city: string; country: string; line1: string; line2?: string | null; name: string; phone?: string | null; postalCode: string; region?: string | null; } | null | Description Where a physical method (post) sends to. Checkout needs one when the delivery method needs an address (409 SHIP_TO_REQUIRED), and post to a country the policies exclude is not offered. Null clears it |
requestOptions? | RequestOptions | - |
Returns#
Promise<{
cartId: string;
choices: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
};
currency: string | null;
fees: {
amount: number;
basis: "per_ticket" | "per_order";
code: string;
display: "included" | "separate";
kind: string;
label: string;
optional: boolean;
refundable: "always" | "never" | "until_fulfilled" | null;
taxCategory: string | null;
waivedFrom: number | null;
}[];
headline: {
allIn: boolean;
amount: number;
};
lines: {
discount: number;
fees: number;
itemId: string;
quantity: number;
tax: number;
total: number;
unitPrice: number;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
taxes: {
category: string;
inclusive: boolean;
jurisdiction: string;
rate: string | null;
supplier: string;
tax: number;
taxable: number;
treatment: "standard" | "reduced" | "zero" | "exempt" | "outside_scope";
}[];
totals: {
discounts: number;
fees: number;
giftCards: number;
tax: number;
tickets: number;
total: number;
};
}>
Operation Id#
setStaffCartChoices
create()#
create: (request: {
customerId?: string;
metadata?: Record<string, any>;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Create cart Create a cart on the channel named in X-Ticketlayer-Channel (required) as a staff actor. Trusted actors may act on behalf of a customer they have looked up. Answers 400 CHANNEL_REQUIRED when no channel is named.
Parameters#
| Parameter | Type |
|---|---|
request | { customerId?: string; metadata?: Record<string, any>; } |
request.customerId? | string |
request.metadata? | Record<string, any> |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
createStaffCart
get()#
get: (cartId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Get cart Get a cart with its items. The channel is the cart's own; X-Ticketlayer-Channel, when sent, must agree with it (400 CHANNEL_MISMATCH otherwise).
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
getStaffCart
getCheckout()#
getCheckout: (cartId: string, options?: {
returnUrl?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
checkout: {
capabilitiesApplied: ("redirect" | "complete_form" | "await_approval")[];
deferred: {
fallback: string;
key: string;
requirement: string;
}[];
expiresAt: string | null;
nextAction: | {
awaitApproval: | {
expiresAt: string | null;
message: string;
orderId: string;
pollAfterSeconds: number;
taskId: string | null;
}
| null;
completeForm: | {
errors: {
code: ...;
index: ...;
key: ...;
lineId: ...;
message: ...;
source: ...;
}[];
form: {
id: string;
questions: ...[];
version: number;
};
}
| null;
payment: | {
amount: number;
connectedAccountId: string | null;
currency: string;
externalPaymentUrl: string | null;
orderId: string;
paymentId: string | null;
paymentType: string | null;
providerClientSecret: string | null;
providerType: string | null;
publishableKey: string | null;
status: string | null;
}
| null;
redirect: | {
expiresAt: string;
reason: "complete_form" | "await_approval" | "payment" | "hook_input";
returnUrl: string;
url: string;
}
| null;
type: "redirect" | "complete_form" | "await_approval" | "payment";
}
| null;
status: | "processing"
| "complete"
| "requires_input"
| "requires_approval"
| "requires_payment";
};
order: | {
accountId: string;
createdAt: string;
currency: string;
customerId: string | null;
expiresAt: string | null;
id: string;
items: {
description: string | null;
id: string;
name: string;
orderId: string;
quantity: number;
subtotal: number;
type: string;
unitPrice: number;
}[];
orderNumber: string;
organisationId: string;
paymentStatus: string;
status: string;
subtotal: number;
total: number;
totalFees: number;
totalPaid: number;
totalTax: number;
updatedAt: string;
}
| null;
}>;Get cart checkout
The cart's checkout as it stands, in the same shape POST /cart/{cartId}/checkout answers: what a client reads after the hosted completion page returns the buyer, and what it polls while an approval or a payment is awaited. It changes nothing, except that a redirect it answers makes a fresh completion link. 409 CHECKOUT_NOT_STARTED for a cart that has not been checked out and has nothing to answer first.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
options? | { returnUrl?: string; } |
options.returnUrl? | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
checkout: {
capabilitiesApplied: ("redirect" | "complete_form" | "await_approval")[];
deferred: {
fallback: string;
key: string;
requirement: string;
}[];
expiresAt: string | null;
nextAction: | {
awaitApproval: | {
expiresAt: string | null;
message: string;
orderId: string;
pollAfterSeconds: number;
taskId: string | null;
}
| null;
completeForm: | {
errors: {
code: ...;
index: ...;
key: ...;
lineId: ...;
message: ...;
source: ...;
}[];
form: {
id: string;
questions: ...[];
version: number;
};
}
| null;
payment: | {
amount: number;
connectedAccountId: string | null;
currency: string;
externalPaymentUrl: string | null;
orderId: string;
paymentId: string | null;
paymentType: string | null;
providerClientSecret: string | null;
providerType: string | null;
publishableKey: string | null;
status: string | null;
}
| null;
redirect: | {
expiresAt: string;
reason: "complete_form" | "await_approval" | "payment" | "hook_input";
returnUrl: string;
url: string;
}
| null;
type: "redirect" | "complete_form" | "await_approval" | "payment";
}
| null;
status: | "processing"
| "complete"
| "requires_input"
| "requires_approval"
| "requires_payment";
};
order: | {
accountId: string;
createdAt: string;
currency: string;
customerId: string | null;
expiresAt: string | null;
id: string;
items: {
description: string | null;
id: string;
name: string;
orderId: string;
quantity: number;
subtotal: number;
type: string;
unitPrice: number;
}[];
orderNumber: string;
organisationId: string;
paymentStatus: string;
status: string;
subtotal: number;
total: number;
totalFees: number;
totalPaid: number;
totalTax: number;
updatedAt: string;
}
| null;
}>
Operation Id#
getStaffCartCheckout
holders()#
holders: (cartId: string, requestOptions?: RequestOptions) => Promise<{
addOns: {
cartItemId: string;
eligibleHolders: {
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
};
kind: "person" | "vehicle" | "group";
label: string | null;
remaining: number | null;
}[];
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
how: "automatic" | "explicit" | "unassigned";
ticketTypeId: string;
unitIndex: number;
}[];
existingHolders: {
eventId: string;
kind: "person" | "vehicle" | "group";
label: string;
orderId: string;
slotId: string;
}[];
holders: {
cartItemId: string;
email: string | null;
kind: "person" | "vehicle" | "group";
label: string;
name: string | null;
naming: {
changesCloseAt: string | null;
maxNameChanges: number | null;
nameChangesAllowed: boolean;
namesCloseAt: string | null;
policy: "none" | "at_checkout" | "before_deadline" | "id_at_gate";
required: boolean;
transfersAllowed: boolean;
};
ticketTypeId: string;
unitIndex: number;
}[];
}>;Holders and add-ons on a cart Who each unit is for before checkout: a holder ("Guest 1" until named) per unit of a ticket type that creates one, and where each add-on goes, placed by hand, automatically (one holder, or one each) or not yet. Lists the buyer's holders from earlier bookings that add-ons can also go to.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
addOns: {
cartItemId: string;
eligibleHolders: {
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
};
kind: "person" | "vehicle" | "group";
label: string | null;
remaining: number | null;
}[];
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
how: "automatic" | "explicit" | "unassigned";
ticketTypeId: string;
unitIndex: number;
}[];
existingHolders: {
eventId: string;
kind: "person" | "vehicle" | "group";
label: string;
orderId: string;
slotId: string;
}[];
holders: {
cartItemId: string;
email: string | null;
kind: "person" | "vehicle" | "group";
label: string;
name: string | null;
naming: {
changesCloseAt: string | null;
maxNameChanges: number | null;
nameChangesAllowed: boolean;
namesCloseAt: string | null;
policy: "none" | "at_checkout" | "before_deadline" | "id_at_gate";
required: boolean;
transfersAllowed: boolean;
};
ticketTypeId: string;
unitIndex: number;
}[];
}>
Operation Id#
getStaffCartHolders
options()#
options: (cartId: string, requestOptions?: RequestOptions) => Promise<{
cartId: string;
delivery: {
available: boolean;
chosen: boolean;
closesAt: string | null;
default: boolean;
fee: number;
kind: "digital" | "physical";
label: string;
method: string;
needsAddress: boolean;
passId: string | null;
reason: string | null;
}[];
payment: {
available: boolean;
chosen: boolean;
closesAt: string | null;
fee: number;
label: string;
method: string;
pending: boolean;
reason: string | null;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
surface: "box_office" | "online";
total: number;
}>;Delivery and payment options
The delivery and payment methods this cart can choose on its channel's surface, each with what choosing it adds to the total and why an unavailable one is not (a method closed by its cut-off is listed, unavailable, with closesAt). Staff are offered invoice and bank transfer, which a buyer never is.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cartId: string;
delivery: {
available: boolean;
chosen: boolean;
closesAt: string | null;
default: boolean;
fee: number;
kind: "digital" | "physical";
label: string;
method: string;
needsAddress: boolean;
passId: string | null;
reason: string | null;
}[];
payment: {
available: boolean;
chosen: boolean;
closesAt: string | null;
fee: number;
label: string;
method: string;
pending: boolean;
reason: string | null;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
surface: "box_office" | "online";
total: number;
}>
Operation Id#
getStaffCartOptions
quote()#
quote: (cartId: string, requestOptions?: RequestOptions) => Promise<{
cartId: string;
choices: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
};
currency: string | null;
fees: {
amount: number;
basis: "per_ticket" | "per_order";
code: string;
display: "included" | "separate";
kind: string;
label: string;
optional: boolean;
refundable: "always" | "never" | "until_fulfilled" | null;
taxCategory: string | null;
waivedFrom: number | null;
}[];
headline: {
allIn: boolean;
amount: number;
};
lines: {
discount: number;
fees: number;
itemId: string;
quantity: number;
tax: number;
total: number;
unitPrice: number;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
taxes: {
category: string;
inclusive: boolean;
jurisdiction: string;
rate: string | null;
supplier: string;
tax: number;
taxable: number;
treatment: "standard" | "reduced" | "zero" | "exempt" | "outside_scope";
}[];
totals: {
discounts: number;
fees: number;
giftCards: number;
tax: number;
tickets: number;
total: number;
};
}>;Quote the cart The cart priced with the choices made so far. Checkout charges exactly this total for the same cart and choices.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cartId: string;
choices: {
cardFunding?: "credit" | "debit" | "prepaid" | null;
deliveryMethod?: string | null;
paymentMethod?: string | null;
};
currency: string | null;
fees: {
amount: number;
basis: "per_ticket" | "per_order";
code: string;
display: "included" | "separate";
kind: string;
label: string;
optional: boolean;
refundable: "always" | "never" | "until_fulfilled" | null;
taxCategory: string | null;
waivedFrom: number | null;
}[];
headline: {
allIn: boolean;
amount: number;
};
lines: {
discount: number;
fees: number;
itemId: string;
quantity: number;
tax: number;
total: number;
unitPrice: number;
}[];
shipTo: {
city: string;
country: string;
line1: string;
line2?: string | null;
name: string;
phone?: string | null;
postalCode: string;
region?: string | null;
} & Record<string, never>;
taxes: {
category: string;
inclusive: boolean;
jurisdiction: string;
rate: string | null;
supplier: string;
tax: number;
taxable: number;
treatment: "standard" | "reduced" | "zero" | "exempt" | "outside_scope";
}[];
totals: {
discounts: number;
fees: number;
giftCards: number;
tax: number;
tickets: number;
total: number;
};
}>
Operation Id#
getStaffCartQuote
releaseSeat()#
releaseSeat: (cartId: string, occurrenceId: string, seat: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Give a seat back Release a seat now and remove its line from the cart.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
occurrenceId | string |
seat | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
releaseStaffCartSeat
removeCode()#
removeCode: (cartId: string, codeId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Remove a code from the cart Take a code off the cart. Its discount and fee waiver stop applying; a line it unlocked stays in the cart and is refused at checkout (TAG_REQUIRED), as offers would report it. 404 CODE_NOT_APPLIED when the cart does not hold it.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
codeId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
removeStaffCartCode
removeItem()#
removeItem: (cartId: string, itemId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Remove cart item Remove an item from the cart, releasing its reservation
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
itemId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
removeStaffCartItem
removeUnlock()#
removeUnlock: (cartId: string, unlockId: string, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Remove an unlock for this sale Remove a staff unlock from the cart. A line it let in stays in the cart and is refused at checkout (TAG_REQUIRED), as offers would report it. Needs orders.unlock_prices, as a person.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
unlockId | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
removeStaffCartUnlock
reserveSeats()#
reserveSeats: (cartId: string, request: {
acceptSingleSeatGap?: boolean;
eventOccurrenceId: string;
planVersion?: string;
seats: number[];
ticketTypeId?: string;
}, requestOptions?: RequestOptions) => Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>;Reserve seats
Box Office's seat reservation, with the body and refusals of the Live surface's (POST /internal/live/carts/{cartId}/seats): seats by index, each its own line, at the ticket type named or the category's default, all or none. 409 SEAT_UNAVAILABLE with alternatives, 409 SINGLE_SEAT_GAP with a suggestion, 409 PLAN_VERSION_CHANGED, 422 SEAT_LIMIT, 422 TICKET_TYPE_NOT_FOR_SEAT. On a channel whose single seat gap rule is confirm (a box office's default) a choice refused with SINGLE_SEAT_GAP may be sent again with acceptSingleSeatGap: true, once the customer has confirmed it.
Parameters#
| Parameter | Type |
|---|---|
cartId | string |
request | { acceptSingleSeatGap?: boolean; eventOccurrenceId: string; planVersion?: string; seats: number[]; ticketTypeId?: string; } |
request.acceptSingleSeatGap? | boolean |
request.eventOccurrenceId? | string |
request.planVersion? | string |
request.seats? | number[] |
request.ticketTypeId? | string |
requestOptions? | RequestOptions |
Returns#
Promise<{
cart: {
accountId: string;
channelId: string;
codes: {
appliedAt: string;
appliedBy: string | null;
code: string;
codeId: string;
typed: string | null;
}[];
createdAt: string;
currency: string | null;
customerId: string | null;
expiresAt: string;
id: string;
metadata: | {
[key: string]: unknown;
}
| null;
orderId: string | null;
organisationId: string;
staffUnlocks: {
actAsTags: string[];
at: string;
id: string;
reason: string;
targets: (
| {
eventId: string;
type: "event";
}
| {
occurrenceId: string;
type: "occurrence";
}
| {
ticketTypeId: string;
type: "ticket_type";
}
| {
categoryId: string;
ticketTypeId: string;
type: "price_cell";
})[];
userId: string;
}[];
status: "expired" | "active" | "checked_out" | "abandoned";
updatedAt: string;
};
items: {
cartId: string;
categoryId: string;
createdAt: string;
eventLayoutAreaId: string | null;
eventLayoutSeatId: string | null;
eventOccurrenceId: string;
id: string;
notes: string | null;
organisationId: string;
priceSnapshot: {
categoryName: string;
currency: string;
eventId: string;
eventName: string;
priceSchemeId: string;
ticketTypeName: string;
unitPrice: number;
};
quantity: number;
reservationId: string | null;
seatIndex?: number | null;
ticketTypeId: string;
venuePlanVersionId?: string | null;
}[];
seats?: {
expiresAt: string | null;
itemId: string;
label: string;
number: string;
row: string;
seat: number;
section: string;
}[];
}>
Operation Id#
reserveStaffCartSeats
setHolders()#
setHolders: (cartId: string, request: {
addOns?: {
cartItemId: string;
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
unitIndex: number;
}[];
holders?: {
cartItemId: string;
email?: string | null;
name?: string | null;
unitIndex: number;
}[];
}, requestOptions?: RequestOptions) => Promise<{
addOns: {
cartItemId: string;
eligibleHolders: {
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
};
kind: "person" | "vehicle" | "group";
label: string | null;
remaining: number | null;
}[];
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
how: "automatic" | "explicit" | "unassigned";
ticketTypeId: string;
unitIndex: number;
}[];
existingHolders: {
eventId: string;
kind: "person" | "vehicle" | "group";
label: string;
orderId: string;
slotId: string;
}[];
holders: {
cartItemId: string;
email: string | null;
kind: "person" | "vehicle" | "group";
label: string;
name: string | null;
naming: {
changesCloseAt: string | null;
maxNameChanges: number | null;
nameChangesAllowed: boolean;
namesCloseAt: string | null;
policy: "none" | "at_checkout" | "before_deadline" | "id_at_gate";
required: boolean;
transfersAllowed: boolean;
};
ticketTypeId: string;
unitIndex: number;
}[];
}>;Name holders and place add-ons on a cart Replace the cart's holder names and add-on choices; checkout writes them as the order's holders. Checked as checkout checks them: 409 ADD_ON_HOLDER_MISMATCH (wrong kind of holder or no parent ticket), ADD_ON_LIMIT_REACHED, or ADD_ON_PARENT_REQUIRED (an add-on with no holder it could ever go to); 400 for a unit not in the cart.
Parameters#
| Parameter | Type | Description |
|---|---|---|
cartId | string | - |
request | { addOns?: { cartItemId: string; holder: | { cartItemId: string; unitIndex: number; } | { slotId: string; } | null; unitIndex: number; }[]; holders?: { cartItemId: string; email?: string | null; name?: string | null; unitIndex: number; }[]; } | - |
request.addOns? | { cartItemId: string; holder: | { cartItemId: string; unitIndex: number; } | { slotId: string; } | null; unitIndex: number; }[] | Description Where each add-on unit goes. One left out is placed automatically when that is unambiguous (one holder, or one each), else left for later |
request.holders? | { cartItemId: string; email?: string | null; name?: string | null; unitIndex: number; }[] | Description A name (and optionally an email) for units that make a holder; a unit left out stays "Guest N" until named |
requestOptions? | RequestOptions | - |
Returns#
Promise<{
addOns: {
cartItemId: string;
eligibleHolders: {
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
};
kind: "person" | "vehicle" | "group";
label: string | null;
remaining: number | null;
}[];
holder: | {
cartItemId: string;
unitIndex: number;
}
| {
slotId: string;
}
| null;
how: "automatic" | "explicit" | "unassigned";
ticketTypeId: string;
unitIndex: number;
}[];
existingHolders: {
eventId: string;
kind: "person" | "vehicle" | "group";
label: string;
orderId: string;
slotId: string;
}[];
holders: {
cartItemId: string;
email: string | null;
kind: "person" | "vehicle" | "group";
label: string;
name: string | null;
naming: {
changesCloseAt: string | null;
maxNameChanges: number | null;
nameChangesAllowed: boolean;
namesCloseAt: string | null;
policy: "none" | "at_checkout" | "before_deadline" | "id_at_gate";
required: boolean;
transfersAllowed: boolean;
};
ticketTypeId: string;
unitIndex: number;
}[];
}>
Operation Id#
setStaffCartHolders