Models

⚠️
Preview — this feature is being built; the design below is the spec.
GET https://app.syntic.ai/v1/models
GET https://app.syntic.ai/v1/models/{model_id}

List the models your key can use, with their limits, capabilities and prices, or fetch one model by id. Use it to fill a model picker, to read the context window instead of hard-coding it, and to confirm a model offers a feature (images, reasoning, sampling settings) before you send a request.

Today the catalog is published only on Models overview and Pricing.

Authentication

Authorization: Bearer sk_live_... (any inference key). The list is filtered to what that key’s organisation and workspace may use. Admin keys may call it too.

List models

GET /v1/models

QueryTypeDetails
include_unavailablebooleanDefault false. When true, also lists models your plan does not include, with available: false.
capabilitystringFilter, for example vision, reasoning, json_schema. Repeatable.
surfacestringSyntic extension. Only models offered on that Syntic product surface, for example surface=cli for the models Syntic Code can use. Leave it out to list the models for API keys.

The response is the OpenAI-compatible list (object: "list", data[] of object: "model"). Syntic adds fields on top of it, described in Syntic extensions; clients that only know the standard list ignore them.

{
  "object": "list",
  "data": [
    {
      "id": "Amara S1.2",
      "object": "model",
      "display_name": "Amara S1.2",
      "family": "amara",
      "description": "General work: drafting, analysis, coding help, conversation.",
      "default": true,
      "available": true,
      "context_window": 262144,
      "max_output_tokens": 32768,
      "capabilities": {
        "tools": true,
        "parallel_tool_calls": true,
        "strict_tools": true,
        "json_object": true,
        "json_schema": true,
        "vision": true,
        "documents": true,
        "citations": false,
        "reasoning": false,
        "temperature": true,
        "top_p": true,
        "top_k": false,
        "penalties": false,
        "seed": false,
        "server_tools": ["syntic_web_search", "syntic_web_fetch"]
      },
      "pricing": {
        "currency": "USD",
        "unit": "1M tokens",
        "input": 2.50,
        "cached_input": 0.40,
        "output": 12.00,
        "batch_discount": 0.5
      },
      "zero_data_retention": true,
      "created": 1767225600,
      "deprecation": null
    }
  ]
}

Get one model

GET /v1/models/{model_id} returns a single model object. model_id is the model’s id (its exact display name), URL-encoded (Amara%20S1.2).

The model object

FieldTypeDescription
idstringThe model’s Syntic display name, exactly as accepted in every model field, for example Amara S1.2.
display_namestringThe name shown in Syntic products. Same as id today.
familystringamara or syntic-code.
defaultbooleantrue for the model used when model is left out of a chat completion.
availablebooleanWhether your plan includes it.
context_windowintegerSyntic extension. Prompt plus reply, in tokens.
max_output_tokensintegerHighest allowed max_tokens.
capabilitiesobjectFeature flags. A request that uses a feature whose flag is false returns 400 naming the feature.
pricingobjectRetail rates for usage-credit billing. Requests inside a plan allowance carry no per-token charge.
zero_data_retentionbooleanUsable by organisations with zero data retention.
deprecationobject or null{ "announced_at", "retires_at", "replacement" } once a retirement is scheduled. See Deprecations.

The response never names the company or model behind a Syntic model. id and display_name are Syntic names only.

Syntic extensions

The list and model objects follow the OpenAI-compatible shape (id, object, created). Syntic adds:

ExtensionWhereDetails
surfaceQuery parameter on GET /v1/modelsFilters to the models offered on one Syntic product surface. surface=cli returns the models Syntic Code can use. Unknown values return 400 invalid_surface.
context_windowField on every model objectInteger, in tokens: the most prompt plus reply the model accepts. Read it instead of hard-coding limits.
max_output_tokens, capabilities, pricing, default, availableFields on every model objectDescribed in The model object.
curl "https://app.syntic.ai/v1/models?surface=cli" -H "Authorization: Bearer $SYNTIC_API_KEY"
{
  "object": "list",
  "data": [
    { "id": "Amara S1.2", "object": "model", "created": 1767225600, "display_name": "Amara S1.2", "context_window": 262144, "max_output_tokens": 32768, "default": true }
  ]
}

Examples

curl https://app.syntic.ai/v1/models -H "Authorization: Bearer $SYNTIC_API_KEY"
 
curl "https://app.syntic.ai/v1/models/Amara%20Quick" -H "Authorization: Bearer $SYNTIC_API_KEY"

Errors

Unified envelope.

StatustypecodeCause
401authentication_errorinvalid_api_keyMissing or invalid key.
400invalid_request_errorinvalid_surfacesurface is not a known Syntic surface.
404not_found_errormodel_not_foundNo model with that id or name.

Caching and limits

  • Responses carry Cache-Control: private, max-age=300. Cache the list for a few minutes; it changes rarely.
  • Rate limit: 60 requests per minute per key, separate from inference.

Build notes for the platform team

  • Serve the list from the model catalog, including the capability and limit columns.
  • Syntic Code (the CLI) is waiting on context_window and max_output_tokens to remove its own copy.
  • Never include upstream provider ids in any field, including description.
Was this page helpful?