Errors & limits
Errors use RFC 9457 problem details (application/problem+json). Branch on code; it's stable. Quote requestId when contacting support.
json
{
"type": "https://interviewleague.com/developers/errors#interviewer-limit-reached",
"title": "Interviewer limit reached",
"status": 403,
"code": "INTERVIEWER_LIMIT_REACHED",
"detail": "Free includes AI prep for two interviewers. Upgrade to Pro to prep the rest of the panel.",
"limit": 2,
"used": 2,
"upgradeUrl": "https://interviewleague.com/settings",
"requestId": "6f1c…"
}Error codes
| Code | HTTP | Meaning |
|---|---|---|
UNAUTHENTICATED | 401 | Missing or invalid token. |
TOKEN_EXPIRED | 401 | Create a new token in Settings. |
TOKEN_REVOKED | 401 | Token was revoked (or the account identity changed). |
INSUFFICIENT_SCOPE | 403 | Token lacks requiredScope (only for older restricted tokens). |
VALIDATION_FAILED | 422 | See errors[] for field-level messages. Also used for bad files (413/415). |
NOT_FOUND | 404 | Resource doesn't exist or isn't yours. |
OPPORTUNITY_LIMIT_REACHED | 403 | Free plan personalizes one opportunity. Includes limit, used, upgradeUrl. |
INTERVIEWER_LIMIT_REACHED | 403 | Per-opportunity interviewer cap (Free 2, Pro 10). |
ACTIVE_OPPORTUNITY_LIMIT_REACHED | 403 | Pro allows 10 active opportunities. Archive one first. |
OPPORTUNITY_EXISTS | 409 | This posting URL is already saved. Includes existingOpportunityId and webUrl. |
OPPORTUNITY_INACTIVE | 409 | Activate the opportunity before generating. |
SUBSCRIPTION_REQUIRED | 403 | Feature requires Pro. |
MISSING_PREREQUISITES | 409 | Add a job description and resume before generating. |
IDEMPOTENCY_KEY_REUSED | 409 | Same Idempotency-Key with a different request body. |
REQUEST_IN_PROGRESS | 409 | Same key still processing. Honor Retry-After. |
GENERATION_LIMIT_REACHED | 429 | Daily generation cap (30/day). Includes resetsAt. |
RATE_LIMITED | 429 | Too many requests or concurrent generations. Honor Retry-After. |
Plan limits
| Free | Pro | |
|---|---|---|
| Personalized opportunities | 1 | Up to 10 active at a time |
| Personalized interviewers per opportunity | 2 | 10 |
| Intelligence sections | Summary, role in decision, focus areas, questions | All, including positioning, experiences to highlight, red flags, questions to ask |
| Storing opportunities & interviewers | Unlimited | Unlimited |
Limits are enforced identically for the API and the web app. A plan change applies to existing tokens on the next request.
Rate limits
- 60 requests per minute per token, and 120 per minute per account across all tokens.
- Up to 2 generations running at once and 30 generations per day per account. Failed generations don't count.
- Over a limit, you get
429with aRetry-Afterheader.
Field limits
- Job description and resume: 50,000 characters each. Research notes: 20,000. Up to 25 source URLs.
- Interviewer notes: 5,000 characters. Interviewer profile text: 20,000.
- PDF uploads: 5MB, must be real PDFs.