> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.beatapi.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.beatapi.io/_mcp/server.

# Free models

> Text models you can call at no per-token charge, how to recognise them, who can call them and what the limits are.

# Free models

A model ID that ends in `-free` is free: it has no per-token price. Every free model is a separate ID from its paid sibling, so send the exact ID with `-free`.

* Five free text models, listed below, plus `jev-1.14-free` on the [Decisions API](/decisions), which is free as well. Image and video models have no free IDs.
* Any key can call them if its group reaches the free group, including the default `auto` group, with a zero balance and before the first top-up.
* Each account is limited to 1 successful request per minute before the first top-up and up to 10 per minute after.
* Free models can be rate limited or withdrawn at any time. Do not build a production path that depends on one.

## Model IDs

This is the list in the public catalogue (`GET /v1/text/models`, family `free`).

| Free model ID                                                                      | Paid sibling             | Family page                                     |
| ---------------------------------------------------------------------------------- | ------------------------ | ----------------------------------------------- |
| [`glm-5.3-free`](/text-api/glm/chat-completions)                                   | `glm-5.3`                | [GLM](/text-api/glm/chat-completions)           |
| [`glm-5.3-flash-free`](/text-api/glm/chat-completions)                             | `glm-5.3-flash`          | [GLM](/text-api/glm/chat-completions)           |
| [`deepseek-v4.1-flash-free`](/text-api/deepseek/chat-completions)                  | `deepseek-v4.1-flash`    | [DeepSeek](/text-api/deepseek/chat-completions) |
| [`deepseek-v4-flash-0731-free`](/text-api/deepseek/chat-completions)               | `deepseek-v4-flash-0731` | [DeepSeek](/text-api/deepseek/chat-completions) |
| `gemini-3.8-flash-free` (see the [Gemini](/text-api/gemini/chat-completions) page) | `gemini-3.8-flash`       | [Gemini](/text-api/gemini/chat-completions)     |

Sending the paid sibling's ID is a separate, billable request.

## Who can call them

* Any valid key whose group can reach the free group. Keys in the default `auto` group can.
* A zero balance is fine, and so is an account that has never topped up.
* The response `model` field carries the `-free` name.

An account on free credit can call only the models on the free-tier list, and the free IDs are on it. `GET /v1/free-tier` returns that list without a key. A top-up lifts the restriction.

## Limits

| Account state           | Successful requests per minute |
| ----------------------- | ------------------------------ |
| Before the first top-up | 1                              |
| After any top-up        | Up to 10                       |

* The limit counts successful requests. A failed request, or a stream that fails, gives its slot back. It limits how often you call, not how many calls run at the same time.
* Free calls are counted separately from your paid limit, so they do not spend it, and the paid limit does not spend them.
* Free models can still be refused when your account's normal limit for that minute is used up.

When you hit the limit, the answer is `429 rate_limit_exceeded` with a `Retry-After` header and `retry_after_seconds`. Wait that many seconds before retrying. The message names the limit; this is the exact text for an account that has never topped up:

```json
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded: this model allows at most 1 successful requests per minute per account. Retry after 60 seconds. Accounts that have topped up get a higher per-minute limit.",
    "retryable": true,
    "request_id": "req_abc123",
    "retry_after_seconds": 60
  }
}
```

After a top-up the message says `at most 10 successful requests per minute` and drops the last sentence. The code is the same one an ordinary account limit uses, so read the message to tell them apart. Wait the number of seconds in `Retry-After` / `retry_after_seconds`, then retry. See [Errors](/errors#text-endpoints).

## How they differ from the paid models

* **No published context or output limit.** Free entries in the catalogue omit the context window, the output limit and the prices. The paid sibling's context window and output limit are not promised for the free ID.
* **Reasoning is not guaranteed.** Paid-only options such as `thinking` and `reasoning_effort` may not behave as they do on the paid model.
* **Formats can differ.** For example, `glm-5.3-free` does not support `/v1/responses`. Check the family page before using a format other than Chat Completions.
* **Speed and availability can differ.** Free models can be slower, rate limited or withdrawn without notice, and no daily allowance is promised.
* **No cached-input price.** Free IDs are not billed per token at all.

## Try one

**`cURL`**

```bash title="cURL"
curl --request POST \
  --url https://api.beatapi.io/v1/chat/completions \
  --header "Authorization: Bearer $BEATAPI_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "glm-5.3-flash-free",
  "messages": [{ "role": "user", "content": "Say hello in one sentence." }]
}'
```

## Image and video

There are no free image or video models. Those models are billed per task; see [Quick guide](/quick-guide).