Skip to content

Webhook System ​

Overview ​

Zafira's webhook system provides real-time notifications for all wallet activities, enabling seamless integration with external services and applications. This powerful feature allows you to stay informed about wallet events instantly.

What are Webhooks? ​

Webhooks are HTTP callbacks that send real-time notifications when specific events occur in your Zafira wallet. Instead of polling the API repeatedly, webhooks push data to your application immediately when events happen.

Benefits of Webhooks ​

  • Real-time Updates: Instant notifications when events occur
  • Efficient Integration: No need to poll APIs constantly
  • Reduced Latency: Immediate response to wallet activities
  • Better User Experience: Faster updates in your applications

Webhook Types ​

Charge Events ​

Monitor payment charge lifecycle:

  • charge.created - When a new payment charge is created
  • charge.paid - When a charge payment is confirmed
  • charge.expired - When a charge expires without payment
  • charge.failed - When a charge payment fails

Transaction Events ​

Track wallet transactions:

  • transaction.created - When a new transaction is initiated
  • transaction.confirmed - When a transaction is confirmed on blockchain
  • transaction.failed - When a transaction fails or is reverted

Balance Events ​

Monitor balance changes:

  • balance.updated - When wallet balance changes for any token

Token Events ​

Track token management:

  • token.added - When a new token is added to wallet
  • token.removed - When a token is removed from wallet

Wallet Events ​

Monitor wallet management:

  • wallet.created - When a new wallet is created
  • wallet.updated - When wallet information is updated

Setting Up Webhooks ​

Creating a Webhook ​

  1. Access Webhook Management: Navigate to the Webhooks section in the sidebar menu
  2. Create New Webhook: Click "Create" to add a new webhook
  3. Configure Settings:
    • Webhook URL: Enter your endpoint URL
    • Webhook Type: Select the type of events to monitor
    • Events: Choose specific events to listen for
    • Status: Set to active or inactive
    • Secret: Optional signature for verification

Webhook Configuration Options ​

Basic Configuration ​

  • URL: The endpoint where notifications will be sent
  • Type: The category of events to monitor
  • Events: Specific events within the selected type
  • Status: Enable or disable the webhook

Advanced Configuration ​

  • Signature: Optional HMAC-SHA256 signature for verification
  • Custom Headers: Additional headers for authentication
  • Timeout Settings: Custom timeout for webhook delivery
  • Retry Configuration: Custom retry logic for failed deliveries

Webhook Payload Structure ​

Standard Payload Format ​

json
{
  "event": "event.name",
  "data": {
    "event_id": "unique-event-id",
    "wallet_id": 1,
    "timestamp": "2024-01-01T00:00:00Z",
    "event_data": {
      // Event-specific data
    }
  }
}

Charge Event Payloads ​

Charge Created ​

json
{
  "event": "charge.created",
  "data": {
    "charge_id": 1,
    "wallet_id": 1,
    "amount": "0.100000000000000000",
    "token": "ETH",
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "status": "pending",
    "expires": 300,
    "created_at": "2024-01-01T00:00:00Z"
  }
}

Charge Paid ​

json
{
  "event": "charge.paid",
  "data": {
    "charge_id": 1,
    "wallet_id": 1,
    "amount": "0.100000000000000000",
    "token": "ETH",
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "status": "confirmed",
    "payment_tx_hash": "0x1234567890abcdef...",
    "paid_at": "2024-01-01T00:05:00Z"
  }
}

Transaction Event Payloads ​

Transaction Confirmed ​

json
{
  "event": "transaction.confirmed",
  "data": {
    "transaction_id": 1,
    "wallet_id": 1,
    "amount": "0.050000000000000000",
    "token": "ETH",
    "tx_hash": "0x1234567890abcdef...",
    "block_number": 12345678,
    "status": "confirmed",
    "confirmed_at": "2024-01-01T00:03:00Z"
  }
}

Balance Event Payloads ​

Balance Updated ​

json
{
  "event": "balance.updated",
  "data": {
    "wallet_id": 1,
    "token": "ETH",
    "old_balance": "1.000000000000000000",
    "new_balance": "1.100000000000000000",
    "change": "0.100000000000000000",
    "updated_at": "2024-01-01T00:05:00Z"
  }
}

Webhook Security ​

Signature Verification ​

Zafira uses HMAC-SHA256 signatures to verify webhook authenticity. When you provide a secret key, each webhook request includes a signature header.

Signature Header ​

http
X-Webhook-Signature: sha256=hash_of_payload

Verification Process ​

  1. Extract the signature from the X-Webhook-Signature header
  2. Generate the expected signature using your secret key
  3. Compare the signatures to verify authenticity

Implementation Examples ​

Node.js Verification ​

javascript
const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  
  return `sha256=${expectedSignature}` === signature;
}

