Skip to content

Get an order

GET/v1/orders/{id}orders:read

Returns one order in full — line items and every eSIM it produced. This is the endpoint to call after an order.completed webhook, and the one to poll if an order came back PROVISIONING.

Name Notes
id Order id, as returned by Create an order
Terminal window
curl https://partner-api.esimfo.com/v1/orders/ord_4b21c9e7 \
-H 'Authorization: Bearer esf_live_at_...'

Identical to the Create an order response — the same fields, the same status values, items[] and esims[] included.

{
"id": "ord_4b21c9e7",
"order_number": "ESF-2026-0004821",
"status": "COMPLETED",
"payment_mode": "BALANCE",
"subtotal": "8.40",
"commission_amount": "0.00",
"total": "8.40",
"currency": "EUR",
"client_reference": "cart-4821",
"created_at": "2026-08-22T09:14:03.512Z",
"items": [
{
"package_id": "pkg_tr_3gb_30d",
"quantity": 2,
"unit_price": "4.20",
"line_total": "8.40"
}
],
"esims": [
{
"id": "esm_9a3f1c",
"iccid": "89852350326100409575",
"lpa_code": "LPA:1$rsp.truphone.com$QR-G-5C-1LK-1V0FS",
"qr_code_url": "https://cdn.esimfo.com/qr/esm_9a3f1c.png",
"smdp_address": "rsp.truphone.com",
"matching_id": "QR-G-5C-1LK-1V0FS",
"status": "ACTIVE",
"data_total_mb": 3072,
"data_used_mb": 512,
"data_remaining_mb": 2560,
"expires_at": "2026-09-21T00:00:00.000Z",
"failure_reason": null
},
{
"id": "esm_9a3f1d",
"iccid": null,
"lpa_code": null,
"qr_code_url": null,
"smdp_address": null,
"matching_id": null,
"status": "FAILED",
"data_total_mb": null,
"data_used_mb": null,
"data_remaining_mb": null,
"expires_at": null,
"failure_reason": "Provider rejected the activation request"
}
]
}

An eSIM can fail on its own. The second eSIM above failed while the first succeeded, which is what PARTIALLY_FAILED means at the order level. The amount for the failed one is refunded automatically. Check failure_reason per eSIM rather than assuming the order status applies to all of them.

A failed eSIM has null identifiers. No ICCID, no QR code, no LPA string — nothing was produced. Guard for null before you try to render a QR.

Orders that are not yours return 404. Not 403 — a 403 would let someone discover which ids exist by probing.

Status Code Cause
404 not_found No such order, or it belongs to another account — including a sandbox id used against live
403 insufficient_scope Key lacks orders:read