# Usage and retention

How events are counted against your monthly quota, how long they are kept, and where data lives.

## Monthly event quota

Every event that Ensue accepts counts against your workspace's quota for the calendar month (UTC). The quota comes from your plan, plus any add-on events you bought.

| Plan | Events a month |
|---|---|
| Free | 25,000 |
| Team | 1,000,000 |
| Scale | 5,000,000 |

Your current numbers, including add-ons, are always on the **Usage** page and at `GET /v1/quota`.

### What counts

- One **event** per matching flow, and one per delivery for [Dispatch](/dispatch/limits-and-errors/). A request that matches two flows counts twice.
- Requests that are rejected, filtered out, deduplicated or answered as a handshake create no events, so they don't count.
- Retries, replays, pulls from an inbox, leases and acks don't count. Only accepted events do.

### Over the limit

When a workspace reaches its limit, sources answer new requests with `429` and a `Retry-After` that points at the start of next month. Senders that retry, such as Stripe or GitHub, will usually resend once you have room. The block also applies at the network edge, on custom domains too, so rejected traffic never costs you anything.

It lifts on the 1st at 00:00 UTC, or within an hour of the limit being raised.

> [!NOTE]
> Events already queued keep being delivered when you reach the limit. Only **new** requests are refused.

## Retention

Finished events (`delivered`, `failed`, `cancelled`), their attempts and timeline entries are deleted once they are older than your plan's retention window. A request and its stored body go too, when no events remain for it.

| Plan | Kept for |
|---|---|
| Free | 3 days |
| Paid plans | Shown on the Usage page |

- Events that are still `queued` or `retrying` are never deleted, however old they are.
- Monthly usage counts are not affected by retention.
- Dedupe values are kept for 3 days.

Export or replay what you need before the window ends. A [replay](/gateway/replay-and-dead-letters/) makes a new event, which has its own window.

## Where data lives

Each workspace has a **data region**, fixed when the workspace is created: where its webhooks are received, stored and processed. Today every workspace runs on the **Global** region, on Cloudflare's network nearest each sender. Regional options for the EU, the US and India are listed in **Settings** as they become available.

Separately, a flow's `region` chooses where its **deliveries** leave from, when a regional egress relay is configured for your workspace. That changes the source address your destination sees; it does not move stored data.