Trust Center

A level is not a badge somebody grants you. It is a set of claims that were all true at the same moment.

Every Xuda account carries a verification level from 0 to 4, and it is computed rather than awarded. A deterministic scorer turns typed signals into a score, then walks the levels from 1 upward, granting one only when every claim that level requires is held AND the score clears that level's own floor. The walk stops at the first gap, because levels are cumulative: an account that has already corroborated a card sits at level 1 until it has photographed an identity document, and no amount of good behaviour anywhere else moves it. Level 1 Contact asks for a confirmed email, a phone that answered an SMS code, and a line that is not virtual. Level 2 Identity asks a person for a photo ID, a live capture, a face match between the two and a profile picture that matches the same face; it asks a company for that same identity chain plus its own papers, a public register that agrees the company exists, and the person on the verified document being an active officer of it. The models that read a document or a web page never issue a verdict. They turn a photograph into typed fields, and a policy file decides what those fields are worth, which is why the same evidence produces the same answer twice and why moving a threshold is a config edit rather than a deployment. Every stored decision records the policy version it was computed under, currently 1.8.0.

Claims first, then the score floor
Levels are cumulative
Verifying your own account is free on every plan
A level is not a badge somebody grants you. It is a set of claims that were all true at the same moment.
How a level is decided

Two tests, in this order, and the walk stops at the first gap.

Most verification systems answer pass or fail. This one answers with a level, a set of claims and a list of reasons, and it recomputes all three from scratch every time you look at it. That is what makes the answer explainable: nothing is remembered as a verdict, only as evidence, and the verdict is rebuilt from the evidence on the spot.

  • Claims are additive and sticky. A check that succeeded once is not re-run every time your score is recomputed, so a passing document read does not have to keep passing. The narrow exception is a definite negative answer: a company that has since been dissolved, a card that now links to a suspended account. An unreachable service never revokes anything, because an outage that stripped earned claims would be worse than the outage.
  • The score is not a second opinion on the same evidence. It is a separate quantity built from signals the claims do not cover: how old the account is, whether it has ever been used, what kind of phone line answered, whether the connection comes from a datacenter, whether a payment on it was ever reported as fraudulent. A claim says something was proved. The score says whether anything about the account argues against it.
  • Level 1's floor is 0, and that is deliberate rather than lazy. Every positive number tried there has been wrong twice: a floor of 25 blocked a user who held all three level 1 claims on a landline, and 10 then blocked a brand new business holding all three on a real mobile, because a fresh account that has not used the platform yet scores 7. An account that has proved an email and a real phone HAS become reachable, so only an adverse signal keeps it out.
  • Because the walk stops at the first gap, missing_by_level is published for every level rather than only the next one. Somebody stuck at level 1 can still read exactly what level 3 will ask for. What is never published is the weight of any individual signal: you see what to do next, not how to game it.
What one status read runs
  1. Collect
    Account history, phone, domain, Stripe, network and correlation sources are read into typed signals. No free text ever reaches the scorer.
  2. Score
    Each signal maps to points through the policy file: a band, a boolean or a lookup. Nothing is hardcoded in the module.
  3. Resolve
    Walk levels 1 upward. A level is granted only when its required claims are all held and the score clears its floor. Stop at the first gap.
  4. Project
    Level, claims and score are written onto the account document, so a caller holding an account does not need a second round trip to know its level.
4

levels, and a gap at one caps you there

6

possible orders for a live capture, drawn after you ask for it

45

score floor at level 2, on top of every claim

$0

what verifying your own account costs, on any plan

Level 2 splits

A person proves a face. A company proves a face, and then ties it to a register.

Level 1 asks a company for exactly what it asks a person for, which was not always true and is the single biggest change in policy 1.8.0. Being reachable is being reachable, so a business is reached on an email and a phone like anybody else, and there is one OTP step, one gate and one set of words whichever kind of account is signing up. That has a real consequence and it is intended: a business whose only number is a VOIP line cannot hold level 1, which is the same wall a personal account meets. Level 2 is where the two genuinely diverge, and they diverge in kind rather than in count.

Both halves of a business account are separate queues with separate tickets, which is why the status read publishes under_review_identity and under_review_company rather than one flag: an account whose identity passed and whose company is queued was being told to wait against a step that already had a green tick beside it.
The ladder

