AI Providers
AI providers are the underlying model vendors powering the platform. The provider is resolved automatically from the selected model — you do not need to specify a provider directly in most API calls.
Endpoints
| Method | Path | Description | Auth | Rate Limit |
|---|---|---|---|---|
| GET | /ai/providers | List available providers | JWT + Entitlement | 120/60s (shared global limit) |
| GET | /ai/providers/:id | Get provider details | JWT + Entitlement | 120/60s (shared global limit) |
Active Providers
Every registered provider is listed, whether or not your plan can use it — check isAccessible, not isActive, to know what you can actually call. isActive describes whether the provider is enabled on the platform at all (true for all of these); isAccessible describes whether your plan grants access to it.
| Provider | Key | Accessible on Free plan |
|---|---|---|
google | Yes — always accessible on every plan | |
| OpenAI | openai | No — requires a paid plan with the openai model entitlement |
| Anthropic | anthropic | No — requires a paid plan with the anthropic model entitlement |
| Mistral AI | mistral | No — requires a paid plan with the mistral model entitlement |
| DeepSeek | deepseek | No |
| Kimi (Moonshot) | kimi | No |
| Local / Ollama | local | No |
| SpaceXAI (xAI Grok) | spacexai | No |
| NVIDIA NIM | nvidia | No |
Free plan: only
GET /ai/providers
List all active AI providers.
Authentication: JWT Bearer token + active AI entitlement required.
Rate limit: 60/min
Request
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
key | string | No | Filter by provider key (e.g. google) |
limit | number | No | Items per page |
offset | number | No | Pagination offset |
Response
Response Example
{
"data": [
{
"key": "google",
"displayName": "Google",
"isActive": true,
"isAccessible": true,
"baseUrl": "https://generativelanguage.googleapis.com",
"docsUrl": "https://ai.google.dev/gemini-api/docs"
},
{
"key": "openai",
"displayName": "OpenAI",
"isActive": true,
"isAccessible": false,
"baseUrl": "https://api.openai.com/v1",
"docsUrl": "https://developers.openai.com/api/docs/"
}
],
"meta": {
"total": 9,
"limit": 20,
"offset": 0,
"hasNextPage": false
}
}Response Fields
| Field | Type | Description |
|---|---|---|
key | string | Machine-readable provider key |
displayName | string | Display name |
isActive | boolean | Whether the provider is enabled on the platform at all — not plan-dependent |
isAccessible | boolean | Whether your plan grants access to this provider for chat/AI runs |
baseUrl | string | null | The provider's own API base URL |
docsUrl | string | null | Link to the provider's own API documentation |
Code Examples
curl https://api.chainabit.com/api/v1/ai/providers \
-H "Authorization: Bearer $TOKEN"const res = await fetch(`${BASE_URL}/ai/providers`, {
headers: { Authorization: `Bearer ${TOKEN}` },
});
const { data } = await res.json();import requests
res = requests.get(
f"{BASE_URL}/ai/providers",
headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]GET /ai/providers/:id
Get details about a specific provider by its UUID.
Authentication: JWT Bearer token + active AI entitlement required.
Rate limit: 60/min
Request
Path params: id — from a GET /ai/providers response's data[].id. No query parameters.
Response
Response Example
{
"data": {
"id": "cm9provider01",
"key": "google",
"displayName": "Google",
"isActive": true,
"isAccessible": true,
"baseUrl": "https://generativelanguage.googleapis.com",
"docsUrl": "https://ai.google.dev/gemini-api/docs",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}Response Fields
Same fields as GET /ai/providers above, plus:
| Field | Type | Description |
|---|---|---|
id | string | Provider UUID |
createdAt | string | ISO 8601 |
Code Examples
curl https://api.chainabit.com/api/v1/ai/providers/<provider-id> \
-H "Authorization: Bearer $TOKEN"const res = await fetch(`${BASE_URL}/ai/providers/${providerId}`, {
headers: { Authorization: `Bearer ${TOKEN}` },
});
const { data } = await res.json();import requests
res = requests.get(
f"{BASE_URL}/ai/providers/{provider_id}",
headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]Notes
- Every registered provider is returned regardless of your plan — filter by
isAccessibleon the client side if you only want to show providers the caller can actually use. - Provider availability (
isActive) is managed at the platform level and cannot be changed through the API. Your plan's accessibility (isAccessible) is managed through your subscription. - To filter models by provider, use the
providerquery parameter onGET /ai/models.