Errors
Every error response is a problem details object (RFC 9457) with the media type application/problem+json. It always has type, title and code; status on all but a gateway_error; usually detail, a message safe to show a user; errors for a validation failure; and correlationId for an unexpected one. Operations add codes of their own, such as CAPTCHA_FAILED.
invalid_json400The request body is not valid JSON.
Send a JSON body with Content-Type: application/json.
Permalinkunexpected_body400The operation takes no request body, but one was sent.
Send the request without a body.
Permalinkunexpected_query400The request has query parameters the operation does not define.
Remove the parameters listed in detail, or check their spelling.
Permalinkinvalid_cursor400The cursor was changed, has expired, or belongs to a list with different filters.
Start again from the first page, without a cursor.
Permalinkinvalid_idempotency_key400The Idempotency-Key header is empty, too long or not visible ASCII.
Send 1 to 255 visible ASCII characters, such as a UUID.
Permalinkcompany_id_required400A platform key sent a request without the Alfa-Company-Id header.
Name the client company the request is for in Alfa-Company-Id, using its Company ID (org_…).
PermalinkTOKEN_EXPIRED401The session token has expired.
Get a fresh session token and retry.
PermalinkINVALID_TOKEN401The token is not valid.
Sign in again to get a new token.
Permalinkaccess_denied403The token is valid, but it does not grant access to this path.
Check that you are calling the zone your token is for.
PermalinkNO_ACTIVE_ORG403The signed-in user has no active organization.
Choose an organization in the app, then retry.
Permalinkinsufficient_scope403The API key does not have the scope this operation needs.
Generate a key with the scope the reference lists for the operation. Scopes are fixed when a key is created.
Permalinkcompany_not_connected403The API key may not act for this company: a company key named another company, or the company has not authorized your platform, or has revoked it.
Check the Company ID. For a platform key, ask the company's admin to authorize your platform in Settings › Developers.
Permalinkapi_not_enabled403The Alfa API is not switched on for this company.
Contact Alfa to switch it on.
PermalinkFORBIDDEN403The user may not perform this operation.
Ask an organization admin for access.
Permalinkroute_not_found404No operation matches the method and path.
Check the path against the reference.
PermalinkNOT_FOUND404The resource does not exist or is not visible to this user.
Check the id, and that it belongs to your organization.
Permalinkjob_not_found404No linked Alfa job has this id, or it belongs to another company.
Check the jobId, and that the job is linked to an ATS job.
Permalinkcandidate_not_found404No candidate has this id on a job linked to an ATS job.
Check the candidateId, including its app_ or src_ prefix.
Permalinkresume_not_available404The candidate has no resume, as with most sourced candidates.
Treat the resume as missing; resumeUrl is null for these candidates.
Permalinkwebhook_endpoint_not_found404No webhook endpoint is set for this key and company.
Set one with PUT /v1/integration/webhook-endpoint.
Permalinkdelivery_not_found404No webhook delivery has this id for this key and company.
Check the deliveryId against the delivery log.
Permalinkmethod_not_allowed405The path exists, but not for this HTTP method.
Use one of the methods the reference lists for the path.
PermalinkCONFLICT409The resource is not in a state that allows the operation.
Read the resource again and retry if the action still applies.
Permalinkats_integration_conflict409The company already uses another ATS integration in Alfa.
Ask the company to disconnect the other integration first, or contact Alfa.
Permalinkjob_not_accepting_applications409The linked Alfa job is not live, or has reached its applicant limit.
Send the applicant once the job is live again, or ask the recruiter to raise the limit.
Permalinkapplication_in_progress409Another request with the same externalApplicationId is still being processed.
Wait a moment, then retry with the same externalApplicationId.
Permalinkinterview_only_job409The linked Alfa job screens applicants through an AI interview, which applicant intake does not support.
Link the ATS job to an Alfa job that screens resumes, or ask the recruiter to change how the job screens applicants.
Permalinkkey_name_taken409Another active API key in the company already has this name.
Choose a different name.
Permalinkpayload_too_large413The request body is larger than the API accepts.
Send a smaller body; upload large files through the file upload operations.
Permalinkidempotency_in_progress409A request with the same Idempotency-Key is still running.
Wait a moment, then retry with the same key to get its result.
PermalinkPRECONDITION_FAILED412The resource changed since the entity tag you sent as If-Match was read.
Read the resource again to get its current etag, then repeat your change.
Permalinkvalidation_failed422The request is well formed, but some values are invalid.
Each entry in errors names the field (as a JSON Pointer) and the rule it broke.
Permalinkidempotency_key_reused422The Idempotency-Key was already used for a request with a different path or body.
Use a new key for each distinct request.
Permalinkinvalid_webhook_url422The webhook URL is not HTTPS, or resolves to a private, loopback or link-local address.
Use an HTTPS URL that is reachable from the public internet.
Permalinkats_job_not_linked422No Alfa job is linked to this ATS job yet.
Ask a recruiter to link an Alfa job to the ATS job in the Alfa job form, then send the applicant again.
Permalinkunsupported_resume_type422The resume is not a PDF, Word document or plain text file.
Send application/pdf, application/msword, the Word .docx type or text/plain.
Permalinkresume_too_large422The decoded resume is larger than 4 MB.
Send a smaller file.
Permalinkinvalid_resume422The resume is empty, is not valid base64, does not match its contentType, or cannot be read.
Send the whole, readable file, base64 encoded, with its real content type. Retry with the same externalApplicationId.
Permalinkscreening_questions_incomplete422A mandatory screening question of the job has no answer.
Read the job's screeningQuestions and send an answer to each mandatory one in screeningAnswers.
Permalinkunknown_screening_question422An answer quotes a question the job does not have.
Quote each question exactly as the job's screeningQuestions lists it.
PermalinkRESOURCE_EXHAUSTED429The AI service is busy right now.
Wait a few seconds and retry.
Permalinkthrottled429Too many requests reached the API in a short time.
Wait a moment, then retry with backoff.
Permalinkrate_limited429The API key made more requests than its rate limit allows.
Wait the number of seconds in the Retry-After header, then retry.
Permalinkinternal_error500Something went wrong on our side.
Retry later. If it persists, contact support and quote the correlationId.
Permalinkupstream_timeout504The operation did not finish within the 29-second API limit.
Retry once. If it keeps timing out, contact support and quote the correlationId.
Permalinkgateway_error4xx or 5xxThe API refused the request before any operation ran; the HTTP status says which kind, and detail says why.
Check the request against the reference. For a 5xx status, retry later.
Permalink
Rate limits
Alfa API keys are limited per minute. A company key may make 120 requests a minute. A platform key may make 120 requests a minute for each client company and 1,200 a minute in total. Applicant intake allows 60 requests a minute for each key and company.
Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers. Over the limit, the API answers 429 rate_limited with a Retry-After header: wait that many seconds, then retry. Read about API keys.
