Overview
Matcher supports bidirectional webhook communication, keeping your operational tools in sync with every reconciliation event in real time. This reduces manual intervention, helps maintain SLA compliance, and ensures a continuous audit trail across all connected systems.
- Outbound webhooks: exception routing dispatches exceptions to external targets — JIRA, ServiceNow, or an HTTP webhook endpoint you configure
- Inbound callbacks: External systems notify Matcher when actions are taken
Two-way flow between Matcher and external systems.
Outbound events
Matcher emits events when significant actions occur in the reconciliation process. The catalog below is published on the streaming backbone; exception events additionally reach HTTP webhook endpoints through exception routing.
Available events
Matcher’s event catalog is defined centrally. The most commonly consumed events are grouped by domain below. Configuration
Discovery (Fetcher)
Ingestion
Matching
Exceptions and disputes
Governance and reporting
Webhook delivery payload
Exception dispatches to a webhook target carry a consistent payload —eventId, eventType, timestamp, the exception snapshot under data, and routing/tracing information under metadata:
data.dueAt and the metadata fields traceId, queue, ruleName, and assignee are omitted when not set. Streaming catalog events (the tables above) follow their own per-event schemas on the event stream and are not delivered in this HTTP shape.
Inbound callbacks
External systems send callbacks to Matcher to update exception status after processing. The callback endpoint accepts status updates, resolution notes, and assignee changes from any external system.
Process a callback
The callback endpoint is authenticated by theX-Callback-Token header — an opaque token minted through the callback credentials surface — not by an operator JWT. All fields shown below are required; dueAt and updatedAt accept null, and payload can be an empty object:
cURL
externalSystem field identifies the external system that processed the exception. Common values include "JIRA", "SERVICENOW", or "WEBHOOK", but callbacks can report any system identifier. Omitting any of the nine required fields returns a 422.
Response
X-Idempotency-Key header to prevent duplicate processing.
Automatic retry for failed callbacks
If a previous callback for the same idempotency key failed during processing, Matcher automatically attempts to reacquire the idempotency lock and reprocess the callback. This means you don’t need to generate a new idempotency key when retrying a failed callback — simply resend the same request and Matcher handles the recovery. The retry behavior applies only to callbacks that were marked asfailed internally. Callbacks that completed successfully are still deduplicated as expected.
Callback credentials
Inbound callbacks are authenticated with an opaque bearer token that the external system sends in the
X-Callback-Token header. These callback credentials are minted, listed, rotated, and revoked through a dedicated CRUD surface under /v1/exceptions/callbacks/credentials. Each credential is bound to the caller’s tenant, and only the token’s SHA-256 hash is stored server-side — the raw token is returned exactly once at mint/rotate time.
Mint a credential
The request body is optional; provideexternalSystem as an operator-legible label for the system this token authenticates.
cURL
201 response (CredentialSecretResponse) returns:
Rotate a credential
cURL
CredentialSecretResponse (new raw token) and revokes the previous credential atomically, so external callers experience no gap when you swap the token.
Revoke a credential
cURL
Webhook security
Signature verification
When a webhook shared secret is configured, Matcher signs each delivery with an HMAC-SHA256 over the raw request body and sends it in theX-Signature-256 header, formatted as sha256=<hex-digest>:
X-Idempotency-Key header so receivers can deduplicate retries.
Verification process:
- Compute HMAC-SHA256 of the raw request body using the webhook shared secret
- Prefix the hex digest with
sha256= - Compare (constant-time) with the
X-Signature-256header
Network posture
Matcher deploys in your own infrastructure, so webhook deliveries originate from your deployment’s egress — there is no fixed Lerian IP range to allowlist. Serve webhook endpoints over HTTPS with a valid certificate. As an SSRF guard, Matcher refuses to deliver to private or loopback IP addresses unless the deployment explicitly allows them (development only).Retry logic
Failed webhook deliveries are retried with exponential backoff.
Default retry policy
A failed delivery is retried up to 3 times by default. Delays follow exponential backoff from a 1-second base, with jitter added to spread retries — so the exact spacing varies from attempt to attempt rather than following a fixed ladder.Retry conditions
Retries occur for:- HTTP 429 responses
- HTTP 5xx responses
- Transport errors (connection failures, timeouts)
- Other HTTP 4xx responses
Best practices
Verify webhook signatures
Verify webhook signatures
Always verify the HMAC signature before processing webhook payloads. This prevents spoofed requests.
Respond quickly
Respond quickly
Return a 2xx response within 5 seconds. Process the event asynchronously if needed.
Handle duplicates idempotently
Handle duplicates idempotently
Deliveries may arrive more than once. Deduplicate on the
X-Idempotency-Key header or the payload’s eventId.Monitor delivery health
Monitor delivery health
Set up alerts for webhook failure rates. Investigate persistent failures promptly.
Next steps
Exception Routing
Configure how exceptions trigger webhook events.
External Sources
Set up data sources that can push via webhooks.

