---
url: https://docs.freetheai.org/concepts/limits.md
description: >-
  FreeTheAI free tier limits - 50 requests a day to start, +50 for linking
  Discord, one request at a time, reset at 00:00 UTC - and what does and does
  not count.
---

# Limits and the daily reset

The free tier is free, not unlimited. Every account has daily limits that reset on their own, and the **Free usage** page in your dashboard shows how much you have left.

## The free tier at a glance

* **50 free requests a day** to start, for every account with a confirmed email.
* **+50 a day** for linking your Discord account (Dashboard > Free usage or Settings).
* **Reset at 00:00 UTC** every day, together with the [check-in](/getting-started/check-in).
* **One request at a time.** A second request while a reply is still running answers `429`.
* A short **daily check-in** on freetheai.org unlocks free models.

::: tip What 00:00 UTC is where you are
00:00 UTC is 7 PM the evening before in New York (8 PM in summer), 4 PM in Los Angeles (5 PM in summer), midnight in London (1 AM in summer), 5:30 AM in New Delhi, and 8 AM in Manila.
:::

## What counts and what does not

A request counts only when it gets a real answer.

| Request | Counts? |
| --- | --- |
| A reply that finished | Yes |
| A reply that broke off after a real amount of text reached you | Yes |
| A reply that broke off almost at once | No |
| An error (bad request, failed model, broken stream) | No |
| A model that was busy, paused, or out of free capacity (`503`) | No |
| A request refused for a limit (`429`) | No |

## Other limits you may meet

Besides the daily request count, free usage has a few more limits, each with its own message on the [errors page](/errors#limits):

* **Usage windows.** Free usage is also measured over a 5-hour window, a day, and a week, and each window opens with your first request. Long chats and agents send the whole conversation every time, so they use more. The message tells you when the window resets.
* **Request size.** A single request can be too large for the free tier: `This request is too large for the free tier.` Lower your app's context size or start a new chat. Linking Discord raises this limit.
* **Model family budgets.** Some model families have a daily token budget per account. When it is used up, every other model still works until 00:00 UTC.
* **Shared daily limits.** Some models share one daily limit across everyone so they last all week. When it is used up, the model is paused for everyone until the time in the message, even if you still have requests left. The [status page](https://freetheai.org/status) shows paused models.
* **Rate limits.** Too many requests in a short time answer `429` with `rate limit reached`.
* **Web search** has its own small daily allowance, separate from free requests. See [Web search](/concepts/web-search).

## One request at a time

Free accounts run one request at a time. If a reply is still running, the next request answers:

```text
concurrency limit reached: your account already has as many requests running as its plan allows.
```

Wait for the reply to finish (or stop it), then send again. Coding tools often send several requests at once; most retry these on their own. In your own code, send requests one after another instead of in parallel.

## Handling 429 and 503 in code

Retry with a growing wait, and never retry a `429` for the daily limit until the reset.

```python
import time
from openai import OpenAI, RateLimitError, APIStatusError

client = OpenAI(base_url="https://api.freetheai.org/v1", api_key="ftai_...")

def ask(messages, model="fta/zai/glm-5.3", tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except RateLimitError as err:  # 429
            message = str(err)
            if "free requests" in message or "free usage" in message:
                raise  # a daily or window limit: wait for the reset instead
            time.sleep(2 ** attempt)
        except APIStatusError as err:
            if err.status_code in (502, 503):  # busy or failed model: not counted
                time.sleep(2 ** attempt)
                continue
            raise
    raise RuntimeError("model stayed busy; try another model")
```

The OpenAI SDKs also retry some errors on their own (`max_retries`, two by default).

## Getting more

* Link Discord on the **Free usage** page for +50 requests a day.
* Paid models and plans are coming soon.
