Skip to main content

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
}
FieldTypeRequiredDescription
providerstringYesProvider ID (openai, anthropic, gemini, ollama)
promptstringYesThe user prompt
modelstringNoDefaults to provider's defaultModel
systemstringNoSystem instruction
maxTokensintegerNoMaximum tokens to generate
temperaturenumberNoSampling 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
}
}
}