What is an exception?
An exception is created when a transaction from one source has no valid counterpart in another source. Common causes include:
- No candidate found: No transaction in the other source meets the active rule criteria.
- Below confidence threshold: Candidates exist, but score below the minimum confidence (default: 60).
- Duplicate rejection: A previous match was rejected and no alternative candidate remains.
- Source imbalance: One source contains transactions that are missing from the other.
Exception lifecycle
Exceptions move through a simple workflow:
- When Matcher can’t reconcile a transaction, it creates an exception in
OPENstatus. - Assigning the exception moves it from
OPENtoASSIGNED. The API does not expose an unassign operation;assigneeis required and must be non-empty. - Force match and adjust entry persist
PENDING_RESOLUTIONonly while the operation is in progress. Success moves the exception toRESOLVED; failure returns it to its previousOPENorASSIGNEDstatus. - Direct resolution moves an
OPENorASSIGNEDexception toRESOLVED. - Dispatch sends the connector request, writes a
DISPATCHaudit event, and emitsexception.dispatched. It does not change the exception status.
The lifecycle of an exception in Matcher
Status definitions
State-machine endpoints
The following single-exception endpoints change the lifecycle or record related actions. Each is addressed by the exception’sexceptionId in the path.
Matcher wires the webhook connector path and callback handling. JIRA connector code exists but is not configured by default.
MANUAL acknowledges the dispatch locally without calling an external system. ServiceNow dispatch is not implemented: SERVICENOW reaches the generic unsupported-destination failure path and returns HTTP 500. See Exception routing for the full dispatch contract.Assign example
cURL
Resolve example
cURL
Adjust entry example
cURL
Bulk selection with selectExceptionIDs
cURL
Exception severity
Matcher classifies exceptions by severity so you can work the queue in the right order.
Severity escalation
Severity is re-evaluated as an exception ages. The classification uses OR logic — either the amount or the age threshold is enough to trigger a higher severity:- An exception under 1,000 starts as Low, but escalates to Medium after 24 hours.
- An exception under 10,000 escalates to High after 72 hours.
- Any unresolved exception escalates to Critical after 120 hours.
Resolution methods
Matcher exposes three exception-resolution actions.
1. Resolve directly
Close an exception with a requiredresolution and an optional reason when no force match or adjustment is needed.
2. Force match
Manually link transactions when you’ve confirmed they belong together, but the system couldn’t match them. Use Force Match when:- The correct counterpart exists, but variances blocked automatic matching.
- You can clearly explain and document the rationale.
- The variance is expected (fees, timing, rounding).
3. Create adjustment
Create an adjusting entry to account for a variance or to balance an unmatched item. Adjustment reason codes:
Validation rules:
- Adjustment amounts must be positive. A request with a zero or negative amount returns a
400 Bad Requesterror. POST /v1/exceptions/{exceptionId}/adjust-entryrequires a valid ISO 4217 currency code.POST /v1/matching/adjustmentsaccepts any non-empty currency string and does not validate ISO 4217 membership.reasonCodemust useAMOUNT_CORRECTION,CURRENCY_CORRECTION,DATE_CORRECTION, orOTHER.
Resolution records
Matcher records supported resolution actions in the exception history and audit stream.
Matcher does not expose exception split or independent write-off resolution contracts, and it does not enforce amount-based approval thresholds for these actions. Apply any additional approval requirements through your organization’s controls.
Bulk operations
When dealing with large volumes of exceptions, bulk endpoints let you process up to 100 exceptions in a single request.
Bulk assign
Assign multiple exceptions to a team member at once:cURL
Bulk resolve
Resolve multiple exceptions with a shared resolution:cURL
succeeded and failed arrays, so you can handle partial failures gracefully.
Bulk dispatch
Dispatch multiple exceptions to an external system:cURL
Exception comments
Comments give each exception an audit trail of investigation notes and team discussion — invaluable when someone else has to pick up or review the case later. Add a comment as an analyst works an item:
cURL
GET) returns the full thread ordered oldest-first. You cannot add comments after an exception is resolved. Only the comment author can delete it, and the comment must belong to the exception identified in the URL.
Disputes
When an exception needs formal investigation or involves an external party — a chargeback, a bank query — escalate it to a dispute. Disputes track evidence, state changes, and the final outcome. List disputes with
GET /v1/disputes (filter by state, e.g. OPEN) or retrieve one by its disputeId.
Dispute states and transitions
A dispute has five states:DRAFT, OPEN, PENDING_EVIDENCE, WON, and LOST. The flow is not strictly linear:
PENDING_EVIDENCEis optional — anOPENdispute can go directly toWONorLOSTwithout ever collecting evidence.- A
LOSTdispute can be reopened back toOPEN. WONis terminal.
Exception resolution workflow
Use this flow to keep reviews consistent and audit-friendly.
1
Triage
Review the queue by severity and SLA. Start with Critical and High.
2
Investigate
Use the exception payload to understand what failed and what candidates exist.
- Read
reason_detailsto see why matching failed. - Review
candidatesfor near matches below threshold. - Look for patterns (same counterparty, recurring reference formats).
3
Resolve
Pick the resolution that best reflects reality and policy.
- Resolve directly: You can close the exception without a force match or adjustment.
- Force Match: You found the correct counterpart.
- Adjust: You need an adjusting entry for variance.
4
Document
Capture enough detail for someone else to replay your decision later:
- What you checked
- What you concluded
- Links or IDs for supporting evidence
5
Dispatch if needed
If the exception requires external handling, dispatch it through the configured webhook connector. Dispatch records the action but does not change the exception status. JIRA requires connector configuration that Matcher does not provide by default; ServiceNow is unavailable.
Best practices
Work by severity and SLA
Work by severity and SLA
Start with Critical and High items. They carry the highest risk and the tightest deadlines.
Make decisions auditable
Make decisions auditable
Notes aren’t optional. Treat them as part of the resolution:
- What you checked
- Why this resolution is correct
- Any ticket IDs, statements, or confirmations
Fix patterns at the source
Fix patterns at the source
Repeating exceptions usually point to configuration issues:
- Same counterparty → Normalize names or mapping
- Same date window → Validate ingestion completeness
- Same source → Review field mapping and sign conventions
Treat force matches as exceptions to the rule
Treat force matches as exceptions to the rule
If you force-match regularly, your rules or tolerances need attention.
Assign work explicitly
Assign work explicitly
Assign exceptions through the assignment endpoints. Matcher does not apply assignment rules automatically.
Next steps
Generating Reports
Create reconciliation reports, export results, and support audits.
Exception Routing
Review severity, SLA, and routing concepts for exceptions.

