The Ticket Fairy · Authentication Profile

The Ticket Fairy Authentication

Authentication

The Ticket Fairy declares 3 security scheme(s) across its OpenAPI definitions.

CompanyTicketingEventsEvent ManagementPaymentsMarketingEntertainmentCheckoutFestivalsLive EventsEmbedded CommerceAccess Control
Methods: Schemes: 3 OAuth flows: API key in:

Security Schemes

oauth2
Authorization-Guest apiKey
· in: header ()
none

Source

Authentication Profile

the-ticket-fairy-authentication.yml Raw ↑
generated: '2026-08-13'
method: derived
source: >-
  tf-checkout-react-native@1.0.47 (npm, published by the `theticketfairy` npm account) —
  src/api/Constants.ts and src/api/ApiClient.ts; corroborated by live CORS preflight on
  https://www.ticketfairy.com/api/v1/cart/ (2026-08-13)
note: >-
  DERIVED, NOT PUBLISHED. The Ticket Fairy publishes no authentication documentation, no developer
  portal and no OpenAPI. Everything below is read out of the company's OWN first-party client
  library on npm and confirmed against the live API's CORS preflight, which enumerates exactly
  which Authorization headers the origin accepts. No credential values are reproduced here: the
  React Native library ships a hard-coded checkout client_id/client_secret pair in
  src/api/Constants.ts, which is itself a finding (a shared public client secret shipped inside a
  distributed mobile bundle) but is not repeated in this artifact.
api: The Ticket Fairy REST API
base_url: https://www.ticketfairy.com/api
schemes:
- id: oauth2
  type: oauth2
  status: observed
  token_endpoint: https://www.ticketfairy.com/api/v1/oauth/access_token
  authorize_endpoint: https://www.ticketfairy.com/api/v1/oauth/authorize-rn
  register_endpoint: https://www.ticketfairy.com/api/v1/oauth/register-rn
  password_reset_endpoint: https://www.ticketfairy.com/api/v1/oauth/restore-password-rn
  token_type: Bearer
  header: 'Authorization: Bearer <access_token>'
  returns:
  - access_token
  - refresh_token
  - token_type
  - scope
  refresh: >-
    The token response carries a refresh_token and the client persists it; there is no published
    refresh endpoint or token lifetime. Rotation semantics are undocumented.
  scopes_documented: false
  scope_note: >-
    The token response includes a `scope` field which the client stores, but no scope reference,
    no scope list and no consent screen are published anywhere. Because the scope vocabulary is
    unknown, no scopes/ artifact is written — an empty or invented scope list would be worse than
    the honest absence.
  client_credentials_note: >-
    The authorize call is made as `?client_id=<CLIENT_ID>` with a client_secret held in the SDK.
    This is a confidential-client pattern used from a public (mobile) client.
- id: guest
  type: apiKey
  in: header
  name: Authorization-Guest
  status: observed
  note: >-
    A second, parallel token channel for unauthenticated ticket buyers. The API mints the guest
    token and returns it in the `authorization-guest` RESPONSE header; the client echoes it back
    on subsequent requests. It is the mechanism that lets a fan hold a cart and complete checkout
    without creating an account. Undocumented publicly, and confirmed accepted by the live API —
    `authorization-guest` is listed in Access-Control-Allow-Headers on every /api/ response.
- id: none
  type: none
  status: observed
  note: >-
    A subset of the API is genuinely anonymous and needs no credential at all — confirmed live:
    GET https://www.ticketfairy.com/api/countries/list returns 200 application/json with no
    Authorization header, and GET https://www.theticketfairy.com/api/public/filtered-events
    returns 200 for a brand or venue filter. This public read surface is what the company's own
    WordPress plugin consumes.
media_types:
  request: application/vnd.api+json
  response: application/vnd.api+json
  note: >-
    The client sets JSON:API media types by default and unwraps `data.data.attributes.*` on
    responses, so the authenticated surface is JSON:API-flavored. The anonymous public endpoints
    answer plain application/json with a flat {data, success, error, message, status} envelope —
    the two surfaces do not share an envelope.
accepted_auth_headers_live:
  source: CORS preflight, https://www.ticketfairy.com/api/v1/cart/, 2026-08-13
  headers:
  - authorization
  - authorization-guest
  - x-tf-ecommerce
  - x-tf-context
  - promotion-code
  - promotion-event
  - referrer-id
  - device-info
  - referer-url
  - additional-cookies
  - phpr-remote-event
  - idempotency-key
docs: null
docs_note: >-
  No public authentication page exists. Searched ticketfairy.com and theticketfairy.com for
  /developers, /api, /api-documentation, /docs — all 404.
gaps:
- No published OAuth scope reference, despite the token response carrying a `scope` field.
- No documented token lifetime, refresh flow, or revocation endpoint.
- No /.well-known/oauth-authorization-server or /.well-known/openid-configuration (both 404).
- A client_secret is shipped inside a public npm package and therefore inside every app that
  bundles it.