Models overview
Every request to the Syntic API is answered by one model from the Syntic catalog. You choose it by name in the model field of POST /v1/chat/completions. This page lists the models, explains how the API settles on the model that actually answers, and points to the pages on price, limits and retirement.
The catalog
| Model name | Family | Good at | Max output tokens | Input / cached / output, $ per 1M tokens |
|---|---|---|---|---|
Amara S1.2 | Amara | General work: drafting, analysis, coding help, conversation. The default. | 32,768 | 2.50 / 0.40 / 12.00 |
Amara Quick | Amara | Short, frequent exchanges where a fast answer and a low bill matter most. | 32,768 | 1.50 / 0.25 / 8.00 |
Amara Deep | Amara | Problems that take several steps of reasoning to get right. | 32,768 | 2.50 / 0.25 / 12.50 |
Amara S2 | Amara | The newest Amara model, available from the middle plan level up. | 65,536 | Not yet published |
Syntic Code | Syntic Code | Software work: reading code, writing patches, running tool loops. | 32,768 | 2.50 / 0.25 / 12.50 |
Syntic Code Fast | Syntic Code | The same software work when turnaround time is worth a higher price. | 32,768 | 4.50 / 0.70 / 20.00 |
Prices only apply to requests paid from usage credits; requests inside your plan allowance carry no per-token charge. See Pricing.
Shared characteristics
| Property | Value |
|---|---|
| Endpoint | POST https://app.syntic.ai/v1/chat/completions |
| Request format | OpenAI-compatible chat completions |
| Context window | 262,144 tokens (prompt and reply together) |
| Message content | Text |
| Tool calling | Yes, with tools and tool_choice |
| Streaming | Yes, and on by default |
| Sampling controls | Fixed. temperature, top_p, n and the penalty fields are accepted, then ignored. |
| Prompt caching | Automatic. Repeated prompt beginnings are billed at the cached-input rate. |
max_tokens above a model’s maximum output is lowered to that maximum, not refused. When max_tokens is left out, no ceiling is sent and the model’s own default applies. GET /v1/models returns the same figure as max_output_tokens.
Model names are exact strings
Model names contain spaces and capital letters. Send them exactly as they appear in the table:
{ "model": "Amara Quick", "messages": [{ "role": "user", "content": "Hi" }] }amara-quick, Amara quick and AmaraQuick are not recognized. An unrecognized name does not produce an error; see the next section.
How the answering model is chosen
Today the API never refuses a request because of the model name. Instead it walks through these checks:
| Situation | What answers | How you can tell |
|---|---|---|
model names a catalog model your plan includes | That model | Nothing extra in the response |
model is missing | Amara S1.2 | Nothing extra in the response |
model is not a catalog name (typo, retired name, another vendor’s name) | Amara S1.2 | Nothing extra in the response |
model names a catalog model your plan does not include | Amara S1.2 | The response has an x-syntic-model-downgraded header whose value is the name of the model that answered |
| Your organization uses zero data retention and the model requires standard retention | Nobody: the request is refused | 400 with "error": "model_unavailable" |
Not live yet — on develop: the API stops guessing. A name that is not a catalog name is refused with 404 model_not_found, and a catalog model your plan does not include with 403 model_not_in_plan (with an upgrade_url); the x-syntic-model-downgraded header is retired. A missing model still uses the default. Names must be ids that GET /v1/models returns.
Today a misspelt or retired name quietly falls back to Amara S1.2, so a typo can go unnoticed for a long time. Keep model names in configuration, test them once after every change, and log the x-syntic-model-downgraded header. Once the 404 model_not_found change above is live, a typo fails loudly instead.
Plan requirements
Each model carries a minimum plan level. Plans map onto three levels:
| Level | Plans |
|---|---|
| Base | Free |
| Middle | Starter, Business, Pro |
| Top | Scale, Operations, Enterprise |
An organization can use any model whose minimum level is at or below its own. Organizations with a contract or comped plan are checked against that plan.
Zero data retention
Organizations that run in zero-data-retention mode cannot use models that depend on standard upstream retention. Requests for such a model are rejected before anything is billed:
{
"error": {
"type": "invalid_request_error",
"code": "model_unavailable",
"message": "This model requires standard data retention and isn't available for your organization's zero-data-retention configuration. Choose a different model.",
"param": null,
"request_id": "req_6f1c2a9e0b7d4c3a8e5f1b2d"
}
}Pick another model from the catalog and resend.
Check which model answered
# -D - prints the response headers before the body.
curl -s -D - https://app.syntic.ai/v1/chat/completions \
-H "Authorization: Bearer $SYNTIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "Amara Deep", "stream": false,
"messages": [{"role": "user", "content": "Name one prime above 100."}]}' \
| grep -i '^x-syntic'Read the header from server-side code. Browsers only let page scripts see the headers the API explicitly exposes, and x-syntic-model-downgraded is not one of them today.
Do not rely on the model field inside the response body to identify the catalog model; use the header and the name you sent.
Listing models from code
There is no endpoint that lists models yet. Keep the model name in configuration (an environment variable or a settings file) so you can switch models without shipping new code, and check Release notes for catalog changes.
Related pages
- Choosing a model: a method for picking and re-evaluating a model.
- Pricing: per-token prices, plan allowances and worked examples.
- Limits: request rate, request size and usage windows.
- Deprecations: how models are retired and what to do about it.