<!-- Generated by scripts/gen-developer-docs.ts from src/developers/content/recruit/rate-limits.md — do not edit. -->

# Rate limits and idempotency

> How many requests a key may send, and how to retry writes safely with an Idempotency-Key.

## Rate limits

Each key may send 60 requests per minute. Above that, calls answer `429 INTEGRATION_RATE_LIMITED` with a
`Retry-After` header: wait that many seconds. One invite request takes at most 100 candidates.

## Idempotency-Key

Write routes added in 2026 (create and change a role, the invite link and cancel routes, the hook test) require an
`Idempotency-Key` header; `POST /api/v1/roles/{roleId}/invites` accepts one. Use a unique value (1–255 characters) per
operation you mean, and reuse it only to retry that same operation:

- the same key and body within 24 hours → the first answer again, without running twice (a `screen_url` is not repeated: `screen_url_redacted: true`);
- the same key with another body, or on another object → `409 IDEMPOTENCY_CONFLICT`;
- while the first request is still running → `409 IN_PROGRESS` with `Retry-After`;
- a missing key on a route that requires one → `400 IDEMPOTENCY_KEY_REQUIRED`.

Keys are scoped to your workspace and to the key's mode: a test key and a live key never share answers.
