Webhook events

ZyvoPay pushes signed events to your server as payments progress.

ZyvoPay sends a POST with a JSON body to the invoice's webhook_url (or your default URL) on every status change.

Headers

X-Zyvo-EventEvent name, e.g. invoice.paid
X-Zyvo-Signaturehex(HMAC-SHA256(raw_body, webhook_secret))
X-Zyvo-DeliveryUnique delivery ID — use it to de-duplicate

Events

  • invoice.confirming, invoice.paid, invoice.overpaid, invoice.partially_paid, invoice.expired
  • withdrawal.completed, withdrawal.rejected (sent to your default webhook URL)
  • test.ping from the dashboard's "Send test webhook" button

Payload

{
  "event": "invoice.paid",
  "created_at": "2026-10-16T21:04:11+00:00",
  "data": {
    "uuid": "9b1f2c3e-…", "status": "paid", "order_id": "INV-1001",
    "amount": "10", "pay_amount": "10.43", "received_amount": "10.43",
    "network": "TRC20", "tx_hash": "a3f1…", "confirmations": 19, "required_confirmations": 19,
    "metadata": { "customer_id": 42 }, "paid_at": "2026-10-16T21:04:11Z"
  }
}

Retries

Any non-2xx response or timeout (10 s) is retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours and 24 hours. Every attempt is logged in your dashboard with the response code and body, and can be resent manually.