# Providers API

> List the upstream backends AnyRouter can dispatch requests to.


# Providers API

Return the catalog of upstream backends AnyRouter routes through — Cloudflare AI Gateway, partner-hosted Workers AI models, BYOK provider routes, DeepInfra, and other direct providers. Each entry carries a logo and short description suitable for rendering in a UI.

::endpoint{method="GET" path="/api/v1/providers"}

:::note
This endpoint is **public** — no authentication is required.
:::

The list is provider-organization-grained — separate from the *model* catalog at [`/api/v1/models`](/api-reference/models), which lists individual model ids.

## Request

`GET /api/v1/providers` takes no parameters and requires no auth headers. The full list is always returned; to find which providers serve a *specific* model, fetch `/api/v1/models/:id` and read its `upstreams[]` array.

## Response

```json
{
  "object": "list",
  "data": [
    {
      "id": "anthropic",
      "name": "Anthropic",
      "description": "Anthropic's Claude model family.",
      "logo": "/providers/anthropic.svg"
    },
    {
      "id": "openai",
      "name": "OpenAI",
      "description": "OpenAI-hosted GPT and embedding models.",
      "logo": "/providers/openai.svg"
    },
    {
      "id": "cloudflare",
      "name": "Cloudflare AI Gateway",
      "description": "Cloudflare's Workers AI catalog (first-party + partner-hosted).",
      "logo": "/providers/cloudflare.svg"
    }
  ]
}
```

| Field | Type | Description |
|---|---|---|
| `id` | string | Stable backend identifier. Matches the `provider` field on `/api/v1/models` entries. |
| `name` | string | Display name. |
| `description` | string | Short summary (≤ 200 chars), safe to render in tooltips. |
| `logo` | string | Absolute or root-relative path to an SVG asset. |

:::note
Provider availability is **not** returned here — that lives on [`/api/v1/health`](/api-reference/health) so the static catalog can be cached aggressively. Combine the two for a "providers + status" view.
:::

## Examples

::::tabs

:::tab{label="curl"}
```bash
curl https://anyrouter.dev/api/v1/providers
```
:::

:::tab{label="Python"}
```python
import httpx

providers = httpx.get("https://anyrouter.dev/api/v1/providers").json()["data"]
for p in providers:
    print(p["id"], "-", p["name"])
```
:::

:::tab{label="TypeScript"}
```typescript
const { data } = await (
  await fetch("https://anyrouter.dev/api/v1/providers")
).json()
data.forEach((p) => console.log(p.id, "-", p.name))
```
:::

::::

## Errors

| Status | Code | Meaning |
|---|---|---|
| 429 | `too_many_requests` | Rate limited. |
| 500 | `internal_server_error` | Unexpected AnyRouter failure. |
| 502 | `bad_gateway` | Catalog generation failed (rare; falls back to cached copy). |
| 503 | `service_unavailable` | Service is down. |


## Related

- [Models API](/docs/api-reference/models.md)
- [Smart Routing](/docs/features/routing.md)
