Models & pricingModels overview

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 nameFamilyGood atMax output tokensInput / cached / output, $ per 1M tokens
Amara S1.2AmaraGeneral work: drafting, analysis, coding help, conversation. The default.32,7682.50 / 0.40 / 12.00
Amara QuickAmaraShort, frequent exchanges where a fast answer and a low bill matter most.32,7681.50 / 0.25 / 8.00
Amara DeepAmaraProblems that take several steps of reasoning to get right.32,7682.50 / 0.25 / 12.50
Amara S2AmaraThe newest Amara model, available from the middle plan level up.65,536Not yet published
Syntic CodeSyntic CodeSoftware work: reading code, writing patches, running tool loops.32,7682.50 / 0.25 / 12.50
Syntic Code FastSyntic CodeThe same software work when turnaround time is worth a higher price.32,7684.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

PropertyValue
EndpointPOST https://app.syntic.ai/v1/chat/completions
Request formatOpenAI-compatible chat completions
Context window262,144 tokens (prompt and reply together)
Message contentText
Tool callingYes, with tools and tool_choice
StreamingYes, and on by default
Sampling controlsFixed. temperature, top_p, n and the penalty fields are accepted, then ignored.
Prompt cachingAutomatic. 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:

SituationWhat answersHow you can tell
model names a catalog model your plan includesThat modelNothing extra in the response
model is missingAmara S1.2Nothing extra in the response
model is not a catalog name (typo, retired name, another vendor’s name)Amara S1.2Nothing extra in the response
model names a catalog model your plan does not includeAmara S1.2The 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 retentionNobody: the request is refused400 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:

LevelPlans
BaseFree
MiddleStarter, Business, Pro
TopScale, 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.

  • 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.
Was this page helpful?