Solana
When your app sends a gas-sponsored Solana transaction, the API returns the final transaction signature in thehash field immediately.
Your app can subscribe to webhooks to receive status updates as the transaction confirms on-chain.
EVM
When your app sends a standard gas-sponsored EVM transaction, the API returnstransaction_id and user_operation_hash immediately after broadcast. Privy delivers the final transaction hash via webhook once the transaction confirms on-chain.
For sponsored Tempo transactions, the API returns the broadcast transaction hash in hash.
Client SDK behavior: Web and mobile SDK clients wait for on-chain confirmation before
returning. The backend API returns immediately after broadcast.
How standard EVM transactions work
When your app sends a standard gas-sponsored EVM transaction, the API returns the following response immediately after broadcast:transaction_id— Privy’s internal transaction identifier for trackinguser_operation_hash— Unique identifier for the broadcasted user operationhash— Empty string until the transaction confirms on-chain
transaction_hash once the transaction confirms.
Transaction lifecycle
Transaction broadcast
The API validates and broadcasts the transaction to the network, then immediately returns with a
user_operation_hash.Pending state
The transaction is pending on-chain. Applications should display a loading or pending state to
users.
Tracking transaction status
Your app can track transaction status via webhooks for real-time notifications or the API for on-demand queries.Querying status
Your app can query transaction status at any time using thetransaction_id. The response includes the current status and transaction hash once available.
- Node SDK
- REST API
- Rust SDK
Notified via webhooks
Webhooks deliver real-time notifications as transaction status changes. Configure a webhook endpoint in the Dashboard to receive automatic updates. Setting up webhooks:- Navigate to the Webhooks tab in the Privy Dashboard
- Add a webhook endpoint URL
- Subscribe to transaction events
- Implement webhook handlers in your application
| Event | Description |
|---|---|
transaction.broadcasted | Transaction was submitted to the network |
transaction.confirmed | Transaction was confirmed on-chain |
transaction.execution_reverted | Transaction was reverted by the network |
transaction.failed | Transaction failed to be included |
transaction.replaced | Transaction was replaced by another transaction |
transaction.broadcasted — Sent immediately after broadcast:
transaction.confirmed — Sent when confirmed on-chain:
transaction.execution_reverted — Sent when the transaction reverts:
Common questions
Why does the API return immediately instead of waiting for confirmation?
Why does the API return immediately instead of waiting for confirmation?
The backend API returns immediately after broadcast to prevent timeout issues during network congestion. This enables high transaction volumes and real-time status updates via webhooks. Web and mobile SDK clients wait for on-chain confirmation before returning for a simpler developer experience.
How long does confirmation typically take?
How long does confirmation typically take?
Confirmation times vary by network:
- Ethereum mainnet: 12-60 seconds
- Layer 2s (Base, Optimism, Arbitrum): 1-10 seconds
- Solana: 1-5 seconds
What if the webhook fails to deliver?
What if the webhook fails to deliver?
Privy retries webhook delivery with exponential backoff. Your app should also implement a polling
fallback using the
transaction_id to fetch status from Privy’s API.Can I get the transaction hash immediately?
Can I get the transaction hash immediately?
No. The
transaction_hash becomes available only after the transaction is included in a block on-chain. Your app must use webhooks or polling to retrieve the final hash.Learn more about transaction webhooks in the webhook events
reference.

