> ## Documentation Index
> Fetch the complete documentation index at: https://docs.recovea.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Caps and windows

The five windows a cap runs on, their UTC boundaries, what the week means in the code, and how several caps on one scope combine.

A cap counts spend over a window, and the window is a clock. When the window closes, the count starts again from zero; a lifetime cap never closes.

## The five windows

| Window | Opens and closes | Period key |
| --- | --- | --- |
| `day` | every day at 00:00 UTC | `YYYY-MM-DD` |
| `week` | every Monday at 00:00 UTC | `YYYY-Www` |
| `month` | the 1st of the month at 00:00 UTC | `YYYY-MM` |
| `year` | 1 January at 00:00 UTC | `YYYY` |
| `lifetime` | never | `all` |

Every boundary is UTC, for every organization. A monthly cap in Denver still resets at 00:00 UTC on the 1st, which is the evening of the last day of the month there; the platform prints each boundary in UTC and in your own clock so the two are never confused. `month` is the default window.

## What "week" means

A week is an ISO week: it opens on Monday at 00:00 UTC and closes at the next Monday's 00:00 UTC. Its period key is written `YYYY-Www`, and the year in it is the ISO week-numbering year, which is not always the calendar year for the first and last few days of a year:

- Monday 29 December 2025 opens week `2026-W01`;
- Friday 1 January 2027 is still in week `2026-W53`, which runs until Monday 4 January 2027.

So a weekly cap never resets at New Year unless New Year is a Monday. It resets on Mondays, and only on Mondays. A weekly cap's refusal says so in its own word: *"Weekly budget reached. Traffic resumes at reset, or raise the cap."*

## How a window resets

Nothing clears a counter. Each window's count is kept under its period key, and the first request of a new period reads a key that has no count yet, which is zero. That is why a reset needs no job to run: the date moving on is the reset.

The same key is why alert thresholds re-arm on their own: a threshold fires once per cap, per period, per percentage, and a new period is a new key ([Alert thresholds](https://docs.recovea.ai/concepts/alert-thresholds/)).

A lifetime cap names one key forever, so it counts every dollar since the cap was created and never reopens. Its refusal says *"This budget does not reset; raise the cap to continue."*

## Several caps on one scope

A scope can carry several caps on different windows: a daily cap and a lifetime cap on one key, or a monthly and a yearly cap on the organization. Each keeps its own count on its own clock. At admission every armed cap that covers the request is checked, and the tightest decides: if the daily cap is reached, the request is refused with the daily sentence even though the lifetime cap has room.

Two caps on two clocks have no total, so nothing adds them up.

## The run envelope

A run's budget is a sixth window, `run`, and it is not a clock at all: it opens with the first request that names the run and never reopens once reached. It nests inside the caps above it and can only tighten them. [Breaker](https://docs.recovea.ai/products/breaker/) describes it.
