← Everything we make

Evidence · $1.10

Identity Verification

Send a secure link, and the person verifies with a photo of their ID and a quick selfie. Document, liveness and face-match checks run automatically, and your agent collects a complete evidence package — verdict, reasons, extracted details and images — ready for your own decision.

Availability

Available now on PowaHub — $1.10 per verification, with free outcome reads.

How it works

01

Create

POST to create and you get back a verification id, a capture link, the outcome URL, the credential to read it with, and data_expires_at — the deadline by which you must have collected the evidence. You may pass an external_reference of your own, up to 512 characters, and we echo it back on create and on every read without ever parsing or indexing it.

02

Capture

Hand the link to the person however you already reach them. Opening it mints a fresh capture session and redirects them in. If an attempt fails and the retry window is open, the same link shows a retry page instead — and only its button restarts anything, so previewing the link never uses up an attempt.

03

Poll

Read the outcome with the credential as a bearer token. It answers at any status, and reads never consume or expire anything — poll on an interval, free of charge.

04

Collect

Take the evidence into your own systems before the deadline. Our copy is then securely deleted on schedule.

What you call

CallAuthenticated byCost
Create a verificationYour API credential$1.10
Open the capture linkThe link itself — the person needs no accountIncluded
Retry a failed attemptThe link itself, inside the retry windowIncluded
Read the outcomeThe read credential from createFree, rate limited
Renew the read credentialYour API credential, plus the previous credential$0.01

Statuses you poll through

StatusMeaning
pendingLink issued, never opened.
in_captureSomeone is part-way through.
completeFinished, with a verdict.
inconclusiveThe checks ran and the result needs your judgement. Full evidence is attached.
capture_expiredThe window closed with nothing captured.
purgedPast its retention date; the evidence has been deleted.

What the outcome contains

  • verdictresult is accepted, rejected or undetermined, with a plain-language reason — “the selfie failed the anti-spoofing check”, never a raw provider code. Null until the verification finishes.
  • verdict.reasonsEvery reason behind the verdict, each a stable code plus a description. Empty when accepted, exactly one when rejected, one or more when undetermined.
  • checksPer-check results once finished. A check the provider didn't run, or doesn't report, is null rather than absent.
  • identityThe fields read off the document.
  • imagesFreshly signed links to the captured images, minted anew on every read — a failed download is recovered by reading again.
  • schema_versionSo you can map it once and know when it changes.

Reason codes

Codes are never renamed, and new ones may be added — treat one you don't recognise as its category's generic code.

Rejected

document_front_unreadabledocument_front_uncleardocument_back_code_not_founddocument_back_checksum_faileddocument_front_back_mismatchdocument_details_mismatchdocument_expireddocument_tamperedliveness_failedface_not_detectedface_mismatchselfie_syntheticdate_of_birth_unreadableunderageautomated_checks_failed

Undetermined

compliance_rulecross_validation_reviewface_match_skippedduplicate_foundvelocity_rapid_ip_reusevelocity_high_user_frequencyvelocity_bot_like_timingvelocity_burst_activitylocation_country_mismatchlocation_tor_exit_nodelocation_datacenter_iplocation_high_risk_countryautomated_checks_inconclusive

duplicate_found never identifies the match.

Reading the result

How it works
How you read a resultThe credential returned by create, presented as a bearer token. No account with us required — that is what lets a paying agent collect its own result.
How long it lasts48 hours, renewable — short-lived by design to protect identity data.
Renewing itPresent the previous credential, expired or not, to the mint_credential operation on PowaHub. Pairing it with the previous credential keeps every result tied to the buyer who created it.
Renewal windowAn expired credential can still be used to renew for 7 days. Each credential renews once, so access always follows a single, secure chain.
Keep it safeCredentials are shown once and can't be recovered — store it, and renew within the window to keep access.

Periods we enforce

Period
Capture link7 days from issue.
Retry window75 minutes from a failed attempt, while attempts remain — the provider's one-hour session plus a 15-minute grace.
Read credential48 hours, renewable, with a 7-day proof window after expiry.
Evidence retention14 days from the moment capture completes — not from create.
Maximum21 days, if capture completes on the link's final day. data_expires_at tells your agent its exact deadline.
Guaranteed deletionAnything older than 25 days is deleted automatically, whatever its state.

Deletion runs on schedule — reading a result never deletes it.

How you are charged

  • $1.10 per verification, charged when it is created.
  • Each verification is charged whether or not the link is used.
  • Retrying a failed attempt within the 75-minute window is included.
  • Reading the outcome is always free, with fair-use rate limits.
  • Renewing a read credential costs $0.01.
  • Every create call starts a new, separately charged verification — check for an existing one before creating again.

Good to know

  • You make the decision. Every result arrives with its full evidence, so your own policy decides the outcome.
  • No webhook endpoint to build or secure — collect results by polling, whenever your agent is ready.
  • Each new session starts from the first document; a failed attempt can be retried within 75 minutes.
  • Outcome reads never reveal whether a verification exists to an unauthorised caller.
  • Your records stay yours: we hand over the evidence, then delete our copy on schedule.