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:

ParameterTypeRequiredNotes
modelstringyesModel id, for example curos-ichnus-mantus-latest.
messagesarrayyesConversation so far. Each item has a role and content.
temperaturenumbernoSampling temperature, 0 to 1. Default 0.7.
max_tokensnumbernoMaximum tokens in the response. Default 2048.
top_pnumbernoNucleus sampling, 0 to 1. Default 1.
stopstring or arraynoSequence or sequences that end generation.
streambooleannoStream the response incrementally. Default false.
userstringnoAn 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 -latest ids 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:

StatusCodeMeaning
400invalid_request_errorMalformed request, bad parameter value, or empty message.
401authentication_errorMissing or invalid API key.
403permission_errorKey lacks access to the requested model.
404not_found_errorModel id not found.
429rate_limit_errorUsage limit reached or request too large.
500api_errorInternal 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 →