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 GM 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. - Your budget picks between the survivors. Compare
pricing.dimensions, and checklong_context_threshold_tokensif your prompts are large.
A catalog entry
Section titled “A catalog entry”{ "object": "list", "data": [ { "id": "gpt-5.5", "object": "model", "created": 1704067200, "owned_by": "openai", "tier": "frontier", "gateway_provider": "openai", "api_shapes": ["chat.completions", "responses"], "pricing": { "unit": "ndollars_per_mtok", "currency": "USD", "dimensions": { "input_per_mtok_ndollars": 5000000000, "output_per_mtok_ndollars": 30000000000, "cache_read_per_mtok_ndollars": 500000000, "long_context_threshold_tokens": 272000, "long_context_input_per_mtok_ndollars": 10000000000, "long_context_output_per_mtok_ndollars": 45000000000 // Dimensions that do not apply to a model are present and null. }, "surcharges": {} }, "available": true } // 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. |
gateway_provider |
Upstream service that actually receives the request. |
api_shapes |
Interfaces the model accepts. |
pricing |
Rates in nano-dollars per million tokens. |
available |
Advisory routing availability when the catalog was generated. |
gateway_provider is the field to read when you need to know which upstream
service receives a request. It is not always the organization in owned_by:
confidential models are served through a single confidential-compute provider
while owned_by still credits the original model author. Treat it as an input
to your privacy assessment.
Model IDs
Section titled “Model IDs”Copy id out of the catalog verbatim. A slash inside a confidential model ID —
Qwen/Qwen3-32B-TEE, moonshotai/Kimi-K2.5-TEE, zai-org/GLM-5-TEE — is part
of the ID, not a provider prefix to strip. The path form works too:
curl -fsSL https://api.saygm.com/v1/models/Qwen/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 GM; 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 GM
gateway is sealed inside a TEE, but the provider named in gateway_provider
receives the request under its own API terms.
Confidential models run open-weight inference inside a TEE. Their IDs end in
-TEE, and 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, and gateway_provider
names the upstream — zai for glm-5.2, moonshot for kimi-k3.
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. 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.
Every model exposes the same dimension keys, with null where the dimension
does not apply.
| 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. |
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.