Skip to main content
RFC 2119 keywords apply.

Error envelope

Every non-2xx response has this envelope:
string
required
Stable machine code. Branch on this, never on message.
string
required
A human sentence in the request language. You MAY show it to the recruiter where this documentation says so; otherwise log it.
varies
Depend on the code (listed below).
A malformed JSON body or a request that does not match the schema returns a 4xx whose error code is not fixed in v1; handle it by HTTP status and log message. Any error code not listed on this page MUST be handled by its HTTP status.

Error codes

Cross-cutting errors (any endpoint)

JobIssue and RequirementIssue are described under Objects.acting_user_external_id on reveal and decisions must name a user you registered with POST /users; an unknown user is rejected with 404 user_not_found, as on POST /runs.A run that exists but belongs to another customer organization returns 404 run_not_found, never 403. Runs are only visible to the organization whose token started them.

Rate limits

  • Limits are per partner (all your customers together), not per customer.
  • Defaults: 120 requests per minute and 20,000 requests per day. Vort may adjust them per partner by agreement.
  • Over the limit you get 429 rate_limited with Retry-After: <seconds>. You MUST wait at least that long before retrying. Do not retry in a tight loop.
  • Every request counts, including failed ones and requests still in progress (a burst of concurrent requests is counted as it arrives).
  • If Vort cannot verify your quota at that moment, the request is refused with 503 rate_limit_unavailable and nothing is executed; retry with backoff.
Budgeting guidance: polling one run every 5 seconds costs 12 requests per minute. Poll from your server once per run (not once per open browser tab), fan the result out to your clients, stop polling when the run reaches a terminal status, and use the run_completed / run_failed webhooks instead of polling runs no recruiter is looking at.

Idempotency and retries

v1 has no Idempotency-Key header. Each endpoint’s behavior on a repeated call:
Retry policy for retry-safe calls: exponential backoff starting at 1 s, max 3 attempts, honoring Retry-After on 429. Never retry 401, 403, 404, 409, 410, 422.

Testing error handling in the sandbox

Send x-vort-sandbox-simulate: rate_limited, rate_limit_unavailable, internal_error (or insufficient_credits) on a sandbox request to force the matching error response (429 with Retry-After: 30, 503, 500, 402). See Simulating errors. The sandbox also has a few error codes of its own, such as 422 sandbox_limit and 429 sandbox_run_quota; they are listed under Sandbox-only codes and headers.