ADMIN
Returns the tickets issued for a specific fulfillment order, plus a
short-lived presigned download URL for the consolidated ticket PDF when
one has been produced.
external_user_id is the same identifier the integrator supplied to
POST /session when generating the user's authorization code — there is no
separate platform user ID.
The order is resolved by fulfillment_order_id and must belong to the
external_user_id in the path. If either the order does not exist or
it belongs to a different user, 404 Not Found is returned without
distinguishing between the two — this prevents enumeration of order IDs
across users.
If the order exists and belongs to the user but tickets have not yet been
assigned (status PENDING / CONFIRMED), 409 Conflict is returned with
the current status so the caller can poll.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Part of ticketing — Tickets and fulfillment explains the order lifecycle and how tickets are issued.
Why this endpoint exists
The server-to-server equivalent of
GET /me/fulfillment/orders/{id}/tickets: one order's tickets
plus a short-lived presigned URL for the consolidated ticket PDF.
Reach for it when your backend needs the actual document — attaching a ticket to your own support
reply, or serving it from your own account pages. If all you need is to get the e-mail re-sent, use
resend-ticket instead; it is one call and needs no file
handling on your side.
Authorisation and scoping
| Credential | S2S token (client_credentials) |
| Scope | funtrips/fulfillment.read |
| Campaign | Resolved from the token's campaign claim |
Both path parameters are required and must agree: external_user_id is your identifier for the
customer, fulfillment_order_id comes from
the list endpoint.
Request
curl "https://api.acc.funtrips.io/v2/admin/fulfillment/users/customer-4815162342/orders/$FULFILLMENT_ORDER_ID/tickets" \
-H "Authorization: Bearer $S2S_TOKEN"The response is one order with its tickets and, when a document has been produced, a
deliverable. See Tickets and fulfillment for what a ticket carries
and how to render a barcode.
Fetch the PDF immediately
deliverable.download_url is presigned and short-lived, with the deadline in expires_at. Stream
the bytes now; do not store the URL, forward it, or embed it in an e-mail you send — it expires
long before a recipient clicks. Call this endpoint again for a fresh one.
deliverable is absent when no document exists, which is legitimate for an order whose lines are
all shipped physically.
409 means not ready yet
409 means not ready yetWhile the order exists but its tickets do not (PENDING / CONFIRMED), the answer is 409 with a
Retry-After header in seconds.
Honour it, back off exponentially, and cap at around five minutes. For a support tool, one or two
attempts then "still being issued" is usually the right behaviour — a human is waiting.
404 hides ownership
404 hides ownershipAn order that does not exist and an order belonging to a different customer both return 404,
indistinguishable by design so order ids cannot be probed across customers.
A 404 therefore does not prove the order is missing. Check that the fulfillment_order_id really
belongs to the external_user_id you paired it with — they are validated together.
Errors
| Status | Meaning | What to do |
|---|---|---|
401 | S2S token missing, expired or invalid | Re-fetch the token, retry once |
403 | Token lacks funtrips/fulfillment.read | Provisioning — contact us |
404 | No such order for that customer | See above |
409 | Tickets not issued yet | Honour Retry-After |
500 | Server-side fault | Retryable |
Fulfillment routes answer with status and title — branch on the status code.
