---
title: "Cloud API proxy"
method: POST
path: "/v1/cloud/proxy"
tags: ["Cloud Proxy"]
---

# Cloud API proxy

`POST /v1/cloud/proxy`

## Request

- Base URL: `http://localhost:9998`
- URL: `http://localhost:9998/v1/cloud/proxy`
- Auth: HTTP bearer

Routes requests to cloud AI providers (OpenAI, Anthropic, etc.) with
Keychain-injected API keys. Keys never touch disk or appear in browser
devtools. Supports streaming passthrough.

## Request body

- CloudProxyRequest
  - `url` string, required: Target cloud API URL
  - `method` string
  - `headers` object
  - `stream` boolean
  - `configId` string: Cloud provider config ID (injects API key from Keychain)
  - `auth` object
    - `header` string: Auth header name (default: Authorization)
    - `prefix` string: Auth prefix (default: Bearer)
  - `body` object: Request body to forward

## Response `200`

Upstream response passthrough. When `stream: false`, returns the upstream
JSON body. When `stream: true`, returns `text/event-stream` passthrough.

- object: Upstream provider response (varies by provider)

## Other responses

- `400`: Invalid request
- `403`: Target host not in allowlist
- `502`: Upstream error

---

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