Back to Models
z-ai logoZ.ai
glm-5.3

GLM 5.3

GLM-5.3 is a large-scale reasoning model from Z.ai, built for complex software engineering and long-horizon agent tasks. It supports text input and output with a 1M-token context window, and improves...

8/18/2026
1,048,576 tokens
Input: $1.48/M
Output: $4.65/M

Specifications

Modalities

Input
text
Output
text

Supported Parameters

include_reasoning
max_tokens
reasoning
reasoning_effort
response_format
temperature
tool_choice
tools
top_k
top_p

Max Output Tokens

131,072

Reasoning Configuration

Default
Thinking on (effort: max)
Selectable effort levels
max
high
low
Turning thinking off
Not possible (always thinks)

How to control thinking, and what it costs

Data policy

Prompt retention
Unknown — we could not confirm
Training
Unknown — not declared

"Unknown" does not mean "safe". It means we could not confirm it.

Whether a provider trains on prompts is a declared value from our terms with them. Retention is determined from the upstream listing for every host this model can reach. Neither is guessed.

Measured performance

Time to first response (p50)1.1s

    Measured through FastMetal's own gateway over the last 30 days (647 first-response samples).

    Time to first response is measured to the first streamed chunk; throughput counts all output tokens, including reasoning tokens. These are observations, not a performance guarantee.

    Code Examples

    curl https://api.fastmetal.ai/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -d '{
        "model": "glm-5.3",
        "messages": [{"role": "user", "content": "Hello!"}]
      }'

    How GLM 5.3 actually answers

    Real responses to our standard prompts, recorded on FastMetal.

    Count the number of 'r's in 'strawberry'

    Count the number of 'r's in 'strawberry'. Explain your reasoning step by step.

    # Counting 'r's in "strawberry" **Step 1: Spell out the word letter by letter.** s - t - r - a - w - b - e - r - r - y **Step 2: Go through each letter and mark the 'r's.** | Position | Letter | Is it 'r'? | |----------|--------|------------| | 1 | s | No | | 2 | t | No | | 3 | **r** | ✅ Yes (1st) | | 4 | a | No | | 5 | w | No | | 6 | b | No | | 7 | e | No | | 8 | **r** | ✅ Yes (2nd) | | 9 | **r** | ✅ Yes (3rd) | | 10 | y | No | **Step 3: Tally the results.** - 1st 'r' in "st**r**awberry" - 2nd 'r' in "strawbe**r**ry" - 3rd 'r' in "strawber**r**y" ## Answer: There are **3** 'r's in "strawberry." (Note: two of them appear together in the "rr" near the end, which is easy to miss when c…
    5.8s response493 output tokens

    Debug This Error

    I'm getting the following error in my Node.js application: TypeError: Cannot read properties of undefined (reading 'map') at UserList (/app/components/UserList.js:12:25) at renderWithHooks (/app/node_modules/rea…

    ## What's happening The error means `users` is `undefined` when the component renders. `undefined` doesn't have a `.map()` method, so JavaScript throws a `TypeError`. Since destructured props that aren't passed default to `undefined`, something upstream isn't providing the value you expect. ## Common causes 1. **The parent doesn't pass the prop, or uses a different name:** ```jsx <UserList /> {/* missing users */} <UserList userList={users} /> {/* prop name mismatch */} ``` 2. **Async data hasn't loaded yet** — the component renders before an API call completes, and the initial value is `undefined`: ```jsx const [users, setUsers] = useState(); // undefin…
    17.1s response1345 output tokens

    Code Review

    Please review the following Python function and suggest improvements for readability, performance, and best practices: def get_data(url, retries=3): import requests import time for i in range(retries):…

    Here's a breakdown of the issues, followed by a refactored version. ## Readability - **Move imports to module level.** PEP 8 requires top-level imports; importing inside a function hides dependencies and adds overhead on every call (small, but pointless). - **`item["active"] == True`** → just `item.get("active")`. Comparing to `True` with `==` is flagged by PEP 8, and `.get()` avoids a `KeyError` if the key is missing. - **Use a list comprehension** instead of initializing a list and appending in a loop. - **Rename things.** `get_data` doesn't say what it does (`fetch_active_items`?), and `response` beats `r`. Use `_` for the unused loop counter. - **Magic numbers** (`2`, `10`) should be n…
    75.0s response6434 output tokens

    Compare these answers side by side with other models →

    Frequently asked questions

    How much does the GLM 5.3 API cost?
    On FastMetal, GLM 5.3 is billed per token: $1.48 per 1M input tokens and $4.65 per 1M output tokens on a US-dollar account, before tax. Usage is drawn from a prepaid balance; there is no subscription or monthly fee.
    Can I call GLM 5.3 with the OpenAI SDK?
    Yes. Point base_url at https://api.fastmetal.ai/v1 and pass "glm-5.3" as the model; existing OpenAI-style code works unchanged, including streaming, tool calls and structured output.
    What is the context window of GLM 5.3?
    1,048,576 tokens, shared between the prompt and the response.
    What do I need to try GLM 5.3?
    Create an account and add credit; the model is then available both in the browser chat and over the API. There is no contract or minimum spend.

    Try GLM 5.3 right now

    GLM 5.3 is available on FastMetal through one API key. Start in the browser, or call it from the OpenAI SDK.