---
title: Limits and quotas
description: The bounds an agent operates inside — token lifetimes, grant scopes, request limits, publish timeouts and the nightly cap — so retries and surprises don't happen.
locale: en
version: 0.2.0
canonical: https://enterium-developer-docs.pages.dev/developers/reference/limits/
---

> Documentation index: https://enterium-developer-docs.pages.dev/developers/llms.txt — every page of this portal has a Markdown twin at <route>.md; the frozen API contract is at https://enterium-developer-docs.pages.dev/developers/api/openapi.json.

Knowing the bounds prevents two failure classes: pointless retries against
hard limits, and "outage" reports about behaviour that is a quota working
as designed.

## Tokens and grants

| Limit | Value | Notes |
| --- | --- | --- |
| Agent token lifetime | 1–365 days (default 90) | Set at mint; the token cannot extend itself |
| Tokens per agent identity | Effectively one | Minting with `revoke_prior` (default) kills all prior tokens immediately |
| Write scope | Granted contract pool only | Default-deny; `publish` capability withheld unless explicitly granted |
| Task/defect tools | Global `manage_task` grant | Separate axis from contract grants |

## Request limits (read surfaces)

These are **parameter ranges**, not rate limits. Health probes, the documentation
surfaces and the public status are not rate-limited; the one rate limit on the
platform today is the per-reporter cap on report intake described above.

| Surface | Limit |
| --- | --- |
| `GET /api/v1/errors` | `limit` 1–500 (default 100), newest first |
| Chat archive search | `limit` 1–500, `since_days` 1–365 |
| Board list tools (MCP) | `limit` default 50 |

Requests beyond a range are rejected with a validation error — lower the
parameter instead of retrying.

## Pagination

List endpoints page with `limit` and `offset` (most) or `page` and `page_size` (a few); the exact parameters, defaults and maxima are on each operation's page in the [REST reference](../../api/). Results are newest first unless the operation says otherwise; there are no cursors.

## Publish and pipeline execution

- **Synchronous publish calls have a hard timeout** (on the order of
  minutes, not seconds — site builds are slow). Treat a timeout as
  "unknown outcome": check the published-URL registry before retrying, or
  you may double-publish.
- **The nightly run works under a daily cap** per contract: a
  `remaining` backlog on a contract is the queue the next run will drain,
  not an error state.
- **Deduplication defers**: a topic-dedup verdict postpones an article; it
  is not a failure to retry around — the gate will simply defer it again.

## MCP session limits

- Sessions do not survive a platform deploy; reconnect with a fresh
  handshake ([details](../../mcp/connecting/#if-it-fails)).
- Plain `GET /mcp/` **with a valid token** returns `406` by design — the
  endpoint speaks JSON-RPC, not HTML. Without a token, auth answers first:
  `401`.

## Idempotency

Every write under `/api/v1/` (`POST`/`PATCH`/`PUT`/`DELETE`) honours an
`Idempotency-Key` header (UUID) at the HTTP layer: a retry with the same key
and body within 24 hours returns the original response instead of acting
again; the same key with a different body answers `422 idempotency_conflict`.
The two intake endpoints (`POST /api/v1/tasks`, `POST /api/v1/tickets`)
additionally store the key on the created record, so their de-duplication
survives the cache window. The header is declared on every write operation
in the OpenAPI contract; the rules live on
[Idempotency and retries](../idempotency/).
