diff --git a/src/content/changelog/ai-gateway/2026-05-18-rest-api.mdx b/src/content/changelog/ai-gateway/2026-05-18-rest-api.mdx new file mode 100644 index 000000000000000..0bd29c50f7885d7 --- /dev/null +++ b/src/content/changelog/ai-gateway/2026-05-18-rest-api.mdx @@ -0,0 +1,32 @@ +--- +title: Call any AI model through AI Gateway's new REST API +description: Call third-party and Workers AI models through one Cloudflare REST API, with AI Gateway features applied automatically. +products: + - ai-gateway +date: 2026-05-19 +--- + +AI Gateway now uses the AI REST API on `api.cloudflare.com`. You can call any model — whether from OpenAI, Anthropic, Google, or hosted on Workers AI — through one unified API, using the same endpoints and authentication regardless of provider. Three endpoints are available: + +- `POST /ai/run` — universal endpoint for all models and modalities +- `POST /ai/v1/chat/completions` — OpenAI SDK compatible +- `POST /ai/v1/responses` — OpenAI Responses API compatible +- `POST /ai/v1/messages` — Anthropic SDK compatible + +```bash +curl -X POST "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions" \ + --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ + --header "Content-Type: application/json" \ + --data '{ + "model": "openai/gpt-5.5", + "messages": [{"role": "user", "content": "What is Cloudflare?"}] + }' +``` + +All AI Gateway features — logging, caching, rate limiting, and guardrails — are applied automatically. Third-party models are billed through [Unified Billing](/ai-gateway/features/unified-billing/), so you do not need to manage separate provider API keys. + +Every request through the REST API is routed through your account's default gateway, which is created automatically on first use. To route requests through a specific gateway, add the `cf-aig-gateway-id` header. + +If you are already calling Workers AI models through the existing REST API, that path (`/ai/run/@cf/{model}`) continues to work. To call Workers AI models through AI Gateway, replace it with `/ai/run` and move the model name into the request body with `"provider": "cloudflare"`. + +For more details and examples, refer to the [REST API documentation](/ai-gateway/usage/rest-api/). diff --git a/src/content/docs/ai-gateway/usage/rest-api.mdx b/src/content/docs/ai-gateway/usage/rest-api.mdx index c948966cfa84708..c4f05d7773f604f 100644 --- a/src/content/docs/ai-gateway/usage/rest-api.mdx +++ b/src/content/docs/ai-gateway/usage/rest-api.mdx @@ -16,13 +16,14 @@ No provider SDKs or API keys are needed. Authentication and billing are handled ## Endpoints -Three endpoints are available, each suited to different use cases: +Four endpoints are available, each suited to different use cases: | Endpoint | Format | Use case | | -------- | ------ | -------- | | `POST /ai/run` | Envelope with `model`, `provider`, `input` | All models and modalities (LLM, image, TTS, ASR) | | `POST /ai/v1/chat/completions` | OpenAI chat completions | LLMs — OpenAI SDK compatible | | `POST /ai/v1/responses` | OpenAI Responses API | Agentic workflows — OpenAI SDK compatible | +| `POST /ai/v1/messages` | Anthropic Messages API | LLMs — Anthropic SDK compatible | ## Authentication @@ -178,6 +179,43 @@ const response = await openai.responses.create({ }); ``` +## `/ai/v1/messages` — Anthropic compatible + +Uses the Anthropic Messages API format. Compatible with the Anthropic SDK. + +```bash +curl -X POST "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/messages" \ + --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ + --header "Content-Type: application/json" \ + --data '{ + "model": "anthropic/claude-sonnet-4-5", + "max_tokens": 512, + "messages": [ + { + "role": "user", + "content": "What is Cloudflare?" + } + ] + }' +``` + +Point the Anthropic SDK `baseURL` at the Cloudflare API: + +```javascript +import Anthropic from "@anthropic-ai/sdk"; + +const anthropic = new Anthropic({ + apiKey: CLOUDFLARE_API_TOKEN, + baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, +}); + +const message = await anthropic.messages.create({ + model: "anthropic/claude-sonnet-4-5", + max_tokens: 512, + messages: [{ role: "user", content: "What is Cloudflare?" }], +}); +``` + ## Specify a gateway By default, third-party model requests route through your account's default AI Gateway. To use a specific gateway, include the `cf-aig-gateway-id` header: