Match status lifecycle
Matches progress through a defined lifecycle:
- When the matching engine finds a pair of transactions that belong together, it creates a match in
PROPOSEDstatus. - High-confidence matches (score 90 or above) from EXACT and TOLERANCE rules, plus manual matches, are auto-confirmed immediately. FUZZY and DATE_LAG matches always require manual review and are never auto-confirmed.
- Lower-confidence matches wait for manual review—an analyst can then confirm or reject them.
- Rejected transactions return to the unmatched pool for another matching attempt.
FUZZY and DATE_LAG matches are never auto-confirmed. Auto-confirmation at score ≥ 90 applies to EXACT and TOLERANCE rules, plus manual matches. A match produced by a FUZZY or DATE_LAG rule always stays in
PROPOSED for manual review, regardless of its score — even a FUZZY match scoring 90+. See Confidence scoring.Status lifecycle of a match.
Status definitions
Confidence tiers
Matcher assigns a confidence score (0-100) to each proposed match. The score determines how the match is handled.
Confidence levels
Understanding the score
The confidence score is calculated from weighted components:
Example Score Breakdown:
Understanding variances
When matches have differences, review the variance details:
Amount variance
Common causes of amount variance:- Bank fees
- Currency conversion differences
- Rounding differences
- Partial payments
Date variance
Common causes of date variance:- Settlement timing
- Time zone differences
- Posting vs. transaction date
- Weekend/holiday processing
Match candidates, open items, and adjustments
As you work a review queue, three questions come up again and again: why did the engine propose this pairing?, what’s still unsettled after a partial match?, and how do I book a small difference so both sides balance? Matcher answers each with a dedicated surface — match candidates, open items, and adjustments.
List match candidates
Retrieve the ranked candidate proposals the engine considered for a transaction — the “why” behind a proposed match, including the per-component contributions.cURL
GET /v1/matching/candidates accepts contextId, transactionId, and limit query parameters and returns a CandidateProposalsResponse.
List open items
Open items are residual balances left when a transaction is only partially netted. Track them to surface amounts that still need clearing or that have aged past their threshold.cURL
GET /v1/matching/contexts/{contextId}/open-items supports a status filter, plus limit/cursor pagination.
Open item statuses
The lifecycle flows
OPEN → PARTIALLY_CLEARED → CLEARED, with any still-open item able to become AGED once it passes the aging threshold.
Create an adjustment
Post an accounting adjustment to account for a variance (bank fee, FX difference, rounding, write-off, and so on) against a match group or transaction.cURL
POST /v1/matching/adjustments requires the contextId query parameter. Body fields:
Adjustment amount
ISO 4217 currency code
DEBIT or CREDITBANK_FEE, FX_DIFFERENCE, ROUNDING, WRITE_OFF, or MISCELLANEOUSBusiness reason for the adjustment
Human-readable description
Match group the adjustment applies to
Transaction the adjustment applies to
Revoking confirmed matches
Sometimes you need to reverse a match because it was approved incorrectly. The unmatch operation breaks an existing match group and returns its transactions to
UNMATCHED status so they can be matched again.
Use DELETE /v1/matching/groups/{matchGroupId} with the required contextId query parameter and a reason in the request body (operationId unmatch):
cURL
reason field is required (non-empty).
When to revoke
Common scenarios for revoking:- Incorrect match confirmed: The match was approved but transactions actually belong to different records
- New information: Additional data shows the match is wrong
- Source correction: The source system issued a correction or reversal
- Duplicate transaction: One of the transactions was a duplicate that should be removed
What happens after revoke
When a match group is unmatched:- Match status changes: A
CONFIRMEDgroup becomesREVOKED; a still-PROPOSEDgroup becomesREJECTED - Transactions returned: All associated transactions revert to
UNMATCHEDstatus - Audit trail created: Full record of who unmatched and the supplied reason
- Webhook triggered: A
match_group.unmatchedevent is emitted (only when the group was previouslyCONFIRMED) - Re-matching possible: Transactions can be matched again in the next run
Best practices
Start with lowest confidence matches
Start with lowest confidence matches
Review matches with the lowest confidence scores first. These are most likely to be incorrect and need the most attention.
Understand fixed confidence thresholds
Understand fixed confidence thresholds
Confidence thresholds are fixed in the system. For EXACT and TOLERANCE rules, plus manual matches, scores of 90 or above are auto-confirmed. Scores between 60 and 89 require manual review. Scores below 60 become exceptions. These values are not configurable per context. FUZZY and DATE_LAG matches are the exception: they are never auto-confirmed and always require review, regardless of score. Use rule tuning (priority, tolerance values) to influence how many matches land in each tier.
Document your decisions
Document your decisions
Always add notes when confirming or rejecting matches. This creates an audit trail and helps team members understand the reasoning.
Use bulk operations wisely
Use bulk operations wisely
Bulk confirm is efficient but use it only after reviewing a sample. Never bulk confirm without understanding what you’re approving.
Review high-value matches carefully
Review high-value matches carefully
Regardless of confidence score, give extra attention to high-value matches. The impact of an incorrect match is proportional to the amount.
Next steps
Resolving exceptions
Handle transactions that couldn’t be matched automatically.
Confidence scoring
Deep dive into how confidence scores are calculated.

