Biklo for developersTESTsandbox-api.biklo.comchange

List orders

GET/v1/orders

scope orders.read

Orders placed with you. Lines carry your own external_id and sku so you can match them to your catalog without a lookup.

Query parameters#

NameExample
status—pending | accepted | rejected | ship_to_courier | picked_up | in_delivery | delivered | confirmed | returned | cancelled | expired | lost | not_confirmed
updated_since—ISO 8601
created_from— ISO 8601
created_to—ISO 8601
limit50Max 100
cursor—next_cursor

Response#

FieldTypeDescription
countintegerHow many orders in THIS page.
next_cursorstring|nullPass back as ?cursor=; null on the last page.
dataarrayYour orders — a SUMMARY of each. The detail fields (delivery address, fees, parcels, timestamps) are only on GET /v1/orders/{id}, so fetch the one you are about to act on.
data[].idintegerOUR order id, and what goes in the path of every other order endpoint.
data[].referencestring|nullThe human-readable order reference, as the buyer sees it. Quote this to support, not the id.
data[].statusstringWhere the order is. Only pending can be accepted or rejected; accepted is the only one that can take a waybill.

Accepts pending · accepted · rejected · expired · ship_to_courier · picked_up · in_delivery · lost · delivered · confirmed · not_confirmed · returned · cancelled

data[].can_acceptbooleanWhether 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.
data[].has_awbbooleanWhether a waybill already exists. Requesting one again returns the existing AWB rather than booking a second shipment, but this lets you skip the call.
data[].totalobjectWhat the buyer paid, in total.
data[].total.amountinteger|nullMinor units.
data[].total.currencystring|nullThe order currency, decided by the listing. This is the balance it settles into.
data[].refundedobjectWhat 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.
data[].refunded.amountintegerMinor units. 0 when nothing was refunded.
data[].refunded.currencystring|nullThe order currency.
data[].itemsarrayThe order lines.
data[].items[].idintegerThe order LINE id. This is what a parcel plan references, so you cannot pack an order without reading these first.
data[].items[].product_idintegerOur product id.
data[].items[].external_idstring|nullYOUR product id, carried onto the line so you can match it to your catalogue without a lookup.
data[].items[].skustring|nullYour SKU, for the same reason.
data[].items[].titlestringThe product title at the time of sale.
data[].items[].quantityintegerHow many pieces of this line ship. Equal to quantity_ordered unless the seller short-shipped.
data[].items[].quantity_orderedintegerHow many pieces the buyer ordered.
data[].items[].quantity_shortintegerPieces the seller did not have (short shipment), refunded to the buyer. 0 normally. total_price covers only the pieces that ship.
data[].items[].unit_priceobjectPrice for ONE unit.
data[].items[].unit_price.amountinteger|nullMinor units. This is what the buyer actually paid, so it reflects an accepted price offer rather than the listed price.
data[].items[].unit_price.currencystring|nullCurrency of the unit price.
data[].items[].total_priceobjectPrice for the whole line.
data[].items[].total_price.amountinteger|nullMinor units — unit price times quantity.
data[].items[].total_price.currencystring|nullCurrency of the line total.
data[].awbobject|nullThe waybill, once one exists — {number, tracking_url}, described on GET /v1/orders/{id}. null before the waybill is requested, which is what the example above shows: the order is still pending.
data[].is_dropshippingbooleanWhether this order ships from a pickup point rather than your own address. The return address stays your seller address either way.
data[].delivered_atstring|nullISO-8601 UTC, when the courier recorded delivery; null until then. status stays accepted while the parcel travels and after it arrives, so this — not status — is how a poll sees the delivery (the delivery also bumps updated_at).
data[].created_atstringISO-8601 UTC. When the buyer paid.
data[].updated_atstringISO-8601 UTC. What ?updated_since= compares against.

Example

{
    "count": 1,
    "next_cursor": null,
    "data": [
        {
            "id": 711,
            "reference": "SBXORD-SJP6NHXY",
            "status": "pending",
            "can_accept": true,
            "has_awb": false,
            "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": null,
            "is_dropshipping": false,
            "delivered_at": null,
            "created_at": "2026-09-11T09:20:14Z",
            "updated_at": "2026-09-11T09:20:14Z"
        }
    ]
}

Failures use the shared error envelope — a machine-readable code and a request_id to quote to support. Error handling.

curl -X GET "https://sandbox-api.biklo.com/v1/orders?limit=50" \
  -H "Authorization: Bearer bk_test_YOUR_KEY"
<?php

$ch = curl_init('https://sandbox-api.biklo.com/v1/orders?limit=50');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer bk_test_YOUR_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
using System.Net.Http;
using System.Net.Http.Headers;

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "bk_test_YOUR_KEY");

var request = new HttpRequestMessage(
    new HttpMethod("GET"),
    "https://sandbox-api.biklo.com/v1/orders?limit=50");

var response = await client.SendAsync(request);
var json = await response.Content.ReadAsStringAsync();
import requests

response = requests.get(
    "https://sandbox-api.biklo.com/v1/orders?limit=50",
    headers={"Authorization": "Bearer bk_test_YOUR_KEY"},
)

data = response.json()
const response = await fetch("https://sandbox-api.biklo.com/v1/orders?limit=50", {
  method: "GET",
  headers: {
    Authorization: "Bearer bk_test_YOUR_KEY"
  }
});

const data = await response.json();
import java.net.http.*;
import java.net.URI;

var client = HttpClient.newHttpClient();

var request = HttpRequest.newBuilder()
    .uri(URI.create("https://sandbox-api.biklo.com/v1/orders?limit=50"))
    .header("Authorization", "Bearer bk_test_YOUR_KEY")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();

var response = client.send(request, HttpResponse.BodyHandlers.ofString());