Choose a model
Use the public models endpoint instead of relying on a copied list:
curl -fsSL https://api.saygm.com/v1/modelsThe response keeps the standard OpenAI model-list shape and adds SayGM metadata. The endpoint needs no API key.
Decide in three steps
Section titled “Decide in three steps”- Data sensitivity picks the
tier.confidentialkeeps inference inside a TEE.frontierandopenboth send the request to an upstream provider that processes it under its own terms. Read Privacy model before deciding. - Your tool or SDK picks the
api_shapesentry. An OpenAI client needschat.completionsorresponses, an Anthropic client needsmessages, and a Gemini client needsgenerateContentorstreamGenerateContent. Image generation models listimages.generations. - Your budget picks between the survivors. Compare
pricing.dimensions, and checklong_context_threshold_tokensif your prompts are large.
Once you have a model, the routing headers choose between its upstream routes for each request.
A catalog entry
Section titled “A catalog entry”{ "object": "list", "data": [ { "id": "gpt-5.5", "object": "model", "created": 1704067200, "owned_by": "openai", "tier": "frontier", "model_class": "frontier", "confidential": false, "display_name": "GPT-5.5", "gateway_provider": "openai", "api_shapes": ["chat.completions", "responses"], "pricing": { "unit": "ndollars_per_mtok", "currency": "USD", "basis": "cheapest_eligible_offer", "dimensions": { "input_per_mtok_ndollars": 3975000000, "output_per_mtok_ndollars": 23850000000, "cache_read_per_mtok_ndollars": 397500000, "long_context_threshold_tokens": 272000, "long_context_input_per_mtok_ndollars": 7950000000, "long_context_output_per_mtok_ndollars": 35775000000, "long_context_cache_read_per_mtok_ndollars": 795000000 }, "surcharges": {} }, "price_range": { "unit": "ndollars_per_mtok", "currency": "USD", "floor": { "basis": "cheapest_eligible_offer", "dimensions": { /* same as pricing */ } }, "route_ceiling": { "basis": "highest_eligible_offer", "dimensions": { /* … */ } }, "ceiling": { "basis": "published_retail", "dimensions": { "input_per_mtok_ndollars": 5000000000, "output_per_mtok_ndollars": 30000000000 /* … */ } } }, "available": true, "coming_soon": false, "capabilities": { "vision": true, "tools": true, "image_input": false, "image_output": false, "image_generation": false } } // Remaining models omitted. ]}Fetch a single entry by appending its ID to the path:
curl -fsSL https://api.saygm.com/v1/models/gpt-5.5Fields
Section titled “Fields”| Field | Meaning |
|---|---|
id |
Exact value to send in the request’s model field. |
object |
Always model on an entry; the envelope is list. |
created |
Unix timestamp carried for OpenAI shape compatibility. Every entry reports the same constant, so do not read it as a release date. |
owned_by |
Organization credited with the model. |
tier |
frontier, confidential, or open. See below. |
model_class |
open or frontier. Omitted until SayGM has reviewed the model. |
confidential |
true when inference runs in a TEE. Omitted until SayGM has reviewed the model. |
display_name |
Human-readable name. Omitted when SayGM has no curated name. |
gateway_provider |
SayGM’s provider namespace for the model, usually its maker. |
api_shapes |
Interfaces the model accepts. |
pricing |
Rates in nano-dollars per million tokens. Omitted for fusion products, which are billed per leg. |
price_range |
Direct-product price bounds: floor (cheapest routable offer), route_ceiling (most expensive routable offer), and ceiling (published retail). floor and route_ceiling are omitted when no offer is routable. |
billing |
Present on fusion products as { "mode": "metered_per_leg" }; omitted otherwise. |
fusion |
Fusion members, adjudicator, strategy, and availability; present only on fusion products. |
available |
Advisory routing availability when the catalog was generated. |
coming_soon |
true for an announced model that cannot be called yet. It has no pricing or price_range. |
capabilities |
Hard vision and tools flags. Image models add image-generation limits. |
Many models are available from several providers. For privacy, read tier
and confidential; to choose which providers may receive your requests, use
X-GM-Providers.
Model IDs
Section titled “Model IDs”Copy id out of the catalog verbatim. Current buyer IDs use canonical model-maker
names, for example qwen3-32b-tee, kimi-k2.6-tee, and glm-5.2-tee:
curl -fsSL https://api.saygm.com/v1/models/qwen3-32b-teeDo not add a prefix of your own. Some third-party tools prepend a provider
segment as part of their configuration syntax and strip it before the request
reaches SayGM; Aider’s openai/ is one such case, documented under
coding agents. That prefix belongs to the tool,
and it goes in front of the whole ID, slashes included.
Filter by API shape
Section titled “Filter by API shape”For an OpenAI Chat Completions client:
curl -fsSL \ "https://api.saygm.com/v1/models?api_shape=chat.completions"The query parameter is singular (api_shape) even though the response field is
plural (api_shapes). An unrecognized value is not an error: the endpoint
returns HTTP 200 with an empty data list. See
errors and retries.
Frontier models are closed models routed to an upstream provider. The SayGM gateway is sealed inside a TEE, but the upstream provider receives the request under its own API terms.
Confidential models run open-weight inference inside a TEE and report
confidential: true. Their IDs end in -tee by convention, but the
confidential field is the authoritative signal. The prompt remains inside the
confidential serving environment for inference.
Open models are open-weight models routed to an upstream provider rather
than served in a TEE. Their IDs carry no -tee suffix. A single open model can
be served by several upstream providers.
See Privacy model before making data-handling claims to your own users.
Pricing units
Section titled “Pricing units”pricing.unit is ndollars_per_mtok: nano-dollars per million tokens. Direct
and cascade products expose a single rate card; fusion products omit pricing
and price_range because they are billed per member and adjudicator leg. The API
uses integers so a rate never depends on decimal rounding. Divide by
1,000,000,000 to read a rate in dollars per million tokens.
5000000000 nano-dollars is $5.00 per million input tokens.
pricing is the cheapest routable offer when one exists (basis: "cheapest_eligible_offer"), otherwise published retail (basis: "published_retail"). To have each request sent to the
lowest-priced provider, add X-GM-Routing: cheapest. Read
price_range.ceiling when you need retail.
Image models are priced per image with output_per_image_ndollars and omit
token dimensions they do not bill.
Required input/output dimensions are always integers. Optional dimensions that
do not apply are omitted entirely, never serialized as null; omission means
the dimension is not offered, not that it is free.
| Dimension | Meaning |
|---|---|
input_per_mtok_ndollars |
Standard input rate. |
output_per_mtok_ndollars |
Standard output rate. |
cache_read_per_mtok_ndollars |
Rate for a prompt-cache hit. |
cache_write_5m_per_mtok_ndollars |
Rate to write a 5-minute cache entry. |
cache_write_1h_per_mtok_ndollars |
Rate to write a 1-hour cache entry. |
cache_storage_per_mtok_hour_ndollars |
Rate to hold a cache entry per hour. |
audio_input_per_mtok_ndollars |
Rate for audio input tokens. |
audio_output_per_mtok_ndollars |
Rate for audio output tokens. |
long_context_threshold_tokens |
Token count above which the long-context rates apply instead of the standard ones. |
long_context_input_per_mtok_ndollars |
Input rate past the threshold. |
long_context_output_per_mtok_ndollars |
Output rate past the threshold. |
long_context_cache_read_per_mtok_ndollars |
Cache-read rate past the threshold. |
output_per_image_ndollars |
Rate per generated image (image models only). |
pricing.surcharges holds charges that are not per-token. Each entry declares a
kind — for example per_event for a provider-side web search, or per_hour
for a code-execution sandbox.
See Billing and pricing for settlement behavior.