Risk levels
Each quote in /new_rate carries a risk field. It describes what the destination provider does to inbound funds — not the user, not their wallet.
No screening, no holds.
The provider does not classify or block inbound funds. Lowest-friction. The default expectation for self-custody-only providers and aggregators with a privacy-first posture.
Best-effort routing; may re-route or refund.
The provider attempts the quoted rate but reserves the right to re-route through a partner or refund (less network fee) if their own inventory or risk model rejects the swap mid-flight. Less common.
Operator may pre-execute screening (the SmallSwap default).
"PreCheck" describes the user-perspective expectation: any operator running this codebase MAY apply pre-execution screening to deposits or recipient addresses via the ScreenerPlugin (Spec 11). Whether they actually do is the operator's choice — the v3 default build registers no plugin and performs no third-party screening, but the precheck label stays so that integrators don't promise users "no screening ever happens" only to discover a downstream operator does. Trust the label, not the assumption.
Full compliance posture — KYC, sanctions list, regulated entity.
The provider operates as a registered VASP / MTL / equivalent, runs full sanctions and KYC checks, and may freeze or seize funds per their jurisdiction. Useful for integrators who need predictable on-/off-ramp behavior at the expense of friction.
How to use this field
- Surface it. Show the risk pill next to each quote. Users routing privacy-sensitive funds will filter to
autoandprecheck. - Don't sort by it. Lowest-friction isn't always best for the user — rate, ETA, and reliability matter too. Let the rate win on rate; let the pill inform.
- Trust the operator. SmallSwap labels its own self-fill route
precheckeven when no plugin is registered, because the operator could swap in a plugin at any time. The label expresses possible behavior, not current behavior.