VeriKit

Is this person who their card says they are?

Send a candidate a link. On their phone they show their face and their Ghana Card. You get a verdict, and the reasons behind it.

Try the whole flow in test mode first, with a test key.

Specimen identity card Republic of Utopia SPECIMEN NOT A REAL DOCUMENT SPECIMEN NOT A REAL DOCUMENT SPECIMEN NOT A REAL DOCUMENT SPECIMEN NOT A REAL DOCUMENT Surname SPECIMEN Given names AMA Date of birth 01/01/1990 I<UTOSP00000012<<<<<<<<<<<<<<< 9001011F3501014UTO<<<<<<<<<<<< SPECIMEN<<AMA<<<<<<<<<<<<<<<<<

Example result

  • Live checkPass
  • Face matchPass
  • Card numbersPass
  • Name and datesPass
  • ExpiryPass
Pass

From link to verdict in four steps

Your app makes one API call. The candidate does the rest on their phone.

  1. 1

    Your app asks for a verification

    One call with your API key creates it. You get a link that works for that one candidate and expires.

  2. 2

    The candidate opens the link

    They read what is collected and agree to it before any photo is taken.

  3. 3

    They show their face and their card

    They blink and turn their head when asked, then photograph the front and back of the card. A photo that is too dark or blurry is sent back with a tip.

  4. 4

    You read the result

    VeriKit runs the checks and your app fetches the verdict. The candidate's last screen only says Submitted.

The candidate never sees the verdict, so nobody can learn which check caught them and try again with that in mind.

Seven checks, each with a reason in plain words

Every check ends in pass, flag or can't tell, and carries a sentence that anyone on your team can understand.

CheckWhat we compareWhat it catches

Live check

The person blinks and turns their head when asked. The order and the timing are random, and only one face may be in view.

A still photo, or a recording that cannot know what comes next.

Face match

The live selfie against the photo printed on the card.

Someone holding another person's card.

Card numbers

The check digits in the three lines on the back of the card.

Numbers that do not add up, because they were misread or changed.

Date of birth

The date on the front of the card against the date on the back.

Details that disagree with each other.

Name

The name on the front against the name on the back, forgiving small reading slips.

A card whose two sides name different people.

Expiry

The expiry date on the back of the card.

Cards that are out of date.

Camera

The name of the camera that captured the face.

Camera names that match virtual camera software.

Three verdicts. Nothing passes on a guess.

Pass
The face matches, the card checks out and nothing disagrees.
Review
Something is unclear or in the middle. A person on your team takes a look.
Reject
The evidence clearly says no, such as a face that does not match the card.

When a check cannot tell, it says so and the case goes to a person. A missing answer never counts as a pass.

A page for every case, so your team can see why

  • Plain reasons. Each step of the check reads as a sentence, not a code.
  • Your reference, not names. Cases are listed by the reference your app sent, so the dashboard does not turn into a list of people.
  • In progress is visible. A case that is still being worked on is marked as such and never shows up as a failure.
  • Unclear cases cannot hide. Anything that needs a person is marked Review.

Needs review

interview-2291

Test

Face match is in the middle (61%). A person should look.

  • Live checkBlinked and turned as asked
  • Face match61%, in the middle
  • Card numbersAll check digits are correct
  • Name and datesFront and back agree
  • ExpiryCard is in date

Create, send the link, read the result

Three calls with a bearer key. Everything is JSON.

  • Test keys and live keys. Run the whole flow with a test key before you go live.
  • Safe retries. Send an Idempotency-Key and a repeated call returns the same verification instead of making a second one.
  • Send them back to you. Give a return_url and the candidate's last screen gets a Continue button that goes there.
  • Webhooks are on the way. Until then, ask for the result every few seconds.
curl -X POST {API_BASE}api/v1/verifications/ \
  -H "Authorization: Bearer $VERIKIT_KEY" \
  -H "Idempotency-Key: signup-1001" \
  -H "Content-Type: application/json" \
  -d '{"external_ref": "user-1001",
       "return_url": "https://yourapp.com/interview/42"}'
201
{
  "id": "6f1c2d9e-...",
  "status": "pending",
  "external_ref": "user-1001",
  "reused": false
}
eye distanceeye widthface widthnose widthnose to chinface height

The face at check-in becomes a signature your app can keep

While the candidate does the live check, we measure the proportions of their face. Five ratios, each one length divided by another.

  • Face width divided by eye distance
  • Nose to chin divided by face width
  • Face height divided by face width
  • Eye width divided by eye distance
  • Nose width divided by face width

Because they are ratios, they stay the same when the person sits closer to the camera or farther from it. An app that keeps watching after check-in, such as an interview platform, can measure the same way later and compare.

A difference is a reason to look closer, not proof. Pair it with other signals, such as no face in view or more than one.

What candidates agree to, and what you can see

  • Consent comes first

    The candidate reads what is collected and agrees before any photo is taken.

  • Only your company can read a result

    A verification opens only with the key of the company that created it. Anyone else is told it was not found.

  • Names stay out of the dashboard

    The console lists your own reference. A name appears only in the API result, and only when both sides of the card agree on it.

Run a test verification today

Create an account, make a test key and send yourself a link.