Status of a headless purchase (and its tickets, once paid)
Requires the X-Customer-Session header. The enterprise service API key is OPTIONAL (with a key, results are additionally scoped to the workspace pinned to it). {id} accepts the reference (FT-…) or the sale id. If the sale is still PENDING and its payment goes through Bold, the authoritative payment status is re-read from Bold; between re-reads it responds with the internal status, which the webhook keeps up to date. status is approved, pending or rejected; pending is a NORMAL state (asynchronous payment methods take time) and the landing page must retry. tickets —with each ticket’s ticketCode— is only present when status is approved. The purchase must belong to the session’s buyer (and, with a key, to the workspace pinned to it): anything else is 404. The route MAY rate-limit polling and respond 429: honor Retry-After and apply backoff. Polling every ~2 s fits comfortably, but do not treat any threshold as a guarantee.
/customer/orders/{id}AuthorizationAPI key · headerrequiredAPI key prefixed with Bearer . Alternative: the x-api-key header with the raw key. Available scopes: read and write (see /.well-known/oauth-protected-resource).
x-api-keyAPI key · headerrequiredRaw API key (without Bearer ), alternative to Authorization.
idstringrequiredX-Workspace-IdstringActive workspace to operate on. Optional: when omitted, the default workspace of the user who owns the key is used (pickActiveOrg).
OK
dataCustomerOrderStatusrequiredShow propertiesHide properties
referencestringrequiredstatusstringrequiredpending is a NORMAL state: Bold may take a while to reflect the payment (PSE, Nequi and the Bancolombia button approve asynchronously) and the webhook settles it. The landing page must retry, not treat the purchase as lost.
approvedpendingrejectedsaleStatusstringrequiredInternal sale status (PENDING, CONFIRMED, …).
totalnumberrequiredcurrencystringrequiredticketsCustomerTicketItem[] | nullrequiredTickets with their ticketCode. ONLY present when status is approved; null in any other case. A code handed out before the payment settles would be a valid ticket with no money behind it.
Show propertiesHide properties
CustomerTicketItemticketTypeNamestringrequiredquantityintegerrequiredticketCodestringrequiredOpaque ticket code. The QR code must encode the validator URL (https://admin.appfreeticket.com/dashboard/tickets/validar?code=<ticketCode>).
seatLabelstring | nullrequiredExact seat for seated events (seats.io), or null.
Show propertiesHide properties
stringnullnullMissing or invalid credential.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequiredretryablebooleanrequireddetailsanyInsufficient role or resource not accessible.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequiredretryablebooleanrequireddetailsanyResource does not exist or is out of scope.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequiredretryablebooleanrequireddetailsanyRequest body/parameter validation failed.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequiredretryablebooleanrequireddetailsanyToo many requests: rate limit exceeded.
errorobjectrequiredShow propertiesHide properties
codestringrequiredmessagestringrequiredretryablebooleanrequireddetailsany
