Skip to content

Webhook events

nuez sends a POST request to your configured endpoint (see webhook management) whenever a tracked event happens.

Every webhook has the same outer structure — note it’s event/timestamp, not id/type/created_at:

{
"event": "payout.submitted",
"timestamp": "2026-07-18T14:32:02Z",
"data": { ... }
}

Fired the moment a payout attempt is created — for both the allow and require_approval paths.

{
"event": "payout.requested",
"timestamp": "2026-07-18T14:32:00Z",
"data": {
"payout_id": "b3f1...",
"amount_ars": 5000,
"destination": "0000003100010000123456",
"status": "approved",
"api_key_id": "6f2c...",
"api_key_name": "claude-supplier-agent"
}
}

api_key_id/api_key_name are only present when the payout was created via an API key (they’re absent for payouts created through the dashboard or WhatsApp/Telegram-initiated flows).

Payout was submitted to the bank rail.

{
"event": "payout.submitted",
"timestamp": "2026-07-18T14:32:01Z",
"data": { "payout_id": "b3f1...", "amount_ars": 5000, "destination": "0000003100010000123456", "status": "submitted" }
}

The bank rail confirmed the payout executed.

{
"event": "payout.confirmed",
"timestamp": "2026-07-18T14:32:05Z",
"data": { "payout_id": "b3f1...", "amount_ars": 5000, "destination": "0000003100010000123456", "status": "confirmed" }
}

Owner approved a pending payout via WhatsApp/Telegram.

{
"event": "payout.approved",
"timestamp": "2026-07-18T14:33:15Z",
"data": { "payout_id": "b3f1...", "amount_ars": 50000, "destination": "0000003100010000123456", "status": "approved" }
}

Owner rejected a pending payout.

{
"event": "payout.rejected",
"timestamp": "2026-07-18T14:33:15Z",
"data": { "payout_id": "b3f1...", "amount_ars": 50000, "destination": "0000003100010000123456", "status": "rejected" }
}

Approval window (APPROVAL_EXPIRY_MINUTES, default 5 minutes) timed out with no reply.

{
"event": "payout.expired",
"timestamp": "2026-07-18T14:38:00Z",
"data": { "payout_id": "b3f1...", "amount_ars": 50000, "destination": "0000003100010000123456", "status": "expired" }
}

An incoming transfer to the user’s CVU was detected.

{
"event": "deposit.detected",
"timestamp": "2026-07-18T09:00:00Z",
"data": { "amount_ars": 100000 }
}

crypto.offramp.completed / crypto.offramp.failed

Section titled “crypto.offramp.completed / crypto.offramp.failed”

A crypto→ARS off-ramp resolved. See Crypto off-ramp.

{
"event": "crypto.offramp.completed",
"timestamp": "2026-07-18T11:00:00Z",
"data": { "offramp_id": "o_91a...", "status": "completed" }
}

crypto.offramp.failed has the same shape with "status": "failed".

An incoming crypto deposit landed on one of the user’s deposit addresses.

{
"event": "crypto.deposit.completed",
"timestamp": "2026-07-18T11:05:00Z",
"data": {
"currency": "USDC",
"network": "ETHEREUM_SEPOLIA",
"amount": "100.00",
"address_destination": "0x...",
"txn_id": "...",
"hash": "0x..."
}
}