Solana
When sending a gas-sponsored Solana transaction, the API returns immediately with the final transaction signature in thehash field.
Use webhooks to receive status updates as the transaction confirms on-chain.
EVM
When sending a gas-sponsored EVM transaction, the API returns immediately after broadcast withtransaction_id and user_operation_hash. The final transaction hash is not available until the transaction confirms on-chain and is delivered via webhook.
Client SDK behavior: When sending transactions from web or mobile SDK clients, the SDK waits
for on-chain confirmation before returning. The backend API returns immediately after broadcast.
How EVM transactions work
When sending a gas-sponsored EVM transaction, the API returns immediately after broadcast with the following response:transaction_id— Privy’s internal transaction identifier for trackinguser_operation_hash— Unique identifier for the broadcasted transactionhash— Empty string until the transaction is confirmed on-chain
transaction_hash.
Transaction lifecycle
1
Transaction broadcast
The API validates and broadcasts the transaction to the network, then immediately returns with a
user_operation_hash.2
Pending state
The transaction is pending on-chain. Applications should display a loading or pending state to
users.
3
Confirmation
Once confirmed on-chain, Privy sends a webhook with the final
transaction_hash and status.Tracking transaction status
Track transaction status using either webhooks for real-time notifications or the API for on-demand queries.Querying status
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 provide real-time notifications as transaction status changes. Configure a webhook endpoint 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 enable better performance and prevent timeout issues during network congestion. This design allows applications to handle high transaction volumes and provide better user experiences with real-time status updates via webhooks. Web and mobile SDK clients wait for on-chain confirmation before returning to provide 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. Applications should also implement their
own polling mechanism using the
transaction_id to fetch transaction status from Privy’s API as a
fallback.Can I get the transaction hash immediately?
Can I get the transaction hash immediately?
No. The
transaction_hash is only available after the transaction is included in a block on-chain. Applications must use webhooks or polling to retrieve the final hash.Learn more about transaction webhooks in the webhook events
reference.

