Webhook Events Reference
Complete reference of all FortiBlox webhook events, payloads, and filtering options
Webhook Events Reference
This page provides a complete reference of all webhook events available in FortiBlox Nexus, including payload structures, filtering options, and examples.
Event Categories
FortiBlox webhooks support three main event categories:
- Transaction Events - Transaction confirmations, failures, and updates
- Account Events - Account balance and data changes
- Block Events - New blocks and finalization (Professional+ only)
Transaction Events
transaction.confirmed
Fired when a transaction reaches confirmed commitment level.
Availability: Business tier and above
Payload Structure:
{
"event_id": "evt_1a2b3c4d5e6f",
"event": "transaction.confirmed",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "mainnet",
"data": {
"signature": "5wHu7KQKVqJz3ZLPkZ9tR6HvQXYYJZVcXWVLXXKqKQE...",
"slot": 150234567,
"block_time": 1705318245,
"fee": 5000,
"success": true,
"error": null,
"accounts": [
"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
],
"program_ids": [
"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"
],
"instructions": [
{
"program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
"instruction": "swap",
"accounts": [...],
"data": "..."
}
],
"token_transfers": [
{
"from": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"to": "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "1000000",
"decimals": 6
}
],
"log_messages": [
"Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 invoke [1]",
"Program log: Instruction: Swap",
"Program JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 success"
]
}
}Filter Options:
{
"events": ["transaction.confirmed"],
"filters": {
// Account filters
"account_include": ["JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"],
"account_exclude": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],
// Program filters
"program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
// Transaction status
"success": true,
"vote_transactions": false,
// Amount filters (in lamports)
"min_amount": 1000000,
"max_amount": 1000000000,
// Additional data
"include_token_transfers": true,
"include_logs": true
}
}Example Use Cases:
- Monitor DEX swaps on Jupiter or Orca
- Track NFT sales on Magic Eden
- Alert on large transactions
- Detect failed transaction attempts
transaction.finalized
Fired when a transaction reaches finalized commitment level.
Availability: Business tier and above
Payload Structure: Same as transaction.confirmed with event: "transaction.finalized"
Key Differences:
- Higher latency (~400ms vs ~200ms for confirmed)
- Permanent - will not be rolled back
- Recommended for financial applications
Filter Options: Same as transaction.confirmed
transaction.failed
Fired when a transaction fails.
Availability: Business tier and above
Payload Structure:
{
"event_id": "evt_9z8y7x6w5v4u",
"event": "transaction.failed",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "mainnet",
"data": {
"signature": "3kJH2pKLMnB4QvRzH8sY6NtV9XqZKLMnB4QvRzH8sY6...",
"slot": 150234567,
"error": {
"type": "InstructionError",
"index": 0,
"message": "custom program error: 0x1"
},
"accounts": [...],
"program_ids": [...],
"fee": 5000
}
}Filter Options:
{
"events": ["transaction.failed"],
"filters": {
"account_include": ["YourProgramAddress..."],
"error_types": ["InstructionError", "InsufficientFundsForRent"]
}
}Example Use Cases:
- Debug transaction failures
- Alert users of failed payments
- Monitor program errors
- Track insufficient balance attempts
Account Events
account.updated
Fired when an account's balance or data changes.
Availability: Business tier and above
Payload Structure:
{
"event_id": "evt_4u5v6w7x8y9z",
"event": "account.updated",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "mainnet",
"data": {
"account": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"slot": 150234567,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"executable": false,
"rent_epoch": 361,
"data": "base64-encoded-data...",
"data_size": 165,
"changes": {
"lamports": {
"old": 500000000,
"new": 1000000000,
"delta": 500000000
}
}
}
}Filter Options:
{
"events": ["account.updated"],
"filters": {
// Specific accounts to monitor
"accounts": [
"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
],
// Filter by owner program
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
// Balance change thresholds (in lamports)
"min_balance_change": 1000000,
// Include account data
"include_data": true,
"data_encoding": "base64" // or "base58", "jsonParsed"
}
}Example Use Cases:
- Monitor wallet balances
- Track token account changes
- Alert on large deposits/withdrawals
- Update user balance displays
account.created
Fired when a new account is created.
Availability: Professional tier and above
Payload Structure:
{
"event_id": "evt_3t4u5v6w7x8y",
"event": "account.created",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "mainnet",
"data": {
"account": "NewAccount1111111111111111111111111111111",
"slot": 150234567,
"lamports": 2039280,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"executable": false,
"rent_epoch": 361,
"data_size": 165,
"creator": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"creation_transaction": "5wHu7KQKVqJz3ZLPkZ9tR6HvQXYYJZVcXWVLXXKqKQE..."
}
}Filter Options:
{
"events": ["account.created"],
"filters": {
// Filter by owner program
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
// Filter by creator
"creator": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
// Minimum initial balance
"min_balance": 1000000
}
}Example Use Cases:
- Track new token account creations
- Monitor program deployments
- Detect new user accounts
- NFT mint tracking
account.closed
Fired when an account is closed.
Availability: Professional tier and above
Payload Structure:
{
"event_id": "evt_2s3t4u5v6w7x",
"event": "account.closed",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "mainnet",
"data": {
"account": "ClosedAccount11111111111111111111111111111",
"slot": 150234567,
"final_lamports": 0,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"reclaimed_by": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"closing_transaction": "3kJH2pKLMnB4QvRzH8sY6NtV9XqZKLMnB4QvRzH8sY6..."
}
}Filter Options:
{
"events": ["account.closed"],
"filters": {
// Filter by owner program
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
// Filter by rent recipient
"reclaimed_by": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
}
}Example Use Cases:
- Track token account closures
- Monitor rent reclamation
- Detect wallet cleanup activities
- Audit account lifecycle
Block Events
block.confirmed
Fired when a new block is confirmed.
Availability: Professional tier and above
Payload Structure:
{
"event_id": "evt_1r2s3t4u5v6w",
"event": "block.confirmed",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "mainnet",
"data": {
"slot": 150234567,
"parent_slot": 150234566,
"blockhash": "9gZe3d7pNq5XvQPRzWj8kL4mH6nC2vB1xY5sA8tD7fK",
"previous_blockhash": "8fY9dZ2c6pMn4WuQPyVi7jK3lG5mB1vC0xW4rA7sC6eJ",
"block_time": 1705318245,
"block_height": 145123456,
"transaction_count": 3421,
"successful_transactions": 3398,
"failed_transactions": 23,
"vote_transactions": 2156,
"rewards": [
{
"pubkey": "ValidatorAddress...",
"lamports": 10000,
"post_balance": 500000000000,
"reward_type": "Voting"
}
]
}
}Filter Options:
{
"events": ["block.confirmed"],
"filters": {
// Minimum transaction count
"min_transaction_count": 1000,
// Include transaction details
"include_transactions": false,
// Include rewards
"include_rewards": true
}
}Example Use Cases:
- Block explorer real-time updates
- Network monitoring dashboards
- Validator performance tracking
- Block production analytics
block.finalized
Fired when a block is finalized.
Availability: Professional tier and above
Payload Structure: Same as block.confirmed with event: "block.finalized"
Key Differences:
- Higher latency (~30-60 seconds)
- Permanent - will not be rolled back
- Recommended for critical applications
Combined Event Subscriptions
You can subscribe to multiple events in a single webhook:
{
"url": "https://api.yourdomain.com/webhook",
"events": [
"transaction.confirmed",
"transaction.finalized",
"account.updated"
],
"filters": {
"account_include": ["YourAddress..."],
"success": true
}
}Advanced Filtering
Token Transfer Filters
Monitor specific token transfers:
{
"events": ["transaction.confirmed"],
"filters": {
"token_transfers": {
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // USDC
"min_amount": 1000000, // 1 USDC
"from": "YourAddress...", // Optional
"to": "YourAddress..." // Optional
}
}
}NFT-Specific Filters
Track NFT mints and sales:
{
"events": ["transaction.confirmed"],
"filters": {
"nft": {
"marketplaces": ["M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K"], // Magic Eden
"collection": "YourCollectionAddress...",
"event_types": ["sale", "listing", "bid"]
}
}
}DeFi Protocol Filters
Monitor specific DeFi protocols:
{
"events": ["transaction.confirmed"],
"filters": {
"defi": {
"protocols": ["jupiter", "orca", "raydium"],
"event_types": ["swap", "add_liquidity", "remove_liquidity"],
"min_usd_value": 1000
}
}
}Webhook Payload Headers
Every webhook delivery includes these headers:
Content-Type: application/json
X-Fortiblox-Signature: sha256=abc123...
X-Fortiblox-Event: transaction.confirmed
X-Fortiblox-Event-ID: evt_1a2b3c4d5e6f
X-Fortiblox-Timestamp: 1705318245
X-Fortiblox-Delivery-ID: del_9z8y7x6w5v4u
X-Fortiblox-Attempt: 1Rate Limits by Event Type
| Event Type | Max Rate | Burst |
|---|---|---|
| transaction.confirmed | 1000/sec | 2000 |
| transaction.finalized | 500/sec | 1000 |
| account.updated | 500/sec | 1000 |
| account.created | 100/sec | 200 |
| account.closed | 100/sec | 200 |
| block.confirmed | 10/sec | 20 |
| block.finalized | 10/sec | 20 |
Event Ordering
Events are delivered in the order they occur on-chain, but delivery timing may vary:
- Confirmed events: ~200-500ms latency
- Finalized events: ~30-60 seconds latency
- Retries: May cause out-of-order delivery
Best Practice: Use slot and block_time for ordering, not delivery time.
Testing Events
Send Test Event
curl -X POST https://nexus.fortiblox.com/api/v1/webhooks/wh_abc123/test \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event": "transaction.confirmed",
"test_data": {
"signature": "TestSignature123...",
"slot": 999999,
"success": true
}
}'Mock Event Payloads
For local testing, use these mock payloads:
{
"event_id": "evt_test_123",
"event": "transaction.confirmed",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "devnet",
"data": {
"signature": "TestTxSignature...",
"slot": 100000,
"success": true,
"fee": 5000,
"accounts": ["TestAccount..."],
"program_ids": ["TestProgram..."]
}
}{
"event_id": "evt_test_456",
"event": "account.updated",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "devnet",
"data": {
"account": "TestAccount...",
"slot": 100000,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111"
}
}{
"event_id": "evt_test_789",
"event": "block.confirmed",
"timestamp": "2024-01-15T10:30:45.123Z",
"network": "devnet",
"data": {
"slot": 100000,
"blockhash": "TestBlockhash...",
"transaction_count": 100,
"block_time": 1705318245
}
}Next Steps
Security Best Practices
Learn how to secure your webhook endpoints
Code Examples
Production-ready webhook implementations
Getting Started
Set up your first webhook in 5 minutes
API Reference
Complete webhook management API
Support
Questions about webhook events?
- Discord: discord.gg/fortiblox
- Email: [email protected]
- Documentation: Browse our guides