Chat completions

POST /v1/chat/completions — generate a model response for a conversation. OpenAI-compatible request and response shapes.

Cura 1T is a research model, not a medical service, and not a substitute for a clinician. Benchmark scores do not establish safety for unsupervised clinical use.

Parameters

NameType Description
modelstringrequiredModel id. Use "actava/cura-soar".
messagesarrayrequiredConversation so far. content is a string, or an array of parts for multimodal input (see Vision below).
temperaturenumberoptionalSampling temperature. Defaults to 1.
max_tokensintegeroptionalCap on generated tokens for this response — reasoning plus answer. Defaults to 32768, the model's output ceiling; larger values are accepted but capped, not rejected.
streambooleanoptionalWhen true, responds with server-sent events (see Streaming).
thinkingobjectoptionalReasoning controls: {"type": "enabled" | "disabled", "keep": null | "all"}. On by default (see the Thinking mode guide).
toolsarrayoptionalFunction definitions the model may call (see Tool calling).
tool_choicestring | objectoptional"auto" (default), "none", or a specific function.
response_formatobjectoptional{"type": "json_object"} constrains output to valid JSON (see the JSON mode guide).

Vision

Cura 1T reasons over clinical images natively. Pass images as image_url content parts — a data: URI (base64) or an https URL.

JSON
{  "model": "actava/cura-soar",  "messages": [    {      "role": "user",      "content": [        { "type": "text", "text": "Describe the abnormality in this chest X-ray." },        {          "type": "image_url",          "image_url": { "url": "data:image/png;base64,iVBORw0KGgo..." }        }      ]    }  ]}

Tool calling

Declare functions with the OpenAI tools shape; the model responds with tool_calls when it decides to invoke one. Return results as tool-role messages. Cura 1T is trained for EHR/FHIR tool workflows (MedAgentBench).

JSON
{  "model": "actava/cura-soar",  "messages": [{ "role": "user", "content": "Order a CBC panel for patient 1234." }],  "tools": [    {      "type": "function",      "function": {        "name": "create_lab_order",        "description": "Create a lab order in the EHR",        "parameters": {          "type": "object",          "properties": {            "patient_id": { "type": "string" },            "panel": { "type": "string", "description": "e.g. CBC, BMP" }          },          "required": ["patient_id", "panel"]        }      }    }  ]}

Response

Cura 1T reasons before answering, and thinking is on by default: message.content carries the final answer and message.reasoning_content the chain of thought. Reasoning tokens are billed as output and count toward max_tokens — see the Thinking mode guide for disabling reasoning and preserving it across turns. usage.prompt_tokens_details.cached_tokens counts prompt tokens served from cache. Note: if generation is cut off while the model is still reasoning (finish_reason "length"), the partial trace is returned in content and reasoning_content is absent — check finish_reason before showing content to users.

200 OK
{  "id": "chatcmpl-...",  "object": "chat.completion",  "model": "actava/cura-soar",  "choices": [    {      "index": 0,      "message": {        "role": "assistant",        "content": "...",        "reasoning_content": "..."      },      "finish_reason": "stop"    }  ],  "usage": {    "prompt_tokens": 1204,    "completion_tokens": 310,    "total_tokens": 1514,    "prompt_tokens_details": { "cached_tokens": 1024 }  }}

Streaming

With "stream": true, the response is a server-sent-event stream of chat.completion.chunk objects, terminated by data: [DONE]. Deltas carry reasoning_content first, then content.

SSE
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"}}]}data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"The"}}]}data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Escalate"}}]}data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}data: [DONE]

Errors

StatusMeaning
401Missing or invalid API key.
404Unknown model id or route.
429Rate limit exceeded — back off and retry.
500Server error — retry with backoff.
Error envelope
{  "error": {    "message": "Invalid or expired API key",    "type": "invalid_request_error",    "param": null,    "code": "invalid_api_key"  }}