Skip to main content
Webhooks enable real-time communication between Matcher and external systems. This guide covers outbound event notifications and inbound resolution callbacks.

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
When an exception is routed to a webhook target, Matcher delivers a signed HTTP request to your endpoint. External systems like JIRA or ServiceNow can then send callbacks to update exception status or close items automatically. This two-way flow keeps your tools in sync without manual intervention. Beyond exception dispatch, Matcher publishes its full lifecycle event catalog on the platform’s streaming backbone — those events are consumed as a stream, not delivered as HTTP webhooks.
Matcher Webhooks Callbacks

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 the X-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
The 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

API Reference: Process callback
When Matcher processes a callback, it updates the exception status and records the resolution in the audit trail. Use the 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 as failed 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; provide externalSystem as an operator-legible label for the system this token authenticates.
cURL
The 201 response (CredentialSecretResponse) returns:
The raw token is shown only in the mint and rotate responses. Store it securely on receipt — it cannot be retrieved again. If it is lost or leaked, rotate or revoke the credential.

Rotate a credential

cURL
Rotation returns a new 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
Revocation is terminal: the credential can no longer authenticate inbound callbacks.

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 the X-Signature-256 header, formatted as sha256=<hex-digest>:
Each delivery also carries an X-Idempotency-Key header so receivers can deduplicate retries. Verification process:
  1. Compute HMAC-SHA256 of the raw request body using the webhook shared secret
  2. Prefix the hex digest with sha256=
  3. Compare (constant-time) with the X-Signature-256 header
Example (Node.js):
Example (Python):

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)
No retry for:
  • Other HTTP 4xx responses

Best practices


Always verify the HMAC signature before processing webhook payloads. This prevents spoofed requests.
Return a 2xx response within 5 seconds. Process the event asynchronously if needed.
Deliveries may arrive more than once. Deduplicate on the X-Idempotency-Key header or the payload’s eventId.
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.