System requirements
Infrastructure
Dependencies
Matcher depends on the following services:- PostgreSQL 15+: Primary data store for reconciliation contexts, transactions, matches, and audit logs.
- Redis 7+: Used for caching, duplicate detection, distributed locking, and idempotency control.
- RabbitMQ 3.12+: Message broker for asynchronous processing across bounded contexts.
Runtime
Matcher supports the following runtimes and tooling:- Go 1.26+ (only required when building from source)
- Docker 24+ and Docker Compose 2.20+ for containerized deployments
- Kubernetes 1.28+ for production-grade deployments using Helm
Optional: reconciling Midaz data
Matcher pairs naturally with Midaz Ledger, but there is no live connector between them — Matcher has no
MIDAZ_API_URL and opens no connection to Midaz. Reconciling Midaz data is entirely optional; Matcher works as a stand-alone product reconciling any data sources.
When to reconcile Midaz data
Reconcile ledger data from Midaz if:- You use Midaz as your ledger system
- You want to reconcile Midaz postings against external sources (bank statements, gateway reports)
When Midaz is not involved
Matcher works independently when:- Reconciling between external systems (banks, ERPs, payment processors)
- Using a different ledger system
- Importing ledger data via CSV/JSON/XML files
How it works
Matcher reconciles Midaz data the same way it ingests any source — by import, not a live query:- Export the ledger data for the period you want to reconcile.
- Import that export into a Matcher context as a source of type
LEDGER. - Import the counterparty data (bank statement or gateway report) as the other side.
- Matcher matches the two sides using your match rules.
See the Matcher and Midaz guide for the full flow.
Authentication
Matcher uses lib-auth for authentication and authorization, consistent with the rest of the Lerian ecosystem.
Authentication flow
- The client obtains a JWT from the identity provider
- The token is sent in the
Authorization: Bearer <token>header - Matcher validates the token via lib-auth
- Tenant identity and permissions are extracted from token claims
Required permissions
Access to Matcher features is controlled through fine-grained permissions:Single-tenant mode
If authentication is disabled or no tenant identifier is present in the JWT, Matcher runs in single-tenant mode using a default tenant.Supported file formats
Matcher accepts transaction data in the following formats. Each format has specific structural requirements for successful ingestion.
CSV (comma-separated values)
Commonly used for bank statements and exports. Requirements:- Header row is required
- UTF-8 encoding
- Comma delimiter (configurable)
- Quoted fields for values containing delimiters
JSON (javascript object notation)
Recommended for API-based integrations. Requirements:- Valid JSON array of transaction objects
- UTF-8 encoding
- Consistent field names across records
XML (extensible markup language)
Common in enterprise and banking integrations. Requirements:- Single root element
- UTF-8 encoding
- Consistent element structure
File size limits
Network requirements
Inbound access
Matcher exposes a REST API that must be reachable by clients:Outbound access
Matcher must be able to reach the following services:TLS configuration
For production environments, configure TLS:Environment checklist
Before proceeding with installation, confirm that:
- Infrastructure is ready: PostgreSQL, Redis, and RabbitMQ are running and accessible
- Authentication is configured: Auth service is available, or auth is explicitly disabled
- Network access is validated: Required inbound and outbound connectivity is in place
- Credentials are available: Database credentials and API tokens are configured
- Sample data is prepared: Transaction files are ready for testing (see Quick Start)
Next steps
Installation
Deploy Matcher using Docker or Kubernetes.
Quick start
Run your first reconciliation.

