Verify new customers on their own phone.
Your signup page shows a code. They scan it, photograph their ID, take a selfie and read out a sentence that appears only when they press record. Checks settle the clear cases, and anything in doubt goes to a person on your team.
For any online business that has to know who is signing up: marketplaces, payments, rentals, gaming, telecom.
An example verification plays here. A company's signup page shows a code, the customer opens it on their phone, photographs their identity card, takes a selfie and records a sentence, and the signup page shows that they are verified, two minutes and twenty-four seconds after the code appeared. The widget on the signup page is Verificate's own.
AcmeStep 2 of 3
Verify your identity to finish opening your account.
9:41
Tuesday 29 September
Messagesnow
Acme
Verify your identity to finish opening your account: verificate.me/v#vs_7X11LVCK…
Verify your identity
Acme needs to confirm who you are. This takes about 3 minutes.
- 1Photograph your identity document
- 2Take a selfie
- 3Record a short video
Find a well-lit place and keep your documents within reach.
Your permission
To verify your identity, Acme asks your permission to:
- Photograph your identity document and read the details on it.
- Take photos and video of your face, and record your voice.
- Compare your face with the photo on your document.
- Check that the pictures are real and were taken just now.
I agree to my pictures, video and biometric data being used as described here.
Front of your identity card
Fit the document inside the frameHold still…
Back of your identity card
Fit the document inside the frameHold still…
Take a selfie
Place your face inside the ovalHold still…
Record a short video
Read this out loud
The curious penguin delivered seven letters
Recording
Everything is sent
Thank you. Acme is checking your details and will tell you the result.
Checking what you sent. This usually takes under a minute.
Everything is sent
Thank you. Acme is checking your details and will tell you the result.
- Code on the signup page42 s. Until the phone opens it
- Reading and consent23 s. On the phone
- Identity document38 s. Front and back
- Selfie12 s. A still, and frames around it
- Video statement21 s. A sentence shown at that moment
- Checks8 s. Read, compare, listen
- ApprovedAt 2:24, and your server is told
One verification, laid out as the stretches of time it is made of. This one is an example. Every stretch of a real session is timed on the server and kept with it, and the review desk draws each session like this.
Ask for the evidence you need, in the order you need it.
A session is a list of steps. Choose from five, set how each one works, and the customer sees only what you asked for.
Identity document
A passport, identity card, driving licence or residence permit, photographed front and back with the camera. You choose the kinds, and the countries of issue, that you accept.
Proof of address
A utility, phone or bank bill, a letter from a government office, or a lease, no older than you allow. The one step where a file already on the phone can be uploaded instead.
Selfie
A still photo, and a few frames taken around it that show whether anything moved. Or ask for head turns: three, in an order chosen at that moment.
Selfie with a document
The customer holds their identity document next to their face. Or say in your own words what to hold up, such as a signed form or a card you issued.
Video statement
The customer reads a sentence aloud on camera. It is made up when they press record and valid for a minute, so a recording made earlier cannot contain it. Wording that your rules prescribe works too, with random digits added to the end.
POST /v1/sessions. The answer holds the link, the code and a secret for the widget.{
"reference": "signup-8841",
"requirements": [
{
"type": "id_document",
"accept": ["id_card", "passport"]
},
{ "type": "selfie" },
{ "type": "video_statement" }
],
"expected": {
"first_name": "Jane",
"last_name": "Doe"
},
"max_completion_seconds": 900
}No single check is enough. So there are many.
No detector can reliably tell a generated face from a real one, and Verificate does not pretend to have one. It gathers signals that are each hard to fake, and sends every doubt to a person.
Signs that it is a person, and that it is now
- The camera only
- Pictures and video are taken on the page. A file made earlier cannot be chosen.
- A sentence nobody knew
- It appears when recording starts, and is valid for a minute.
- Movement
- Frames around the selfie show a living face moving a little. A print does not.
- Lips and sound
- In the recording, the mouth moves when there is speech.
- Screens
- A photo of a display shows the pattern of its pixels.
- Where a file came from
- Content credentials, the software that edited it, a PDF changed after it was made.
- The same picture twice
- A picture already used in another session is noticed.
- The device and the pace
- A browser driven by a program, a camera that is not a real one, steps done faster than a person can act.
What the documents have to agree with
- The kind of document, who issued it, and that it is in date.
- The face on it, against the selfie and the video.
- Signs that it was altered, or that it is a photo of a screen or of a copy.
- The same name on every document, even when one prints it in another script.
- What you already knew: the name, date of birth, address and document number.
39 kinds of check in all. Each keeps its result, its score, its reasons and a sentence a reviewer can read. Every check, one by one
Rules decide what is plain. People decide the rest.
Every check reports what it found. Your thresholds turn that into one of four outcomes, and your server hears which by webhook.
Everything is sent
The checks run
Approved
Every check passed above its threshold.
Asked to try again
A problem the customer can fix, such as a blurred photo or a sentence that was not said. They redo that step on the same link, as many times as you allow.
Held for a reviewer
Any suspicion, any score between two thresholds, any check that could not run. A person at your review desk decides.
Rejected
Only for a plain fact that is still true after the tries you allow, such as an expired document.
Checks that have not finished after twenty minutes hand the session to a reviewer. Nobody is left waiting on a pipeline that has stopped.
What raised a suspicion is never shown to the customer. Telling a fraudster what gave them away helps them the next time.
Your reviewers see what the checks saw.
Sessions held for review wait at the desk, longest first. A reviewer sees the pictures, what was read from them, each check's finding in plain words, and how long every step took. Then they approve, reject, or ask the customer to try again.
Three roles
Viewers see the queue and the figures, but no files and no personal data. Reviewers decide. Administrators manage keys, people, webhooks and erasure.
Single sign-on
Reviewers sign in with their Google or Microsoft work account, and each has the role you give them.
Every look is recorded
Opening a file or a customer's details writes to the audit log before anything is shown.
In your colours, and in their language.
The capture page and the widget carry your name, logo and colour. Customers choose English, Hebrew or Spanish on their phone, and the widget on your signup page follows the language they choose. Another language, French for one, is a translation away.
Careful with what it is given.
Identity documents and faces are among the most sensitive things a company can hold. Verificate shows them to as few people as possible, and erases them when their time is up.
- Encrypted on the way and at rest.
- Connections to the service use TLS, and every file and record is stored encrypted with AES-256.
- Secrets are hashed or sealed.
- API keys and link secrets are kept only as hashes. Webhook secrets are sealed with AES-256-GCM.
- Face measurements are never stored.
- They exist in memory for the length of one comparison, and are gone after it.
- The link's secret never reaches a log.
- It sits after the # in the address, which browsers do not send to servers.
- Files are never public.
- Every read is checked, and recorded before a byte is sent.
- Every session has an end date.
- Its files and personal data are erased on that day, sooner where the customer's country asks for it, or at once on request.
- Files can stay in the European Union.
- The choice is made company by company.
- Consent is on record.
- The version of the wording, the language, and the time.
One call, one script, one webhook.
Your server creates the session, your signup page shows it, and your server hears the decision. Test keys run the whole thing with outcomes you choose.
Create a session
From your server, with your API key. Say what you need, and what you already know about the customer.
curl https://api.verificate.io/v1/sessions \ -H "Authorization: Bearer $VERIFICATE_KEY" \ -H "Content-Type: application/json" \ -d '{ "requirements": [{ "type": "id_document" }, { "type": "selfie" }] }'Show the code
Give the session's link and client secret to the widget on your signup page. It shows the code, then follows along.
<div id="verify"></div> <script src="https://api.verificate.io/sdk/v1/verificate.js"></script> <script> Verificate.mount("#verify", { clientSecret, url }); </script>Hear the decision
A signed webhook tells your server how the session ended. The verify function is in the API reference.
// The signature covers the body as it arrived, so take it raw. const raw = express.raw({ type: "application/json" }); app.post("/hooks/verificate", raw, (req, res) => { const body = req.body.toString("utf8"); const signature = req.get("Verificate-Signature") ?? ""; if (!verify(secret, body, signature)) return res.sendStatus(400); res.sendStatus(204); handle(JSON.parse(body)); // session.approved, rejected or needs_review });
- Test keys
- Sessions made with a vk_test_ key take the same steps and send the same events. A mock decides them as you ask.
- A 12 KB widget
- No framework, its styles kept to itself, and no exceptions needed in a strict content security policy.
- Webhooks that arrive
- Signed, tried nine times over about eleven hours, and sent again from the desk when you ask.
- Safe to repeat
- With an idempotency key, a request sent twice gets the first one's answer.
Were you asked to verify your identity?
A company you are signing up with uses Verificate. Here is what happens on your phone, what happens to your pictures, and how to get help.
Try every outcome before a real customer does.
Test keys run the whole flow, from the code on your signup page to the webhook on your server, and cost nothing. A live document and selfie cost $0.75, with a $25 monthly minimum.