Overview
Matcher supports bidirectional webhook communication, keeping your operational tools in sync with every reconciliation event in real time.
- 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 they take an action
Two-way flow between Matcher and external systems.
Outbound events
Matcher emits events when significant actions occur in the reconciliation process. Matcher publishes the catalog below on the streaming backbone. Exception events also reach HTTP webhook endpoints through exception routing.
Available events
Matcher defines its event catalog centrally. The tables below group the most commonly consumed events by domain. Configuration
Discovery
Ingestion
Matching
Exceptions and disputes
Governance and reporting
Webhook delivery payload
Exception dispatches to a webhook target carry a consistent payload witheventId, eventType, timestamp, the exception snapshot under data, and routing/tracing information under metadata:
data.dueAt and the metadata fields traceId, queue, ruleName, and assignee when they have no value. Streaming catalog events (the tables above) follow their own per-event schemas on the event stream. Matcher does not deliver them 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
TheX-Callback-Token header authenticates the callback endpoint. An operator JWT does not authenticate it. The header carries an opaque token from the callback credentials surface. Every field below is mandatory. 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. Resend the same request and Matcher handles the recovery. The retry behavior applies only to callbacks with an internalfailed state. Matcher still deduplicates callbacks that completed successfully.
Callback credentials
An opaque bearer token authenticates inbound callbacks. The external system sends this token in the
X-Callback-Token header. You mint, list, rotate, and revoke these callback credentials through a dedicated CRUD surface under /v1/exceptions/callbacks/credentials. Each credential belongs to the caller’s tenant. Matcher stores only the token’s SHA-256 hash server-side. The mint and rotate responses return the raw token exactly once.
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 you configure a webhook shared secret, Matcher signs each delivery with an HMAC-SHA256 over the raw request body. Matcher sends the signature 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
Matcher retries failed webhook deliveries with exponential backoff.
Default retry policy
By default, Matcher retries a failed delivery up to 3 times. Delays follow exponential backoff from a 1-second base, with jitter to spread retries. 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.

