Skip to main content

Boolean expression over the vendor-independent fields only. Pre-screen decides whether the vendor is called at all, so it cannot read a vendor response. Exactly one of always, all, any, not, or a field/op/value comparison.

always is accepted only as a rule's whole condition, never nested, and only in preScreen — which is why it is declared here and not on the vendor rule nodes. Anywhere else is a 400.

always
boolean

Matches every screen. With then: SKIP as the last pre-screen rule, this is how a customer turns the surface off entirely: the pre-screen default is SCREEN, and this replaces that default. A rule after it is unreachable and rejected.

Must be true; false is a 400. Declared as a plain boolean rather than a single-value enum because the generator emits the latter as enum { True = true }, which is not valid TypeScript (TS18033).

all
array
Required array length: 1 - 200 elements
any
array
Required array length: 1 - 200 elements
not
any
field
enum<string>

Fields needing no vendor response, so they work in both phases, and the only fields a pre-screen rule may use. tx.amountUsd and tx.asset are present only where the request establishes them; neither is available on the signing path. address compares case-sensitively, since base58 chains are case-significant. An absent field compares unknown, so the rule sits out.

Available options:
tx.amountUsd,
tx.asset,
chain,
address
op
enum<string>

Comparison to apply. in and nin take a list operand and the rest take a scalar; contains is substring, never regex. Which operators a given field admits is per field, and rejected by the validator rather than here.

Available options:
eq,
neq,
in,
nin,
gte,
lte,
gt,
lt,
contains
value
any

Value to compare against: a scalar, or a list of at most 200 for in and nin. Its type has to match the field's, which the validator checks.

Last modified on October 6, 2026