Request parameters

The Grove API is a zero-injection passthrough: your request body is forwarded to the model exactly as you send it. We do not rewrite your messages, inject a system prompt, or run a classifier over your content. Only a handful of transport-controlled fields are touched, and every change is listed here.

If a parameter isn't in the tables below, it passes straight through to the model unchanged.


Passed through untouched

These are forwarded verbatim. Support for any individual field is model-dependent — an unsupported value is handled by the model, not by us.

Field Notes
messages Forwarded exactly, including system / developer roles and multi-part content.
temperature, top_p Sampling controls.
frequency_penalty, presence_penalty Repetition controls.
stop Stop sequences.
seed Best-effort determinism, where the model supports it.
n Number of choices.
logprobs, top_logprobs Token log-probabilities in the response.
reasoning_effort Depth control on reasoning models — see Reasoning models.
tools, tool_choice Function calling — see Structured output.
response_format JSON mode / schema — see Structured output.
stream Enables SSE — see Streaming.

Managed by the proxy

A few fields are set or adjusted for transport and safety. This is the complete list — nothing else is altered.

Field What happens Why
model Resolved to the target model behind your public id. Your public id is echoed back in the response. Public ids are stable and never expose an internal slug.
service_tier Stripped, then re-applied as priority only for a turbo request on a turbo-capable model. On models without a turbo variant it's ignored (standard rate). Priority routing is opt-in per request — see Turbo.
stream_options.include_usage Force-set to true whenever stream: true, so the final chunk always carries a usage summary. You always get token counts back; billing is accurate regardless.
max_tokens / max_completion_tokens Clamped to 32,768 if you request more. Lower values are honored as sent. A hard output-token ceiling. The request still succeeds.

There is no separate content-safety layer on this API. What you send is what the model receives. You are responsible for your inputs under the Terms of Use.


What comes back

  • usage carries the standard OpenAI keys only: prompt_tokens, completion_tokens, total_tokens, and (when present) prompt_tokens_details / completion_tokens_details. Cached-input counts appear under prompt_tokens_details.cached_tokens — see Prompt caching.
  • Cost is not returned in the response body. Track spend and per-model cost on your Usage page; the response stays a clean OpenAI object.
  • x-request-id (a req_pgs_... value) is on every response — successes and streams included, not just errors. Quote it if you contact support. See Errors & retries.