---
title: "List recurring eSIM subscriptions"
canonical: "https://bird.com/docs/api/reference/list-esim-recurring-subscriptions"
---

# List recurring eSIM subscriptions

`GET /v1/esim/subscriptions`

Returns recurring services for assigned eSIMs in this workspace.

## Code samples

**CLI**

```sh
bird esim recurring-subscriptions list
```

Examples: [CLI](/docs/api/reference/list-esim-recurring-subscriptions.cli.md) · [MCP](/docs/api/reference/list-esim-recurring-subscriptions.mcp.md) · [cURL](/docs/api/reference/list-esim-recurring-subscriptions.curl.md)

## Example response `200`

```json
{
  "data": [
    {
      "delivery_mode": "exact_period",
      "id": "ers_01krdgeqcxet5s7t44vh8rt9mg",
      "esim_id": "esm_01krdgeqcxet5s7t44vh8rt9mg",
      "initial_order_id": "eor_01krdgeqcxet5s7t44vh8rt9mg",
      "subscriber_id": "esub_01krdgeqcxet5s7t44vh8rt9mg",
      "offer_id": "eof_01krdgeqcxet5s7t44vh8rt9mg",
      "status": "pending",
      "latest_order_id": "eor_01krdgeqcxet5s7t44vh8rt9mg",
      "price": {
        "amount": "0.00995",
        "currency_code": "USD"
      },
      "model": "calendar_month",
      "stop_reason": "canceled"
    }
  ],
  "next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
```

## Query parameters

- `limit` (integer): Maximum number of items to return per page.
- `starting_after` (string): Cursor from the `next_cursor` field of a previous list response. Returns items immediately after the cursor position in the current sort order.
- `ending_before` (string): Cursor 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.
- `subscriber_id` (string): Return eSIMs assigned to this subscriber.
- `esim_id` (string): Filter by esim id.

## Response body

- `data` (array of object, required): Recurring services in this workspace.
- `data.delivery_mode` (string, required)

  Relationship between the paid period and package delivery.

  - `exact_period`: the package covers the accepted paid interval.
  - `recurring_top_up`: each funded period purchases a standard package. Activation, expiry, and accumulation follow that package’s terms.

  Possible values: `exact_period`, `recurring_top_up`
- `data.id` (string, required)
- `data.esim_id` (nullable string, required): The provisioned eSIM, or null while the initial purchase is pending.
- `data.initial_order_id` (nullable string, required): The initial purchase order, or null when recurrence was enrolled on an existing eSIM.
- `data.subscriber_id` (string, required)
- `data.offer_id` (string, required)
- `data.status` (string, required)

  Delivery state of the recurring service. Check payment and renewal fields separately.

  - `pending`: enrollment or the initial purchase is still being processed.
  - `active`: the service has delivered a package and remains active.
  - `needs_attention`: delivery or a related credit remains unresolved. Check period history and the associated order before purchasing a replacement.
  - `ended`: recurrence has ended. Previously delivered packages keep their own validity.

  Possible values: `pending`, `active`, `needs_attention`, `ended`
- `data.billing_status` (nullable string, required): The financial subscription state, or null while acceptance is pending.
- `data.current_period_start` (nullable string, required): The authoritative billing period boundary, or null while acceptance is pending.
- `data.current_period_end` (nullable string, required): The authoritative billing period boundary, or null while acceptance is pending.
- `data.cancel_at_period_end` (boolean, required): Whether future renewal is stopped at the current paid boundary.
- `data.latest_order_id` (nullable string, required): The order for the current billing period, or null before fulfillment starts.
- `data.created_at` (string, required): When the recurring service was requested.
- `data.price` (nullable object, required): Accepted package price before tax, in its published currency. Null before Billing accepts enrollment.
- `data.price.amount` (string, required): Decimal amount as a string, in major currency units.
- `data.price.currency_code` (string, required): ISO 4217 currency code.
- `data.model` (nullable string, required): Accepted cadence, or null before Billing accepts enrollment.
- `data.interval_count` (nullable integer, required): Number of calendar months or fixed 24-hour days in each accepted period. Null before acceptance.
- `data.next_renewal_at` (nullable string, required): Next scheduled renewal boundary. Null when enrollment is pending or future renewals have stopped.
- `data.cancellation_effective_at` (nullable string, required): When canceled recurrence ends: the paid boundary for scheduled cancellation, or the recorded cancellation time for an immediate stop. Null when renewal has not been stopped or no period was accepted. Paid packages remain available under their own validity.
- `data.stop_reason` (nullable string, required): First recorded reason future renewal stopped. Null when no reason has been recorded. Delivery outcomes are available separately in period history.
- `next_cursor` (nullable string, required): Cursor for the next page. Pass back as `starting_after` to advance forward. `null` when no next page exists.
- `prev_cursor` (nullable string, required): Cursor for the previous page. Pass back as `ending_before` to step backward. `null` when no previous page exists.
- `refresh_cursor` (nullable string, required): Refresh 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

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
