---
title: "Create a response"
method: POST
path: "/responses"
tags: ["Responses"]
---

# Create a response

`POST /responses`

OpenAI Responses API. Supported on **OpenAI models** and
**xAI Grok models** — xAI's Agent Tools API uses the same
shape, so any Grok model accepts `tools: [{"type": "web_search"}]`
/ `x_search` / `code_interpreter` here. Anthropic and Gemini
targets return `not_implemented` because their native shapes
differ — for Anthropic call `POST /v1/messages`
([Native Formats / Anthropic](/native-formats/anthropic)),
for Gemini call `POST /v1beta/models/{model}:generateContent`
([Native Formats / Gemini](/native-formats/gemini)).

## Request body

- ResponsesRequest
  - `model` string, required
  - `input` union, required
    - string
    - ChatMessage[]
      - `role` 'system' | 'user' | 'assistant' | 'tool' | 'function', required
      - `content` union
        - string
        - ChatMessageContentPart[]
          - union — A single part of a multimodal message. Use an **array** of parts as `ChatMessage.content` when sending anything beyond plain text — images, audio, or any mix. Use a **plain string** for simple text. The gateway accepts OpenAI's content-part format for every upstream (OpenAI / Anthropic / Google). OrcaRouter's translation layer adapts: - → OpenAI: native target — content parts land in OpenAI's shape. - → Anthropic: `image_url` becomes `{type: image, source: ...}`. - → Google Gemini: `image_url` becomes `inline_data`; `input_audio` becomes `inline_data` with the right MIME. Clients don't need provider-specific code.
            - object
              - …
            - object — Send an image to a vision-capable model. Two URL forms are accepted: 1. **Remote URL**: any publicly-reachable `https://` link. The upstream provider fetches the bytes. 2. **Inline data URI**: `data:image/png;base64,iVBORw0...` (or `image/jpeg`, `image/gif`, `image/webp`). Use this when you don't want to host the image somewhere. Each upstream enforces its own per-image size cap. OrcaRouter respects the upstream's limit, so exceeding it surfaces as a 400 from the provider. Check the upstream's current vision documentation for the exact number.
              - …
            - object — Inline audio for OpenAI audio-input models and Gemini multimodal models. `format` accepts `mp3` / `wav` / `flac` / `ogg` / `webm`.
              - …
      - `name` string
      - `tool_calls` ToolCall[]
        - `id` string, required
        - `type` 'function', required
        - `function` object, required
          - `name` string, required
          - `arguments` string, required — JSON-encoded argument object
      - `tool_call_id` string
  - `instructions` string
  - `previous_response_id` string — ID of a prior response, to continue a multi-turn conversation without resending the full message history.
  - `tools` object[] — Free-form array of Responses-API tool entries. Each entry's `type` selects the tool. Common values include `function` (a custom function tool, same shape as Chat Completions), `web_search` (built-in web grounding), `mcp` (Model Context Protocol), and `code_interpreter`. Built-in tool calls (`web_search_call`, etc.) are billed per call — see Operations / Billing & Usage.
    - `type` string
  - `tool_choice` union
    - string
    - object
  - `temperature` number
  - `top_p` number
  - `max_output_tokens` integer
  - `stream` boolean
  - `reasoning` object — OpenAI Responses-API reasoning configuration.
    - `effort` 'low' | 'medium' | 'high'
  - `store` boolean — Whether the upstream may store the request/response. Allowed by default; channel setting `disable_store` can override.
  - `metadata` object

## Response `200`

OK

---

[API](https://skmtc.dev/orcarouter/apis/orcarouter-api.md) · [All operations](https://skmtc.dev/orcarouter/apis/orcarouter-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/orcarouter/orcarouter-api/revisions/9c5cc5d00311/schema)
