> For the complete documentation index, see [llms.txt](https://vampauth.gitbook.io/vampauth-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vampauth.gitbook.io/vampauth-docs/api-reference/management/retries-and-limits.md).

# Retries, revisions, and limits

## ETags

Read the resource/configuration and retain its strong ETag. Send it as `If-Match` for conditional writes.

* Project configuration uses `"project:<uuid>:<revision>"`.
* Loader configuration uses `"loader:<uuid>:<revision>"`.

Project edits/deletion, collaborator mutations, default payload, provider PUT, and group PATCH/DELETE require the project tag. Loader PATCH/DELETE, content PUT and rotation require the loader tag.

Missing If-Match: 428. Stale: 412. Malformed: 400. Weak tags, wildcards and lists aren't accepted. Obtain a fresh ETag for an independent write; don't silently overwrite a change you haven't read.

## Idempotency

Retain one `Idempotency-Key` for one operation and its exact retries. The body, URL/target, and original precondition must stay unchanged.

Required for project creation, team invitations, group/ban creation, bulk hardware actions, key creation/batches, key renewal/reset, and bulk key renewal. Normal keys are 1–128 visible ASCII characters. **Loader create, content replacement and rotation require UUID keys.**

Successful retained retries replay the original data/status/ETag/Location after checking current authorization. They include `Idempotency-Replayed: true` and fresh request metadata. Retention is 24 hours. Reuse with changed input returns 409; after retention, reuse may represent a new operation.

Publishing can return a processing/configuration conflict while work is pending. Don't retry an uncertain write with a new idempotency key: that can perform it twice.

## Rate budgets

Budgets are shared by account, not multiplied per token. Fixed UTC windows apply:

| Category           | Per minute |
| ------------------ | ---------- |
| All normal traffic | 150        |
| Reads              | 120        |
| Writes             | 30         |
| Bulk               | 10         |
| Heavy              | 10         |

Bulk also consumes write budget. Heavy publishing consumes the all/heavy budgets rather than the separate normal-write budget. Protected output reads and heavy analytics consume heavy. Exact key lookup is a read.

Token issuance has a separate 10/hour limit; revocation 30/minute; invalid-auth IP protection 60/minute. Authenticated failures may still consume admission budget.

Read `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`; reset is UTC epoch seconds. Honor `Retry-After` on 429. Limiter/dependency failure returns 503 rather than admitting an unchecked mutation.

## Input sizes

Default JSON write limit is 16 KiB unless an operation says otherwise. Key bulk: 32 KiB. Configuration/team limits vary; provider/group/hardware configuration is 64 KiB. Loader metadata: 4 KiB. Publishing uses the stream limits on its endpoint. Actual bytes are measured; Content-Length isn't trusted.
