Skip to main content
Every smart deposit webhook includes the common fields, plus the routing and token context below. Each event also carries received_amount — the stablecoin amount detected at the Smart Deposit Address, in the input token’s smallest unit.

Shared Fields

Tracking a Deposit Across Events

Use deposit_id to tie a webhook to a deposit — it is minted when the deposit is first detected and repeated on every subsequent event for that deposit. Do not use the top-level id for this: id is unique per event (its job is deduplicating redeliveries), so the pending and confirmed events for one deposit have different id values but the same deposit_id. A deposit emits one sequence: pending, then confirmed or failed, then — after confirmed only — finalized. Every sequence begins with pending: a confirmed, failed, or finalized event is only ever emitted for a deposit_id whose pending event was already emitted. As with any webhook system, deliveries can still reach your endpoint out of order — order by event semantics, not arrival time.
If a deposit fails with remediation: "retained", the funds stay in the Smart Deposit Address and may be retried automatically. A retry is a new sequence with a new deposit_id, starting again from pending.

smart_deposit.deposit.pending

Paxos Labs has received the stablecoins and initiated the process to deposit them into the vault.

Event-Specific Fields

None — pending carries only the shared fields above. It is emitted as soon as the stablecoin balance is detected, before any forward transaction exists, so there are no transaction hashes to report yet.

smart_deposit.deposit.confirmed

Stablecoins have been successfully deposited into the vault and shares have been minted to the destination address.

Event-Specific Fields


smart_deposit.deposit.finalized

Deposit finalized.

Event-Specific Fields

Same as smart_deposit.deposit.confirmed. Sent after the forward transaction reaches chain-specific finality.

smart_deposit.deposit.failed

Unable to deposit for some reason. Customer notified with reason and remediation actions taken.

Event-Specific Fields

Remediation Values

Branch on remediation rather than parsing error, which is free-form prose intended for humans and may change at any time. remediation is only present on smart_deposit.deposit.failed. It is never sent on pending, confirmed, or finalized events, where there is nothing to remediate.
remediation: "refunded" and remediation: "recovered" always carry a non-null forward_tx_hash, because the remediation itself is an on-chain action. remediation: "retained" always carries forward_tx_hash: null.