Skip to main content
Many payment outcomes happen after your original API call returns — an asynchronous APM settles, a 3DS challenge completes, a dispute is opened, or a subscription renews on schedule. Webhooks are how Therius tells your server about these events. You register one HTTPS endpoint, subscribe to the event types you care about, and Therius POSTs a JSON payload to that endpoint each time a matching event occurs.
Webhooks are the source of truth for asynchronous outcomes. For voucher and bank-transfer methods especially, do not fulfill an order on the initial pending / pending_action response — wait for the payment.captured webhook.

Configure your endpoint

Webhook endpoints are configured in the Therius dashboard, under Developers → Webhooks:
1

Set the endpoint URL

Enter a public HTTPS URL on your server (for example https://your-server.com/webhooks/therius). Non-HTTPS URLs and URLs that resolve to private, loopback, or link-local addresses are rejected.
2

Choose the events

Select the event types to receive. Leaving the selection empty subscribes you to all events. See the event catalog for the full list.
3

Enable delivery

Toggle the endpoint on. You can disable it at any time without losing the configuration.
4

Send a test event

Use the Send test event control to fire a sample payload at your endpoint, then check it under Recent deliveries.
One webhook endpoint is supported per merchant account. Sandbox and production events are configured together but every payload carries an environment field so you can tell them apart.

Delivery mechanics

Your endpoint should acknowledge receipt with a 2xx status as fast as possible — do the actual processing on a background queue. Therius treats a slow or non-2xx response as a failed delivery and retries it.

Retries

A failed delivery is retried up to 7 times on an increasing back-off schedule: After the final attempt the delivery is marked dead. You can inspect every attempt — including the last HTTP status and error — under Developers → Webhooks → Recent deliveries, and trigger a fresh delivery with Replay.
Because deliveries are retried, your endpoint will occasionally receive the same event more than once. Handle events idempotently — key your processing on the data.payment_code (or subscription_id) plus the event type, and make repeat deliveries a no-op.

Signature verification

When a signing secret is configured for your endpoint, every request carries an X-Therius-Signature header:
The HMAC is computed over the exact raw bytes of the request body, using your signing secret as the key. Verify it before trusting a payload:
If no X-Therius-Signature header is present, a signing secret has not yet been provisioned for your account. Contact Therius to have one issued, and until then restrict the endpoint by other means (for example an unguessable path segment or an allow-list of Therius egress addresses).

Payload envelope

Every webhook body is a JSON object with a top-level event string, a timestamp, and a data object. Payment and subscription events have slightly different envelopes — see Webhook Events for the exact shape of each.