GLM Responses
Call GLM 5.3, 5.3 Flash and 5.3 FlashX through the OpenAI Responses API with a BeatAPI key.
- One endpoint,
POST /v1/responses, for every current GLM model. Changemodelto switch. - Streaming, a 1,000,000-token context and up to 128,000 output tokens on all three models.
- Flat per-token prices across the whole context window: no long-context tier and no peak-hour multiplier. Cached input is billed at a lower rate.
- Works with the OpenAI SDK: change the base URL and use a BeatAPI key. For an existing Chat Completions integration, see Chat Completions.
- Conversation state is not stored on the server: send the whole history in
inputon every turn.
Use https://direct.beatapi.io as the base URL for text requests: it is not subject to Cloudflare’s 100-second limit, so a long non-streaming request is not cut off. https://api.beatapi.io also works and is the fallback if direct.beatapi.io is unreachable from your network. The key, models and prices are the same on both. Image and video APIs use https://api.beatapi.io only.
Opens this endpoint in the API Explorer. Enter your BeatAPI API key and send: the call is real and is billed to your own balance.
Models
Send one of these IDs as model. Each is a separate model; do not treat them as aliases of each other.
- Prices are the base tier, discount already applied. A long-context tier, cached-input rates and cache writes are not in this table; see the price table.
—means the catalogue does not publish the number.
Quick start
Install the openai package on your server, keep the key in BEATAPI_API_KEY, and never put it in browser code. output_text is the SDK’s shortcut for the answer text. These are request examples, not recorded model outputs.
Read the answer from output_text (or from the output_text parts of output), then check status and usage. An HTTP 200 alone does not prove the answer satisfies your task: validate it in your application. Text requests return directly; do not poll /v1/tasks for them.
Endpoint and authentication
POST https://direct.beatapi.io/v1/responses
Authorization
string
Required
Bearer <BEATAPI_API_KEY>. The key works with or without the sk- prefix.
Request parameters
Standard OpenAI Responses fields are accepted. Request-format compatibility does not mean every model-specific option or hosted tool is supported, so test the options you rely on.
model
string
Required
The exact model ID.
Allowed values: glm-5.3, glm-5.3-flash, glm-5.3-flashx
- Each ID is a separate model, not an alias of another.
- Call
GET /v1/modelswith your key to confirm which models are enabled for it.
input
string | object[]
Required
The prompt: a string, or an array of input items such as messages, function calls and their outputs.
Conversation state is not stored on the server. previous_response_id, conversation, prompt and context_management are not supported: send the whole history in input on every turn.
instructions
string
Optional
A system-level instruction placed before input.
max_output_tokens
integer
Optional
Upper bound on the generated tokens, reasoning included.
- The gateway does not compare your value with the model’s max output from the table above. Keep it at or below that number.
- The value is also used to estimate how much balance a request needs. A very large value can be refused with
402 insufficient_creditseven when the real output would be small. Set it to what you need.
A reasoning model writes its reasoning first. If max_output_tokens is too small, the reasoning can use all of it and the answer text comes back empty or cut off. Leave room for both, and raise the value when that happens.
stream
boolean
OptionalDefault: false
Return the answer as server-sent events. See the Streaming section below.
Default: false
temperature
number
Optional
Sampling temperature. Change this or top_p, not both.
top_p
number
Optional
Nucleus sampling threshold.
tools
object[]
Optional
Function tools the model may call. The model answers with a function_call output item; return the result as a function_call_output input item with the same call_id. Hosted tools (web search, file search and the like) are not part of this list.
tool_choice
string | object
Optional
Whether the model may, must or must not call a tool. Test the value you rely on with your model.
Response
A non-streaming call returns one JSON object. This is an abbreviated example.
Response fields
Streaming
Set "stream": true. The stream starts with response.created, carries the answer in response.output_text.delta events and ends with response.completed.
- The response is
text/event-stream; without streaming it isapplication/json. - A function call arrives as its own output item, and its arguments stream in
response.function_call_arguments.deltaevents. - A failure before the model is called is returned as a normal JSON error with an HTTP status, not as a stream event.
- Set explicit timeouts and reconnect a streamed response safely.
Errors
HTTP errors at a glance
Authentication, routing, rate-limit and unknown-model failures are answered before the model is called, in the BeatAPI envelope: error.code, error.message, retryable, request_id. Every other failure keeps the OpenAI SDK shape {"error": {"message", "type", "code"}}: the code is in error.code and the request id ends message. See Errors.
Full code table and retry policy: Errors.
Notes
- GLM models also answer on Chat Completions and Anthropic Messages.
- GLM models have been observed to return reasoning by default. Reasoning tokens are billed as output, so budget
max_output_tokensfor the reasoning as well as the answer. glm-5.3-flashxis not available on free credit: an account that has never topped up gets403 forbidden. Top up to use it.- The free versions,
glm-5.3-freeandglm-5.3-flash-free, do not answer on/v1/responses. Call them on Chat Completions. - Keep API keys on trusted servers, log the response request ID, and retry only
429,500and503.
Authentication
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
Request
The exact model ID.
Each ID is a separate model, not an alias of another.
Call GET /v1/models with your key to confirm which models are enabled for it.
glm-5.3, glm-5.3-flash, glm-5.3-flashx
The prompt: a string, or an array of input items such as messages, function calls and their outputs.
Conversation state is not stored on the server. previous_response_id, conversation, prompt and context_management are not supported: send the whole history in input on every turn.
A system-level instruction placed before input.
Upper bound on the generated tokens, reasoning included.
The gateway does not compare your value with the model’s max output from the table above. Keep it at or below that number.
The value is also used to estimate how much balance a request needs. A very large value can be refused with 402 insufficient_credits even when the real output would be small. Set it to what you need.
A reasoning model writes its reasoning first. If max_output_tokens is too small, the reasoning can use all of it and the answer text comes back empty or cut off. Leave room for both, and raise the value when that happens.
Return the answer as server-sent events. See the Streaming section below.
Sampling temperature. Change this or top_p, not both.
Function tools the model may call. The model answers with a function_call output item; return the result as a function_call_output input item with the same call_id. Hosted tools (web search, file search and the like) are not part of this list.
Response
A non-streaming call returns one JSON object. This is an abbreviated example.
completed for a finished answer.
Output items: message, reasoning and function_call. The SDK’s output_text joins the text parts for you.

