# Parameters (/docs/api/parameters)

OhMyGPT adds no defaults or limits of its own to sampling and output parameters. The model's vendor sets them.

## On the native protocol [#on-the-native-protocol]

On a model's [native protocol](/docs/api/protocols#native-protocol), every parameter reaches the model as you sent it, including vendor-specific ones such as Mistral's `safe_prompt` or Qwen's `enable_thinking`. The vendor's defaults and limits apply, and if the vendor rejects a value, you get its error message.

## Claude and Gemini on Chat Completions [#claude-and-gemini-on-chat-completions]

When you call Claude or Gemini through Chat Completions, these parameters take effect under the vendor's own name. Cells marked — have no equivalent on that model:

| Chat Completions | Claude | Gemini |
|---|---|---|
| `max_tokens`, `max_completion_tokens` | `max_tokens` | `maxOutputTokens` |
| `temperature`, `top_p`, `top_k` | `temperature`, `top_p`, `top_k` | `temperature`, `topP`, `topK` |
| `stop` | `stop_sequences` | `stopSequences` |
| `frequency_penalty`, `presence_penalty` | — | `frequencyPenalty`, `presencePenalty` |
| `seed` | — | `seed` |
| `response_format` with `json_schema` | `output_config.format` | `responseMimeType` and schema |
| `response_format` with `json_object` | — | `responseMimeType: "application/json"` |
| `modalities` with `audio` or `image` | — | `responseModalities` |
| `logprobs`, `top_logprobs`, `logit_bias`, `verbosity`, `audio`, `web_search_options`, `min_p`, `top_a`, `repetition_penalty` | — | — |
| `n` greater than 1 | 400 | 400 |
| `tools`, `tool_choice` | `tools`, `tool_choice` | `functionDeclarations`, `toolConfig` |
| `parallel_tool_calls` | `disable_parallel_tool_use` | — |
| `user` | `metadata.user_id` | — |
| `reasoning_effort`, `thinking` | see [Thinking](/docs/api/thinking) | see [Thinking](/docs/api/thinking) |

Claude requires `max_tokens`; if you leave it out, OhMyGPT sends the model's maximum output.

A model without an equivalent doesn't receive the parameter, and the request runs without it, as Anthropic's own OpenAI SDK compatibility does for fields Claude lacks. So one request body works across models, but the output follows the model's defaults for that setting, so Claude ignores `seed`. The exception is `n`: these models return one choice per request, so `n` above 1 returns 400 naming `n` before the request reaches the model, and nothing is charged. If a setting must take effect, send it to a model that has it. Whether a model accepts a value it does have, such as `temperature` on a reasoning model, is up to the model; its own error comes back to you as is.

For JSON output from Claude, use `response_format` with a `json_schema`:

```bash
curl https://api.ohmygpt.com/v1/chat/completions \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-haiku-4-5",
    "max_tokens": 200,
    "messages": [{"role": "user", "content": "Give me a color and its hex code."}],
    "response_format": {
      "type": "json_schema",
      "json_schema": {
        "name": "color",
        "schema": {
          "type": "object",
          "properties": {"name": {"type": "string"}, "hex": {"type": "string"}},
          "required": ["name", "hex"],
          "additionalProperties": false
        }
      }
    }
  }'
```

```json
"message": { "role": "assistant", "content": "{\"hex\": \"#FF6B6B\", \"name\": \"Coral Red\"}" }
```

## Routing [#routing]

`provider` on Chat Completions and Responses chooses which provider serves the model. It is read by OhMyGPT and does not reach the model. See [Provider routing](/docs/provider-routing).
