Session metadata
Send what you already know about a person
POST /v3/initialize now takes metadata: your own fields about the person the session is for — their plan, when they signed up, an internal department code, whatever your records hold. The fields are kept against that person and show up on their profile in the dashboard, beside the columns that arrive on an uploaded list, and the dashboard’s filters can match on any key you send.- Send it with an identifier —
email,phoneorexternal_id. A session with no identifier has nobody to attach the fields to, and is refused. - It never changes a result. Nothing the person walks through reads it, and a check settles exactly as it would without it.
- Up to 50 keys per session. Keys 1 to 64 characters, string values 1 to 1024, and a value can be a string, a number or a boolean. An empty value is refused rather than dropped, so a session that comes back OK kept every key you sent.
- Secret key only, like the other fields that name a person.
Skip window
A new external_id is a new check
If you pass a fresh external_id on every session and rely on group to keep entries unique, a person coming back inside the skip window could be handed the earlier entry’s result: the same confirmation, the earlier external_id, and no duplicate reported. A session that carries a different external_id than the person’s last pass now runs its own check and settles its own confirmation, so a repeat in the same group is reported the way your collision setting says.- The same
external_idcoming back still skips, and so does a session with noexternal_id. The skip window itself is unchanged. - Nothing to upgrade. It works with the SDK version you already run.
Auto-return
Return the moment a check settles
POST /v3/initialize now takes auto_return. Set it and an approved check sends the person straight back to redirect_url the instant it settles, with no result screen and nothing to tap. Leave it off and they see the result screen and tap to return, as before.- Works with any key. It sets the behavior for that one run, whatever the verification has saved.
- In an embedded flow the result arrives the same way, through the
vycheck()promise andonComplete, and the drawer closes on its own. - A denied check still shows its result so the person sees why. Invite links ignore the field.
Usage caps
A new denial reason: usage_cap_exceeded
Every account has a default daily limit on verifications (66k). A run that lands after the day’s limit has been reached now comes back denied with reasons: ["usage_cap_exceeded"] instead of reaching the verification step.- The limit resets daily at 00:00 UTC. Don’t retry a capped run in a loop; it fails the same way until then.
- If you need your daily verification limit adjusted due to a launch, campaign or general traffic, contact us so we can adjust your limits.
Groups
One group can now see another
Groups scope uniqueness to a pool, and until now every pool was sealed off from the others.POST /v3/initialize now takes include_groups: other groups whose history also counts against the run. To keep everyone who already passed spring-intake out of a follow-up, mint the follow-up’s sessions with their own group plus include_groups: ["spring-intake"].- A hit in an included group behaves exactly like one in the run’s own pool: it denies the person or flags the pass, following the verification’s settings.
- The confirmation now carries
groups, the pools thereasonscame from, on flagged passes too. It reads[]when there is nothing to report. - The run still settles into its own group. An included pool is read, never written.
Embedded flow
Reliability fixes 21:30 UTC
- An older phone scanning the desktop QR code could be told the code was already used on another device. It now resumes where it left off. A different phone opening a used code is still refused.
- The consent step could do nothing at all for a person whose session had died. It now refreshes and asks for one more tap.
- Embedded flows now complete inside a native app webview.
No redirect URL needed for embedded flows 16:57 UTC
Open a verification withvycheck({ session, mode: "iframe" }) and you no longer have to pass a redirect_url to POST /v3/initialize. The embedded flow never leaves your page: when the person finishes, the result arrives through the vycheck() promise and your onComplete callback, and you confirm the token on your server as before.- Applies to the drawer and to
display: "inline". - A
redirect_urlyou do pass still wins, and still comes back with?vyt=…&vyc=…appended. If you were only passing one to keep an embed working, you can drop it. - Nothing to upgrade. It works with the SDK version you already run.
SDK 0.4.0
Embed a server-minted session
vycheck({ session }) runs a session you created on your server, so an embedded flow can carry an external_id or a bound identity that only a secret key can set.- Call
POST /v3/initializefrom your backend withexternal_id,email, orphone. It now returns asession_idnext tourl. - Pass the
session_idtovycheck({ session })in the browser. The flow opens as a drawer or inline, with no redirect. - Confirm the returned token on your backend as before.
external_id. Now they can.close() on the vycheck handle
vycheck() returns a handle with a close() method to dismiss a drawer or inline embed before the person finishes. See vycheck().Documented confirmation reasons
Thereasons on a confirmation are now enumerated in the API reference, each with a line on what it means: collision_company, identity_mismatch, duplicate_account, and the rest.SDK 0.2.0
SDK 0.2.0 is the new default
npm install @verifyyou-sdk/client now installs 0.2.0. The headline: you choose how the flow appears.- Display modes. Alongside the classic redirect, the flow can now open as a drawer that slides over your page or inline inside an element you own. Pick the mode once in
init();vycheck()stays the same call. - Completion callbacks. In the embedded modes the result is delivered to your
onCompletecallback and resolves thevycheck()promise. No redirect, no lost page state. - Production by default. SDK builds now target the production API out of the box.
vyt/vyc return parameters and the same backend confirmation. See the updated vycheck() and vyget() pages for the new result shape.Richer confirmation responses
GET /v3/confirmations/{token} now returns more than the verdict:status:approvedordenied(approved with findings is presented as flagged)reasons: the rule findings behind the status, such ascollision_companyconfirmed_at: when the verdict settledidentity: the verified email or phone, when your verification has sharing enabledid: the confirmation id
verified remains the field to gate on.Key check endpoint
POST /v3/keys/test validates any key and reports its type and mode. Wire it into setup scripts or healthchecks.Docs
- New
init()page covering setup and the display modes - Identity and recognition: clearer story on device IDs and the claim a verified identity gives a person over their own uniqueness
- Condensed uniqueness explanation: check group (company or network) and collision action (block or flag)
- Flow tracking webhooks and the Platform API pages were removed ahead of deprecation