GLM 5.3 API: Pricing, Endpoints, and reasoning_effort
The GLM 5.3 API opened five days after the model did, at $1.40 per million input tokens and $4.40 per million output, the same rate as GLM 5.2. The price is not what will surprise you. reasoning_effort defaults to max, and on a short classification call we measured max spending a median of 105 output tokens where low spent 3.
That is a 35x difference on the metered half of your bill, set by a parameter most people will not send.
Price: $1.40 in / $0.26 cached in / $4.40 out per 1M tokens
Context: 1M tokens, 128K max output
Base URLs: api.z.ai/api/coding/paas/v4 (OpenAI Chat Completions)
api.z.ai/api/v1 (OpenAI Responses)
api.z.ai/api/anthropic (Anthropic Messages)
Gateways: z-ai/glm-5.3 on OpenRouter and ofox
Effort: low | high | max, default max, cannot be disabled
Removed: thinking.type "disabled" now returns HTTP 400
Measured: classify task 3 / 8 / 105 output tokens at low / high / max
Snapshot: 2026-08-19
How Much Does the GLM 5.3 API Cost?
$1.40 per million input tokens, $0.26 cached input, $4.40 output. Z.ai's pricing table now carries a GLM-5.3 row, and it matches GLM 5.2 and GLM 5.1 line for line.
| Item | Rate |
|---|---|
| Input | $1.40 / 1M tokens |
| Cached input | $0.26 / 1M tokens |
| Cached input storage | Free, marked limited-time |
| Output | $4.40 / 1M tokens |
Cached input at $0.26 is 19% of a cold read, and the storage that usually makes caching a judgement call is free during the promotion. Output costs 3.1x input, which is the ratio that makes the effort setting below the most expensive line in your config.
OpenRouter lists the same $1.4 / $4.4 pair at a 1,048,576-token context, so third-party routes are passing the first-party rate through rather than marking it up.
What Is the Base URL for the GLM 5.3 API?
Three protocols, and the docs page contradicts itself about one of them. The model page lists these:
| Protocol | Base URL |
|---|---|
| OpenAI Chat Completions | https://api.z.ai/api/coding/paas/v4 |
| OpenAI Responses | https://api.z.ai/api/v1 |
| Anthropic Messages | https://api.z.ai/api/anthropic |
Then the Quick Start section further down the same page posts to https://api.z.ai/api/paas/v4/chat/completions, without the /coding segment. If the first one 404s, try the second before you go looking for a problem in your key.
Neither of them is the https://open.bigmodel.cn/api/paas/v4 that Zhipu previewed on launch day.
One restriction is easy to miss: accounts that have ever subscribed to a GLM Coding Plan, including expired subscriptions, can currently reach the model API only through the OpenAI Chat Completions protocol. If your Responses or Anthropic-protocol calls fail on an account that used to run a plan, that is why.
What Does reasoning_effort Do to Your Bill?
More than the model choice does. GLM 5.3 always reasons, reasoning_effort takes low, high or max, and the default is max.
We ran two workloads through z-ai/glm-5.3 on an OpenAI-compatible gateway on 2026-08-19. A short classification prompt at n=10 per level, and a small code-generation prompt at n=5 per level.
| Workload | Effort | Output tokens, median | Range | Latency, median |
|---|---|---|---|---|
| Classify a support ticket (51 in) | low | 3 | 3 to 8 | 1.6 s |
| high | 8 | 8 to 8 | 1.9 s | |
| max | 105 | 47 to 160 | 3.4 s | |
| Write a merge-intervals function (50 in) | low | 519 | 418 to 586 | 11.6 s |
| high | 658 | 592 to 825 | 8.6 s | |
| max | 3,700 | 2,807 to 10,596 | 64.0 s |
The classification row is the one to look at twice. Three output tokens at low, 105 at max, for an answer that is a single word either way. We then re-ran the classification 18 more times, six per effort level: every single run returned billing, the correct label, at all three settings.
| Workload | low | high | max |
|---|---|---|---|
| 1M classification calls | $84.60 | $106.60 | $533.40 |
| 1,000 code-generation tasks | $2.35 | $2.97 | $16.35 |
Both rows are all-in: input at $1.40/M plus output at $4.40/M, priced at uncached rates. Output alone on the classification row would be $13.20, $35.20 and $462.00, so the fixed $71.40 of input compresses the token-level 35x ratio to 6.3x on the final bill.
high is the setting that gets skipped and probably should not be. It cost 26% more than low on both jobs, and on the code job it was faster than low at the median, 8.6 seconds against 11.6. Latency does not climb monotonically with effort.
A caveat: these are two prompts, not a benchmark suite, and the max ranges are wide. Run your own prompt before you size a budget on it.
Why Does My GLM 5.3 Request Return 400?
Most likely because reasoning cannot be switched off, and the message is only half accurate.
{
"error": {
"message": "This model always engages in thinking and cannot be disabled; please use low, high, or max"
}
}
That is the response to "thinking": {"type": "disabled"}, which is correct and expected. On 2026-08-19 it was also the response to "reasoning_effort": "medium" and "none", which was not, because neither tried to disable anything.
That validation behaviour then changed. Re-testing on 2026-08-20, the same route accepted medium, none, minimal and xhigh with HTTP 200, each burning eight to thirteen times the output tokens of an explicit low on the same prompt. A different route to the same model name still returned the 400 that day. A genuinely malformed value like "invalid_value" was rejected on both routes, so validation exists — it just lives on the route rather than in the model, and it changed under a fixed model name with no announcement.
Two consequences. A 400 here does not always mean what the message says. And a 200 does not confirm the value picked the tier its name suggests: on the accepting route every undocumented value landed near max, so a harness sending medium believing it picked middle pricing pays top-tier rates silently.
| Request | Result |
|---|---|
thinking.type: "disabled" |
400, thinking cannot be disabled |
reasoning_effort: "medium" / "none" / "minimal" / "xhigh"
|
Route-dependent. 400 on 2026-08-19; 200 billed near max on 2026-08-20 |
reasoning_effort: "low" / "high" / "max"
|
200 |
thinking.type: "enabled" plus reasoning_effort: "low"
|
200 |
| No reasoning field at all | 200, billed as max
|
Model ID zai/glm-5.3 on a gateway |
404 model_not_found, the prefix is z-ai
|
How Do I Migrate a GLM 5.2 Workload to GLM 5.3?
Change the effort parameter first, then the model ID. A request carrying thinking.type: "disabled" fails the moment the model ID flips.
from openai import OpenAI
client = OpenAI(api_key="YOUR_KEY", base_url="https://api.ofox.ai/v1")
r = client.chat.completions.create(
model="z-ai/glm-5.3",
messages=[{"role": "user", "content": "Classify this ticket: ..."}],
reasoning_effort="low", # omit this and you are billed at max
)
print(r.usage.completion_tokens)
Set it explicitly everywhere, including the places that inherit defaults: retry wrappers, evaluation harnesses, and any framework that builds the request body for you. A missing reasoning_effort is not a missing feature, it is a bill at max.
If you are wiring up a key from scratch, our GLM 5.2 API access guide applies unchanged. For the workload math on high-volume short calls, the GLM 5.2 versus GPT-5.5 cost comparison has the model.
Should I Call GLM 5.3 Directly or Through a Gateway?
Direct if you only run GLM. Through a gateway if you run anything else alongside it, or if you got caught by the Coding Plan protocol restriction.
| Z.ai direct | Gateway | |
|---|---|---|
| Price | $1.4 / $4.4 | Same, passed through |
| Protocols | Three, minus the Coding Plan restriction | Whatever the gateway speaks |
| Model ID | glm-5.3 |
z-ai/glm-5.3 |
| Failover to another model | Your code | One string |
| Cache pricing | $0.26, storage free for now | Depends on passthrough |
One caveat on gateways: what a proxy reports back is not always what it was billed. On the gateway we tested, usage.completion_tokens_details.reasoning_tokens does come through. What did not come through was any prompt_tokens_details cache field, and the reasoning text itself is absent from the message object. Verify both against your own provider before you build cost accounting on them.
For benchmarks, the weights timeline and the GLM 5.3 versus 5.2 capability picture, our GLM 5.3 launch coverage has the full table. The ofox model page for GLM 5.3 carries the live catalog spec.
References
- Z.ai developer docs: GLM-5.3 model page
- Z.ai developer docs: pricing
- Z.ai developer docs: deep thinking
- OpenRouter: z-ai/glm-5.3
- ofox model page: GLM 5.3
Originally published on ofox.ai/blog.
Top comments (0)