# List sending domains and their Inbox Insights status

`GET /v1/email/inbox-insights/domains`

Returns a page of sending domains this workspace can report on, in alphabetical
order by default, and whether Inbox Insights is switched on for each.

Only verified domains appear. Verifying a domain proves it is yours, which is
what Inbox Insights needs before it will report on it, and a domain that loses
its verification drops out of this list even if it was switched on.

A domain does not have to be ready to send to appear here. Verification and
sending readiness are reported separately on your sending domains, and this
list follows the first.

Use this list to select a verified domain for placement and reputation reports.
The `monitored` field records the workspace's monitoring preference; report access
depends on verified ownership and remains available when monitoring is off.

API-key calls require Insights preview access for your organization.

## Code samples

### TypeScript

```ts
// Requires Insights preview access for the organization.
for await (const domain of bird.email.inboxInsights.domains.list({ limit: 25 })) {
  console.log(domain.domain, domain.monitored);
}
```

### Python

```py
# Requires Insights preview access for the organization.
for domain in client.email.inbox_insights.domains.list(limit=25):
    print(domain.domain, domain.monitored)
```

### Go

```go
// Requires Insights preview access for the organization.
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
	log.Fatal(err)
}
ctx := context.Background()
for domain, err := range client.Email.InboxInsights.Domains.List(ctx, bird.EmailInboxInsightsDomainsListParams{Limit: 25}) {
	if err != nil {
		log.Fatal(err)
	}
	encoded, err := json.Marshal(domain)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(encoded))
}
```

### PHP

```php
// Requires Insights preview access for the organization.
foreach ($bird->email->inboxInsights->domains->list(['limit' => 25]) as $domain) {
    var_dump($domain->getDomain(), $domain->getMonitored());
}
```

### CLI

```sh
bird email inbox-insights domains list
```

### cURL

```sh
curl -X GET "https://us1.platform.bird.com/v1/email/inbox-insights/domains" \
  -H "Authorization: Bearer $TOKEN" \
  --url-query "sort=domain" \
  --url-query "order=asc" \
  --url-query "limit=25"
```

## Example response `200`

```json
{
  "data": [
    {
      "domain": "mail.acme.com",
      "monitored": true
    }
  ],
  "next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
```

## Query parameters

- `sending_domain` (string): Exact sending domain to return. Matching is case-insensitive.
- `search` (string): Substring match against the sending domain (case-insensitive).
- `sort` (string)

  Field to sort by. Defaults to `domain`.

  Possible values: `domain`
- `order` (string)

  Sort direction. Defaults to `asc`, which sorts alphabetically or from oldest to newest, 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.

## Response body

- `data` (array of object, required): One entry per verified domain in this page, whether or not it is switched on. A domain that has not been verified does not appear, because verification is what proves the domain is yours to report on.
- `data.domain` (string, required): The sending domain, lowercased, as it appears in your sending domains.
- `data.monitored` (boolean, required): Whether Inbox Insights reports on this domain. Switching it off stops the reporting and keeps the measurement history, so switching it back on restores the full history rather than starting again.
- `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)
