BuildReasoning

Reasoning

⚠️
Preview — this feature is being built; the design below is the spec.

With reasoning on, the model works through a problem step by step before it writes its answer. This helps with maths, planning, multi-step analysis, tricky code and long tool sequences. You choose how much effort to spend, and you can get the reasoning back as a summary.

Today reasoning is turned off for every API request.

When to use it

Turn it on forLeave it off for
Multi-step maths and logicShort replies and chit-chat
Planning an agent’s next stepsClassification and extraction
Debugging and code reviewAnything where speed matters most
Comparing many options against rulesHigh-volume, low-margin traffic

Endpoint and auth

POST https://app.syntic.ai/v1/chat/completions (and Messages), Authorization: Bearer sk_live_.... The model needs capabilities.reasoning: true.

Request fields

FieldTypeDetails
reasoning.effortstringlow, medium or high. A simple dial.
reasoning.budget_tokensintegerAn exact cap on reasoning tokens, 1,024 or more. Use instead of effort, not with it.
reasoning.summarystringnone (default), auto or detailed. Whether to return a readable summary of the reasoning.
effortTypical reasoning tokens
lowup to about 2,000
mediumup to about 8,000
highup to about 32,000

Reasoning tokens count towards max_tokens, so leave room for the answer: max_tokens must be larger than budget_tokens. Sampling settings are fixed while reasoning is on (see Sampling).

Response

{
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "Route B is cheaper by £42 per week.",
      "reasoning": {
        "summary": "Compared fuel and driver hours for both routes across five delivery days...",
        "encrypted": "rsn_7dK2..."
      }
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 640,
    "completion_tokens": 3210,
    "total_tokens": 3850,
    "completion_tokens_details": { "reasoning_tokens": 3100 }
  }
}
FieldDescription
message.reasoning.summaryPresent when summary is not none. A readable account, not the full reasoning.
message.reasoning.encryptedAn opaque value that lets the model pick up its earlier reasoning. Send it back unchanged.
usage.completion_tokens_details.reasoning_tokensReasoning tokens, billed as output.

On Messages the same data is a reasoning content block.

Streaming

Reasoning streams before the answer in its own delta field:

data: {"choices":[{"index":0,"delta":{"reasoning":{"summary":"Compared fuel and"}}}]}
data: {"choices":[{"index":0,"delta":{"content":"Route B"}}]}

Keep-alive comments are sent while the model reasons without a summary, so the connection stays open.

Reasoning across tool calls

When a reply both reasons and calls tools, return the assistant message including its reasoning object in the next request. The model then continues the same line of thought after reading the tool results. Dropping it does not cause an error, but the model starts its reasoning again, which costs more and gives worse results. Editing it returns 400 invalid_reasoning_block.

Examples

curl https://app.syntic.ai/v1/chat/completions \
  -H "Authorization: Bearer $SYNTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Amara Deep",
    "stream": false,
    "max_tokens": 12000,
    "reasoning": { "effort": "medium", "summary": "auto" },
    "messages": [{ "role": "user", "content": "Route A: 182 km, 2 drivers. Route B: 205 km, 1 driver. Diesel £1.48/l at 9 l/100km, drivers £16/h, average 60 km/h, 5 days a week. Which is cheaper per week?" }]
  }'

Errors

Unified envelope.

StatuscodeparamCause
400reasoning_not_supportedmodelThe model cannot reason.
400conflicting_parametersreasoningBoth effort and budget_tokens.
400budget_too_smallreasoning.budget_tokensBelow 1,024.
400max_tokens_too_smallmax_tokensNot larger than budget_tokens.
400invalid_reasoning_blockmessages[i].reasoningA returned reasoning value was changed.

Cost

Reasoning tokens are billed at the output rate. A high effort answer can cost ten times a plain one, so start at low and raise it only where quality improves.

Build notes for the platform team

  • Reasoning is forced off today because tool loops broke when reasoning content was dropped between turns. The fix is carrying reasoning.encrypted back into assistant turns and passing it to the model.
  • encrypted is signed with a Syntic key and bound to the org, so it cannot be forged or moved between organisations.
  • Summaries are produced by Syntic and must not expose upstream provider details.
Was this page helpful?