payment.updated
A durable purchase, refund or payout changed status
Deliveries may repeat or arrive out of order. Fetch GET /payments/{operationId} for authoritative state; an event is never permission to charge again. refund_pending includes refund_operation_id. For partner-collected refunds, pay once in your system then acknowledge that ID. Inventory release may emit reservation_released=true and refund_only=true while payment remains processing or review; this does not mean the payment failed or a refund has been sent.
application/json- body
Every webhook uses this envelope.
Headers: x-verity-event: <event name> and x-verity-signature: <hex>.
The signature is HMAC-SHA256 of the exact raw body bytes with your webhook secret, hex encoded. Verify before parsing:
import { createHmac, timingSafeEqual } from "node:crypto";function verify(rawBody, header, secret) { const expected = createHmac("sha256", secret).update(rawBody).digest("hex"); const a = Buffer.from(expected), b = Buffer.from(header ?? ""); return a.length === b.length && timingSafeEqual(a, b);}Respond 2xx to acknowledge. Non-2xx and timeouts are retried with backoff, so your handler must be idempotent. You only ever receive data about your own buyers.
event*string"payment.updated""raffle.live""raffle.closed""raffle.drawn""prize.won""raffle.cancelled""refund.sent"data*Acknowledged.
Every webhook uses this envelope.
Headers: x-verity-event: <event name> and x-verity-signature: <hex>.
The signature is HMAC-SHA256 of the exact raw body bytes with your webhook secret, hex encoded. Verify before parsing:
import { createHmac, timingSafeEqual } from "node:crypto";function verify(rawBody, header, secret) { const expected = createHmac("sha256", secret).update(rawBody).digest("hex"); const a = Buffer.from(expected), b = Buffer.from(header ?? ""); return a.length === b.length && timingSafeEqual(a, b);}Respond 2xx to acknowledge. Non-2xx and timeouts are retried with backoff, so your handler must be idempotent. You only ever receive data about your own buyers.
{ "event": "payment.updated", "data": {}}