
## List of providers

`GET /v1/infra/providers`

Returns the list of cloud providers on which servers can be created. The `available` field shows whether the platform has credentials configured for the provider and whether it is ready to create new virtual machines (VMs).

## Examples

### curl — personal key

```bash
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.com/v1/infra/providers
```

### curl — OAuth application

```bash
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.com/v1/infra/providers
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/infra/providers', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
const active = data.filter(p => p.available)
console.log('Available providers:', active.map(p => p.id))
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/infra/providers', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})
const { data } = await res.json()
```

## Response fields

| Field | Type | Description |
|------|-----|----------|
| `success` | boolean | Always `true` on success |
| `data` | array | Array of providers |
| `data[].id` | string | Provider ID to pass in `provider` when creating a server (e.g. `bitrix-cloud`) |
| `data[].name` | string | Display name for the user |
| `data[].available` | boolean | `true` if the provider is configured on the platform and ready to create servers. `false` — creation will fail with a `NO_CREDENTIALS` error |

## Response example

```json
{
  "success": true,
  "data": [
    {
      "id": "bitrix-cloud",
      "name": "Bitrix24 Cloud",
      "available": true
    }
  ]
}
```

## Error response example

401 — API key not provided:

```json
{
  "success": false,
  "error": {
    "code": "MISSING_API_KEY",
    "message": "API key required. Pass via X-Api-Key header."
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|----------|
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header was not provided |
| 401 | `INVALID_API_KEY` | Invalid or expired API key |
| 403 | `SCOPE_DENIED` | The key lacks the `vibe:infra` scope (added automatically — report it in [feedback](/v1/feedback) if you hit this) |
| 429 | `RATE_LIMITED` | The platform's overall request limit was exceeded |

Full list of common API errors — [Errors](/docs/errors).

## Known specifics

- The response is not paginated — the list is small and returned in full.

## See also

- [Provider plans](./plans.md) — `GET /v1/infra/providers/:providerId/plans`.
- [Provider regions](./regions.md) — `GET /v1/infra/providers/:providerId/regions`.
- [Provider OS images](./images.md) — `GET /v1/infra/providers/:providerId/images`.
- [Creating a server](/docs/infra/servers/create) — where the chosen `provider` goes.