// Usage
app.post('/webhook', (req, res) => {
  const signature = req.headers['x-webhook-signature'];
  const payload = JSON.stringify(req.body);
  const secret = 'your-webhook-secret';
  
  if (!verifyWebhookSignature(payload, signature, secret)) {
    return res.status(401).json({ error: 'Invalid signature' });
  }
  
  // Process webhook
  res.status(200).json({ received: true });
});

PHP Verification ​

php
function verifyWebhookSignature($payload, $signature, $secret) {
    $expectedSignature = 'sha256=' . hash_hmac('sha256', $payload, $secret);
    return hash_equals($expectedSignature, $signature);
}

// Usage
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$payload = file_get_contents('php://input');
$secret = 'your-webhook-secret';

if (!verifyWebhookSignature($payload, $signature, $secret)) {
    http_response_code(401);
    exit('Invalid signature');
}

// Process webhook
http_response_code(200);
echo json_encode(['received' => true]);

Webhook Delivery ​

Delivery Process ​

  1. Event Trigger: An event occurs in the system
  2. Webhook Selection: System selects relevant webhooks
  3. Payload Generation: Creates the webhook payload
  4. HTTP Request: Sends POST request to webhook URL
  5. Response Handling: Processes the response from your endpoint

Delivery Guarantees ​

  • At Least Once: Webhooks are delivered at least once
  • Retry Logic: Failed deliveries are retried automatically
  • Timeout Handling: Requests timeout after 30 seconds
  • Error Handling: Failed webhooks are logged and tracked

Retry Logic ​

  • Retry Attempts: Up to 3 retry attempts for failed deliveries
  • Retry Intervals: 1 minute, 5 minutes, 15 minutes
  • Exponential Backoff: Increasing delays between retries
  • Final Failure: Webhooks that fail after all retries are marked as failed

Webhook Management ​

Monitoring Webhook Health ​

  • Delivery Status: Track delivery success and failure rates
  • Response Times: Monitor response times for your endpoints
  • Error Logs: View detailed error logs for failed deliveries
  • Performance Metrics: Analyze webhook performance over time

Webhook Lifecycle ​

  1. Created: Webhook is created and configured
  2. Active: Webhook is active and receiving events
  3. Paused: Webhook is temporarily disabled
  4. Deleted: Webhook is removed from the system

Bulk Operations ​

  • Bulk Creation: Create multiple webhooks at once
  • Bulk Updates: Update multiple webhooks simultaneously
  • Bulk Deletion: Remove multiple webhooks at once
  • Bulk Testing: Test multiple webhooks simultaneously

Best Practices ​

Webhook Implementation ​

  • Idempotency: Make your webhook handlers idempotent
  • Fast Response: Respond to webhooks within 5 seconds
  • Error Handling: Implement proper error handling
  • Logging: Log all webhook activities for debugging

Security Best Practices ​

  • HTTPS Only: Always use HTTPS for webhook endpoints
  • Signature Verification: Always verify webhook signatures
  • Input Validation: Validate all incoming webhook data
  • Rate Limiting: Implement rate limiting on your endpoints

Performance Optimization ​

  • Async Processing: Process webhook data asynchronously
  • Queue Management: Use queues for webhook processing
  • Resource Management: Manage resources efficiently
  • Monitoring: Monitor webhook endpoint performance

Common Use Cases ​

Payment Processing ​

  • Payment Notifications: Notify users when payments are received
  • Payment Confirmations: Confirm payment processing
  • Failed Payment Handling: Handle failed payment scenarios
  • Refund Processing: Process refund notifications

Trading Applications ​

  • Balance Updates: Update trading balances in real-time
  • Transaction Monitoring: Monitor trading transactions
  • Portfolio Updates: Update portfolio values
  • Risk Management: Implement risk management based on balance changes

Accounting Integration ​

  • Transaction Recording: Record transactions in accounting systems
  • Balance Reconciliation: Reconcile balances with accounting records
  • Tax Reporting: Generate tax reports from transaction data
  • Audit Trails: Maintain audit trails for compliance

User Notifications ​

  • Push Notifications: Send push notifications to mobile apps
  • Email Notifications: Send email notifications for important events
  • SMS Alerts: Send SMS alerts for critical events
  • In-app Notifications: Display notifications within applications

Troubleshooting ​

Common Issues ​

  • Webhook Not Receiving Events: Check webhook configuration and URL
  • Signature Verification Failures: Verify secret key and signature generation
  • Timeout Errors: Optimize webhook endpoint response time
  • Duplicate Events: Implement idempotency in webhook handlers

Debugging Tools ​

  • Webhook Logs: View detailed webhook delivery logs
  • Event History: Track event history and delivery attempts
  • Response Analysis: Analyze webhook response codes and content
  • Performance Metrics: Monitor webhook performance metrics

Support Resources ​

  • Documentation: Comprehensive webhook documentation
  • Code Examples: Ready-to-use code examples
  • Community Support: Community forums and support
  • Technical Support: Direct technical support for issues

Next Steps ​

Released under the MIT License.