---
title: "List your SMS senders"
canonical: "https://bird.com/docs/api/reference/list-workspace-sms-senders"
---

# List your SMS senders

`GET /v1/sms/senders`

Returns the dedicated numbers and alphanumeric senders your workspace holds, newest first, with each sender's per-country registration status.

## Code samples

**TypeScript**

```ts
await bird.smsSenders.list();
```

Examples: [TypeScript](/docs/api/reference/list-workspace-sms-senders.ts.md) · [Python](/docs/api/reference/list-workspace-sms-senders.py.md) · [Go](/docs/api/reference/list-workspace-sms-senders.go.md) · [PHP](/docs/api/reference/list-workspace-sms-senders.php.md) · [CLI](/docs/api/reference/list-workspace-sms-senders.cli.md) · [MCP](/docs/api/reference/list-workspace-sms-senders.mcp.md) · [cURL](/docs/api/reference/list-workspace-sms-senders.curl.md)

## Example response `200`

```json
{
  "data": [
    {
      "id": "snd_01krdgeqcxet5s7t44vh8rt9mg",
      "source_kind": "number",
      "sender_type": "long_code",
      "country_code": "US",
      "number_id": "nda_01krdgeqcxet5s7t44vh8rt9mg",
      "status": "active",
      "next": [
        {
          "kind": "operation"
        }
      ],
      "destinations": {
        "active": [
          "US"
        ],
        "pending": [
          "US"
        ],
        "needs_attention": [
          "US"
        ]
      }
    }
  ],
  "next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
```

## Query parameters

- `type` (string)

  Filter senders by source type: a dedicated number, shared shortcode, or alphanumeric sender string.

  Possible values (may grow over time): `number`, `shared_number`, `alpha`
- `number_id` (string): Return the sender for one number you hold, using the ID from [List workspace numbers](/docs/api/reference/list-workspace-numbers). Exactly one sender exists per number, so this returns at most one result.
- `sort` (string)

  Field to sort by. `created_at` (the default) sorts newest first with the default `order`. `sender` sorts alphabetically by the sender's own value (phone number, short code, or alphanumeric sender string), all treated as plain text.

  Possible values: `created_at`, `sender`
- `order` (string)

  Sort direction. Defaults to `desc`, which sorts from newest to oldest or largest to smallest, depending on the selected sort field.

  Possible values: `asc`, `desc`
- `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.
- `include_total` (boolean): When true, the response includes a `total` field with the total number of items matching the request's filters across all pages.

## Response body

- `data` (array of object, required): Your workspace's dedicated numbers and alphanumeric senders, newest first.
- `data.id` (string, required): Identifier of this sender.
- `data.sender` (string, required): The value messages are sent from: a number in E.164 format, a shortcode, or an alphanumeric sender string.
- `data.source_kind` (string, required)
- `data.sender_type` (string): The kind of sender identity this is, which decides what each destination country asks of it. It is finer than source_kind: a short code and an ordinary long code are both numbers but follow different rules.
- `data.country_code` (nullable string): The country of the number this sender sends from. Null for an alphanumeric sender.
- `data.number_id` (string): The number this sender sends from, as returned in the `id` field of `GET /v1/numbers`. Present only when `source_kind` is `number` or `shared_number`; an alphanumeric sender has no number behind it. Exactly one sender exists per number, so this is also how you go the other way: `GET /v1/sms/senders?number_id={id}` returns this sender.
- `data.status` (string, required)
- `data.next` (array of object)

  What to do next about this sender, given the state it is in. Present on reads that
  compute it: an empty list means there is nothing to do, and the field is absent entirely
  on responses that do not report next actions.

  This routes rather than advises. A sender only knows about itself, so where the work is
  per-country it names the requirements read rather than guessing which country you meant.
- `data.next.kind` (string, required)

  What you do about this step.

  - `operation`: call the operation named in `operation`, then
    read again.
  - `external`: act somewhere this API does not reach, then read
    again.
  - `wait`: nothing is asked of you, so read again later.
  - `terminal`: nothing you do resolves this, so stop retrying.

  Tolerate a value you do not recognize: show the `description` and
  offer no action.

  Possible values (may grow over time): `operation`, `external`, `wait`, `terminal`
- `data.next.description` (string, required): A short, human-readable label for the step, suitable for display.
- `data.next.operation` (string): The operationId to call. Present only when `kind` is `operation`. The operation's own schema says how to call it; this says only which one, and what to address it with.
- `data.next.params` (object): The parameters that address the operation, by name: `{"sender_id": "…"}` for an operation on `/v1/sms/senders/{sender_id}/requirements`. A parameter the operation takes in its query string is given the same way, so an operation addressed as `?subject_id=` carries `{"subject_id": "…"}`. Every parameter the call needs is here, whether its value came from the thing you were acting on or is fixed for this step, so you can make the call from this object alone. Present only when `kind` is `operation` and the operation names a subject. A request body, when the operation takes one, is described by the operation's own schema and never appears here.
- `data.next.url` (string): A URL to open. Present only when `kind` is `external`, and only when the step has one. An external step whose `description` says to go and do something with no URL to open is normal.
- `data.destinations` (object, required)
- `data.destinations.active` (array of string, required): Countries you can send to today: switched on in your SMS destination settings, and either asking for no registration or holding an approved one. A country counts here however it became usable, including one enabled for you automatically when your organization set its business address.
- `data.destinations.pending` (array of string, required): Countries whose registration is under way and waiting on us or on a carrier. Nothing is asked of you for these; they move to `active` when the registration is approved.
- `data.destinations.needs_attention` (array of string, required): Countries you have registered for that are not working, and so are waiting on you: the registration was refused or withdrawn, or it is approved but the destination is switched off in your SMS destination settings. While this sender's number is missing the paperwork proving you own it, every country you have registered for is listed here, because none of them can carry a message until that is settled.
- `data.created_at` (string, required)
- `data.updated_at` (string, required)
- `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`.
- `total` (nullable integer): Total number of items matching the request's filters across all pages. Present only when `include_total=true` was passed; otherwise `null`.

## 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)
