API reference
The Ichnus API gives programmatic access to the Krus, Mantus, and Corus models. This reference covers authentication, endpoints, parameters, and error handling. Everything in this document describes a fictional API; verify against the current OpenAPI spec published with each release.
Base URL
All requests use the base URL:
https://api.curos.space/v1
All endpoints accept application/json. Responses are UTF-8 encoded JSON.
Authentication
Authenticate with an API key in the Authorization header:
Authorization: Bearer churos_LIVE_8f3kQzT2
API keys are issued per project on the API keys page of your account. Treat them like passwords. Keys can be rotated or revoked at any time, and revoking a key stops it working immediately. Do not ship keys in client-side code.
Models
List models
GET /models
Returns the list of models available to your account.
Example response:
{
"object": "list",
"data": [
{"id": "curos-ichnus-krus-latest", "object": "model", "context_window": 128000, "owned_by": "curos"},
{"id": "curos-ichnus-mantus-latest", "object": "model", "context_window": 256000, "owned_by": "curos"},
{"id": "curos-ichnus-corus-latest", "object": "model", "context_window": 1000000, "owned_by": "curos"}
]
}
Chat completions
Create a chat completion
POST /chat/completions
Generates a model response to a series of messages.
Request body parameters:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| model | string | yes | Model id, for example curos-ichnus-mantus-latest. |
| messages | array | yes | Conversation so far. Each item has a role and content. |
| temperature | number | no | Sampling temperature, 0 to 1. Default 0.7. |
| max_tokens | number | no | Maximum tokens in the response. Default 2048. |
| top_p | number | no | Nucleus sampling, 0 to 1. Default 1. |
| stop | string or array | no | Sequence or sequences that end generation. |
| stream | boolean | no | Stream the response incrementally. Default false. |
| user | string | no | An identifier you control, used for rate limiting. |
The messages array uses roles system, user, and assistant. The system message sets overall behavior; user and assistant messages form the conversation history.
Example request:
{
"model": "curos-ichnus-mantus-latest",
"messages": [
{"role": "system", "content": "You are a concise research assistant."},
{"role": "user", "content": "Summarize the attached report in three bullets."}
],
"temperature": 0.4,
"max_tokens": 300
}
Example response:
{
"id": "chatcmpl_9aK2mR",
"object": "chat.completion",
"created": 1780000000,
"model": "curos-ichnus-mantus-latest",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "Three-bullet summary of the report."},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 512, "completion_tokens": 42, "total_tokens": 554}
}
Parameters
- model: required. The model id. Use
-latestids for current models, or pin to a dated id for reproducibility. - messages: required. Conversation history in order. The final user message is the current request.
- temperature: controls randomness. Lower values are more deterministic. Use temperature 0 for reproducible work.
- max_tokens: caps response length. Long contexts reduce the room available for the response.
- stream: when true, the response is delivered as server-sent events, one
data:chunk per delta.
Errors
Errors return the appropriate HTTP status code with a JSON body:
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request_error | Malformed request, bad parameter value, or empty message. |
| 401 | authentication_error | Missing or invalid API key. |
| 403 | permission_error | Key lacks access to the requested model. |
| 404 | not_found_error | Model id not found. |
| 429 | rate_limit_error | Usage limit reached or request too large. |
| 500 | api_error | Internal error. Retry with backoff. |
Example error response:
{
"error": {
"type": "rate_limit_error",
"message": "Weekly Corus fair-use balance exhausted. Retry after 2026-08-03T00:00:00Z or use a Mantus model.",
"code": "rate_limited"
}
}
For rate-limit behavior and at-cost program services, see Rate limits.
All documentation →