This endpoint returns all the data for an order: its items, the customer, the shipping address, the payment history, and the HATEOAS links describing the actions you can perform given the current status.
Use it when you need to:
Retrieves an order by its MongoDB ID
Required permission: orders:read
| Parameter | Type | Description |
|---|---|---|
orderId | string | Order ObjectId (24 hex characters). Returned by creating an order or from the list endpoint. |
If you only need a subset of fields, use ?fields= to shrink the response:
GET /orders/65f3a1b2c4d5e6f7a8b9c0d1?fields=externalId,orderStatus,total,itemsTip
Projection improves performance when fetching orders in bulk or from mobile clients on slow connections.
The _links object tells you which actions are valid on the order based on its current status. You don't have to hardcode transition logic in your client.
| Link | Appears when |
|---|---|
accept | Order is in pending. |
reject | Order is in pending. |
prepare | Order is in accepted. |
cancel | Order hasn't been shipped or delivered yet. |
returns | Order is in fulfilled or delivered. |
attachments | Always available for attaching files. |
If a link is absent, the action is not valid in the current state.
curl https://api.fenicia.io/orders/65f3a1b2c4d5e6f7a8b9c0d1 \
-H "Authorization: Bearer fn_live_your_api_key"{
"_id": "65f3a1b2c4d5e6f7a8b9c0d1",
"externalId": "FEN-10042",
"tenantId": "69db07c8bce4d49b18c42a49",
"channelId": "manual",
"channelType": "manual",
"orderStatus": "accepted",
"paymentStatus": "paid",
"currency": "MXN",
"subtotal": 1798.50,
"discount": 100.00,
"tax": 287.76,
"total": 1986.26,
"items": [
{
"sku": "SHIRT-RED-M",
"productName": "Red Shirt Size M",
"quantity": 2,
"unitPrice": 499.00,
"lineTotal": 998.00
},
{
"sku": "PANTS-BLUE-32",
"productName": "Blue Pants 32",
"quantity": 1,
"unitPrice": 899.50,
"discount": 100.00,
"lineTotal": 799.50
}
],
"customerInfo": {
"customerId": "65f3a1b2c4d5e6f7a8b9c0d2",
"firstName": "Maria",
"lastName": "Gonzalez",
"email": "maria.gonzalez@example.com",
"phone": "+525512345678"
},
"shippingAddress": {
"street": "Av. Reforma 123",
"city": "Mexico City",
"state": "CDMX",
"zipCode": "06600",
"country": "MX"
},
"deliveryInfo": { "method": "express", "carrier": "dhl" },
"timeline": [
{ "event": "order_created", "timestamp": "2026-04-11T14:23:11.000Z" },
{ "event": "payment_received", "timestamp": "2026-04-11T14:23:15.000Z" },
{ "event": "order_accepted", "timestamp": "2026-04-11T14:30:02.000Z" }
],
"orderCreated": "2026-04-11T14:23:11.000Z",
"updatedAt": "2026-04-11T14:30:02.000Z",
"_links": {
"self": "/orders/65f3a1b2c4d5e6f7a8b9c0d1",
"prepare": "/orders/65f3a1b2c4d5e6f7a8b9c0d1/prepare",
"cancel": "/orders/65f3a1b2c4d5e6f7a8b9c0d1/cancel",
"attachments": "/orders/65f3a1b2c4d5e6f7a8b9c0d1/attachments"
}
}| Code | Status | Description |
|---|---|---|
ORDER_NOT_FOUND | 404 | No order with that ID exists in your tenant. |
INVALID_OBJECT_ID | 400 | The orderId is not a valid ObjectId format. |
INSUFFICIENT_PERMISSIONS | 403 | The API key doesn't have the orders:read scope. |
INVALID_API_KEY | 401 | The API key is invalid or revoked. |
Tenant isolation
You can only read orders from your own tenant. Trying to access another tenant's order returns 404, never leaked data.