# Text · Chat completion — neuraldeep.tech API

> One section of the machine-readable reference. All sections: https://neuraldeep.tech/llms.txt · everything in one file: https://neuraldeep.tech/llms-full.txt

Base URL: `https://api.neuraldeep.tech/v1`
Auth: `Authorization: Bearer $YOUR_KEY`

OpenAI-compatible `/v1/chat/completions`. Supports streaming, tools, reasoning (gpt-oss passes reasoning tags through inline). Turns of one conversation stay on one worker automatically.

```bash
curl https://api.neuraldeep.tech/v1/chat/completions \
  -H "Authorization: Bearer $YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-oss-120b",
    "messages": [
      {"role":"system","content":"You are helpful."},
      {"role":"user","content":"Hello"}
    ],
    "max_tokens": 500,
    "temperature": 0.2
  }'
```

```python
from openai import OpenAI
client = OpenAI(api_key="$YOUR_KEY", base_url="https://api.neuraldeep.tech/v1")
r = client.chat.completions.create(
    model="gpt-oss-120b",
    messages=[{"role":"user","content":"Hello"}],
    max_tokens=500,
)
print(r.choices[0].message.content)
```

> On our qwen lanes the turns of one conversation (same key, same opening of the chat) land on the same worker on their own, so the prefix comes from the cache and multi-turn is faster. The `user` field does not affect routing. If you run several parallel copies of the same conversation and want them spread across workers, pass your own `prompt_cache_key`.

**Reasoning per model.** Reasoning is on by default; `reasoning_content` arrives as a separate field.
- `gpt-oss-120b`: depth is set by `reasoning_effort` — `low` / `medium` / `high`.
- `qwen3.8-27b`: depth is set by `reasoning_effort` — `low` / `medium` / `xhigh` (default `low`). The model does not know `high` or `minimal`; such a value is dropped and `low` stays.
- `qwen3.6-35b-a3b`: no effort levels, `reasoning_effort` has no effect.
- To turn thinking off on qwen, use the `-noreason` model (`qwen3.8-27b-noreason`, `qwen3.6-35b-a3b-noreason`). `enable_thinking: false` on the base name has no effect: the gateway drops it and the model still thinks.
- `thinking_token_budget` does not work on qwen, neither inside `chat_template_kwargs` nor at the top level.
