Identity verification API · Early access

Identity verification that shows its work.

Document, selfie and live movement checks in one web link. Every result comes back approved, rejected or sent to review, with reason codes your rules and your auditors can read.

  • Reason codes on every decision
  • No app to install
  • Public pricing, no minimum to start

Example verification: a person completes three live movements, the document is read and checked by check digits, and the API returns an approved decision with its checks and reasons.

Built on rules you can check

The problem

Identity fraud grew. Answers didn't.

Most verification tools return a score with no reason attached, a price you only learn after a sales call, and a reading of the document that nobody double-checks.

Fraud in Brazil

The cost of verifying

  • $2.45 to $7.45

    real cost per check at 20 verifications a month, once monthly minimums are counted

    Source: Our calculation on the published self-serve plans of three IDV providers, Oct 2026

  • ~1.5x

    more paid when billing is per attempt instead of per completed check, at 35% drop-off

    Source: Signzy, KYC pricing in the US, Sep 2026

How it works

One link. Four steps.

You create a session, send the link through your own channel and read a decision you can act on. About two minutes for the person verifying.

POST ipsis.tolky.to/v1/sessions
# Request
POST /v1/sessions
Authorization: Bearer idv_test_8f2a.••••••••
X-Request-Id: signup-48213

{ "external_reference": "customer-48213",
  "expected": { "name": "Maria A. Souza", "cpf": "111.444.777-35" } }

# Response 201
{ "id": "7f3c1e9a-2b4d-4c8e-9a51-0d6b3f2e8c17",
  "status": "pending",
  "capture_url": "https://ipsis.tolky.to/c/#k3Xq…",
  "expires_at": "2026-10-30T14:02:11Z" }

AAcme

Hi! Acme Lending asked to verify your identity

Takes about 2 minutes

I agree to the use of my biometric data for this verification

Continue on your phone: scan the QR code

Continue on this computer

Are these details correct?

Name
Maria A. Souza
CPF
111.444.777-35
Date of birth
Mar 14, 1991
Yes, they are correct Something is wrong
1 2 3
GET ipsis.tolky.to/v1/sessions/7f3c1e9a
awaiting_review decision.by: system
{ "status": "awaiting_review",
  "checks": [
    { "id": "cpf_valid",             "status": "pass" },
    { "id": "cpf_matches_expected",  "status": "pass" },
    { "id": "name_matches_expected", "status": "warn",
      "reason": "name_mismatch_expected" },
    { "id": "liveness_challenges",   "status": "pass" },
    { "id": "face_match",            "status": "pass" }
  ],
  "decision": { "status": "awaiting_review",
    "reasons": ["manual_review_mode", "name_mismatch_expected"] } }

The person only sees the outcome, never the reasons. Reasons are for you.

Checks

Every check, by name.

Each one returns pass, warn or fail with a stable reason code. Any fail rejects. Any warn sends the session to review. Nothing missing is ever treated as a pass.

Document11

Nothing the reading finds is accepted before a rule confirms it.

111444777 35 35 OK
  • document_type

    Document type

    The images match the document the person chose.

  • required_fields

    Required fields

    Name and document number were read.

  • cpf_valid

    CPF check digits

    The CPF is recomputed digit by digit. A misread digit fails here.

  • cpf_matches_expected

    CPF matches yours

    The CPF on the document matches the one you sent.

  • name_matches_expected

    Name matches yours

    Word-by-word comparison that ignores accents and connectors. Raises a warning, never rejects.

  • birth_date

    Date of birth and legal age

    The date is read, valid on the calendar, and the holder is 18 or older.

  • birth_matches_expected

    Date of birth matches yours

    Same date you already hold.

  • not_expired

    Not expired

    Expiry is checked on CNH, CIN and passport. A CNH up to 30 days past expiry goes to review.

  • cnh_number_valid

    CNH number check digits

    The 11-digit CNH registration is recomputed.

  • mrz_valid

    MRZ (ICAO 9303)

    Passport and CIN machine-readable lines are checked digit by digit and against the printed data.

  • customer_confirmed

    Holder confirmation

    If the person flags the data we read as wrong, the session goes to review.

Face and liveness3

Movements drawn at random and confirmed on the server.