Four levels, what each one asks for, and what it actually changes today.

Read the columns down rather than across. The claims column is the honest one: a level is its claims, and the floor beneath them only keeps out an account carrying something heavy and negative, since a fraud report is minus 30 and a suspension is minus 40. The last row is the one most pages leave out.

1 · Contact
2 · Identity
3 · Financial
4 · Networks
What a person must holdA confirmed email, a phone that answered an SMS code, and a line that is not virtual.A parsed photo ID, a live capture, a face match between them, and a profile picture that matches the same face.A corroborated payment record and a clean screening result, both earned on the spot rather than waited for.A web and social footprint that was checked, and a cross account correlation graph that came back clear.
What a company must holdIdentical to a person. Being reachable is being reachable, and there is one OTP step for both.The same identity chain, plus company papers, a register that agrees, and you as an active officer on it.The same two, plus a verified tax ID.Identical to a person, read against the company footprint as well as the individual one.
Score floor0. Only an adverse signal keeps you out, never a quiet account.45.45. Dropped from 60 so an account that passes every check is not told to come back in a week.75.
What it is a prerequisite forNothing on its own. It is the floor the rest of the ladder stands on.A profile picture, any contact action, buying a phone number, adding a mailbox, using a portable IP outside Xuda, registering a domain, ordering from the store, and running code on Xucode.Setting up a campaign.A seller account, an ambassador seat and a mentor seat.
Does it stop you todayNo.Not on production. The one real consequence is the generated avatar, which is withheld below level 2 and is deliberately not held behind the rollout.On production, no. The shared policy file names 3 as the intended floor and the dev box runs it; production states the floor as null, which the code reads as watch and never deny.Same as level 3.
Where it is refused outrightNowhere. Level 1 involves no biometrics and is available everywhere.Canada, China and Russia. That refusal is deliberately exempt from the rollout.Same three countries, since level 2 is a prerequisite.Same three countries.
The level 2 run

The document is the anchor, and the order is enforced.

The document goes first because it is the only one of the three images issued by somebody else. Matching a profile picture against a selfie proves the two agree, not that either one is you. The live capture refuses to start at all until the document has been accepted, which is a cheap check off the stored subject rather than a full recompute: finding out afterwards that the document never passed is the worst possible moment to find out.

The liveness thresholds were calibrated on 2026-08-07 against the first five real captures, and one of them moved because of it. Every genuine head turn measured between 0.18 and 1.34 so the yaw bar stayed at 0.13, while the move closer test failed four times in five against a 1.2 bar. It now sits at 1.12 and is measured on the eye to mouth span, which a head turn cannot shorten.
What you are handed back

The status read, for an account stuck at level 1.

This is the shape every verification surface renders from, recomputed on each call rather than read from a cache. Note what is in it and what is not. It carries the next level, the exact claims still missing at that level and at every other one, plain language reasons for the score, whether a person is looking at it and which half they are looking at. It carries no signal weights at all, because a user should see what to do next and not what to optimise.

GET /cpi/verify_get_status
level: 1
level_name: "Contact"
score: 41
account_type: "personal"
claims: { email: true, phone: true, phone_not_virtual: true }
next_level: { level: 2, name: "Identity",
missing_claims: ["id_document", "face_match", "liveness"],
score_needed: 45 }
profile_picture is not in that list: it was set during onboarding and
cross-linked against the document portrait when the document was read
reasons: [{ code: "NO_PLATFORM_ACTIVITY",
message: "This account has not used the platform yet." }]
plain language, from the policy file, never a weight
under_review: false
under_review_identity: false
under_review_company: false
two flags, not one, because level 2 has two halves and they queue separately
document_window: { expires_at: null, remaining_ms: null, expired: false }
shadow_mode: true
enforce_from_level: null
null means no level denies anything on this box. A typo in that setting
lands on watching, never on denying customers
shadow_mode and enforce_from_level are both published on purpose, and they answer different questions. shadow_mode says the rollout is still calibrating. enforce_from_level says which levels actually bite, and null means none of them do. A screen reading only the first would promise nothing is blocked to somebody who is about to be.
The other half of the answer

The score is what the account argues about itself.

