# List AI providers

> A workspace's AI providers: the keys it keeps for frontier labs (anthropic, openai, gemini, xai, mistral, deepseek), model platforms (azure_openai, openrouter, groq, together, fireworks, cerebras) and self-hosted endpoints (anthropic_endpoint, openai_endpoint), each with its group, its config, the models it offered when last checked and its last error.

<div class="g1t-endpoint"><span class="g1t-method" data-method="get">GET</span><code>/workspaces/{workspace}/ai/providers</code></div>

Keys are sealed and never returned; secret_hint shows a key's last four characters. g1t hosts no model and bills nothing for them: they run on the workspace's own account. Members only.

`group` is `labs`, `platforms` or `self_hosted`. `secret_hint` shows the end of the key; the key itself is never returned. `models` are those the provider offered when last checked. See [AI](/guides/ai/).

- **Authentication:** Required. Send an [access token](/reference/api/#authentication) as `Authorization: Bearer`.
- **MCP tool:** [`ai`](/reference/mcp/#ai) with `action` `list_providers`, and the same inputs
- **Scope:** An access token needs [`workspace:read`](/guides/authentication/#scopes).

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `workspace` | string | Yes | The workspace's slug, e.g. "flagon-io". |

## Example request

```sh
curl https://api.g1t.sh/workspaces/flagon-io/ai/providers \
  -H "Authorization: Bearer $G1T_TOKEN"
```

## Example response

A successful request answers `200` with:

```json
[
  {
    "id": "ai_01kpx4n8r3g9s0v5w7x1z2a3be",
    "workspace": "flagon-io",
    "provider": "anthropic",
    "group": "labs",
    "name": "Anthropic",
    "config": {},
    "secret_hint": "…Q2fA",
    "created_by": "syntaqx",
    "created_at": "2026-10-04T15:42:07.318Z",
    "last_used_at": "2026-10-14T09:12:44.051Z",
    "last_error": null,
    "models": [
      "claude-haiku-4-5",
      "claude-sonnet-4-5",
      "claude-opus-4-1"
    ]
  },
  {
    "id": "ai_01kpx4n8r3g9s0v5w7x1z2a3bf",
    "workspace": "flagon-io",
    "provider": "openai_endpoint",
    "group": "self_hosted",
    "name": "vLLM",
    "config": {
      "base_url": "https://llm.example.com/v1",
      "auth_header": "authorization",
      "model": "qwen3-coder"
    },
    "secret_hint": "…k9Lm",
    "created_by": "syntaqx",
    "created_at": "2026-10-14T10:03:51.902Z",
    "last_used_at": null,
    "last_error": null,
    "models": [
      "qwen3-coder"
    ]
  }
]
```

## Errors

A failed request answers with one of these statuses and a body like `{"error": {"code": "not_found", "message": "Repository not found."}}`. See [errors](/reference/api/#errors).

| Status | Code | When |
| --- | --- | --- |
| 401 | `unauthenticated` | A token is required, or the one sent is not valid. |
| 403 | `forbidden` | The token is valid but not allowed to do this, such as a member-only change, or a token without the scope it needs. |
| 404 | `not_found` | It does not exist, or you cannot see it. |
| 422 | `invalid` | The input is not valid. `message` says which field and why. |
