Skip to content
Docs
Reference

Interface: ElementTicketType

Interface: ElementTicketType in @ticketlayer/live.

@ticketlayer/live


@ticketlayer/live / index / ElementTicketType

Defined in: elements.ts:306

A ticket type as the Elements read it: the old fields, plus the offers engine's (TKT-324).

Properties#

availability?#

optional availability?: {
  closesAt: string | null;
  opensAt: string | null;
  reason:   | "SALE_CLOSED"
     | "NOT_AVAILABLE"
     | "SOLD_OUT"
     | "SALE_NOT_OPEN"
     | "TAG_REQUIRED"
     | null;
  state:   | "on_sale"
     | "not_yet_on_sale"
     | "off_sale"
     | "sold_out"
     | "locked"
     | "hidden";
};

Defined in: elements.ts:322

closesAt#

closesAt: string | null;
Description

When the sale this buyer is under closes; for off_sale, when it closed

Example
2026-10-14T18:00:00.000Z

opensAt#

opensAt: string | null;
Description

When a sale not yet open opens for this buyer

Example
null

reason#

reason: 
  | "SALE_CLOSED"
  | "NOT_AVAILABLE"
  | "SOLD_OUT"
  | "SALE_NOT_OPEN"
  | "TAG_REQUIRED"
  | null;
Description

Why it cannot be bought now: SALE_CLOSED, NOT_AVAILABLE, SOLD_OUT, SALE_NOT_OPEN or TAG_REQUIRED; null when on sale

Example
null
@enum {string|null}

state#

state: 
  | "on_sale"
  | "not_yet_on_sale"
  | "off_sale"
  | "sold_out"
  | "locked"
  | "hidden";
Example
on_sale
@enum {string}

availabilityStatus?#

optional availabilityStatus?: "sold_out" | "available" | "limited";

Defined in: elements.ts:319

sold_out or limited, for an element that reads no availability.


available#

available: number;

Defined in: elements.ts:317


categoryId#

categoryId: string;

Defined in: elements.ts:313


categoryName#

categoryName: string;

Defined in: elements.ts:314


currency#

currency: string;

Defined in: elements.ts:312


description#

description: string | null;

Defined in: elements.ts:309


id#

id: string;

Defined in: elements.ts:307


limits?#

optional limits?: {
  maxPerOrder: number;
  minPerOrder: number;
};

Defined in: elements.ts:324

maxPerOrder#

maxPerOrder: number;
Example
10

minPerOrder#

minPerOrder: number;
Example
1

maxPerOrder#

maxPerOrder: number;

Defined in: elements.ts:315


minPerOrder?#

optional minPerOrder?: number;

Defined in: elements.ts:316


name#

name: string;

Defined in: elements.ts:308


price#

price: number;

Defined in: elements.ts:311

The face value, fees excluded: the view's price.faceValue. Never add a fee to it.


pricing?#

optional pricing?: {
  currency: string;
  faceValue: number;
  fees: {
     amount: number;
     basis: "per_ticket" | "per_order";
     code: string;
     label: string;
     rate: number | null;
  }[];
  headline: {
     allIn: boolean;
     amount: number;
  };
  total: number;
};

Defined in: elements.ts:321

The view's price (face value, fee lines, total), renamed because price is the face value here.

currency#

currency: string;
Example
GBP

faceValue#

faceValue: number;
Description

Integer minor units

Example
2500

fees#

fees: {
  amount: number;
  basis: "per_ticket" | "per_order";
  code: string;
  label: string;
  rate: number | null;
}[];
Description

Every fee on buying one ticket, the per-order fee included

headline#

headline: {
  allIn: boolean;
  amount: number;
};
Description

The price to show before the buyer chooses anything: the face value after discounts, plus every mandatory fee when the channel prices all-in (as UK and US law require), and any fee displayed as included. Optional fees, such as postage when email is free, and payment surcharges are never in it

headline.allIn
allIn: boolean;
Description

Whether the channel prices all-in: every mandatory fee is in the amount

headline.amount
amount: number;
Description

Integer minor units

Example
2625

total#

total: number;
Description

What one ticket costs, fees included: render this, with the fee lines, rather than adding anything to unitPrice

Example
2625

remaining?#

optional remaining?: {
  bucket: "none" | "available" | "limited" | "few" | null;
};

Defined in: elements.ts:323

bucket#

bucket: "none" | "available" | "limited" | "few" | null;
Description

available: more than 20 percent of the category's capacity and more than 10 left; limited: 20 percent or less; few: 10 or fewer; none. Null when the category has no inventory. Up to one cache lifetime old: the cart decides

Example
limited
@enum {string|null}

unlock?#

optional unlock?: 
  | {
  code: boolean;
  howTo: {
     products: {
        currency: string;
        id: string;
        name: string;
        price: number;
     }[];
  };
  tags: {
     label: string;
  }[];
  unlocked: boolean;
  visibility: "locked" | "hidden";
}
  | null;

Defined in: elements.ts:325

Union Members#

Type Literal
{
  code: boolean;
  howTo: {
     products: {
        currency: string;
        id: string;
        name: string;
        price: number;
     }[];
  };
  tags: {
     label: string;
  }[];
  unlocked: boolean;
  visibility: "locked" | "hidden";
}
code
code: boolean;
Description

Whether a code valid on this channel could unlock it. Never which. False when the channel withholds unlock hints

Example
true
howTo
howTo: {
  products: {
     currency: string;
     id: string;
     name: string;
     price: number;
  }[];
};
howTo.products
products: {
  currency: string;
  id: string;
  name: string;
  price: number;
}[];
tags
tags: {
  label: string;
}[];
Description

The tags any one of which unlocks it, by their buyer-facing labels. Empty when the channel withholds unlock hints

unlocked
unlocked: boolean;
Description

Whether this buyer has unlocked it

Example
false
visibility
visibility: "locked" | "hidden";
Description

locked: shown with how to unlock it; hidden: shown only once this buyer has unlocked it

Example
locked
@enum {string}

null