Matcher includes reporting tools to document reconciliation outcomes, monitor exceptions, and preserve audit evidence for compliance.
Available reports
Reconciliation summary : A high-level snapshot of match rates, exception volume, and total variances.
Match detail report : A complete list of matches, including transaction details, confidence scores, and variance breakdowns.
Exception repor : A focused view of unresolved exceptions with aging, severity, and resolution status.
Audit trail report : A chronological record of reconciliation activity for investigation and compliance.
Reconciliation summary report
The summary report gives you a top-level view of reconciliation performance for a selected period.
Generate a summary report
curl -X POST "https://api.matcher.example.com/v1/reports/summary" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"date_from": "2024-01-01",
"date_to": "2024-01-31",
"format": "json"
}'
Response
{
"report_id" : "rpt_sum_001" ,
"report_type" : "RECONCILIATION_SUMMARY" ,
"context_id" : "ctx_abc123" ,
"period" : {
"from" : "2024-01-01" ,
"to" : "2024-01-31"
},
"generated_at" : "2024-02-01T08:00:00Z" ,
"summary" : {
"transactions" : {
"total" : 5000 ,
"matched" : 4750 ,
"unmatched" : 250 ,
"match_rate" : 95.0
},
"matches" : {
"total" : 2375 ,
"auto_confirmed" : 2100 ,
"manually_confirmed" : 200 ,
"rejected" : 75
},
"exceptions" : {
"total" : 250 ,
"resolved" : 180 ,
"open" : 70 ,
"by_severity" : {
"critical" : 5 ,
"high" : 15 ,
"medium" : 25 ,
"low" : 25
}
},
"variance" : {
"total_amount" : 12500.0 ,
"currency" : "USD" ,
"by_type" : {
"bank_fee" : 3500.0 ,
"fx_variance" : 5000.0 ,
"timing" : 2500.0 ,
"other" : 1500.0
}
},
"sources" : [
{
"source_id" : "src_bank456" ,
"source_name" : "Chase Bank" ,
"transactions" : 2500 ,
"matched" : 2400 ,
"match_rate" : 96.0
},
{
"source_id" : "src_ledger789" ,
"source_name" : "Main Ledger" ,
"transactions" : 2500 ,
"matched" : 2350 ,
"match_rate" : 94.0
}
]
}
}
What the report includes
Section Contents Transaction summary Totals and match rate (overall and by source) Match summary Auto vs manual confirmations, plus rejections Exception summary Open/resolved counts and severity breakdown Variance summary Total variance by type and amount Source breakdown Per-source reconciliation metrics
Match detail report
The match detail report lists every match with full transaction metadata and variance fields.
Generate a match detail report
curl -X POST "https://api.matcher.example.com/v1/reports/matches" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"date_from": "2024-01-01",
"date_to": "2024-01-31",
"status": [
"CONFIRMED"
],
"include_transactions": true,
"format": "csv"
}'
Response
{
"report_id" : "rpt_mtch_001" ,
"report_type" : "MATCH_DETAIL" ,
"status" : "GENERATING" ,
"estimated_rows" : 2375 ,
"download_url" : null ,
"expires_at" : null
}
Check report status
curl -X GET "https://api.matcher.example.com/v1/reports/rpt_mtch_001" \
-H "Authorization: Bearer $TOKEN "
Response (ready)
{
"report_id" : "rpt_mtch_001" ,
"report_type" : "MATCH_DETAIL" ,
"status" : "READY" ,
"row_count" : 2375 ,
"file_size_bytes" : 524288 ,
"format" : "csv" ,
"download_url" : "https://api.matcher.example.com/v1/reports/rpt_mtch_001/download" ,
"expires_at" : "2024-02-02T08:00:00Z"
}
match_id, status, confidence, rule_name, created_at, confirmed_at, txn1_id, txn1_source, txn1_amount, txn1_date, txn2_id, txn2_source, txn2_amount, txn2_date, amount_variance, date_variance_days
match_001, CONFIRMED, 100, Exact Match, 2024-01-15T10:00:00Z, 2024-01-15T10:00:01Z, txn_bank_001, Chase Bank, 1000.00, 2024-01-15, txn_led_001, Main Ledger, 1000.00, 2024-01-15, 0.00, 0
match_002, CONFIRMED, 85, Amount Tolerance, 2024-01-16T10:00:00Z, 2024-01-16T14:30:00Z, txn_bank_002, Chase Bank, 5000.00, 2024-01-16, txn_led_002, Main Ledger, 5012.50, 2024-01-16, 12.50, 0
Exception report
Use the exception report to investigate open items, track aging, and prioritize remediation.
Generate an exception report
curl -X POST "https://api.matcher.example.com/v1/reports/exceptions" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"date_from": "2024-01-01",
"date_to": "2024-01-31",
"status": [
"OPEN",
"IN_REVIEW"
],
"severity": [
"CRITICAL",
"HIGH"
],
"format": "json"
}'
Response
{
"report_id" : "rpt_exc_001" ,
"report_type" : "EXCEPTION_DETAIL" ,
"context_id" : "ctx_abc123" ,
"period" : {
"from" : "2024-01-01" ,
"to" : "2024-01-31"
},
"filters" : {
"status" : [
"OPEN" ,
"IN_REVIEW"
],
"severity" : [
"CRITICAL" ,
"HIGH"
]
},
"generated_at" : "2024-02-01T08:00:00Z" ,
"summary" : {
"total" : 20 ,
"total_amount" : 250000.0 ,
"currency" : "USD" ,
"by_status" : {
"OPEN" : 12 ,
"IN_REVIEW" : 8
},
"by_severity" : {
"CRITICAL" : 5 ,
"HIGH" : 15
},
"average_age_days" : 3.5
},
"exceptions" : [
{
"id" : "exc_001" ,
"status" : "OPEN" ,
"severity" : "CRITICAL" ,
"age_days" : 5 ,
"sla_status" : "OVERDUE" ,
"transaction" : {
"id" : "txn_bank_999" ,
"source_name" : "Chase Bank" ,
"amount" : 75000.0 ,
"currency" : "USD" ,
"date" : "2024-01-15" ,
"reference" : "Wire #12345"
},
"reason" : "NO_MATCH_FOUND" ,
"assigned_to" : "user_123" ,
"created_at" : "2024-01-20T10:00:00Z"
}
]
}
Exception aging analysis
Exception reports include aging buckets for SLA tracking:
{
"aging" : {
"current" : 25 ,
"1_to_3_days" : 15 ,
"3_to_5_days" : 8 ,
"over_5_days" : 2 ,
"overdue_sla" : 5
}
}
Audit trail report
The audit trail report provides an immutable, time-ordered history of reconciliation activity.
Generate an audit trail report
curl -X POST "https://api.matcher.example.com/v1/reports/audit" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"date_from": "2024-01-01",
"date_to": "2024-01-31",
"action_types": [
"MATCH_CONFIRMED",
"MATCH_REJECTED",
"EXCEPTION_RESOLVED"
],
"format": "json"
}'
Response
{
"report_id" : "rpt_aud_001" ,
"report_type" : "AUDIT_TRAIL" ,
"context_id" : "ctx_abc123" ,
"period" : {
"from" : "2024-01-01" ,
"to" : "2024-01-31"
},
"generated_at" : "2024-02-01T08:00:00Z" ,
"event_count" : 1250 ,
"events" : [
{
"timestamp" : "2024-01-15T10:30:00Z" ,
"action" : "MATCH_CONFIRMED" ,
"user" : "system" ,
"entity_type" : "match" ,
"entity_id" : "match_001" ,
"details" : {
"confidence" : 100 ,
"rule" : "Exact Match" ,
"auto_approved" : true
}
},
{
"timestamp" : "2024-01-16T14:30:00Z" ,
"action" : "MATCH_CONFIRMED" ,
"user" : "user_123" ,
"entity_type" : "match" ,
"entity_id" : "match_002" ,
"details" : {
"confidence" : 75 ,
"notes" : "Verified variance is bank fee"
}
},
{
"timestamp" : "2024-01-17T09:15:00Z" ,
"action" : "EXCEPTION_RESOLVED" ,
"user" : "user_456" ,
"entity_type" : "exception" ,
"entity_id" : "exc_001" ,
"details" : {
"resolution_type" : "FORCE_MATCH" ,
"target_transaction" : "txn_led_777" ,
"notes" : "Amount difference due to wire fee"
}
}
]
}
Audit action types
Action Description TRANSACTION_IMPORTEDTransaction added through ingestion MATCH_CREATEDSystem proposed a match MATCH_CONFIRMEDMatch approved (automatic or manual) MATCH_REJECTEDMatch declined EXCEPTION_CREATEDException generated EXCEPTION_ASSIGNEDException assigned to a user or group EXCEPTION_ESCALATEDException escalated based on rules or SLA EXCEPTION_RESOLVEDException resolved with a recorded method ADJUSTMENT_CREATEDAdjusting entry created to document variance CONTEXT_CLOSEDReconciliation period closed
Choose a report format based on how you plan to consume the output.
JSON
Best for: API integrations and programmatic processing.
Response : Returns a structured JSON response.
Code example
curl -X POST "https://api.matcher.example.com/v1/reports/summary" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"format": "json"
}'
CSV
Best for: Spreadsheet analysis and downstream imports.
Response : Returns a download URL for the generated file.
Code example
curl -X POST "https://api.matcher.example.com/v1/reports/matches" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"format": "csv"
}'
PDF
Best for: Formal documentation, printing, and sharing.
Response : Returns a download URL for the formatted PDF.
Code example
curl -X POST "https://api.matcher.example.com/v1/reports/summary" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"format": "pdf",
"pdf_options": {
"include_logo": true,
"include_signatures": true,
"page_size": "letter"
}
}'
Excel
Best for: Multi-sheet analysis and team workflows.
Response : Returns a download URL for the Excel workbook.
Code example
curl -X POST "https://api.matcher.example.com/v1/reports/summary" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"format": "xlsx",
"xlsx_options": {
"include_charts": true,
"include_pivot_tables": true
}
}'
Downloading reports
Large outputs are generated asynchronously. Request the report, poll status, then download.
Download flow
Request report
Submit a generation request with the parameters you need.
Poll status
Check status until status becomes READY.
Download
Use download_url to retrieve the file.
Report status values
Status Description QUEUEDRequest accepted and waiting to start GENERATINGReport is being generated READYReport is ready to download EXPIREDDownload link expired (regenerate the report) FAILEDReport generation failed
Scheduling reports
Automate report generation and delivery for recurring reconciliations.
Create a scheduled report
curl -X POST "https://api.matcher.example.com/v1/report-schedules" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"name": "Daily Reconciliation Summary",
"report_type": "RECONCILIATION_SUMMARY",
"context_id": "ctx_abc123",
"schedule": {
"frequency": "daily",
"time": "08:00",
"timezone": "America/New_York"
},
"format": "pdf",
"delivery": {
"method": "email",
"recipients": [
"[email protected] ",
"[email protected] "
]
}
}'
Response
{
"schedule_id" : "sch_001" ,
"name" : "Daily Reconciliation Summary" ,
"report_type" : "RECONCILIATION_SUMMARY" ,
"context_id" : "ctx_abc123" ,
"schedule" : {
"frequency" : "daily" ,
"time" : "08:00" ,
"timezone" : "America/New_York" ,
"next_run" : "2024-02-02T08:00:00-05:00"
},
"format" : "pdf" ,
"delivery" : {
"method" : "email" ,
"recipients" : [
"[email protected] " ,
"[email protected] "
]
},
"status" : "ACTIVE" ,
"created_at" : "2024-02-01T10:00:00Z"
}
Schedule frequencies
Frequency Description Configuration dailyEvery day at a fixed time "time": "08:00"weeklyOn selected weekday(s) "days": ["monday", "friday"]monthlyOn a day of the month "day_of_month": 1 or "day_of_month": "last"on_closeWhen the context is closed No additional config
Delivery methods
Method Configuration email"recipients": ["[email protected] "]webhook"webhook_url": "https://..."sftp"sftp_config_id": "sftp_001"s3"s3_bucket": "bucket-name", "s3_prefix": "reports/"
S3 export
Export reports directly to Amazon S3 for long-term storage, compliance archival, or integration with data pipelines.
Before exporting to S3, configure your AWS credentials:
curl -X POST "https://api.matcher.example.com/v1/admin/integrations/s3" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"name": "Production S3 Archive",
"region": "us-east-1",
"credentials": {
"access_key_id": "AKIAIOSFODNN7EXAMPLE",
"secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
},
"default_bucket": "company-reconciliation-archive",
"default_prefix": "matcher/reports/"
}'
Response
{
"id" : "s3_config_001" ,
"name" : "Production S3 Archive" ,
"region" : "us-east-1" ,
"default_bucket" : "company-reconciliation-archive" ,
"default_prefix" : "matcher/reports/" ,
"status" : "ACTIVE" ,
"test_connection" : "SUCCESSFUL" ,
"created_at" : "2024-01-15T10:00:00Z"
}
Use IAM roles instead of access keys when running Matcher on AWS (EC2, ECS, EKS). The system will automatically use the instance role if credentials are not provided.
Export to S3 (one-time)
Export a specific report to S3:
curl -X POST "https://api.matcher.example.com/v1/reports/rpt_sum_001/export/s3" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"s3_config_id": "s3_config_001",
"bucket": "company-reconciliation-archive",
"key": "matcher/reports/2024/01/summary_2024-01-31.pdf",
"storage_class": "STANDARD_IA",
"server_side_encryption": "AES256",
"metadata": {
"context_name": "Daily Bank Reconciliation",
"period": "2024-01",
"report_type": "summary"
}
}'
Response
{
"export_id" : "exp_s3_001" ,
"status" : "IN_PROGRESS" ,
"s3_location" : {
"bucket" : "company-reconciliation-archive" ,
"key" : "matcher/reports/2024/01/summary_2024-01-31.pdf" ,
"region" : "us-east-1"
},
"started_at" : "2024-02-01T08:00:00Z"
}
Check export status
curl -X GET "https://api.matcher.example.com/v1/exports/exp_s3_001" \
-H "Authorization: Bearer $TOKEN "
Response (completed)
{
"export_id" : "exp_s3_001" ,
"status" : "COMPLETED" ,
"s3_location" : {
"bucket" : "company-reconciliation-archive" ,
"key" : "matcher/reports/2024/01/summary_2024-01-31.pdf" ,
"region" : "us-east-1" ,
"url" : "s3://company-reconciliation-archive/matcher/reports/2024/01/summary_2024-01-31.pdf" ,
"version_id" : "3/L4kqtJlcpXroDVBH40Nr8X8gdRQBpUMLUo"
},
"file_size_bytes" : 524288 ,
"etag" : " \" d41d8cd98f00b204e9800998ecf8427e \" " ,
"completed_at" : "2024-02-01T08:00:15Z" ,
"duration_seconds" : 15
}
Automatic S3 export with scheduled reports
Configure reports to automatically export to S3:
curl -X POST "https://api.matcher.example.com/v1/report-schedules" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"name": "Daily Summary - S3 Archive",
"report_type": "RECONCILIATION_SUMMARY",
"context_id": "ctx_abc123",
"schedule": {
"frequency": "daily",
"time": "08:00",
"timezone": "UTC"
},
"format": "pdf",
"delivery": {
"method": "s3",
"s3_config_id": "s3_config_001",
"s3_bucket": "company-reconciliation-archive",
"s3_key_pattern": "matcher/reports/{context_name}/{year}/{month}/summary_{date}.pdf",
"storage_class": "GLACIER_IR",
"server_side_encryption": "aws:kms",
"kms_key_id": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
}
}'
S3 key patterns
Use dynamic patterns to organize exports:
Pattern Variable Description Example {context_id}Context ID ctx_abc123{context_name}Context name (slugified) daily-bank-reconciliation{report_type}Report type summary{year}4-digit year 2024{month}2-digit month 01{day}2-digit day 31{date}ISO date 2024-01-31{timestamp}ISO timestamp 2024-01-31T08-00-00Z{format}File format pdf
Example patterns:
reports/{year}/{month}/{day}/{context_name}_{report_type}.{format}
{context_id}/monthly/{year}-{month}.pdf
archive/{date}/{report_type}_{timestamp}.csv
S3 storage classes
Choose the appropriate storage class based on access patterns:
Storage Class Use Case Retrieval Time Cost STANDARDFrequent access Immediate Highest STANDARD_IAInfrequent access (30+ day retention) Immediate Medium GLACIER_IRArchive, occasional access Milliseconds Low GLACIERLong-term archive Hours Lowest DEEP_ARCHIVECompliance archive (7+ years) 12 hours Lowest
Storage classes like GLACIER and DEEP_ARCHIVE have minimum storage duration charges. Ensure reports will be retained for the minimum period before using these classes.
Encryption options
Encryption Type Configuration Use Case AES256Server-side encryption with Amazon S3-managed keys Default, simple setup aws:kmsAWS KMS-managed encryption keys Audit trail, key rotation aws:kms:dsseDouble encryption with KMS High-security compliance requirements
S3 lifecycle policies
Configure lifecycle rules in your S3 bucket to automate archival:
S3 Lifecycle Rule Example
{
"Rules" : [
{
"Id" : "ArchiveMatcherReports" ,
"Status" : "Enabled" ,
"Filter" : {
"Prefix" : "matcher/reports/"
},
"Transitions" : [
{
"Days" : 90 ,
"StorageClass" : "STANDARD_IA"
},
{
"Days" : 365 ,
"StorageClass" : "GLACIER_IR"
},
{
"Days" : 2555 ,
"StorageClass" : "DEEP_ARCHIVE"
}
],
"Expiration" : {
"Days" : 2920
}
}
]
}
Recommended lifecycle:
0-90 days: STANDARD (active reconciliation period)
90-365 days: STANDARD_IA (recent archive)
1-7 years: GLACIER_IR or GLACIER (compliance retention)
7+ years: DEEP_ARCHIVE (long-term regulatory)
After retention period: Auto-delete
Best practices
Use IAM roles over access keys
When running on AWS, use IAM instance roles instead of embedding access keys. This provides automatic credential rotation and better security.
Turn on S3 versioning for your archive bucket to protect against accidental deletions or overwrites.
Configure bucket policies to restrict access to authorized IAM roles only. Deny public access.
Use KMS encryption for compliance
Financial services and regulated industries should use AWS KMS encryption to maintain audit trails of data access.
Organize by date hierarchy
Use year/month/day folders to organize reports chronologically. This simplifies lifecycle management and retrieval.
Add metadata tags to S3 objects (context, period, type) for easier searching and cost allocation.
SOX compliance
Matcher maintains immutable audit trails that support SOX (Sarbanes–Oxley) requirements.
Compliance features
Every action is recorded with a timestamp, actor identity, and before/after state. Audit entries are append-only.
Actions are tied to a user or system principal. Service accounts remain distinguishable from human users.
Reports can show who executed an action versus who approved it, supporting SOD controls.
Audit data follows configurable retention policies (for example, 7 years for financial records).
Generate auditor-friendly packages with full action history and supporting context.
Compliance report
Generate an auditor-oriented report:
curl -X POST "https://api.matcher.example.com/v1/reports/compliance" \
-H "Authorization: Bearer $TOKEN " \
-H "Content-Type: application/json" \
-d '{
"context_id": "ctx_abc123",
"date_from": "2024-01-01",
"date_to": "2024-12-31",
"format": "pdf",
"include": [
"reconciliation_summary",
"exception_resolutions",
"manual_overrides",
"user_activity",
"approval_chain"
]
}'
Best practices
Automate a daily summary report delivered each morning to keep stakeholders aligned.
Archive exports for compliance
Store reports in secure, durable storage. Financial artifacts often require multi-year retention.
Use filters to stay actionable
Generate targeted reports by date, status, severity, or source—avoid exporting everything by default.
Make exports self-explanatory
Include source names, rule names, and key identifiers so the output can stand alone outside Matcher.
Large reports can fail or stall. Track job status and alert on FAILED or prolonged GENERATING.
Next steps