List orders
List your orders.
Scent Orders
/api/v1/scent/ordersLists the calling partner’s orders, read directly from the canonical order spine (a single
BATCHED downstream fetch hydrates the whole page’s pricing — never one call per row).
Every row carries the categorized pricing{} breakdown; pass ?include=lines to
additionally embed each row’s line items and fulfilment groups (by-id is always full — see
GET /api/v1/scent/orders/{orderId} below). status is a REPEATABLE match-any filter
(?status=Processing&status=Completed) — omit to include every status; the date window is
half-open (createdFrom inclusive, createdTo exclusive). customerRef narrows to one
end-customer’s orders — it can only narrow, never widen, your own scope. Scope is always
your own partner; no request parameter can widen it. A spine row whose downstream order was
never created (e.g. a pre-create rejection) still appears — id: null, status: "Failed",
and failureReason explaining why — see the Order states & errors guide.
Query parameters
pageinteger1-based page number (default 1). A value below 1, or one that is not a whole number, returns 400 VALIDATION_INVALID_PAGE.
pageSizeintegerItems per page, 1 to 100 (default 20). Any other value returns 400 VALIDATION_INVALID_PAGE_SIZE; it is never silently clamped.
productTypestring (enum)Scent is the only creatable type today; Topup/Esim are legacy (decommissioned) values kept read-only so historical rows still filter/render.
statusarray of string (enum)Repeatable match-any filter over the unified order status (e.g. ?status=Processing&status=Completed). Omit to include every status.
createdFromstring (date-time)Only include orders created on or after this UTC instant (inclusive). Read as UTC when it carries no offset; a date-only value means 00:00Z. An unparseable value, or a from/to pair with from after to, returns 400 VALIDATION_INVALID_DATE.
createdTostring (date-time)Only include orders created strictly before this UTC instant (exclusive — half-open window with createdFrom). Read as UTC when it carries no offset; a date-only value means 00:00Z. An unparseable value, or a from/to pair with from after to, returns 400 VALIDATION_INVALID_DATE.
customerRefstringOptional per-customer filter (max 128 chars) — narrows to one end-customer’s own rows. Can only narrow, never widen, your own scope; omit to include every customer.
includestringComma-separated related detail to embed per row. Currently only lines is recognized (embeds lines and fulfillmentGroups). Omit for the lean row (id/status/pricing/deliveryRollup only).
Response
itemsarray of objectpagination.pageintegerpagination.pageSizeintegerpagination.totalCountintegerpagination.totalPagesintegerpagination.hasPreviousbooleanWhether there is a previous page.
pagination.hasNextbooleanWhether there is a next page.
Other responses
400A query parameter was rejected. Unknown parameter name: VALIDATION_UNKNOWN_QUERY_PARAMETER (details.allowedParameters). Value that does not parse (id, enum, number, boolean): VALIDATION_INVALID_QUERY_PARAMETER (enums add details.allowedValues). Unknown include token: VALIDATION_UNKNOWN_INCLUDE (details.allowedValues). pageSize outside 1–100: VALIDATION_INVALID_PAGE_SIZE. page below 1: VALIDATION_INVALID_PAGE. Unparseable date, or a from/to pair with from after to: VALIDATION_INVALID_DATE. details.errors names every offending parameter.401No bearer token (UNAUTHORIZED_MISSING_TOKEN), an invalid token (UNAUTHORIZED_INVALID_TOKEN) or an expired one (UNAUTHORIZED_TOKEN_EXPIRED — mint a new token). UPSTREAM_AUTH_FAILED is different: a dependent service refused the Gateway itself. That is a server-side fault — retry later and do NOT re-mint your token. See the Errors guide.403The route is not available to your credential (FORBIDDEN).404No API route matches this path (NOT_FOUND_ROUTE). A missing resource on a real route returns that service’s own NOT_FOUND_* code instead.429Too many requests — see the Rate limits guide. Retry after the Retry-After header (seconds).502A dependent service returned an invalid response (BAD_GATEWAY). Retry with backoff.503The service is temporarily unavailable (SERVICE_UNAVAILABLE). Retry with backoff.504A dependent service did not respond in time (GATEWAY_TIMEOUT). Retry with backoff.curl --request GET \ --url https://api-omni.linra.net/api/v1/scent/orders \ --header 'Authorization: Bearer $TOKEN'const res = await fetch('https://api-omni.linra.net/api/v1/scent/orders', { headers: { Authorization: `Bearer ${token}`, },});const { payload } = await res.json();var response = await httpClient.GetAsync("https://api-omni.linra.net/api/v1/scent/orders");
var envelope = await response.Content.ReadFromJsonAsync<ApiResponse<PagedScentOrderPartnerResponse>>();Response
{ "state": "SUCCESS", "payload": { "items": [ { "id": "5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b", "externalReference": "string", "customerRef": "string", "status": "Processing", "createdAt": "2026-08-22T09:14:03Z", "completedAt": "2026-08-22T09:14:03Z", "failureReason": "string", "pricing": { "currency": "SAR", "subtotal": 0, "vat": 0, "shippingFee": { "amount": 0, "vatAmount": 0, "amountWithVat": 0 }, "discount": { "code": "string", "amount": 0 }, "total": 0, "commission": { "amount": 0, "vatAmount": 0, "amountWithVat": 0, "netAfterCommission": 0 } }, "lines": [ { "id": "5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b", "variantId": "5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b", "sku": "string", "brandName": "string", "scentName": "string", "sizeMl": 0, "quantity": 0, "returnedQuantity": 0, "unitAmount": 0, "lineTotal": 0, "partnerCommission": 0, "pricingMode": "Retail", "taxClassification": "string", "vatRateApplied": 0, "lineGoodsVatAmount": 0, "lineCommissionVatAmount": 0, "unitAmountDisplay": 0, "lineTotalDisplay": 0, "partnerCommissionDisplay": 0 } ], "fulfillmentGroups": [ { "id": "5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b", "status": "Pending", "trackingRef": "string", "packedAt": "2026-08-22T09:14:03Z", "shippedAt": "2026-08-22T09:14:03Z", "deliveredAt": "2026-08-22T09:14:03Z" } ], "deliveryRollup": { "totalGroups": 0, "deliveredGroups": 0 }, "taxPoint": "2026-08-22T09:14:03Z", "platformTaxRegistrationNumber": "string", "partnerTaxRegistrationNumber": "string", "partnerIsVatRegistered": true, "displayCurrency": "string", "rate": 0, "totalAmountDisplay": 0 } ], "pagination": { "page": 0, "pageSize": 0, "totalCount": 0, "totalPages": 0, "hasPrevious": true, "hasNext": true } }, "details": null}
