scheduled_payment.failed. Everything else rides signals you already consume.
For delivery mechanics — Ed25519 signature verification, targets, retries — see the main Webhook Integration guide. This page covers the agentic-specific payloads and how to react to them.
Why only failures get a new event
A scheduled payment is the only asynchronous agentic actor: the platform fires it later, unattended. Every other agentic operation is synchronous — the caller holds the response.- A scheduled payment that succeeds emits the standard
wallet.transaction.createdthrough the shared money path, indistinguishable from any other send. Correlate it viawallet_transaction_idon the executed scheduled payment (GET /scheduled-payments). - A scheduled payment that fails emits
scheduled_payment.failedwith a machine-readablefailure_code.
scheduled_payment.failed
Fires on every fire-path failure: mandate denial, no covering mandate, agent revoked, wallet no longer recognizing the signer, chain-family mismatch, unsupported network, invalid amount, and money-path send errors. It does not fire for successful payments or for rows already in a terminal state.
Payload (data.object)
Optional fields are omitted when not applicable — treat absence as “not applicable”, never as an empty string.
failure_code reference
failure_code is the contract; failure_reason is diagnostic color for humans.
Delivery & idempotency
The event is emitted in the same transaction as the payment’s flip tofailed — exactly one event exists per status change. Delivery, as with all Dakota webhooks, is at-least-once: dedupe on the event id.
Global webhook targets receive the event automatically; scoped targets subscribe to it by event type like any other. It also appears in the GET /events stream, so a poll-based consumer needs no webhook endpoint at all.
A practical failure handler
payment_failures_clustered groups repeats by payee and shared reason) — useful as the human-facing view over the same signal.
