One order
GET/v1/orders/{id}
scope orders.read
Adds the delivery details you need to ship, the fee breakdown and the courier.
Response#
| Field | Type | Description |
|---|---|---|
id | integer | OUR order id, and what goes in the path of every other order endpoint. |
reference | string|null | The human-readable order reference, as the buyer sees it. Quote this to support, not the id. |
status | string | Where the order is. Only pending can be accepted or rejected; accepted is the only one that can take a waybill.Accepts |
can_accept | boolean | Whether POST /v1/orders/{id}/accept would succeed right now. Branch on this rather than learning our status model — it stays right if the model changes. |
has_awb | boolean | Whether a waybill already exists. Requesting one again returns the existing AWB rather than booking a second shipment, but this lets you skip the call. |
total | object | What the buyer paid, in total. |
total. | integer|null | Minor units. |
total. | string|null | The order currency, decided by the listing. This is the balance it settles into. |
refunded | object | What has been refunded to the buyer so far (short shipment, return, cancellation). total stays what the buyer PAID; this is the part that went back. |
refunded. | integer | Minor units. 0 when nothing was refunded. |
refunded. | string|null | The order currency. |
items | array | The order lines. |
items[]. | integer | The order LINE id. This is what a parcel plan references, so you cannot pack an order without reading these first. |
items[]. | integer | Our product id. |
items[]. | string|null | YOUR product id, carried onto the line so you can match it to your catalogue without a lookup. |
items[]. | string|null | Your SKU, for the same reason. |
items[]. | string | The product title at the time of sale. |
items[]. | integer | How many pieces of this line ship. Equal to quantity_ordered unless the seller short-shipped. |
items[]. | integer | How many pieces the buyer ordered. |
items[]. | integer | Pieces the seller did not have (short shipment), refunded to the buyer. 0 normally. total_price covers only the pieces that ship. |
items[]. | object | Price for ONE unit. |
items[]. | integer|null | Minor units. This is what the buyer actually paid, so it reflects an accepted price offer rather than the listed price. |
items[]. | string|null | Currency of the unit price. |
items[]. | object | Price for the whole line. |
items[]. | integer|null | Minor units — unit price times quantity. |
items[]. | string|null | Currency of the line total. |
awb | object|null | The waybill, once one exists; null before that. |
awb. | string | The AWB number, for the courier. |
awb. | string|null | Where the buyer can follow the parcel. |
is_dropshipping | boolean | Whether this order ships from a pickup point rather than your own address. The return address stays your seller address either way. |
created_at | string | ISO-8601 UTC. When the buyer paid. |
updated_at | string | ISO-8601 UTC. What ?updated_since= compares against. |
accepted_at | string|null | ISO-8601 UTC, or null if not accepted yet. |
delivered_at | string|null | ISO-8601 UTC, when the courier recorded delivery; null until then. status stays accepted through delivery, so read this (or GET /v1/orders/{id}/tracking) to know the parcel arrived. |
expires_at | string|null | When an unaccepted order is auto-rejected. Accept before this or it goes away on its own. |
notes_from_buyer | string|null | Anything the buyer wrote at checkout. Read it before you pack — it is where "please call before delivery" lives. |
courier_id | integer|null | Which courier carries it. Chosen at checkout, not by you. |
seller_invoice | string|null | Your own invoice, once uploaded through POST /v1/orders/{id}/invoice — a stored path or the URL you gave us. |
fees | object | What this order costs YOU. Both are amounts we take, not amounts the buyer paid. |
fees. | integer|null | Our commission, in minor units. 0 when your company absorbs it or the listing is fee-free. |
fees. | integer|null | The courier charge, in minor units. 0 when the buyer paid it at checkout. |
fees. | string|null | Currency of both figures. |
delivery | object | Where it goes. Present on the detail endpoint only. |
refunds | array | Every refund on this order, oldest first: {id, reason, type, amount, currency, status, items: [{id, quantity}], created_at}. reason is short_shipped (the seller had fewer pieces — items says which line and how many), buyer_returned, seller_rejected, cancellation, …; status is succeeded, pending or requires_manual_review. |
delivery. | string|null | Who receives it. |
delivery. | string|null | Their phone, for the courier. |
delivery. | string|null | Destination city. |
delivery. | string|null | Destination county. |
delivery. | string|null | Destination postal code. |
delivery. | string|null | ISO-2 of the destination. |
delivery. | boolean | Whether it goes to a parcel locker rather than a door. Locker parcels have size limits a door delivery does not. |
parcels | array | How many BOXES this order ships in, and what is in each. The courier is priced per parcel, so without this you cannot reconcile a waybill against what you packed. An EMPTY list means no plan was ever stored — every order accepted before packing plans existed. Those still ship: the default plan is applied when the waybill is requested. |
parcels[]. | integer | The parcel id. |
parcels[]. | integer | Box 1, 2, 3 — the order they were declared in. |
parcels[]. | number|null | Weight of the packed box. Stored in grams and published in kilograms, matching the units you send. |
parcels[]. | number|null | Centimetres. |
parcels[]. | number|null | Centimetres. |
parcels[]. | number|null | Centimetres. |
parcels[]. | boolean | true means YOU said so when accepting; false means we assumed one box per line. Worth distinguishing — an assumed plan is a guess the courier may price differently. |
parcels[]. | array | What is inside this box. |
parcels[]. | integer | Which order line, matching items[].id. |
parcels[]. | integer | How many units of that line are in this box. |
Example
{
"id": 711,
"reference": "SBXORD-SJP6NHXY",
"status": "accepted",
"can_accept": false,
"has_awb": true,
"total": {
"amount": 359800,
"currency": "RON"
},
"refunded": {
"amount": 0,
"currency": "RON"
},
"items": [
{
"id": 1123,
"product_id": 237224,
"external_id": "ERP-1001",
"sku": "MTB-29-001",
"title": "Bicicleta MTB Hardtail 29 inch",
"quantity": 2,
"quantity_ordered": 2,
"quantity_short": 0,
"unit_price": {
"amount": 179900,
"currency": "RON"
},
"total_price": {
"amount": 359800,
"currency": "RON"
}
}
],
"awb": {
"number": "SBX0000000711",
"tracking_url": "https://sandbox-api.biklo.com/track/SBX0000000711"
},
"is_dropshipping": false,
"created_at": "2026-09-11T09:20:14Z",
"updated_at": "2026-09-11T10:02:47Z",
"accepted_at": "2026-09-11T10:02:47Z",
"delivered_at": null,
"expires_at": "2026-09-13T09:20:14Z",
"notes_from_buyer": "Please call before delivery.",
"courier_id": 1,
"seller_invoice": null,
"fees": {
"platform_fee": 17990,
"shipping": 2500,
"currency": "RON"
},
"delivery": {
"recipient": "John Doe",
"phone": "07xxxxxxxx",
"city": "Craiova",
"county": "Dolj",
"postcode": "200000",
"country": "RO",
"is_locker": false
},
"refunds": [],
"parcels": [
{
"id": 4012,
"sequence_no": 1,
"weight_kg": 2.4,
"length_cm": 40,
"width_cm": 30,
"height_cm": 20,
"is_seller_declared": true,
"items": [
{
"order_item_id": 1123,
"quantity": 2
}
]
}
]
}