1 2 3
  • liveness_challenges

    Live movements

    Three movements drawn at random (turn left, turn right, smile, blink), always with a head turn, confirmed on the server.

  • capture_integrity

    Real-time capture

    Frames must arrive per movement, inside a time window set by the server, with continuity between them.

  • face_match

    Face match (1:1)

    The selfie is compared with the document photo against thresholds you set. In between: review.

Decision safety2

When in doubt, a person decides.

  • engine_unavailable

    Never approved by default

    If the face engine is down or busy, the session goes to review. It is never approved for lack of capacity.

  • decision_mode: manual

    Human review by default

    Nothing is approved automatically until you turn auto mode on. Clear failures still reject on their own.

Developers

A small API with a stable contract.

Create a session, send the link, read the result. Reason and error codes are part of the contract: changing one is a breaking change.

Request
curl https://ipsis.tolky.to/v1/sessions \
  -H "Authorization: Bearer idv_test_8f2a.••••••••" \
  -H "X-Request-Id: signup-48213" \
  -H "Content-Type: application/json" \
  -d '{
    "external_reference": "customer-48213",
    "expected": {
      "name": "Maria A. Souza",
      "cpf": "111.444.777-35",
      "birth_date": "1991-03-14"
    },
    "allowed_documents": ["cnh", "cin", "rg", "passport"],
    "redirect_url": "https://acme.example/onboarding/done",
    "locale": "pt-BR"
  }'
Response 201 Created
{
  "id": "7f3c1e9a-2b4d-4c8e-9a51-0d6b3f2e8c17",
  "status": "pending",
  "capture_url": "https://ipsis.tolky.to/c/#k3Xq…",
  "expires_at": "2026-10-30T14:02:11Z"
}
Request
curl https://ipsis.tolky.to/v1/sessions/7f3c1e9a-2b4d-4c8e-9a51-0d6b3f2e8c17 \
  -H "Authorization: Bearer idv_test_8f2a.••••••••"
Response 200 OK
{
  "id": "7f3c1e9a-2b4d-4c8e-9a51-0d6b3f2e8c17",
  "status": "awaiting_review",
  "external_reference": "customer-48213",
  "document_type": "cnh",
  "checks": [
    { "id": "cpf_valid",             "status": "pass", "reason": "ok" },
    { "id": "cpf_matches_expected",  "status": "pass", "reason": "ok" },
    { "id": "name_matches_expected", "status": "warn", "reason": "name_mismatch_expected" },
    { "id": "liveness_challenges",   "status": "pass", "reason": "ok" },
    { "id": "face_match",            "status": "pass", "reason": "ok" }
  ],
  "decision": {
    "status": "awaiting_review",
    "by": "system",
    "reasons": ["manual_review_mode", "name_mismatch_expected"]
  },
  "attempt": 1
}
Request
curl https://ipsis.tolky.to/v1/match \
  -H "Authorization: Bearer idv_test_8f2a.••••••••" \
  -F selfie=@selfie.jpg \
  -F reference=@reference.jpg
Response 200 OK
// illustrative
{
  "decision": "match",  // match | no_match | inconclusive
  "request_id": "9b2e41d0-…"
}

Illustrative example, trimmed for reading.

Security and privacy

Biometric data, handled as sensitive.

Biometrics are sensitive personal data under Brazil's LGPD (art. 11) and a special category under the GDPR (art. 9). Here is what we do with them, and what we don't do yet.

You are the controller. We process on your behalf.

Compliance roadmap

No certifications yet. This is the list of what is missing and where each item stands. We update it when something changes.

  1. Data processing agreement with zero retention at the document-reading providerIn progress
  2. Document reading inside Brazil, as an optionPlanned
  3. Signed webhooks (HMAC)Planned
  4. Dashboard with user login and review queuePlanned
  5. Published accuracy measurement, with method and samplePlanned
  6. Independent testing of livenessNot started
  7. Information security certification (ISO/IEC 27001 or SOC 2)Not started
  8. Independent penetration testNot started

Who it's for

For teams that sign off on every approval.

Companies that let strangers in at scale and need to explain each decision later.

12,000 Account Activate

