Custom store API / Order lookup
Order lookup
When a customer asks about an order or delivery, LIA finds it with this API. Every order lookup carries an owner (member ID or the buyer's phone number) so one customer's orders never mix with another's.
List orders
/v1/ordersReturn the newest orders first and paginate with cursors. The last page has next_cursor: null.
Query parameters
member_idstringConditional
Member ID. Either this or buyer_cellphone is required — return 400 if both are missing
buyer_cellphonestringConditional
Buyer's mobile number (digits only). If sent with member_id, return only orders that match both
order_idstringOptional
Return only this order
order_statusstringOptional
Comma-separated Cafe24 status codes (e.g. N30,N40)
start_date / end_datestringOptional
Order date range (YYYY-MM-DD or ISO 8601)
embedstringOptional
Lillo sends items,receivers,buyer,shipments
cursorstringOptional
meta.next_cursor from the previous response (instead of Cafe24's offset)
limitnumberOptional
Default 10, max 50. Cap anything above 50 at 50
curl "https://api.mall.example.com/v1/orders?member_id=m_1001&limit=10&embed=items,receivers,buyer,shipments" \
-H "Authorization: Bearer $LILLO_API_KEY" \
-H "X-Lillo-Api-Version: 2026-11-01"{
"data": [
{
"order_id": "20261110-0001234",
"order_date": "2026-11-10T21:14:03+09:00",
"payment_date": "2026-11-10T21:15:10+09:00",
"member_id": "m_1001",
"paid": "T",
"payment_method": ["card"],
"currency": "KRW",
"payment_amount": "45000",
"actual_order_amount": { "shipping_fee": "3000" },
"receivers": [
{ "name": "K*** S.", "cellphone": "010-****-5821",
"zipcode": "06236", "address1": "123 Teheran-ro", "address2": "4F" }
],
"items": [
{
"order_item_code": "20261110-0001234-01",
"product_no": "77",
"product_name": "Wool Crew Knit",
"option_value": "Color=Ivory, Size=M",
"quantity": 1,
"product_price": "42000",
"option_price": "0",
"order_status": "N30",
"shipped_date": "2026-11-11T10:02:00+09:00",
"image": "https://cdn.mall.example.com/products/77/main.jpg"
}
],
"shipments": [
{ "shipping_code": "D-20261111-0001", "shipping_company_code": "0006",
"shipping_company_name": "CJ Logistics", "tracking_no": "684122140001",
"status": "shipping",
"items": [{ "order_item_code": "20261110-0001234-01" }] }
],
"order_url": "https://mall.example.com/myshop/order/detail.html?order_id=20261110-0001234",
"customs": null
}
],
"meta": { "next_cursor": "eyJpZCI6MTIzNH0" }
}Response fields are described on the order object page.
Get an order
/v1/orders/{order_id}order_idstringRequired
Order number (path)
member_idstringConditional
Owner — either this or buyer_cellphone is required
buyer_cellphonestringConditional
Owner — digits only
The response is { "data": Order }, in the same shape as the order list. Return the same 404 whether the order doesn't exist or belongs to someone else, so you never reveal that another customer's order exists.
curl "https://api.mall.example.com/v1/orders/20261110-0001234?buyer_cellphone=01012345821" \
-H "Authorization: Bearer $LILLO_API_KEY" \
-H "X-Lillo-Api-Version: 2026-11-01"Shipments (optional)
/v1/orders/{order_id}/shipmentsOwner parameters are required, and the response is { "data": [Shipment] }. If your order responses include shipments, you can skip this endpoint. Declare it with shipments_endpoint in capabilities.
Errors
| HTTP | code | When |
|---|---|---|
| 400 | invalid_request | No owner (member_id/buyer_cellphone) |
| 401 | unauthorized | The API key is missing or wrong |
| 404 | not_found | The order doesn't exist or belongs to someone else |
| 429 | rate_limited | Rate limit exceeded |
HTTP/1.1 400
{ "error": { "code": "invalid_request", "message": "member_id or buyer_cellphone is required" } }
HTTP/1.1 404
{ "error": { "code": "not_found", "message": "Order not found" } }