Get order
Get an order.
Scent Orders
/api/v1/scent/orders/{orderId}Retrieves the full order for orderId — the Scent order’s own GUID, the SAME value the
create response’s id and every list row’s id carry. Unlike the list, a by-id read is
ALWAYS full (lines and fulfilment groups included — no ?include= needed). A cross-tenant
or unknown order reports 404 (no existence leak, SCOPE-04).
Path parameters
orderIdstring (uuid)RequiredThe order’s own id (the Scent order’s own GUID).
Response
idstring (uuid)The order’s own id. Null ONLY for a spine row whose downstream order was never created (e.g. a pre-create rejection) — such a row still appears on the list but has no id you could address it by.
externalReferencestringcustomerRefstringstatusstring (enum)The one status vocabulary every product’s order maps into — see the Order states & errors guide for what each value means for a Scent order specifically, and for the create-time reject codes (CONFLICT_ORDER_DUPLICATE_REFERENCE, CONFLICT_PRICE_LOCK_ALREADY_USED, VALIDATION_PRICE_LOCK_EXPIRED/_INVALID) that stop an order from ever reaching a live status at all. failureReason on the order response is populated only when status is Failed, and is additive alongside it — status is never replaced by it.
createdAtstring (date-time)completedAtstring (date-time)failureReasonstringA sanitized, partner-safe failure reason — see the Order states & errors guide. Present ONLY when status is Failed; omitted entirely (not merely null) otherwise. Additive alongside status, never a replacement for it.
pricing.currencystringpricing.subtotalnumber (decimal)Net goods amount, ex-VAT.
pricing.vatnumber (decimal)Output VAT on the goods leg.
pricing.shippingFeeobjectThe order-level shipping fee, shown as its own line. Zero for a free-shipping order.
pricing.discountobjectThe discount code applied at checkout, if any. Display/reporting only — it never affects any other figure in pricing.
pricing.totalnumber (decimal)The single VAT-inclusive gross amount actually charged to your wallet.
pricing.commissionobjectThe partner commission on the order. Both the net and gross (VAT-inclusive) figures are carried explicitly.
linesarray of objectAlways populated on the by-id read; on the list, only when ?include=lines is passed. The key is OMITTED from the wire entirely when not requested — never present as “lines”: null.
fulfillmentGroupsarray of objectSame inclusion rule as lines.
deliveryRollup.totalGroupsintegerdeliveryRollup.deliveredGroupsintegertaxPointstring (date-time)platformTaxRegistrationNumberstringpartnerTaxRegistrationNumberstringpartnerIsVatRegisteredbooleandisplayCurrencystringSet only when your preferred display currency differs from SAR.
ratenumbertotalAmountDisplaynumberOther responses
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).404Unknown order, or one belonging to another partner (no existence leak — always 404, never 403).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/5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b \ --header 'Authorization: Bearer $TOKEN'const res = await fetch('https://api-omni.linra.net/api/v1/scent/orders/5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b', { headers: { Authorization: `Bearer ${token}`, },});const { payload } = await res.json();var response = await httpClient.GetAsync("https://api-omni.linra.net/api/v1/scent/orders/5b1e3a1c-9d2e-4f3a-8b1c-9f0a2e3d4c5b");
var envelope = await response.Content.ReadFromJsonAsync<ApiResponse<ScentOrderPartnerResponse>>();Response
{ "state": "SUCCESS", "payload": { "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 }, "details": null}
