Test mode

Everything in the API works in test mode, for free. Nothing reaches Vindex's reviewers or World-Check, outcomes are simulated, and you choose them, so you can test every path your integration needs.

What test mode does

Your test key
Starts vdx_test_. Everything it creates is test data, kept apart from live: livemode is false on every object and event.
Verifications
The hosted link opens a test version of the flow: your customer (or you) sees the notice and the steps, then presses Complete as test customer. About 20 seconds after submission, Vindex decides.
Screenings
Simulated from the name: test names below give matches; anything else is no_match.
Reports
Sample PDFs, marked as test samples.
Webhooks
Sent to your test endpoints, signed with their own secrets, retried up to four times. Send test event in the console sends any event type on demand.

Test credits

Test mode spends test credits exactly like live mode spends real ones, so your numbers and your credits fields look real. You start with 1,000 free test credits and add more in the console. By default they refill themselves: a test call never fails for lack of credits.

Testing what happens when credits run out

Turn off automatic refills of test credits under Developers → Settings, spend your test balance, and your next paid call returns 402 insufficient_credits, just as live would.

Choose an outcome

Pass test_scenario when you create a verification, or give the customer a last name (a company name for companies) ending in one of the words below. With neither, the verification is approved.

test_scenarioor last nameResult
approve…Approvedapproved, risk low
approve_with_conditions…Conditionalapproved_with_conditions, risk medium, two sample conditions
reject…Rejectedrejected, risk high
action_required…ActionRequiredaction_required first; once the customer answers, approved
A verification that will be rejected
{
  "type": "individual",
  "individual": { "first_name": "Riya", "last_name": "Rao" },
  "test_scenario": "reject"
}

Screening test names

Put one of these words anywhere in the name being screened:

Sanctioned
potential_match, category sanctions
Pep
potential_match, category pep (the whole word)
Adverse
potential_match, category adverse_media
Multimatch
potential_match, three matches in all three categories
Unavailable
503 provider_unavailable, nothing charged

For example "Maria Sanctioned" or "Unavailable Trading Ltd". The names are made up, so they never collide with real list entries.

Test helpers

Move a test verification along without waiting, and without the hosted page. Each call sends the same webhooks a real change would. With a live key these endpoints don't exist (404).

POST …/submit
The customer finishes the hosted flow (status submitted; the price is charged).
POST …/request_action
Vindex asks the customer for more (action_required).
POST …/respond
The customer answers (back to submitted).
POST …/decide
Vindex decides. Body: { "outcome": "approved" | "approved_with_conditions" | "rejected" }.
POST …/expire
The hosted link expires now (expired; the hold is released).
Decide a test verification now
curl https://api.vindexgrid.com/v1/test_helpers/verifications/ver_0vZ3kq9XfJ1mB7c2Lr8sTy/decide \
  -H "Authorization: Bearer $VINDEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "outcome": "approved_with_conditions" }'

Using a test helper on a verification stops its automatic decision, so the path you script is the path it takes. Full details are in the API reference.

Something missing or unclear? Signed-in users can tell us from Feedback in the app.