List orders
/v1/esim/ordersbird esim orders listcurl -X GET "https://us1.platform.bird.com/v1/esim/orders" \
-H "Authorization: Bearer $TOKEN" \
--url-query "limit=25"{
"data": [
{
"created_at": "2026-05-20T09:14:52Z",
"updated_at": "2026-05-25T16:42:01Z",
"id": "eor_01krdgeqcxet5s7t44vh8rt9mg",
"status": "scheduled",
"mode": "live",
"offer_id": "eof_01krdgeqcxet5s7t44vh8rt9mg",
"zone_id": "ezn_01krdgeqcxet5s7t44vh8rt9mg",
"esim_id": "esm_01krdgeqcxet5s7t44vh8rt9mg",
"subscriber_id": "esub_01krdgeqcxet5s7t44vh8rt9mg",
"recurring_subscription_id": "ers_01krdgeqcxet5s7t44vh8rt9mg",
"package_id": "epk_01krdgeqcxet5s7t44vh8rt9mg",
"price": {
"amount": "0.00995",
"currency_code": "USD"
},
"wallet_transaction_id": "wtx_01krdgeqcxet5s7t44vh8rt9mg",
"refund_transaction_id": "wtx_01krdgeqcxet5s7t44vh8rt9mg",
"delivery": {
"to": "traveler@example.com",
"channel": "email",
"locale": "pt-BR"
},
"funding": {
"required_amount": {
"amount": "0.00995",
"currency_code": "USD"
},
"lapses_at": "2026-09-08T14:51:01Z"
},
"failure_code": "insufficient_balance"
}
],
"next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
"prev_cursor": null,
"refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
Returns the workspace's orders as a cursor-paginated list, newest first. Filter by status to find in-flight or failed purchases, by esim_id for one eSIM's purchase history, or by mode to separate test purchases from real ones. Test orders are listed alongside real ones by default, each carrying its own mode.
Query Parameters
limitintegerMaximum number of items to return per page.
starting_afterstringCursor from the next_cursor field of a previous list response. Returns items immediately after the cursor position in the current sort order.
ending_beforestringCursor from the prev_cursor or refresh_cursor field of a previous list response. Returns items immediately before the cursor position in the current sort order. prev_cursor returns the preceding page. refresh_cursor anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
created_afterstringLimits the response to resources created at or after this timestamp. Combine it with created_before to select a time window. Use an RFC 3339 timestamp with a timezone offset.
created_beforestringLimits the response to resources created before this timestamp. Combine it with created_after to select a time window. Use an RFC 3339 timestamp with a timezone offset.
statusarrayKeep only orders whose status matches; repeat the parameter to match any of several.
esim_idstringKeep only orders for this eSIM.
modestringKeep only orders created in this mode. Without it, both live and test orders are returned.
Possible values: live, test
completed_afterstringKeep only orders completed at or after this timestamp. Combine it with completed_before to select a completion window, which is what the analytics spend and completion figures are counted by; created_after selects when an order was placed instead. Orders that never completed are excluded. Use an RFC 3339 timestamp with a timezone offset.
completed_beforestringKeep only orders completed before this timestamp. Combine it with completed_after to select a completion window. Orders that never completed are excluded. Use an RFC 3339 timestamp with a timezone offset.
Response Payload
dataOrders, newest first.
Show child attributes
data.created_atdata.updated_atdata.iddata.statusdata.modedata.offer_idOffer purchased.
data.offer_revisionRevision of the offer this order locked at creation. The quoted price stays that of this revision even if the offer changes later. The produced package snapshots its coverage at purchase; the zone's live country list governs new sales only.
data.zone_idCoverage zone of the purchased offer, captured at creation.
data.esim_idThe eSIM the package lands on. Set at creation when adding to an existing eSIM; set when provisioning starts for a new-eSIM order; null before that.
data.subscriber_idPerson accepted at creation for a new eSIM. Null when not requested, including top-ups. Delivery assigns this person atomically with the package. Cleared only during irreversible workspace deletion.
data.recurring_subscription_idThe recurring service associated with this purchase. Absent for one-time orders.
data.package_idThe purchased data package, set when the order completes; null before that.
data.priceThe quoted price, locked at creation in your billing currency. A mode: test order quotes this price and is never charged it, so its wallet_transaction_id stays null.
Show child attributes
data.price.amountDecimal amount as a string, in major currency units.
data.price.currency_codeISO 4217 currency code.
data.wallet_transaction_idThe wallet transaction that paid for this order, for reconciling against your billing transactions. Null until the charge lands, and always null for a mode: test order, which is never charged.
data.refund_transaction_idThe wallet transaction that credited the charge back after a failure. Null unless the order failed after charging.
data.deliveryWhere install credentials are delivered once available. Present when requested at creation.
Show child attributes
data.delivery.toRecipient address. An email address for the email channel, an E.164 phone number for the sms channel.
data.delivery.channelChannel the install credentials are delivered over.
Possible values: email, sms
data.delivery.localeLanguage for the message. Falls back to the closest available language, then English.
data.fundingPresent once a charge attempt was refused for insufficient funds, while the order waits in charging; null otherwise. Recording the refusal details is best-effort, so a charging order can carry null here and still be waiting for funds. Read the required balance from billing rather than treating null as funded.
Show child attributes
data.funding.required_amountThe amount the wallet must hold for the charge to succeed, including tax, exactly as the billing engine reported it on the last refused attempt. The balance it was refused against is not echoed here - it goes stale the moment funds move, so read the live balance from billing.
Show child attributes
data.funding.required_amount.amountDecimal amount as a string, in major currency units.
data.funding.required_amount.currency_codeISO 4217 currency code.
data.funding.lapses_atThe earliest time a still-refused charge attempt fails the order with failure_code: insufficient_balance instead of parking it again. Not a hard expiry: a top-up landing after this time can still complete the order, right up to its next charge attempt.
data.failure_codeMachine-readable reason the order failed. Null unless status is failed. Open enum: treat unrecognized values as future failure kinds. canceled means the workspace canceled the order while it was waiting for funds; resolved_by_support means Bird support closed a stuck order as failed; esim_released means the top-up target became unserviceable before delivery: its eSIM was releasing, released, or failed; mode_mismatch means the offer's mobile networks changed after this order was routed, putting the order on the other side of the live/test boundary; it was failed instead of delivered, because a real purchase cannot be served by a test network and a test order cannot reserve real inventory. In every case any charge has been credited back.
Possible values (may grow over time): insufficient_balance, carrier_error, capacity_exhausted, offer_unavailable, internal_error, canceled, resolved_by_support, esim_released, mode_mismatch
data.failure_reasonWhy the order failed, in plain terms. Null unless status is failed.
data.completed_atWhen the order reached completed. Null before that.
next_cursorCursor for the next page. Pass back as starting_after to advance forward. null when no next page exists.
prev_cursorCursor for the previous page. Pass back as ending_before to step backward. null when no previous page exists.
refresh_cursorRefresh anchor, the first row of this response. Pass back as ending_before to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-null whenever data is non-empty; null only on an empty page. Distinct from prev_cursor.
Related resources
Continue with the documentation, guides and examples for this topic.