webhooks.md
Solana Webhooks: Real-Time Blockchain Event Notifications
Monitor Solana blockchain events with real-time webhooks. Get instant notifications for NFT sales, token transfers, and transactions sent to your endpoints.
What are Solana webhooks?
Solana webhooks are real-time HTTP notifications sent to your application when on-chain events occur. Instead of continuously polling the blockchain, Helius pushes parsed transaction data directly to your endpoint whenever a wallet transfers funds, an NFT sells, or any monitored transaction type fires. Use webhooks to power trading bots, analytics dashboards, compliance pipelines, and event-driven automation.
We offer a user-friendly interface, programmatic API, and SDK access for easily creating and managing webhooks. For frequently asked questions, see the Webhooks FAQ.
Helius may retry webhook deliveries if your server does not respond successfully, and you might receive duplicate events. For details on retries and handling duplicates, see the Webhooks FAQ.
Pricing
Webhook events are charged at 1 credit when Helius processes and sends the event to your endpoint. You are charged regardless of whether your endpoint successfully processes the webhook or not. Editing, adding, or deleting a webhook via the API will cost 100 credits/request.
Types of Webhooks
We currently offer several types of webhooks tailored to different needs:
Enhanced Transaction Webhooks
Provide human-readable, parsed data for specific transaction types (e.g., NFT sales) related to the addresses you monitor. This is ideal if you want filtered, actionable insights.
Raw Transaction Webhooks
This option delivers raw transaction data for all transactions involving the addresses you monitor. It does not allow filtering by transaction type.
Raw Transaction Webhooks offer lower latency since they do not involve parsing event types.
Discord Webhooks
Stream updates for specific transaction types directly to a designated Discord channel as formatted messages. To use this option, you must submit your Discord Webhook URL.
Event Payload Example
theme={"system"}
[
{
"accountData": [
{
"account": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"nativeBalanceChange": -72938049280,
"tokenBalanceChanges": []
},
{
"account": "NTYeYJ1wr4bpM5xo6zx5En44SvJFAd35zTxxNoERYqd",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "D8TxfGwdu9MiNMoJmUoC9wQfNfNT7Lnm6DzifQHRTy6B",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE",
"nativeBalanceChange": 71860273440,
"tokenBalanceChanges": []
},
{
"account": "25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"nativeBalanceChange": -2039280,
"tokenBalanceChanges": [
{
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"rawTokenAmount": {
"decimals": 0,
"tokenAmount": "-1"
},
"tokenAccount": "25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"userAccount": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix"
}
]
},
{
"account": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"nativeBalanceChange": 2039280,
"tokenBalanceChanges": [
{
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"rawTokenAmount": {
"decimals": 0,
"tokenAmount": "1"
},
"tokenAccount": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"userAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX"
}
]
},
{
"account": "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
"nativeBalanceChange": 1080000000,
"tokenBalanceChanges": []
},
{
"account": "CgXS5xC3qAGSg9txD9bS7BUgugZwshivGXpCJcGmdwrd",
"nativeBalanceChange": -2234160,
"tokenBalanceChanges": []
},
{
"account": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "11111111111111111111111111111111",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "AYZsWahcrSnkwqbA1ji7wEzgAnGjLNJhVUMDPfACECZf",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "SysvarRent111111111111111111111111111111111",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
},
{
"account": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
"nativeBalanceChange": 0,
"tokenBalanceChanges": []
}
],
"description": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE sold Fox #7637 to CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX for 72 SOL on MAGIC_EDEN.",
"events": {
"nft": {
"amount": 72000000000,
"buyer": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"description": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE sold Fox #7637 to CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX for 72 SOL on MAGIC_EDEN.",
"fee": 10000,
"feePayer": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"nfts": [
{
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"tokenStandard": "NonFungible"
}
],
"saleType": "INSTANT_SALE",
"seller": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE",
"signature": "5nNtjezQMYBHvgSQmoRmJPiXGsPAWmJPoGSa64xanqrauogiVzFyGQhKeFataHGXq51jR2hjbzNTkPUpP787HAmL",
"slot": 171942732,
"source": "MAGIC_EDEN",
"staker": "",
"timestamp": 1673445241,
"type": "NFT_SALE"
}
},
"fee": 10000,
"feePayer": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"nativeTransfers": [
{
"amount": 72936000000,
"fromUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"toUserAccount": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU"
},
{
"amount": 2011440,
"fromUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"toUserAccount": "D8TxfGwdu9MiNMoJmUoC9wQfNfNT7Lnm6DzifQHRTy6B"
},
{
"amount": 71856000000,
"fromUserAccount": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"toUserAccount": "5DxD5ViWjvRZEkxQEaJHZw2sBsso6xoXx3wGFNKgXUzE"
},
{
"amount": 1080000000,
"fromUserAccount": "AAaTGaA3uVqikfVEwoSG7EwkCb4bBDsMEyueiVUS5CaU",
"toUserAccount": "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt"
},
{
"amount": 2039280,
"fromUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"toUserAccount": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z"
}
],
"signature": "5nNtjezQMYBHvgSQmoRmJPiXGsPAWmJPoGSa64xanqrauogiVzFyGQhKeFataHGXq51jR2hjbzNTkPUpP787HAmL",
"slot": 171942732,
"source": "MAGIC_EDEN",
"timestamp": 1673445241,
"tokenTransfers": [
{
"fromTokenAccount": "25DTUAd1roBFoUQaxJQByL6Qy2cKQCBp4bK9sgfy9UiM",
"fromUserAccount": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
"mint": "FdsNQE5EeCe57tbEYCRV1JwW5dzNCof7MUTaGWhmzYqu",
"toTokenAccount": "DTYuh7gAGGZg2okM7hdFfU1yMY9LUemCiPyD5Z5GCs6Z",
"toUserAccount": "CKs1E69a2e9TmH4mKKLrXFF8kD3ZnwKjoEuXa6sz9WqX",
"tokenAmount": 1,
"tokenStandard": "NonFungible"
}
],
"type": "NFT_SALE"
}
]
Get Started
Create your first webhook via the Dashboard, REST API, or official TypeScript / Rust SDK.
Automatic Disabling of Failing Webhooks
Helius monitors webhook endpoint health and automatically disables webhooks that consistently fail to receive deliveries. This prevents wasted delivery attempts against unreachable or broken endpoints.
How It Works
- Paid plans (Dev and above): Webhooks with a ≥ 95% failure rate over 7 days are automatically disabled.
- Free plan: Webhooks are evaluated over a 24-hour window with the same failure threshold.
The system checks webhook health every 4 hours. When a webhook is disabled, deliveries stop within seconds.
Email Notifications
Users on the Dev plan and above receive an email notification when a webhook is automatically disabled.
Re-enabling a Disabled Webhook
- Fix your endpoint: Resolve the issue causing delivery failures (e.g., server downtime, incorrect URL, endpoint errors).
- Log in to the Helius Dashboard: Go to the Helius Dashboard.
- Re-enable the webhook: Find the disabled webhook and toggle it back on.
You can also re-enable webhooks programmatically via the Toggle Webhook API endpoint.
After re-enabling, the webhook enters a 24-hour grace period during which it will not be automatically disabled again. This gives you time to verify that your endpoint is healthy.
Example Uses
Bots
- When an NFT is listed on marketplace X, trigger an "NFT buy" action.
- When a margin position is unhealthy, trigger a "liquidation" action.
Monitoring & Alerts
- When a program emits a certain log, it triggers PagerDuty integration.
- When a token account balance changes by more than X%, use Dialect to communicate a warning action.
Event-driven Indexing
- When any transaction occurs for a given program, send it directly to your database or backend.
Notifications & Activity Tracking
- When transferring from wallet X to wallet Y — send a Slack notification or email.
Analytics & Logs
- When event X happens, send it to an ETL pipeline or persist it directly on Helius to view trends over time.
Workflow Automation
- When event X happens, trigger any set of actions.