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

# Create a model response

`POST /v1/responses`

## Request

- Base URL: `https://api.sandbase.ai`
- URL: `https://api.sandbase.ai/v1/responses`
- Auth: HTTP bearer

OpenAI-compatible Responses API endpoint. SandBase validates model and stream for routing, rewrites model to the selected provider mapping, and preserves other request fields. Responses are rebuilt from public OpenAI fields: unknown provider, routing, account, and billing extensions are removed. Unsafe responses fail closed instead of being forwarded.

## Request body

- ResponsesRequest: OpenAI-compatible request. SandBase rewrites model for the selected provider and preserves other fields.
  - `model` string, required: Model identifier from the Models API.
  - `input` unknown
  - `instructions` string
  - `stream` boolean: Return sanitized OpenAI Responses Server-Sent Events.
  - `background` boolean
  - `include` string[]
  - `max_output_tokens` integer
  - `max_tool_calls` integer
  - `metadata` object
  - `parallel_tool_calls` boolean
  - `previous_response_id` string
  - `reasoning` object
  - `service_tier` string
  - `store` boolean
  - `temperature` number
  - `text` object
  - `tool_choice` union
    - string
    - object
  - `tools` object[]
  - `top_logprobs` integer
  - `top_p` number
  - `truncation` string
  - `user` string

## Response `200`

OpenAI-compatible response object or event stream from the selected provider.

- ResponsesResponse: Public OpenAI Responses fields retained by SandBase. Provider-specific top-level fields are removed; output items remain provider-compatible free-form objects.
  - `id` string
  - `object` string
  - `created_at` integer
  - `status` string
  - `error` object, nullable
  - `incomplete_details` object, nullable
  - `instructions` string, nullable
  - `max_output_tokens` integer, nullable
  - `max_tool_calls` integer, nullable
  - `model` string
  - `output` object[]
  - `parallel_tool_calls` boolean
  - `previous_response_id` string, nullable
  - `reasoning` object, nullable
  - `store` boolean
  - `temperature` number, nullable
  - `text` object
  - `tool_choice` unknown
  - `tools` object[]
  - `top_logprobs` integer
  - `top_p` number, nullable
  - `truncation` string
  - `usage` object
    - `input_tokens` integer, required
    - `output_tokens` integer, required
    - `total_tokens` integer, required
    - `input_tokens_details` object, required
      - `cached_tokens` integer, required
    - `output_tokens_details` object, required
      - `reasoning_tokens` integer, required
  - `metadata` object
  - `service_tier` string
  - `user` string
  - `background` boolean

## Other responses

- `400`: Invalid JSON, missing model, no provider, or upstream request rejected
- `401`: Missing or invalid API key, or upstream authentication rejection
- `402`: Organization or API Key spending limit reached
- `403`: API key scope or upstream permission rejection
- `413`: Upstream provider rejected the request as too large
- `500`: Prediction lifecycle or organization lookup failed
- `502`: Upstream response could not be safely parsed and sanitized
- `503`: Routing failed or every provider candidate was exhausted

---

[API](https://skmtc.dev/sandbase/apis/sandbase-api.md) · [All operations](https://skmtc.dev/sandbase/apis/sandbase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sandbase/apis/sandbase-api/revisions/d40df2467ba2?raw)