Also used for

  • Remote hiring
  • Telehealth
  • Rentals and real estate
  • Telecom line activation

Pricing

Pay per completed verification.

Public prices, no setup fee and a plan with no monthly minimum. You are billed once, when a session reaches its first result.

Early access: prices are published for planning and may change before general availability.

Free

Try it with real cases

$0

25 verifications per month

No card required

  • 100 face matches per month
  • Image retention up to 7 days
  • Docs and email, no response target

Includes:

  • Hosted capture page in English, Portuguese and Spanish, no app to install
  • Reads RG, CIN, CNH and passport, and checks CPF, CNH and MRZ check digits and dates
  • Liveness with 3 random movements, validated on the server
  • Selfie compared with the document photo (1:1)
  • Audit trail per session
  • Dashboard Soon
Request access

Starter

Pay as you go, no monthly minimum

$0.59

per verification

Prepaid credits from $20

  • No monthly minimum
  • 25 free verifications every month
  • Up to 2,000 verifications per month (during the first 2 paid cycles)
  • Image retention up to 30 days
  • Email, first response target of 2 business days

Everything in Free, plus:

  • Standalone 1:1 face match API
  • Result webhook Soon
Request access

Recommended

Growth

For recurring onboarding

$225/month

$2,250/year

500 verifications included per month

6,000 verifications included per year

Then $0.45 per verification

  • Image retention up to 90 days
  • Priority email, first response target of 1 business day

Everything in Starter, plus:

  • Approval and rejection thresholds tuned to your case
  • Official database check (Brazil, add-on) Soon
Request access

Scale

High volume and regulated sectors

$975/month

$9,750/year

2,500 verifications included per month

30,000 verifications included per year

Then $0.39 per verification

  • Image retention up to 365 days
  • Priority email and a named technical contact, first response target of 4 business hours, integration call

Everything in Growth, plus:

  • Document reading with data kept in Brazil Soon
Request access

Enterprise

Contract, custom terms and volume. From 10,000 verifications per month.

  • Custom terms and data processing agreement
  • Availability SLA in contract Soon

Custom

Talk to us

Prices in US dollars. Companies registered in Brazil (CNPJ) are billed in BRL; all others in USD, regardless of the site language.Pay 10 monthly minimums upfront and get 12 months. Included verifications become a yearly balance. Overage keeps the plan price.

What counts as a verification

A session that reaches a result: approved, rejected or awaiting review.

Set a monthly cap. Above it, new sessions are refused with quota_exceeded, never billed.

What you never pay for

  • Links that were never opened or never finished
  • Retries within the same session
  • Repeated requests with the same X-Request-Id
  • Calls that end in an error

Add-ons

  • 1:1 face match$0.05 per match with a decision
  • Official database check (Brazil) SoonPrice announced at launch.
  • Third-party certified liveness SoonPrice announced at launch.

Included in every plan

  • All checks
  • Human review by API
  • Evidence sheet per session
  • Retention you set
  • Deletion by API
  • Capture page in 3 languages
Compare all features
Feature comparison across plans
FeatureFreeStarterGrowthScaleEnterprise
Price per verification$0$0.59$0.45$0.39Custom
Monthly minimumNot includedNot included$225$975Contract
Included verifications per month25255002,500Contract
OverageNot includedPay as you go$0.45$0.39Contract
1:1 face match100 per month$0.05$0.05$0.05Contract
Annual billing (2 months free)Not includedNot includedIncludedIncludedContract
Hosted capture page (en, pt-BR, es)IncludedIncludedIncludedIncludedIncluded
RG, CIN, CNH and passport with check-digit validationIncludedIncludedIncludedIncludedIncluded
Liveness with 3 random movementsIncludedIncludedIncludedIncludedIncluded
Selfie x document (1:1)IncludedIncludedIncludedIncludedIncluded
Compare with data you already haveIncludedIncludedIncludedIncludedIncluded
Human review by default, optional automatic approvalIncludedIncludedIncludedIncludedIncluded
Audit trailIncludedIncludedIncludedIncludedIncluded
Encrypted images, no face template stored, deletion by APIIncludedIncludedIncludedIncludedIncluded
Separate test and live keys, idempotent requestsIncludedIncludedIncludedIncludedIncluded
Maximum image retention7 days30 days90 days365 daysUp to 5 years
Thresholds tuned to your caseNot includedNot includedIncludedIncludedIncluded
Result webhookNot includedSoonSoonSoonSoon
DashboardSoonSoonSoonSoonSoon
Document reading with data in BrazilNot includedNot includedNot includedSoonSoon
Official database check (Brazil, add-on)Not includedNot includedSoonSoonSoon
Third-party certified liveness (add-on)Not includedNot includedSoonSoonSoon
SupportDocs and emailEmail, 2 business daysPriority email, 1 business dayNamed contact, 4 business hoursNamed contact, in contract
Availability SLANot includedNot includedNot includedNot includedSoon

