Skip to main content
This walkthrough covers steps 1 to 7 of the integration flow against the sandbox, with curl and jq and the same calls in Node.js, Python and PHP (Laravel). Webhooks are step 8 and have their own page.
Run these commands from a terminal or from your server. Never call the Vort API from a browser: the partner key and org tokens are server-side secrets (see Authentication).

Before you start

You need, from Vort:
  • a sandbox partner key (the value you send in x-partner-key);
  • an activation code for your sandbox customer organization (VORT-XXXX-XXXX).
The sandbox runs real searches but returns synthetic contact details and never charges real credits. Keep target_count at 20 or below. See Sandbox for every difference from production.
1

Configure your environment

The sandbox base URL is https://vort-partner-api.vercel.app/sandbox/v1. VORT_BASE includes /v1, so every call below is $VORT_BASE/<path>.The Node.js, Python and PHP examples on this page call a small helper that reads the same two values and adds the headers. Every request sends x-partner-key; every request except the redeem call also sends the customer’s org token in x-vort-org.
2

Connect a customer

Redeem the activation code. This is the only call made without x-vort-org.
Response
The org token is returned once. A second redeem of the same code returns 409 code_already_redeemed and does not return the token again, which is why the curl response is saved with tee. Keep the token and delete the file.
In your product, store the token server-side, encrypted at rest, keyed by the external_id you sent (your id for this customer).
3

Register a recruiter

Response
Later calls identify the recruiter by your external_id (acting_user_external_id). It is a field, not a credential. POST /users is an upsert and safe to retry.
4

Create the job

Response
Send POST /jobs again whenever the job changes in your ATS: it updates the title, description and location and returns the same job_id.
5

Start a run

Response (202)
  • 202 means the run started. warnings[] never block; show each one under the requirement at its index.
  • 422 requirements_rejected means nothing started. Show each rejected[] message (and suggestion) under its requirement, let the recruiter fix it, and resubmit.
Do not retry POST /runs automatically on a timeout or 5xx: every accepted call starts a new run. Offer the recruiter a manual “Try again”.
6

Poll the run

Poll GET /runs/{run_id} every 5 seconds while a recruiter is watching, and stop when the status is completed or failed. Honor Retry-After on 429.
Then look at what the recruiter would see:
In your UI: show progress.confirmed / progress.target as numbers and a bar, render every notice in its slot (including codes you do not know), keep the candidates in API order, and show the run_id. In the sandbox, candidate names are pseudonyms such as Candidate 7F3A until the data processing annex is signed.
7

Reveal a contact

Show the price from reveal_price_credits before the click, then reveal.
Response (sandbox)
In the sandbox the contact details are synthetic and a reveal is never charged (credits_charged: 0). In production, credits_charged is the real charge. Either way, render credits_charged and wallet_balance_after exactly as returned, and a null e-mail or phone as “not found”. A repeat reveal of the same candidate is not charged again.
8

Report decisions

Every recruiter decision about a Vort candidate, and every notice code you rendered, goes back to Vort. This is a condition of the partnership.
Response
Send the same request again and you get {"accepted": 0, "duplicates": 1}: a retry that reuses occurred_at is stored once. A rejection carries one of the seven fixed reject_reason values (or null) and an optional note; see Decisions and reject reasons.

Next steps

Webhooks

Receive and verify webhooks instead of polling runs nobody is watching.

UI specification

Build the screens and render notices by the rules Vort fixes.

Errors and rate limits

Handle errors, rate limits and retries.

Certification

Run the certification fixtures and work through the checklist.