Skip to content
ApiqDevelopers
API v1.64.0Open console

Poll search

GET/v1/search/{searchRef}
Accepts X-Api-Key · oauthClientCredentials · bearer

Async poll / paginate / filter surface for every async product

Generalized from the flights-only sector poll.Show moreGeneralized from the flights-only sector poll. Filtering/sorting/pagination run against the server-side result store. Same URL with Accept text/event-stream upgrades to SSE.

Path parameters

  • searchRefstringRequired
    Async search reference

Query parameters

  • cursorstringOptional
    Opaque; the message.nextCursor of the previous page.Show moreOpaque; the message.nextCursor of the previous page. A cursor this route did not issue is 400 VALIDATION details.field cursor; a valid cursor sent with a different sort or filter restarts at page one (not an error). With none of cursor, filter or sort the poll answers the whole current snapshot unpaged; with any of them it pages at a fixed 50 offers (no page-size parameter).
  • filterstringOptional
    Comma-separated key:value terms, ANDed: supplier:<name> (case-insensitive, the offer's fareSource.supplier), maxPrice:<minor units> / minPrice:<minor units> (run currency), refundable:true|false,…Show moreComma-separated key:value terms, ANDed: supplier:<name> (case-insensitive, the offer's fareSource.supplier), maxPrice:<minor units> / minPrice:<minor units> (run currency), refundable:true|false, holdable:true|false — e.g. supplier:EXAMPLEGDS,maxPrice:118400. Any other key or a malformed term is 400 VALIDATION details.field filter. Filtering never changes message.status.
  • sortstringOptional
    One key, - for descending: price | -price | expiresAt | -expiresAt.Show moreOne key, - for descending: price | -price | expiresAt | -expiresAt. Absent: the run's stable order (planned supplier order, then landing order). Anything else is 400 VALIDATION details.field sort.
  • viewstringOptional
    Where offer selection is on for the run's domain: SELECTED (one entry per item, the winner, its other offers in alternatives[]) or ALL (the flat list, every offer tagged with its item in selection).Show moreWhere offer selection is on for the run's domain: SELECTED (one entry per item, the winner, its other offers in alternatives[]) or ALL (the flat list, every offer tagged with its item in selection). Absent: the view the tenant and platform policies resolve to. Any other value is 400 VALIDATION details.field context.selection.view. Ignored where selection is off.
    • SELECTED
    • ALL

Request body

This operation takes no request body.

Responses

  • 200
    Current snapshot; poll until status COMPLETE.Show moreCurrent snapshot; poll until status COMPLETE. With Accept text/event-stream the same 200 is an SSE stream instead: event names result-batch | supplier-complete | search-complete, each data frame one SearchResponse (JSON) carrying the offers and the suppliers progress so far. Polling is the guaranteed floor.
    SearchResponse
  • 401
    UNAUTHENTICATED — missing or expired token.Show moreUNAUTHENTICATED — missing or expired token. Declared on every operation because `security` is declared globally at the document root: every route is authenticated, so every route can answer 401.
    ApiErrorResponse
  • 403
    PERMISSION_DENIED | TAB_DISABLED | OUT_OF_SCOPE | TENANT_MISMATCH, exactly as Forbidden, plus TENANT_SUSPENDED — declared on the verbs that start new business: search and poll, detail, schedules,…Show morePERMISSION_DENIED | TAB_DISABLED | OUT_OF_SCOPE | TENANT_MISMATCH, exactly as Forbidden, plus TENANT_SUSPENDED — declared on the verbs that start new business: search and poll, detail, schedules, seatmap, ancillaries, rules, reprice, hold and order create, and on the payments routes (intent, confirm, 3ds-callback, checkout-session). While the caller's tenant is SUSPENDED every such request is refused TENANT_SUSPENDED, except an idempotent replay of an answer completed before the suspension (see hold / createOrder), before the entitlement and permission checks, and it is not retryable: the answer changes only when platform ops reinstates the tenant. The post-booking verbs (cancel-quote, cancel, amend), the order reads, and capture and refund on an existing payment intent (whose 403 is PaymentForbidden) stay up, so no traveller is stranded. On the production deployment the same requests are refused PERMISSION_DENIED with details.reason TENANT_NOT_LIVE while the tenant's production activation has not been approved, whichever credential is presented, console session or API key; use the sandbox deployment until activation. Not retryable; the post-booking verbs stay up.
    ApiErrorResponse
  • 404NOT_FOUND — unknown or expired ref (unguessable refs, 15)ApiErrorResponse
  • 405
    VALIDATION — the public edge serves GET, POST, PUT, PATCH and DELETE only; any other method is refused before the platform sees it (details.reason METHOD_NOT_ALLOWED, details.source edge).Show moreVALIDATION — the public edge serves GET, POST, PUT, PATCH and DELETE only; any other method is refused before the platform sees it (details.reason METHOD_NOT_ALLOWED, details.source edge). Not retryable as sent.
    ApiErrorResponse
  • 414
    VALIDATION — the request URI (path and query string) is longer than 8 KiB; the public edge refuses it before the platform sees it (details.reason URI_TOO_LONG, details.source edge).Show moreVALIDATION — the request URI (path and query string) is longer than 8 KiB; the public edge refuses it before the platform sees it (details.reason URI_TOO_LONG, details.source edge). Not retryable as sent: send long input in the body of a POST.
    ApiErrorResponse
  • 429Legacy flights clients only: frozen SEARCH_WARMING 429 formApiErrorResponse
  • 500INTERNAL — a bug, and traceId is the support handle.ApiErrorResponse
  • 502Also the order read routes (getOrder, listOrderDocuments, listOrderEvents, searchOrders) when the order store times out: details.store names the store, retryable true.ApiErrorResponse
  • 503ApiErrorResponse

Errors you should handle

Branch on code and honour retryable — never on the HTTP status alone.

401UNAUTHENTICATED
The bearer token is expired. Re-authenticate and retry.
not retryable
403PERMISSION_DENIED
Role lacks the required scope: booking:write
not retryable
403TAB_DISABLED
Tenant acme-travel is not entitled to sell CRU
not retryable
403OUT_OF_SCOPE
The token's scope ladder does not reach this customer subtree
not retryable
403TENANT_MISMATCH
orderRef MO-8KD-2FQ-9XT does not belong to tenant acme-travel
not retryable
403TENANT_SUSPENDED
This tenant is suspended: new searches, quotes, holds, orders and payments are refused until it is reinstated. Existing orders can still be read, cancelled and amended.
not retryable
404NOT_FOUND
searchRef SR-F-7b31d0a9 is unknown or has expired; re-search
not retryable
405VALIDATION
This method is not served.
not retryable
414VALIDATION
The request URI is longer than 8 KiB.
not retryable
429SEARCH_WARMING
Results are still warming; retry in 1200ms
retryable
500INTERNAL
An unexpected error occurred. Quote the traceId to support.
retryable
502UPSTREAM_UNAVAILABLE
Every supplier for HTL is circuit-open; no fan-out was attempted
retryable
503PROVIDER_DOWN
EXAMPLEHOTELS is unavailable; the order was not attempted and nothing was captured
retryable