How rules work
When a matching run starts, Matcher evaluates rules in priority order.
- Rules are evaluated from the lowest priority number to the highest.
- Each rule creates all matches it can from transactions not already used by higher-priority rules.
- After every rule runs, transactions that remain unmatched become exceptions.
Rule types
Exact
Requires a strict match on configured fields.- Best for: Deterministic matches where values should align 1:1.
Tolerance
Allows controlled variance in amount matching.- Best for: Known variance patterns such as fees, rounding, or FX differences.
Date lag
Allows date differences between transactions.- Best for: Posting delays between systems.
Fuzzy
Replaces exact reference equality with normalized string-similarity scoring. Amount, currency, and date gates require exact equality by default, butmatchAmount, matchCurrency, and matchDate independently control whether each gate applies. FUZZY always proposes a match for review and never auto-confirms.
- Best for: Free-text memos or truncated references where the reference varies but the enabled financial gates still align.
Creating match rules
Exact rule
cURL
Config reference
Boolean
default:"true"
Require exact amount match
Boolean
default:"true"
Require exact currency match
Boolean
default:"true"
Require exact date match
Boolean
default:"true"
Require exact reference match
String
default:"DAY"
Date comparison precision:
DAY or TIMESTAMPBoolean
default:"true"
Case-insensitive reference comparison
Boolean
default:"false"
Require reference to be present on both sides
Boolean
default:"false"
Match on base (converted) amount instead of original
Boolean
default:"false"
Match on base currency instead of original
Integer
default:"100"
Accepted and validated, but reserved/inert — does not change the calculated confidence score (see note below)
Integer
default:"90"
Accepted and validated, but reserved/inert — does not change the calculated confidence score (see note below)
matchScore and matchBaseScore are currently inert. They are accepted and validated in the rule config, but the scoring engine ignores them: confidence is always computed from the fixed internal component weights (amount 40, currency 30, date 20, reference 10). These fields are reserved for future use and setting them does not alter the confidence score or auto-confirm behavior. See Confidence scoring.id and timestamps.
Tolerance rule
cURL
Config reference
Decimal
Percentage threshold applied to
percentageBase (0.005 = 0.5%). Defaults to 0; Matcher compares this threshold with absTolerance and uses the larger oneDecimal
Absolute amount threshold. Defaults to
0; Matcher compares it with the percentage threshold and uses the larger oneInteger
Number of days allowed between transaction dates
Integer
Decimal places for rounding
String
Rounding strategy:
HALF_UP, BANKERS, FLOOR, CEIL, or TRUNCATEString
default:"MAX"
Base for percentage calculation:
MAX, MIN, AVERAGE, LEFT, or RIGHTBoolean
default:"true"
Require currency match
Boolean
default:"true"
Require reference match
Boolean
default:"true"
Case-insensitive reference comparison
Boolean
default:"false"
Require reference to be present on both sides
Boolean
default:"false"
Match on base (converted) amount
Boolean
default:"false"
Match on base currency
Integer
default:"85"
Accepted and validated, but reserved/inert — does not change the calculated confidence score
Integer
default:"80"
Accepted and validated, but reserved/inert — does not change the calculated confidence score
- Transaction A: $1,000.00
- Transaction B: $1,005.00
- Amount difference: $5.00
- Percentage threshold: 5.025 (
percentageBase: MAX) - Absolute threshold: $0.50
- Effective threshold:
MAX($5.025, $0.50)= $5.025 → Matches
Fuzzy rule
cURL
Config reference
Decimal
default:"0.80"
Minimum normalized reference similarity (0–1) required to gate as a match
Boolean
default:"true"
When
true, require an exact amount matchBoolean
default:"true"
When
true, require an exact currency matchBoolean
default:"true"
When
true, require an exact date matchString
default:"DAY"
Date comparison precision:
DAY or TIMESTAMPBoolean
default:"true"
Require a non-empty reference on both sides
Integer
default:"70"
Accepted and defaulted to
70, but reserved/inert — it does not cap or change calculated confidence or auto-confirm behaviorFUZZY replaces reference equality with similarity. By default, it also requires exact amount, currency, and date matches; disable each gate independently with
matchAmount, matchCurrency, or matchDate. FUZZY always proposes matches for human review and never auto-confirms them.Date lag rule
cURL
Config reference
Integer
Maximum number of days difference allowed
Integer
default:"0"
Minimum number of days difference required
Boolean
default:"true"
Whether the boundary days are inclusive
String
default:"ABS"
How to measure the lag:
ABS (absolute), LEFT_BEFORE_RIGHT, or RIGHT_BEFORE_LEFTDecimal
default:"0"
Allowed amount difference to account for fees
Integer
default:"80"
Accepted and validated, but reserved/inert — does not change the calculated confidence score. Note that DATE_LAG rules always score the reference component as 0, capping the maximum score at 90
Boolean
default:"true"
Require currency match
Allocation settings (all rule types)
All rule types accept additional allocation settings for split and aggregate matching:Rule priority
Rules are evaluated by priority. Lower numbers run first.
Priority strategy
Reorder rules
You can reorder rules by providing the rule IDs in the desired order:cURL
Testing rules
Test rules in dry-run mode before committing matches.
cURL
MatchRun with statistics and emits its completion event.
Managing rules
List rules
cURL
Response
The list endpoint returns a summary view of rules. To see the full configuration details for a specific rule, use the individual rule endpoint or the create response which includes the completeconfig object.
Update a rule
cURL
Delete a rule
cURL
Best practices
Start strict, then loosen
Start strict, then loosen
Lead with exact rules. Add tolerance rules only for the variance you can justify and explain.
Leave room in priorities
Leave room in priorities
Use gaps (1, 10, 20, 50) so you can insert rules without renumbering your entire set.
Dry-run every change
Dry-run every change
Treat rule updates as production changes. Validate match rates and exception volume before committing.
Write descriptions that explain intent
Write descriptions that explain intent
A rule should document the variance it covers and the risk it introduces.
Review rule output over time
Review rule output over time
If a rule never matches, it may be unnecessary. If it matches too often, it may be too broad.
Keep loose rules at low priority
Keep loose rules at low priority
High tolerance increases false positives. Use it as a fallback and review results carefully.
Next steps
Exception routing
Configure classification, assignment, and escalation for unmatched transactions.
Confidence scoring
Understand how scores are calculated and how thresholds impact automation.

