Get an order
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.
Path parameters
Section titled “Path parameters”| Name | Notes |
|---|---|
id |
Order id, as returned by Create an order |
curl https://partner-api.esimfo.com/v1/orders/ord_4b21c9e7 \ -H 'Authorization: Bearer esf_live_at_...'Response 200
Section titled “Response 200”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.
Errors
Section titled “Errors”| 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 |
