Verifications

A verification asks Vindex to verify one of your customers: a person (KYC) or a company (KYB). Your customer completes Vindex's hosted flow, Vindex screens and reviews, and you get the outcome and the reports.

The life of a verification

opens linksubmitsdecidesasks for moreanswersthe link expires, or you cancelcreatedlink sentin_progresscustomer startedsubmittedVindex reviewsdecidedoutcome readyaction_requiredcustomer must answerexpired · canceledcredits released
The statuses of a verification. Credits are held at created and charged at submitted.

status is the state to build on. stage is finer progress you can show your own team or your customer; it may gain values over time, so treat unknown stages as "in progress".

awaiting_customerstatus created
The link is waiting for your customer.
customer_in_progressstatus in_progress
Your customer opened the link and is filling it in.
screeningstatus submitted
Submitted. Documents are being read and the customer screened.
under_reviewstatus submitted
Vindex's reviewers are looking at the case.
final_reviewstatus submitted
The case is with the final decision maker.
awaiting_customer_responsestatus action_required
Vindex asked your customer for more.
appeal_reviewstatus submitted
The customer appealed a decision; it is being looked at again.
decidedstatus decided
Vindex reached its outcome.

Nothing sensitive leaks through the stage

Enhanced due diligence and any suspicious-activity review all show as under_review. That keeps Vindex and you clear of tipping-off rules, and it means you can show the stage to your customer safely.

Creating a verification returns hosted_link.url. Send it to your customer however suits you: email, SMS, or a button in your app. It works on phones, where most customers complete it.

Only returned once
The URL is in the response to the call that created it and is never stored by Vindex. Later reads show only when it expires. To send it again, create a new one.
Expiry
7 days by default. Set link_expires_in (seconds) from one hour to 30 days. A verification whose link expires before the customer submits becomes expired and its credits are released.
A new link
POST /v1/verifications/{id}/hosted_link issues a fresh link and the previous one stops working. Use it when a link expired, was lost, or Vindex needs more from the customer.
Reopening
The customer can close the page and come back with the same link until it expires; progress is saved.
Where it lands
When they finish, the customer can return to your redirect_url, with verification_id and status added to it. Use it for a "thanks" page only, never as proof: always read the verification with your key.
curl -X POST https://api.vindexgrid.com/v1/verifications/ver_0vZ3kq9XfJ1mB7c2Lr8sTy/hosted_link \
  -H "Authorization: Bearer $VINDEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "link_expires_in": 259200 }'

The token stays out of logs

The secret part of a link comes after #, which browsers never send to servers, so it doesn't end up in web logs or analytics. Treat the link like a password all the same: it lets someone complete your customer's verification.

What your customer sees

A Vindex page with your name and logo (set them under Developers → Settings). Before anything else it shows a data-protection notice that names your company as the collector and Vindex as processing on your behalf, the purpose, the data collected, who receives it, how long it is kept, and their rights. They confirm three things: they accept, they consent to the face check, and they are 18 or over.

Then they complete Vindex's usual filing: their details, identity documents, and a short video selfie. They don't pay anything; the case fee comes from your credits. Afterwards they see the status of their verification, never screening results.

Vindex doesn't email your customers

You own the relationship. Vindex sends nothing to customers who come through your link; tell them what happens next yourself.

Credits for a verification

The price is held from your balance when you create the verification, and charged when your customer submits. If the link expires, or you cancel before they submit, the hold is released and nothing is charged. The verification's credits object shows the price, what is held and what was charged. More in Credits and billing.

Cancel before submission
curl -X POST https://api.vindexgrid.com/v1/verifications/ver_0vZ3kq9XfJ1mB7c2Lr8sTy/cancel \
  -H "Authorization: Bearer $VINDEX_API_KEY"

When Vindex needs more

Sometimes a reviewer needs another document or an answer. The verification moves to action_required and you get a verification.action_required webhook. Send your customer back to Vindex: create a new hosted link if the old one expired. When they answer, the verification returns to submitted (verification.resubmitted). Re-submission is never charged again.

Outcomes and your decision

approved
Vindex recommends onboarding.
approved_with_conditions
Recommended, with conditions you should apply (for example re-verifying an address within 6 months).
rejected
Vindex recommends not onboarding.

risk_rating (such as low, medium or high) comes with the outcome. Vindex's outcome is a recommendation: the decision to onboard stays yours. Record it, so your audit trail shows who decided and when:

Record your decision
curl https://api.vindexgrid.com/v1/verifications/ver_0vZ3kq9XfJ1mB7c2Lr8sTy/partner_decision \
  -H "Authorization: Bearer $VINDEX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "decision": "accepted", "decided_by": "Priya Nair, onboarding team" }'

Reports

Once a verification is decided, download its PDFs with your key:

outcome_letter
Vindex's signed outcome letter. Every decision has one.
customer_report
The customer's copy of the case report. Approvals only.
Download
curl -G https://api.vindexgrid.com/v1/verifications/ver_0vZ3kq9XfJ1mB7c2Lr8sTy/report \
  -H "Authorization: Bearer $VINDEX_API_KEY" \
  -d type=customer_report \
  -o customer-report.pdf

A report.ready webhook tells you when each report can be downloaded; before that, the call returns 409 report_not_ready. Reports contain personal data: store them as securely as your other customer records.

Company verifications

Send "type": "company" with a company object (legal name, registration number, country, and the contact who will complete the flow). Company verifications work fully in test mode today. Live company verifications are coming soon; until then a live request returns 403 feature_not_enabled.

Never send Aadhaar numbers

Vindex refuses any request containing what looks like an Aadhaar number (422 validation_failed). Customers provide their documents in the hosted flow, where Aadhaar is masked and always optional.

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