Skip to main content

Overview

Webhooks notify your server when payment events occur. Set the webhookUrl when creating a payment, and Ebioro will POST to that URL whenever the payment status changes.

Webhook Payload

Event Types

A payment may emit several transaction_updated events as it progresses (for example underpaid then paid), and the number can vary by settlement type. Don’t assume a fixed count — drive your logic off the latest status and settlement_status in each event, and treat settlement_status: "paid" as the signal that funds have settled to your account. Deduplicate by payment id.

Verifying Webhooks

Every webhook includes an X-WEBHOOK-AUTH header containing an HMAC-SHA256 signature. Always verify this signature before processing the webhook. The signature is computed over the raw request body exactly as sent. Verify against those raw bytes — do not parse the JSON and re-serialize it, because a re-serialized object can differ in key order or whitespace and the signature will no longer match.

Requirements

  • Webhook URL must use HTTPS in production
  • Your endpoint must respond with a 200 status code
  • Respond within 10 seconds or the request will time out

Retry Policy

If your endpoint returns a non-200 status code or times out, the webhook is not retried automatically. Use the delivery log to find failed deliveries and resend them.

Delivery Logs and Resend

Every webhook delivery is recorded — successful or not. Use the Webhook Logs API to audit and recover:
Each log entry records the event type, target URL, delivery status (success | failed | skipped), HTTP status, response time, and attempt count. A resend replays the originally stored payload, re-signed with your current secret key:
  • The payload is byte-identical to the original delivery — your endpoint receives the same event again. Deduplicate by event content (payment id + status), not by signature.
  • Resends are rate-limited to 10 per minute.
Always verify the X-WEBHOOK-AUTH signature. Without verification, an attacker could send fake webhook events to your endpoint.