Skip to main content
The gateway speaks the OpenAI chat-completions wire format to every provider. OpenAI-compatible targets (OpenAI, Azure OpenAI, self-hosted vLLM and other custom OpenAI-compatible endpoints) bypass the policy on this page entirely: the request body is forwarded byte-for-byte apart from the gateway-only drop_tuning_params field, which is consumed before forwarding, so whatever the provider accepts, you get. For the translated lanes (Anthropic, Bedrock, Gemini, Vertex) the gateway builds the provider-native request itself, and every parameter follows an explicit policy:
  • mapped: translated faithfully to the provider’s native field.
  • dropped: a tuning parameter with no equivalent on the lane. By default it is removed, the request proceeds, and the drop is signaled (see below). It is never silently ignored.
  • refused: the request depends on the parameter functionally; honoring the request without it would change what you observably get. These always fail with a clear 400 unsupported_parameter error naming the parameter, the lane, and why.

drop_tuning_params

Send "drop_tuning_params": false in the request body to opt into strict mode: any parameter the lane cannot map then refuses instead of dropping. The default is true. The field itself is consumed by the gateway and never reaches a provider.

Drop signals

When a parameter is dropped, the drop is visible in three places:
  • Response body: extra_fields.params_dropped lists the dropped parameter names (on streams, on the final usage-bearing chunk).
  • Response header: X-LangWatch-Params-Dropped carries the same list, comma separated.
  • Trace: the gateway span records langwatch.gateway.params_dropped.

The table

The codex lane

Codex models (your own ChatGPT subscription, model prefix openai_codex/) speak the Responses API. The gateway builds the outgoing body itself, so every provider-bound field you send is mapped, dropped or refused by the table below, exactly as above. The codex backend accepts only a fixed set of fields and answers 400 Unsupported parameter to anything else, which is why every key the table does not list is dropped rather than forwarded. The gateway also pins three invariants the backend requires: the bare model name, stream on, and store off. Dropped fields are signaled on the X-LangWatch-Params-Dropped header and the gateway span; the response body is the backend’s own SSE stream, so extra_fields.params_dropped is not injected into it. drop_tuning_params works on this lane too.

reasoning_effort budgets

On lanes that map reasoning_effort to a thinking budget (Anthropic models without adaptive thinking, on both the anthropic and bedrock lanes), the budget is derived from your output cap: budget = 1024 + ratio x (max_tokens - 1024) with ratios minimal 0.025, low 0.15, medium 0.425, high 0.80, xhigh 0.92, max 1.0. Claude Opus and Sonnet 4.6+ use the provider’s adaptive thinking with your effort passed through (minimal maps to low). Gemini thinking models receive the effort natively. Thinking tokens count inside usage.completion_tokens.
Last modified on August 24, 2026