Skip to main content
Equip’s API counts requests per organization, so every integration that uses your API key, plus your recruiters’ dashboard sessions, draws from the same allowance. When the allowance is used up, the API answers 429 Too Many Requests and tells you how long to wait. Every other error comes back as JSON with a message you can act on.

Rate Limits by Plan

Each organization has a per-minute and a per-hour allowance set by its plan. Both windows apply at once: a request is refused as soon as either one is full. A few expensive operations have an extra, tighter cap of 30 per minute and 300 per hour on top of the plan allowance. These include inviting candidates to an assessment or AI interview, bulk CV imports and generating PDF reports; the reference marks them.
A plan change applies to your allowance within about a minute. An organization whose subscription has lapsed drops to a smaller allowance until it is restored, and API access itself is a plan feature (see Compare Plans).

Rate Limit Headers

Every counted response carries three headers describing the tightest window you are in. A 429 adds Retry-After. Read RateLimit-Remaining as you go and slow down before it reaches zero. When you do get a 429, wait for Retry-After seconds and retry; do not retry in a tight loop, since every refused request is still counted as an attempt.
If you poll for results, switch to webhooks. Equip pushes each completed assessment or interview to you once, which removes the polling traffic from your allowance entirely.

Error Codes

Every error is a JSON object. Most carry a message; some add a details object or, for field-access errors, an error field.
A 401 Invalid API key right after someone clicked Rotate API Key is expected: the old key stopped working at that moment. Update every integration with the new key.

Example Error Bodies

A plan refusal carries a details object with the feature, the tier it needs and your current tier.
A rate-limit refusal names the window that filled up and how long to wait.
A field-access refusal uses an error field and lists both what you asked for and what is allowed.
The field names in the last example are illustrative. The real allowed_fields list is the one the operation’s reference page documents.