Swipe sideways to see every plan.

Billing details
  • Prices are per completed verification: a session that reaches a result (approved, under review or rejected). Unopened, expired, canceled or abandoned links and retries in the same session are not billed.
  • USD prices exclude taxes that may apply in your country. BRL prices include taxes and come with a Brazilian service invoice (NFS-e).
  • Companies registered in Brazil are billed in BRL; all others in USD.
  • Support response times are targets, not contractual commitments. No plan includes an availability SLA unless stated in an Enterprise contract.
  • Features marked Soon are not available yet and are not part of any contract until launched.
  • The free tier requires a verified company and is subject to fair use. Unused verifications do not roll over.
  • Annual plans are paid upfront and are not refundable. Price changes are announced 60 days in advance and do not affect the current cycle.
  • Your company is the data controller; we process data on your behalf.

Free plan conditions

  • Business email on your own domain (no free webmail).
  • Brazil: active CNPJ. Elsewhere: company website on the same domain as the email.
  • One free account per company and per domain.
  • Live key after accepting the terms and the data processing agreement; test key right away.
  • Regulated sectors (such as betting) provide their license number at signup.

During early access, we set up your account with you: thresholds, documents and retention.

FAQ

Straight answers before the first test.

Didn't find your question?

Tell us about your flow and we will answer with what the API does today.

Talk to us
What counts as a billable verification?

A session that reaches its first result: approved, rejected or awaiting review. Unopened links, retries in the same session and repeated requests with the same X-Request-Id are free.

How long does it take?

About two minutes for the person verifying, from consent to result. Document reading can take up to 30 seconds. We will publish response times once we have measured them in production.

Which documents do you accept?

Brazil's RG, CIN (the new national ID) and physical CNH, front and back, plus the passport data page. You choose which ones each session accepts.

Does the person need to install an app?

No. The link opens in the phone's browser in English, Spanish or Portuguese. On a computer, a QR code moves them to their phone, or they can continue with a webcam.

Do you store biometric data?

We never store face templates. Images are kept encrypted for the retention period configured for your account, and you can delete any session's data by API.

Is it LGPD and GDPR compliant?

Compliance depends on how you use it, so we don't claim it. We provide the mechanisms: specific consent for biometric data, deletion on request and configurable retention. You are the controller; we process on your behalf under a data processing agreement.

Where is data processed?

Document reading uses an external vision provider, named in your contract as a sub-processor along with the countries involved. An option to read documents inside Brazil is on our roadmap.

What is your accuracy?

We have not published a rate, because we will only do it with a stated method and sample. Until then, you set the approval thresholds and human review is the default.

Can it be fooled by a photo, a screen or a deepfake?

Three movements drawn at random and timed by our server are designed to reject printed photos, screens and pre-recorded video. A virtual camera feeding a live deepfake cannot be reliably detected from a browser, so for high-risk flows keep human review on.

Do you check government databases?

No. We recompute the CPF check digits and compare it with the CPF you already hold. We do not confirm with the tax authority who owns it.

Do you offer webhooks or SDKs?

Not yet. Today you poll the session endpoint; signed webhooks are on the roadmap. There is no native SDK: the capture is a web page, so there is nothing to embed.

Do you have certifications?

Not yet. Our security section lists what is in place (encryption, isolation, audit trail) and a roadmap with the status of each item that is still missing.

Put a reason behind every approval.

We are opening access to a small group of companies. Tell us about your flow and we will set up your test keys with you.