Skip to content
Docs
Concept

A promoter

A promoter is an account, and the promoter is a user on it: a staff JWT, the selling permissions at channel scope, and access to their own channel. No new credential kind.

A promoter sells your tickets under their own name, on their own terms, to their own audience. In Ticketlayer that is an account, the same as an outlet, and the promoter is a user on it. There is no promoter credential and no choice to make between "staff" and "partner": the account is the business relationship, the channel is the terms, and the credential is only how this particular person arrives.

The credential. A staff JWT (high trust) from the identity issuer. The promoter role grants the selling permissions at channel scope, and the promoter has access to their own channel only, so every selling request carries X-Ticketlayer-Channel: <their slug>. The buyer is the promoter's; there is usually no customer to authenticate.

A promoter: a user on an account, with access to their own channelSign in: Promoter (promoter app) to Identity issuer: OAuth: authorization code + PKCE; Identity issuer to Promoter (promoter app): a staff JWT carrying the organisation (staff JWT); Promoter (promoter app) to Backstage API: GET /my/sales-channels (staff JWT); Backstage API to Promoter (promoter app): their own channel; The promoter role holds the selling permissions at channel scope, so every call names the channel. Naming another channel is a 403; naming none is a 400.. 1 List what is on sale: Promoter (promoter app) to Backstage API: GET /events (staff JWT, X-Ticketlayer-Channel: promoter-x); Backstage API to Promoter (promoter app): what this promoter may sell. 2 Make an order: Promoter (promoter app) to Backstage API: POST /cart, items, POST /cart/{id}/checkout (staff JWT, X-Ticketlayer-Channel: promoter-x); Promoter (promoter app) to Backstage API: POST /orders/{id}/payments (staff JWT); Backstage API to Promoter (promoter app): the order, on the promoter channel. 3 Authenticate a customer: Usually not at all: the promoter is selling to their buyer, on behalf of them. A promoter's own online storefront is the partner storefront case, with a secret key issued for this same channel.. 4 Read the order back: Promoter (promoter app) to Backstage API: GET /orders/{id} (staff JWT, X-Ticketlayer-Channel: promoter-x); Backstage API to Promoter (promoter app): the promoter's own channel's orders onlySign in1 List what is on sale2 Make an order3 Authenticate a customer4 Read the order backPromoter (promoter app)Identity issuerBackstage APIThe promoter role holds the selling permissions at channel scope, so every callnames the channel. Naming another channel is a 403; naming none is a 400.Usually not at all: the promoter is selling to their buyer, on behalf of them.A promoter's own online storefront is the partner storefront case, with a secret keyissued for this same channel.OAuth: authorization code + PKCEa staff JWT carrying the organisationstaff JWTGET /my/sales-channelsstaff JWTtheir own channelGET /eventsstaff JWTX-Ticketlayer-Channel: promoter-xwhat this promoter may sellPOST /cart, items, POST /cart/{id}/checkoutstaff JWTX-Ticketlayer-Channel: promoter-xPOST /orders/{id}/paymentsstaff JWTthe order, on the promoter channelGET /orders/{id}staff JWTX-Ticketlayer-Channel: promoter-xthe promoter's own channel's orders onlyHigh trust: staff, organisation key, deviceWhere the channel comes from

The four moments#

MomentWhat happensCredential
List what is on saleGET /events with the promoter's channel in the header returns what that channel sells: the events listed on it, in their sale windows, at its prices.staff JWT plus X-Ticketlayer-Channel
Make an orderPOST /cart with the channel header, items, checkout, then POST /orders/{id}/payments. The channel's fee profile and pinned payment method apply.staff JWT plus X-Ticketlayer-Channel
Authenticate a customerUsually not at all: the promoter is selling to their buyer, on behalf of them.staff JWT
Read the order backGET /orders/{id}, scoped to the promoter's channel.staff JWT plus X-Ticketlayer-Channel

Scope, access and the channel header#

The promoter role sells at channel scope, like box office staff and unlike an organisation owner, a venue admin or an event manager, who hold the same permissions at organisation scope and see everything without a header. A promoter app therefore learns its channels once, at sign-in, from GET /my/sales-channels, and sends the slug on every request after. A request that names another channel is a 403; one that names none is a 400, so a promoter can never fall through to the organisation-wide view by leaving the header off.

Granting a promoter access to a second channel is one grant, not a role change. Which events reach the channel is the channel's own event filter, which is configuration, not a permission.

A promoter with their own system#

A promoter whose own website sells online is the partner storefront case: a secret key issued for this same channel, on this same account. Same terms, same access, a different credential because a server is arriving rather than a person.