Set up a webhook
Add your endpoint in the dashboard
Go to Settings → Webhooks in your Kulmi Pay dashboard and click Add Webhook. Enter the full URL of the endpoint on your server that will receive events. The URL must use HTTPS — plain HTTP endpoints are rejected.
Set a challenge secret
Enter a secret string in the Challenge field. Kulmi Pay includes this value in every webhook request as an
X-Challenge header so you can verify that the request genuinely came from Kulmi Pay. Store this secret securely and never expose it in client-side code.Subscribe to events
Select which event types you want to receive. Each flag maps to a specific activity on your account:
You can subscribe to one or more events on a single webhook endpoint, or use separate endpoints for different event types.
| Event flag | Description |
|---|---|
collection_event | Payment invoice state changes (e.g. pending → complete) |
send_money_event | Disbursement file state changes |
reversal_event | Chargebacks and reversals |
wallet_transfer_event | Intra-wallet transfers |
subscription_event | Subscription status and billing cycle changes |
Handle incoming payloads
Your endpoint must accept The
POST requests with a JSON body. Respond with an HTTP 200 status code as quickly as possible — do any heavy processing asynchronously. Kulmi Pay considers any non-200 response a delivery failure.Every webhook payload follows this structure:topic field identifies the event type. The data object contains the full resource that changed — an invoice, a payment file, a chargeback, or a subscription depending on the topic.Verify the challenge secret
Before processing any webhook payload, confirm that the request came from Kulmi Pay by comparing theX-Challenge header against your stored secret.
Retry behavior and failure handling
When your endpoint returns a non-200 response or is unreachable, Kulmi Pay marks the event asFAILED and increments the failure counter for that webhook. As the failure count rises, Kulmi Pay sends email warnings to your account’s support address.
Failed events are not lost. You can replay any event from the Webhooks → Events log in your dashboard, or via the API. See Webhook event types for details on replaying events.