---
title: Limits
description: Request sizes, rate limits, classification bounds, attempts, pack sizes and how long things are kept.
sidebar:
  order: 5
---

## Decision requests

| Limit | Value | Refusal |
| --- | --- | --- |
| Characters per excerpt | 2,000 | `text_too_long` |
| Excerpts per question | 3 | `too_many_excerpts` |
| Questions per request | 64 | `too_many_questions` |
| Facts per request | 512 KiB | `request_too_large` |
| JSON body | 2 MiB | `invalid_body` |
| Content-parts body | 4 MiB | `invalid_body` |

The brief's `limits.facts` repeats these for each job.

## Rate limits

Decision requests are limited per minute, per caller (an agent or a person) and per workspace, so one busy agent can't crowd out others.

| Plan | Per caller | Per workspace |
| --- | --- | --- |
| Standard | 120 decisions a minute | 300 decisions a minute |
| Raised (on request) | 1,200 decisions a minute | 3,000 decisions a minute |

- **What counts:** every decision, over REST or MCP, and every output check (`check_output`). A backtest counts as 10 decisions, since it re-decides up to 50 cases twice.
- **What doesn't:** job lists, briefs, receipt verification, and authoring tools other than backtest.
- **Only accepted requests count.** A request is counted after its caller is authenticated and authorized for that job, so an unauthorized request never spends your allowance.
- **When limited:** `429 rate_limited` with `limit` (`caller` or `workspace`), `retryAfterSeconds: 60` and a `Retry-After: 60` header. Nothing was claimed, so resending the same request with the same execution ID after the wait is safe.
- The limits are approximate, not exact counts.

To stay well inside them, send every question you have evidence for in one request per entity, and spread large runs over time. For runs of thousands of entities, talk to the Felspar team.

## Classification

| Bound | Value |
| --- | --- |
| Deadline for a job's classification | 10 seconds; unanswered excerpts report `classification_failed` |
| Classification ceilings | Per job, and per day for each workspace and each caller; refusals `classification_allowance_exhausted` and `classification_ceiling_reached` |
| Cache of identical classification requests | 30 days, keyed by a fingerprint, not the text |
| Backtest re-classification | Its own daily allowance, separate from agents' decisions |

## Attempts

| Limit | Value |
| --- | --- |
| Attempts per case | The pack's `attempts.max`, default 3 (1 to 10) |
| Extra attempt after progress | 1 |
| Attempt window | 24 hours from the case's last decision |

Past the limit: `attempt_limit_reached`, with the escalation the pack names for it.

## Subjects and escalations

| Limit | Value | Refusal |
| --- | --- | --- |
| Subject types per pack | 16 | |
| Relationships per subject | 16 | |
| Escalations per pack | 16 | |
| Related record IDs per request | 16 | `too_many_related` |
| Case and related IDs | 1 to 200 characters: letters, digits and `. _ : @ -` | `subject_id_invalid` |
| New issued cases per caller and job | 200 in any 24 hours. A first decision whose excerpts are exactly the same text as a case the caller opened on the job in the last 24 hours reuses that case instead of opening one. | `issued_case_limit` |
| Identity fields per job | 8 | |

## Packs

| Limit | Value |
| --- | --- |
| Questions per job | 64 |
| Answers per question | 2 to 64 |
| Rules per job | 256 |
| Test cases per draft | 200 |
| Evidence kinds per pack | 8 |
| `useWhen`, `notFor` quotes per job | 8 each |
| Maximum evidence age | 1 to 3,650 days |
| Quote length | 4,000 characters |
| Separate document blocks per question's quotes | 16 |

## Sources

| Limit | Value |
| --- | --- |
| Watched documents per workspace | 500 |
| Watch interval | Every 5 minutes |
| Notion pages (beta) | 3 levels of nesting, 2,000 blocks |

## Backtests

| Limit | Value |
| --- | --- |
| Saved cases per backtest | 1 to 50, default 25, newest first |
| How far back | The last 30 days of decisions |

## Retention

| What | How long |
| --- | --- |
| Sources, proposals and approvals that are never released | 30 days |
| A release and its source, proposal and approval | As long as it serves (newest release of its job, or pinned by an agent), then 90 days |
| Decisions: evidence, classifications, results, receipts | 30 days from the first decision on the case |
| Attempt records (question keys and locators only) | 30 days |
| Classification cache entries | 30 days |
| Backtest reports | Not stored |
| Signed-in browser session | Up to 30 days |

See [Security, privacy and data](/security#what-felspar-stores).
