---
title: "OpenAI Responses API, governed and recorded (non-streaming only)"
method: POST
path: "/v1/responses"
tags: ["proxy"]
---

# OpenAI Responses API, governed and recorded (non-streaming only)

`POST /v1/responses`

## Request

- Base URL: `https://www.spendline.ai`
- URL: `https://www.spendline.ai/v1/responses`
- Auth: API key in header `x-spendline-key`

Same base URL as chat-completions.

**stream: true is rejected with a clear error. Non-streaming only.**

OpenAI models only. Built-in tools such as web_search work and their cost is included in recorded spend.

## Headers

- `Authorization` string, required
- `x-agent-id` string
- `x-customer-id` string
- `x-spendline-tags` string
- `x-workflow-id` string
- `x-step-name` string
- `x-source-route` string

## Request body

- object
  - `model` string, required
  - `input` unknown
  - `tools` object[]: Built-in tools such as web_search work; their cost is included in recorded spend.
  - `stream` boolean: Must be false or omitted. true is rejected.

## Response `200`

OpenAI Responses payload, passed through unchanged.

## Other responses

- `400`: missing_required_attribution, a required attribution header is absent while enforcement is on.
- `401`: The Spendline key is missing or invalid. Do NOT fall back to the provider.
- `402`: A budget blocked this call BEFORE any spend occurred. Intended behaviour. Surface it; never retry against the provider directly.
- `403`: A policy or governance rule blocked the call. Never route around it.
- `429`: Rate limited. Back off and retry.
- `502`: Upstream provider error, or Spendline could not reach it. This is the only class of failure where retrying directly against the provider is correct.

---

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