Amux

Create Model Response

Last updated September 1, 2026

An OpenAI Responses compatible endpoint for any model that supports this protocol.

This endpoint is compatible with OpenAI Responses. Keep using the official SDKs and point base_url and your API key to Amux.

The table below covers the main request parameters and the OpenAI-documented fields commonly used with Responses, including accepted ranges, cross-protocol behavior, and any preconditions. Fields not called out individually are usually preserved on same-protocol direct routes, but may not survive cross-protocol conversion, platform-side filtering, or stateless-gateway limits.

POSThttps://gateway.amux.ai/v1/responses

Authorization

header
AuthorizationstringRequired

Bearer <your Amux key> An Amux key created in the console. If you lose it, you can view it again on the keys page.

Content-TypestringRequiredDefault "application/json"

Always application/json.

Request

application/json
modelstringRequired

Canonical ID shaped like vendor/model. The colon suffix pins a provider (:provider) or chooses a routing strategy (:@price and friends); the two cannot be combined. See the overview.

inputstring | array<object>Required

Input. Either a plain string (equivalent to one user message) or an array mixing message items, function_call, and function_call_output.

backgroundboolean

Whether the upstream should run the response in the background. The gateway does not add its own semantics here: same-protocol direct routes usually pass it through, while cross-protocol routes do not preserve it by default.

context_managementarray<object>

Context management configuration. The gateway does not add its own semantics here: same-protocol direct routes usually pass it through, while cross-protocol routes do not preserve it by default.

conversationstring | object

Upstream-side conversation identifier or configuration. The gateway does not add its own semantics here; same-protocol direct routes usually pass it through. Because the state lives upstream, multi-turn requests are not guaranteed to stay on the same conversation unless you pin a provider.

instructionsstring

Top-level system prompt. Not an entry in input — putting it there makes it part of the conversation instead.

max_output_tokensinteger

Maximum tokens to generate. Note the field name differs from Chat's max_tokens.

temperaturenumber

Sampling temperature, 0–2.

top_pnumber

Nucleus sampling.

streambooleanDefault false

Return an SSE stream. Responses events are named (response.output_text.delta and friends) rather than a series of uniform chunks.

toolsarray<object>

Callable tools. The shape is flat{ type: "function", name, description, parameters } — not nested under function the way Chat does it.

tool_choicestring

auto / none / required, or { type: "function", name }.

parallel_tool_callsboolean

Whether the model may issue several tool calls at once. Only sent when tools is present.

textobject

Text output configuration. Both sub-fields are described below.

textobject
formatobject

JSON output constraint, the counterpart of Chat's response_format.

verbosity"low" | "medium" | "high"

Output verbosity, the counterpart of Chat's top-level verbosity. We move it for you on conversion.

reasoningobject

Reasoning configuration. What each of the four sub-fields accepts depends on the model generation; see them below. Passing a value a given model does not know is rejected upstream, and we do not gate it. summary, mode and context are Responses-only and are dropped with a note when converting to the other three. Separately, encrypted reasoning content is not carried across protocols — the others have nowhere to hold it.

reasoningobject
effort"none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max"

Reasoning effort. minimal belongs to GPT-5.4 / 5.5, xhigh and max to 5.6, and none means no reasoning. Left out, the model default applies.

summary"auto" | "concise" | "detailed"

How detailed the reasoning summary is. Responses-only, dropped with a note when converting to the other three.

mode"standard" | "pro"

Execution mode, GPT-5.6 family only. Independent of effort: mode picks standard or pro, effort controls how much reasoning happens inside it.

context"auto" | "current_turn" | "all_turns"

How many turns of reasoning context are carried. The default follows the generation (all_turns on 5.6, current_turn earlier), and it changes how many tokens go up.

includearray<string>

Extra fields to include in the response, passed through to the upstream.

previous_response_idstring

