Skip to content
FreeTicketDocs
Esc
↑↓navigate↵open⌘Jpreview

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.

GET/customer/orders/{id}
Authorization
AuthorizationAPI key · headerrequired

API 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).

or
x-api-keyAPI key · headerrequired

Raw API key (without Bearer ), alternative to Authorization.

Path parameters
idstringrequired
Header parameters
X-Workspace-Idstring

Active workspace to operate on. Optional: when omitted, the default workspace of the user who owns the key is used (pickActiveOrg).

Responses
200

OK

dataCustomerOrderStatusrequired
Show properties
referencestringrequired
statusstringrequired

pending 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.

Allowed:approvedpendingrejected
saleStatusstringrequired

Internal sale status (PENDING, CONFIRMED, …).

totalnumberrequired
currencystringrequired
ticketsCustomerTicketItem[] | nullrequired

Tickets 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 properties
Any of:
CustomerTicketItem[]
Array of CustomerTicketItem
ticketTypeNamestringrequired
quantityintegerrequired
min -9007199254740991 · max 9007199254740991
ticketCodestringrequired

Opaque ticket code. The QR code must encode the validator URL (https://admin.appfreeticket.com/dashboard/tickets/validar?code=<ticketCode>).

seatLabelstring | nullrequired

Exact seat for seated events (seats.io), or null.

Show properties
Any of:
string
string
null
null
null
null
401

Missing or invalid credential.

errorobjectrequired
Show properties
codestringrequired
messagestringrequired
retryablebooleanrequired
detailsany
403

Insufficient role or resource not accessible.

errorobjectrequired
Show properties
codestringrequired
messagestringrequired
retryablebooleanrequired
detailsany
404

Resource does not exist or is out of scope.

errorobjectrequired
Show properties
codestringrequired
messagestringrequired
retryablebooleanrequired
detailsany
422

Request body/parameter validation failed.

errorobjectrequired
Show properties
codestringrequired
messagestringrequired
retryablebooleanrequired
detailsany
429

Too many requests: rate limit exceeded.

errorobjectrequired
Show properties
codestringrequired
messagestringrequired
retryablebooleanrequired
detailsany
Try it
Server
Authorization
Parameters
Request
curl -X GET 'https://admin.appfreeticket.com/api/v1/customer/orders/string' \
  -H 'Authorization: YOUR_API_KEY'
Response
{
  "data": {
    "reference": "string",
    "status": "approved",
    "saleStatus": "string",
    "total": 0,
    "currency": "string",
    "tickets": [
      {
        "ticketTypeName": "string",
        "quantity": -9007199254740991,
        "ticketCode": "string",
        "seatLabel": "string"
      }
    ]
  }
}