API reference
Webhook events
Every event we send to a webhook URL. How delivery, signing and retries work is in the Webhooks guide.
payment_change
your webhook URLAn incoming payment was observed.
Sent to the transaction's webhook URL when a payment is seen but the transaction is
not complete yet. It can repeat as more arrives or confirms.
X-Signature: t=<unix>,v1=<hex>, where the hex is HMAC-SHA256 of
"<t>.<raw body>" keyed with the transaction's private_key. Reject timestamps
more than 300 seconds from your clock.
Any 2xx means delivered. Most 4xx answers stop the retries; answer 429 or 503 to be
asked again later, and Retry-After is honoured up to one hour. Delivery is
at-least-once, so make the handler idempotent.
Headers
X-EventstringThe event name, the same as
eventin the body.payment_changeX-SignaturestringRequiredt=<unix seconds>,v1=<hex>: an HMAC-SHA256 of the timestamp and the raw body, keyed with the transaction's or withdrawal'sprivate_key.
Body
eventstringpayment_changecompletedwithdrawal.completedtimestampunix timeprivate_keystringThe key returned when the transaction or withdrawal was created. Delivered for backwards compatibility; it proves the sender knew a shared secret but cannot prove freshness. Prefer
X-Signature.transaction_idstringOn
payment_changeandcompleted.paymentobject or null-
10 child attributes
addressstringReceiving address, or PayPal email.
currencystringWhat the buyer actually pays in.
topaydecimal stringQuoted at the currency's
practicalprecision, rounded up so the seller is never short-changed.paiddecimal stringObserved so far. Updated by the settlement job.
ratedecimal stringtransaction-currency → payment-currency, locked in at mint time.
confirmationsinteger or nullCrypto only.
-1means nothing observed yet.confirmations_neededinteger or nullCrypto only.
overpaiddecimal stringPresent only when the buyer paid more than
topay.gsbooleanPayPal only — Goods & Services accepted.
ffbooleanPayPal only — Friends & Family accepted.
{
"event": "payment_change",
"timestamp": 1753919700,
"private_key": "a3f9d0e1c2b4a6f8e0d2c4b6a8f0e2d4",
"transaction_id": "9c1f0b7a4e2d8f6a3b5c7d9e1f0a2b4c",
"payment": {
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
"currency": "btc",
"topay": "0.00021",
"paid": "0.00021",
"rate": "0.0000105",
"confirmations": 1,
"confirmations_needed": 6
}
}
completed
your webhook URLThe transaction reached its completion threshold.
Sent once the amount paid, after confirmations, reaches the transaction's price less your completion threshold. Signed like every event.
Headers
X-EventstringThe event name, the same as
eventin the body.completedX-SignaturestringRequiredt=<unix seconds>,v1=<hex>: an HMAC-SHA256 of the timestamp and the raw body, keyed with the transaction's or withdrawal'sprivate_key.
Body
eventstringpayment_changecompletedwithdrawal.completedtimestampunix timeprivate_keystringThe key returned when the transaction or withdrawal was created. Delivered for backwards compatibility; it proves the sender knew a shared secret but cannot prove freshness. Prefer
X-Signature.transaction_idstringOn
payment_changeandcompleted.paymentobject or null-
10 child attributes
addressstringReceiving address, or PayPal email.
currencystringWhat the buyer actually pays in.
topaydecimal stringQuoted at the currency's
practicalprecision, rounded up so the seller is never short-changed.paiddecimal stringObserved so far. Updated by the settlement job.
ratedecimal stringtransaction-currency → payment-currency, locked in at mint time.
confirmationsinteger or nullCrypto only.
-1means nothing observed yet.confirmations_neededinteger or nullCrypto only.
overpaiddecimal stringPresent only when the buyer paid more than
topay.gsbooleanPayPal only — Goods & Services accepted.
ffbooleanPayPal only — Friends & Family accepted.
{
"event": "completed",
"timestamp": 1753920000,
"private_key": "a3f9d0e1c2b4a6f8e0d2c4b6a8f0e2d4",
"transaction_id": "9c1f0b7a4e2d8f6a3b5c7d9e1f0a2b4c",
"payment": {
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
"currency": "btc",
"topay": "0.00021",
"paid": "0.00021",
"rate": "0.0000105",
"confirmations": 6,
"confirmations_needed": 6
}
}
withdrawal.completed
your webhook URLA payout was broadcast.
Signed with the withdrawal's private_key, not the transaction's.
Headers
X-EventstringThe event name, the same as
eventin the body.withdrawal.completedX-SignaturestringRequiredt=<unix seconds>,v1=<hex>: an HMAC-SHA256 of the timestamp and the raw body, keyed with the transaction's or withdrawal'sprivate_key.
Body
eventstringpayment_changecompletedwithdrawal.completedtimestampunix timeprivate_keystringThe key returned when the transaction or withdrawal was created. Delivered for backwards compatibility; it proves the sender knew a shared secret but cannot prove freshness. Prefer
X-Signature.withdrawal_idstringOn
withdrawal.completed.crypto_transaction_idstring or nullOn
withdrawal.completed.
{
"event": "withdrawal.completed",
"timestamp": 1753923600,
"private_key": "e5d4c3b2a1908f7e6d5c4b3a29180f7e",
"withdrawal_id": "7b9d0f2a4c6e8b0d2f4a6c8e0b2d4f6a",
"crypto_transaction_id": "4f3e2d1c0b9a8776655443322110ffee"
}