Not supported. This gateway is stateless and consecutive requests may reach different upstreams. Send the full context in input instead of relying on an upstream-side previous response ID.

promptobject

Prompt template reference and variables. The gateway does not add its own semantics here: same-protocol direct routes usually pass it through, while cross-protocol routes do not preserve it by default.

truncation"auto" | "disabled"

Truncation strategy when the context overflows; passed through.

metadataobject

Free-form key/value pairs passed through.

storeboolean

Whether the upstream should retain this response.

userstring

End-user identifier. Also drives session affinity — see the same parameter on the Chat page.

prompt_cache_keystring

Session key, taking precedence over user. Requests sharing a value are routed to the same provider.

stream_optionsobject

Streaming options. Only include_obfuscation here — there is no include_usage like Chat's, because Responses always reports usage on the response.completed event and needs no switch for it. Passed through unchanged, not carried across protocols by default.

stream_optionsobject
include_obfuscationboolean

Pads streaming deltas with random bytes. There is no include_usage here — Responses always reports usage on the response.completed event.

service_tier"auto" | "default" | "flex" | "scale" | "priority" | "fast" | "ultrafast"

Service tier. Not supported — we forward it to no upstream, on either path. Sending it is not an error. What was stripped is reported back: amux.droppedParams in the body, or the x-amux-dropped-params header when streaming.

top_logprobsinteger

How many candidate probabilities to return per position, 0-20. Passed through unchanged, not carried across protocols by default.

max_tool_callsinteger

Upper bound on tool calls in this response. Passed through unchanged, not carried across protocols — the other three have no equivalent.

safety_identifierstring

End-user identifier; OpenAI uses it in place of user for abuse detection. Passed through unchanged, not carried across protocols by default. It takes no part in session affinity — use prompt_cache_key to keep one conversation on one provider.

prompt_cache_optionsobject

Explicit prompt-cache breakpoints. gpt-5.6 and later only; earlier models use prompt_cache_retention. Passed through unchanged, not carried across protocols by default.

prompt_cache_optionsobject
ttl"30m"

How long a cache entry survives. Only 30m is accepted today.

mode"implicit" | "explicit"

implicit (default) lets the upstream pick a breakpoint; under explicit you place them yourself with prompt_cache_breakpoint.

prompt_cache_retention"in_memory" | "24h"

How long prompt cache entries survive. Models before gpt-5.6 use this; 5.6 and later use prompt_cache_options. Passed through unchanged, no effect on pricing, not carried across protocols by default.

moderationobject

Moderation configuration, { model, policy }. Passed through unchanged, not carried across protocols by default.

Response

200response

Inference succeeded. model is the canonical ID — the same value you sent.

402response

Insufficient balance. These are not retried and do not affect any provider's health.

How it differs from Chat Completions

These are two different shapes, not two ways of writing the same call:

Chat CompletionsResponses
System prompta system entry in messagestop-level instructions
Inputmessagesinput (may be a plain string)
Tool definitions{ type, function: { name, parameters } }{ type, name, parameters }, flat
Max outputmax_tokensmax_output_tokens
Contentchoices[0].messageoutput[]
Usageprompt_tokens / completion_tokensinput_tokens / output_tokens

previous_response_id exists in the official OpenAI Responses API, but Amux does not support it. This gateway is stateless and may route consecutive requests to different upstreams. To continue context, send the full conversation in input.

Errors

Errors come back in OpenAI's error shape. For type values and retry semantics, see Errors and retries.

cURL
curl https://gateway.amux.ai/v1/responses \
  -H "Authorization: Bearer $AMUX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.6",
    "input": "Hello!"
  }'
{
  "id": "resp_8f3c1a",
  "object": "response",
  "model": "openai/gpt-5.6",
  "status": "completed",
  "output": [
    {
      "type": "message",
      "role": "assistant"
    }
  ],
  "usage": {
    "input_tokens": 0,
    "output_tokens": 0,
    "total_tokens": 0
  }
}