Models
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
| Query | Type | Details |
|---|---|---|
include_unavailable | boolean | Default false. When true, also lists models your plan does not include, with available: false. |
capability | string | Filter, for example vision, reasoning, json_schema. Repeatable. |
surface | string | Syntic 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
| Field | Type | Description |
|---|---|---|
id | string | The model’s Syntic display name, exactly as accepted in every model field, for example Amara S1.2. |
display_name | string | The name shown in Syntic products. Same as id today. |
family | string | amara or syntic-code. |
default | boolean | true for the model used when model is left out of a chat completion. |
available | boolean | Whether your plan includes it. |
context_window | integer | Syntic extension. Prompt plus reply, in tokens. |
max_output_tokens | integer | Highest allowed max_tokens. |
capabilities | object | Feature flags. A request that uses a feature whose flag is false returns 400 naming the feature. |
pricing | object | Retail rates for usage-credit billing. Requests inside a plan allowance carry no per-token charge. |
zero_data_retention | boolean | Usable by organisations with zero data retention. |
deprecation | object 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:
| Extension | Where | Details |
|---|---|---|
surface | Query parameter on GET /v1/models | Filters 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_window | Field on every model object | Integer, in tokens: the most prompt plus reply the model accepts. Read it instead of hard-coding limits. |
max_output_tokens, capabilities, pricing, default, available | Fields on every model object | Described 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
| Status | type | code | Cause |
|---|---|---|---|
| 401 | authentication_error | invalid_api_key | Missing or invalid key. |
| 400 | invalid_request_error | invalid_surface | surface is not a known Syntic surface. |
| 404 | not_found_error | model_not_found | No 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_windowandmax_output_tokensto remove its own copy. - Never include upstream provider ids in any field, including
description.