AI Endpoints
GET /api/ai/providers
List all enabled AI providers (public).
Response 200:
{
"data": [
{
"id": "openai",
"label": "OpenAI",
"models": ["gpt-4o", "gpt-4o-mini"],
"defaultModel": "gpt-4o"
}
]
}
GET /api/ai/models
Flat list of all models across all enabled providers.
Response 200:
{
"data": [
{ "provider": "openai", "providerLabel": "OpenAI", "model": "gpt-4o" },
{ "provider": "anthropic", "providerLabel": "Anthropic", "model": "claude-sonnet-4-6" }
]
}
GET /api/ai/models/:provider
Models for a specific provider.
Response 200:
{ "data": ["gpt-4o", "gpt-4o-mini", "gpt-3.5-turbo"] }
POST /api/ai/generate
Generate a single text completion.
Request Body:
{
"provider": "openai",
"model": "gpt-4o",
"prompt": "Explain quantum entanglement in one sentence.",
"system": "You are a physics professor.",
"maxTokens": 256,
"temperature": 0.7
}
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | Yes | Provider ID (openai, anthropic, gemini, ollama) |
prompt | string | Yes | The user prompt |
model | string | No | Defaults to provider's defaultModel |
system | string | No | System instruction |
maxTokens | integer | No | Maximum tokens to generate |
temperature | number | No | Sampling temperature (0–2) |
Response 200:
{
"data": {
"text": "Quantum entanglement is a phenomenon where two particles...",
"model": "gpt-4o",
"usage": {
"prompt_tokens": 42,
"completion_tokens": 28
}
}
}
POST /api/ai/chat
Multi-turn conversation.
Request Body:
{
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"messages": [
{ "role": "user", "content": "Hello!" },
{ "role": "assistant", "content": "Hi there! How can I help?" },
{ "role": "user", "content": "What is 2+2?" }
],
"system": "You are a helpful assistant.",
"maxTokens": 512
}
Response 200:
{
"data": {
"message": { "role": "assistant", "content": "2+2 equals 4." },
"model": "claude-sonnet-4-6",
"usage": {
"prompt_tokens": 60,
"completion_tokens": 12
}
}
}