# Compatibility Notes (/docs/reference/provider-behavior)



Stogas supports OpenAI-compatible Chat Completions and Responses requests across cataloged OpenAI and Anthropic models. The operation pages are the source of truth for accepted fields.

## Routing [#routing]

Choose a public model ID from `/v1/models`. If a slug is available from more than one provider, use `provider` or its `rules` alias:

```json
{
	"provider": { "only": ["anthropic"] }
}
```

Do not send both fields. Routing hints are removed before upstream dispatch.

## Important differences [#important-differences]

* Requests are strict: unknown top-level fields return `400` instead of being forwarded.
* The current public surface accepts text content only.
* `stream: true` uses the endpoint's normal Server-Sent Events format.
* OpenAI `max_tokens` is accepted as an alias for `max_completion_tokens` on Chat Completions.
* Anthropic deployments reject requests that set both `temperature` and `top_p`.
* `inference_geo: "global"` uses standard multi-region pricing; `inference_geo: "us"` selects eligible US-only deployments.
* Provider-specific cache controls, service tiers, and hosted tools are accepted only where the catalog can route and bill them correctly.

See [Model Tools](/docs/model-tools) for supported function, MCP, and provider-hosted tools.

## Errors [#errors]

Errors use an OpenAI-compatible `error` object. Common status codes are:

|        Status | Meaning                                    |
| ------------: | ------------------------------------------ |
|         `400` | Invalid or unsupported request             |
|         `401` | Missing or invalid API key                 |
| `402` / `403` | Billing or key policy rejected the request |
|         `413` | Request body too large                     |
|         `429` | Stogas or provider rate limit              |
|         `503` | No provider route was available            |
|         `504` | Upstream request timed out                 |
|         `529` | Provider overloaded                        |

Provider validation messages may be returned when useful. Provider credentials, topology, and internal failures are never exposed.

## Cancellation and billing [#cancellation-and-billing]

Disconnecting does not guarantee that the upstream provider stopped. A request may still be billed for usage the provider reports after the client disconnects. Streaming responses may remain open long enough to receive final usage needed for accurate settlement.
