config object on
Create transaction declares what should
be accepted. Every field is optional and has a default, so "config": {} is valid — you
only set what you want to change.
Configuration is per transaction, not per account. Two verifications for the same
customer can enforce completely different rules, which is what lets you run a strict
onboarding check and a lighter step-up check from the same integration.
Shape
Device policy
Rooted devices, emulators, VPNs and spoofed GPS.
Document policy
Accepted documents, expiry, and matching against expected data.
Biometric policy
Liveness and face-comparison thresholds, age and gender.
Blacklist policy
Faces on an internal or global blocklist.
Which policies apply
A policy that does not apply to the transaction type is ignored:Policy actions
Most policy fields take one of three actions. This is the vocabulary that runs through the whole configuration:WARN is how you observe a signal before you start enforcing it. Ship a new rule as
WARN, watch how often it fires against real traffic, then move it to REJECT once you
know the false-positive rate.Defaults
What you get when you omit a field entirely:Transaction lifetime
integer
default:"1440"
How long the user has to complete the flow, counted from creation. Range 1–1440
(24 hours). Once it elapses the transaction moves to
EXPIRED and the sdk_token
stops working.Webhook
string (HTTPS)
Where chmod notifies you once the decision exists. Must start with
https://.
