Skip to main content
A lane is the wire format the gateway uses to reach one kind of provider. OpenAI, Azure OpenAI and OpenAI-compatible custom endpoints share one lane; Anthropic, Bedrock, and Gemini with Vertex have a lane each. On the OpenAI-compatible lane the gateway forwards your POST /v1/chat/completions body as written. Two fields are exceptions: it removes the gateway’s own drop_tuning_params, and the organization’s cache rules can strip or add a top-level cache_control, see Cache control. Whatever the provider accepts, you get. On the other lanes the gateway builds the provider-native request itself, so every parameter has one of three dispositions:
  • mapped: translated to the provider’s own field.
  • dropped: a tuning parameter the lane has no field for. The gateway removes it, the request proceeds, and the drop is reported on the response and on the trace.
  • refused: the request depends on the parameter, and serving it without the parameter would give you a different answer than you asked for. The request fails with 400 unsupported_parameter, naming the parameter, the lane and the reason.

drop_tuning_params

Send "drop_tuning_params": false in the request body for strict mode. A parameter the lane cannot map is then refused instead of dropped. The default is true. The gateway removes the field before the request leaves, so no provider sees it.

Drop signals

A dropped parameter is reported in three places:
  • Response body: extra_fields.params_dropped lists the dropped parameter names. On a stream it is on the final usage-bearing chunk.
  • Response header: X-LangWatch-Params-Dropped carries the same list, comma separated.
  • Trace: the gateway span carries langwatch.gateway.params_dropped.

The table

The codex lane

Codex models run on your own ChatGPT subscription under the model prefix openai_codex/, and they speak the Responses API. The gateway builds the outgoing body itself, so the table below gives every field the same three dispositions as above. The codex backend accepts a fixed set of fields and answers 400 Unsupported parameter to anything else. That is why every key the table does not list is dropped instead of forwarded. The gateway pins three values the backend requires: the bare model name, stream on, and store off. Dropped fields are reported on the X-LangWatch-Params-Dropped header and on the gateway span. The response is the backend’s own SSE stream, so extra_fields.params_dropped is not added to it. drop_tuning_params works on this lane too.

reasoning_effort budgets

Claude models take a thinking budget in tokens. On the anthropic lane and on the bedrock lane, the gateway derives that budget from your output cap:
"reasoning_effort": "none" sends no thinking budget at all. Claude Opus and Sonnet from 4.6 on take the effort itself, through the provider’s adaptive thinking. minimal is sent as low, because Anthropic accepts low, medium, high and max. Gemini 3 and later take the effort as a native thinking level. Earlier Gemini models get a budget from the same formula, against the model’s own budget range.
Last modified on September 6, 2026