Skip to main content
Every transaction carries its own rules. When your backend opens a verification it says what should be accepted, and chmod enforces exactly that — nothing is inherited from an account-wide setting, so a strict onboarding check and a lighter re-verification can run side by side. The rules fall into four families.

Device integrity

The SDK observes the device the capture is made on and reports what it finds: whether the phone is rooted or jailbroken, whether it is an emulator, whether developer mode is on, whether the connection goes through a VPN or proxy, whether the GPS position is simulated, and whether the GPS country disagrees with the network country. For each signal you choose what it does to the outcome. Some are strong on their own — a rooted device can feed fake camera frames into the capture, and a simulated GPS position has no innocent explanation. Others are weak and common among genuine users: developer mode, VPNs, a traveller whose GPS and IP countries differ. The defaults reflect that difference, and you can tighten or relax each one.

Documents

You decide which identity documents are acceptable, by country and by type, and whether an expired one is tolerated — per document, so an expired national ID can be fine while a passport must be valid. You can also ask chmod to compare what the document says against what you already hold about the person. Names are compared by similarity, because documents print them uppercase, unaccented and sometimes without a middle name; dates, numbers and countries are compared exactly. Anything you supply becomes a requirement: if it does not match, the verification fails.

Biometrics

The liveness check confirms a real, present person rather than a photo, a video or a mask. You set how confident chmod must be before it accepts, and how closely two faces must match to be considered the same person — the face on the document against the selfie, and both against the face enrolled the first time this customer verified. You can also express expectations about the person: an accepted age range and, if it matters to you, a gender. Both are estimated from the selfie and are best treated as fraud signals rather than facts — for a real age check, match the date of birth on the document.

Blocklists

chmod can compare the captured face against a blocklist you maintain and against a platform-wide one. These rules are accepted today but not yet enforced; see the field reference for the current status before relying on them.

Three ways to react

Most rules take one of three actions, and this vocabulary runs through the whole configuration:
Ship a new rule as Warn first. Watch how often it fires against real traffic, learn its false-positive rate, and only then promote it to Reject. It costs nothing and it saves you from rejecting good users on a hunch.

Time and delivery

Two more settings sit alongside the policies. How long the person has to finish the flow — an hour is plenty for a verification started from a button; a day only makes sense for a link sent by email. And where chmod should notify you once the decision exists, so you never have to poll.

Where the rules live

The configuration is built by your backend, from your own records, and sent when the transaction is created. Your mobile app never sees it and cannot change it. That boundary is deliberate: a modified app that could lower the liveness threshold or widen the list of accepted documents would be weakening its own verification. The SDK has its own configuration — colours, copy, capture behaviour — and that one is safe to build in the app, because it decides how the flow looks, never what it accepts.

The field reference

Every field, its allowed values, its default and the finding it produces is documented where your backend team will use it: on the Create transaction endpoint, and in the API Reference under Transaction configuration.