Claims are things you proved. The score is everything else the platform already knows, mapped to points through the same policy file, and it is the reason two accounts holding identical claims can sit at different levels. Nothing here is a verdict on you as a person: it is a set of small, boring facts about an account, several of them flagged so they can only ever help.

  • The phone line type is the single heaviest positive at level 1, and it is why the level exists in the shape it does. A real mobile is worth 14 points, a landline 9, a fixed VOIP line 2, and a non fixed VOIP number is minus 12 with a stated reason. A number that can be rented for an afternoon is not a contact channel.
  • Time and use pay more than anything you can buy. An account older than 180 days carries 20 points and one created today carries 0; an account that has actually built something carries up to 14 more. A paid membership is worth 10, which is less than simply having used the platform for six months.
  • The negatives are the ones with real weight. A suspension is minus 40, a fraud report minus 30, a disposable mail domain minus 15, a prepaid card minus 12, a connection from a hosting provider minus 8, one through a VPN minus 6, and a connection country that does not match the country on file minus 5.
  • Some checks are free and some are not, and the split is published rather than hidden. Account history, device and network, payment corroboration, domain control and the correlation graph cost nothing. A phone line lookup is a cent, an OTP five, a document read four, a face match one, a liveness check two, a business register lookup twenty five, and a human review three dollars.
What a phone line is worth
Mobile
+14
The heaviest single positive at level 1, and the reason the level is about being reachable rather than about owning a domain.
Landline
+9
Fine. It still holds the claim, it just carries less.
Fixed VOIP
+2
Tied to a place, so it is not nothing, but it is close.
Non fixed VOIP
-12
Negative, with a stated reason code, and it takes phone_not_virtual with it. This is the wall a business with no real line meets, and a personal account meets it identically.
One answer

Nine channels, no verdict among them, one level at the bottom.

No single check can grant a level, and none of them decides anything. Every one produces typed signals in the same shape, and a deterministic scorer running over a versioned policy file is the only thing that ever issues a number. That is also the whole of the prompt injection posture: the models never see a decision to make, the scorer never sees free text, and instruction like text found inside a submitted document is itself treated as a fraud signal and counts against the submission.

Honest limits

Seven things this is not, including the two most likely to be assumed.

  • It is not government grade document proofing and must never be described as one. Nothing here authenticates a document against issuer security features. What it does instead is check that independent channels agree, which is a different claim and a much harder one to fake than any single artifact, but it is not the same claim.
  • Level 2 is not stopping anybody on production today. Eight product gates name level 2, and the enforcement floor on production is stated as null, which the code reads as watch and never deny. The dev box runs the floor the shared policy names, which is 3. The one consequence that is real at level 2 everywhere is the generated avatar: it is withheld below level 2 and deliberately not held behind the rollout, because withholding it IS the enforcement.
  • Liveness stops a printed photo, a screenshot, a saved selfie and the same frame submitted twice. A video of the subject re-cut into the requested order, and a live deepfake driven by the same prompts, both still pass. That is on this page rather than left to be discovered.
  • Verification above level 1 is refused in Canada, China and Russia, and that refusal is exempt from the rollout on purpose. Calibrating a score is not permission to process biometric data somewhere Xuda is not cleared to operate. Canada is blocked whole because Quebec requires a filing 60 days before a biometric system goes into service and the network layer gives us a country, not a province.
  • Selling verification to your own users is a separate product with its own limits. The sandbox completes end to end today, unlimited and never counted, and a live session link is created and valid before live capture for external users opens. Both the dashboard and the API say so up front rather than letting the person reaching the link discover it at the end.
  • A business register that answers is not the same as one that exists everywhere. The United Kingdom is a direct integration and New York answers for itself; everything else depends on an aggregator, and where no register publishes officers, org_authority is simply not granted rather than granted on evidence nobody has.
  • The level on your account is a projection, not the record. Level, claims and score are written onto the account document so a caller already holding one does not need a second round trip. The evidence and the audit trail live in the verification database, and the projection is rebuilt from them, never the other way round.
Before you start

The questions the badge does not answer

Seven answers read out of verify_policy.json 1.8.0 and cpi/verify_module rather than off a marketing page.

Open the ladder and read your own gap.

The verification page under your profile shows the level you hold, the exact claims still missing at the next one, and the plain language reasons behind your score. It takes one status call to find out, it costs nothing on any plan, and nothing on your account is held back while the rollout finishes. If you want to run the same checks on your own users instead, that is the Trust Center, and the sandbox completes end to end today without a card.