Get API key
Get startedChoosing an API
Get started

Choosing an API

llm.buzz serves each kind of model on the API made for it. A chat model answers Chat Completions, Responses and Messages alike; embeddings, image, audio and decision models have their own routes.

On this page

The APIs

Routes are relative to https://api.llm.buzz/api/v1, except the decisions route that names its own base.

APIRouteModelsClientsStreamsReplays a keyed retryError format
Chat CompletionsPOST /chat/completionsText modelsOpenAI and OpenRouter SDKs, Cline, OpenCode, AiderServer-sent eventsYesOpenRouter's envelope
ResponsesPOST /responses, and GET /responses as a WebSocketText modelsOpenAI SDK, CodexServer-sent events, or the WebSocketYes, over HTTPOpenRouter's envelope; OpenAI's error frames on the WebSocket
MessagesPOST /messages, POST /messages/count_tokensText modelsAnthropic SDK, Claude CodeServer-sent eventsNoAnthropic's error body
EmbeddingsPOST /embeddingsEmbeddings modelsOpenAI and OpenRouter SDKsNeverNoOpenRouter's envelope
ImagesPOST /images, POST /images/generationsImage modelsOpenRouter SDK on /images, OpenAI SDK on /images/generationsNeverNoOpenRouter's envelope
Speech to textPOST /audio/transcriptionsSpeech-to-text modelsOpenAI and OpenRouter SDKsNeverNoOpenRouter's envelope
Text to speechPOST /audio/speechText-to-speech modelsOpenAI and OpenRouter SDKsNeverNoOpenRouter's envelope
DecisionsPOST /systemone, POST https://api.llm.buzz/api/alpha/decisionsNone todayOpenRouter's SDKsNeverNoOpenRouter's envelope

Only Chat Completions and Responses replay a request sent again with the same Idempotency-Key, and Responses does so over HTTP only: a key on the WebSocket does not apply. On every other API a retry runs as a request of its own: Retries and idempotency. Every API takes your key as a bearer token, and Messages also takes it in x-api-key: Authentication.

The SDKs take the base URL in their own setting. The OpenAI SDK takes base_url="https://api.llm.buzz/api/v1" (baseURL in TypeScript), the OpenRouter SDKs take server_url="https://api.llm.buzz/api/v1" (serverURL in TypeScript), and the Anthropic SDK takes base_url="https://api.llm.buzz/api" (baseURL in TypeScript), without /v1: Base URL and SDKs. The OpenRouter SDKs reach decisions through a server URL of their own: Decisions.

Which text API

Chat Completions, Responses and Messages reach the same models. llm.buzz turns each into one request, so the providers a model has, how a request is routed, what it costs and the limits it runs under do not depend on the API you call. A text model answers all three, whoever made it: a Claude model answers Chat Completions, and a model that is not Claude answers Messages. A chat model that returns images is the exception (below).

Pick the API your client speaks.

  • Chat Completions for most SDKs and coding agents: the OpenAI and OpenRouter SDKs, Cline, OpenCode and Aider.
  • Responses for the OpenAI SDK's newer API and for Codex, and when you want llm.buzz to keep the conversation, so a follow-up sends only its own input.
  • Messages for the Anthropic SDK and Claude Code.

Cheapest models for coding agents sets up Claude Code, Codex, Cline, OpenCode and Aider. What differs between the three:

Chat CompletionsResponsesMessages
ConversationYou send the whole history each time.You send your next input and previous_response_id; llm.buzz keeps a turn for up to 24 hours, unless you send store: false.You send the whole history each time.
System instructionA system or developer message.instructions, for this request only.system.
Output limitmax_tokens, max_completion_tokens or max_output_tokens, one per request.max_output_tokens.max_tokens, required.
Structured outputresponse_format, with json_schema or json_object.text.format, with json_schema; json_object is a 400.Anthropic's output_config.format. An output_config that holds more than effort is sent as you wrote it when every provider that may serve the request takes Anthropic's API, and otherwise dropped and named; its effort still applies. response_format is dropped and named.
Idempotency-KeyReplays a retry.Replays a retry sent over HTTP.Not used.
The provider object in the requestRead.Read.Read.
provider in the answerThe name of the provider that answered, on the body and on every stream chunk.Not in the answer.Not in the answer.
Readable reasoningmessage.reasoning and delta.reasoning.summary_text of a reasoning item.thinking blocks.
Token probabilitieslogprobs and top_logprobs.include: ["message.output_text.logprobs"] with top_logprobs.Not offered.
Tool search declaration{"type": "openrouter:tool_search"}.{"type": "tool_search"}.tool_search_tool_bm25 or tool_search_tool_regex.

Tools and structured output, Streaming, Reasoning and Images in requests explain what the three share, with each API's spelling.

Find a model for an API

GET https://api.llm.buzz/api/v1/models lists the models your key can call, and the public models without a key. Its output_modalities parameter picks the kind: it defaults to text, all lists every kind, and a comma list such as text,embeddings lists models that produce any of them.

curl -s "https://api.llm.buzz/api/v1/models?output_modalities=embeddings"
output_modalitiesListsCall it on
textText models.Chat Completions, Responses, Messages
embeddingsEmbeddings models.Embeddings
imageImage generation models, and chat models that return images.Images; Chat Completions for a chat model
transcriptionSpeech-to-text models.Speech to text
speechText-to-speech models.Text to speech
decisionsModels that answer decisions: none today.Decisions

A model sent to an API that does not serve it answers 400 on model. The text APIs name the route an embeddings, image or audio model takes. A chat model that returns images serves Chat Completions only: Responses and Messages refuse it.

Not served

  • POST /api/v1/completions, OpenAI's older text-completions route, answers 404. Send the prompt as one user message to Chat Completions.
  • Rerank and video generation answer 404 too.

Coming from OpenRouter lists every route and feature of OpenRouter's that llm.buzz does not offer.

Docs