Common Fields
Every webhook event includes these fields:| Field | Type | Description |
|---|---|---|
id | string | Unique event identifier (UUID). Remains the same across retry attempts, so consumers can idempotently handle duplicate events. Test events use the prefix evt_test_. |
type | string | The event type string (e.g., ping, direct_transfer.deposit.confirmed). |
timestamp | string | RFC 3339 UTC timestamp of the webhook delivery creation (e.g., 2026-04-10T18:32:24.000Z). |
version | string | API version. Currently v2. |
| Field | Type | Description |
|---|---|---|
chain_name | string | Human-readable chain name (e.g., Ethereum Sepolia). |
chain_id | string | EVM chain ID as a string (e.g., 11155111). |
organization_id | string | UUID of the receiving organization. |
direct_transfer_address | string | The Direct Transfer Address that received the stablecoins. |
user_destination_address | string | The end-user address receiving vault shares. |
distributor_code_depositor_address | string | The Distributor Code Depositor contract address. |
vault_address | string | The vault contract address. |
input_token_symbol | string | Token symbol (e.g., USDC). |
input_token_address | string | ERC-20 token contract address. |
input_token_decimals | number | Token decimal places (e.g., 6 for USDC). |
Event Types
ping
A lightweight connectivity test. Sent when you click Send Test in the Paxos Labs Console with no specific event type selected.
ping event contains only the common fields — no additional fields.
direct_transfer.deposit.pending
Paxos Labs has received the stablecoins and initiated the process to deposit them into the vault.
Event-Specific Fields
| Field | Type | Description |
|---|---|---|
received_amount | string | Amount received in the token’s smallest unit. String for bigint serialization. |
receipt_tx_hash | string | Transaction hash of the deposit into the Direct Transfer Address. |
receipt_log_index | string | Log index of the deposit transaction. |
receipt_tx_block_hash | string | Block hash of the deposit transaction. |
direct_transfer.deposit.confirmed
Stablecoins have been successfully deposited into the vault and shares have been minted to the destination address.
Event-Specific Fields
| Field | Type | Description |
|---|---|---|
received_amount | string | Amount received in the token’s smallest unit. |
minted_amount | string | Value of shares minted to the user, denominated in the input token’s smallest unit. |
forward_tx_hash | string | Transaction hash from forwarding funds from the DTA into the DCD. |
forward_log_index | string | Log index of the forward transaction. |
forward_tx_block_hash | string | Block hash of the forward transaction. |
direct_transfer.deposit.failed
Unable to deposit stablecoins. Funds remain at the Direct Transfer Address. The customer must be notified.
Event-Specific Fields
| Field | Type | Description |
|---|---|---|
received_amount | string | Amount received in the token’s smallest unit. |
forward_tx_hash | string | null | Transaction hash of the forward attempt. null if the transaction was never sent. |
forward_log_index | string | null | Log index of the forward attempt. null if the transaction was never sent. |
forward_tx_block_hash | string | null | Block hash of the forward attempt. null if the transaction was never sent. |
error | string | Human-readable error describing why the deposit failed (e.g., vault cap reached, predicate failure, out of gas). |
Common Patterns
Idempotent Processing
Events may be delivered more than once. Use theid field to deduplicate:
In production, store processed event IDs in a database rather than in-memory to survive restarts.
Type-Based Routing
Route events to different handlers based on thetype field:
Testing with the Paxos Labs Console
The Paxos Labs Console lets you send test events for any subscribed event type. Test events:- Have IDs prefixed with
evt_test_ - Contain representative sample data (not real transactions)
- Are labeled Test in delivery history