Skip to content

Webhook API

Webhooks allow you to receive real-time notifications about events in your payment gateway.

概述

Webhooks are HTTP POST requests sent to your specified endpoint when certain events occur. This enables you to:

  • Process payments in real-time
  • Update order statuses automatically
  • Monitor transaction confirmations
  • Handle withdrawal completions

Webhook 事件

Transaction 事件

'transaction.confirmed'

Triggered when a transaction receives sufficient confirmations.

'''json { "event": "transaction.confirmed", "data": { "id": "tx_1234567890", "address_id": "addr_abcdef123456", "hash": "0x1234567890abcdef...", "amount": "100.50", "coin": "usdt", "network": "ethereum", "confirmations": 12, "status": "confirmed", "created_at": "2025-01-01T12:00:00Z", "confirmed_at": "2025-01-01T12:15:00Z" } } '''

'transaction.failed'

Triggered when a transaction fails or is rejected.

'''json { "event": "transaction.failed", "data": { "id": "tx_1234567890", "address_id": "addr_abcdef123456", "hash": "0x1234567890abcdef...", "amount": "100.50", "coin": "usdt", "network": "ethereum", "status": "failed", "error": "Insufficient gas", "created_at": "2025-01-01T12:00:00Z", "failed_at": "2025-01-01T12:05:00Z" } } '''

Address 事件

'address.balance_updated'

Triggered when an address balance changes.

'''json { "event": "address.balance_updated", "data": { "id": "addr_abcdef123456", "address": "0x742d35Cc6634C0532925a3b8D4C9db96590c6C87", "network": "ethereum", "coin": "usdt", "balance": { "total": "250.75", "confirmed": "200.25", "unconfirmed": "50.50" }, "previous_balance": { "total": "150.25", "confirmed": "150.25", "unconfirmed": "0.00" }, "updated_at": "2025-01-01T12:00:00Z" } } '''

Withdrawal 事件

'withdrawal.completed'

Triggered when a withdrawal is successfully processed.

'''json { "event": "withdrawal.completed", "data": { "id": "wd_1234567890", "amount": "100.00", "coin": "usdt", "network": "ethereum", "to_address": "0x742d35Cc6634C0532925a3b8D4C9db96590c6C87", "hash": "0x1234567890abcdef...", "fee": "2.50", "status": "completed", "created_at": "2025-01-01T12:00:00Z", "completed_at": "2025-01-01T12:10:00Z" } } '''

Webhook Security

Signature Verification

All webhooks include a signature in the 'X-Gateway-Signature' header. Verify this signature to ensure the webhook is from our service.

'''javascript const crypto = require('crypto');

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

return signature === 'sha256=' + expectedSignature + ''; }

// 用法 app.post('/webhook', (req, res) => { const signature = req.headers['x-gateway-signature']; const payload = JSON.stringify(req.body);

if (!verifyWebhookSignature(payload, signature, process.env.WEBHOOK_SECRET)) { return res.status(401).send('Invalid signature'); }

// Process webhook const { event, data } = req.body; // ... handle event

res.status(200).send('OK'); }); '''

Managing Webhooks

Create Webhook

'''http POST /api/v1/webhooks '''

'''json { "url": "https://your-domain.com/webhook", "events": [ "transaction.confirmed", "transaction.failed", "address.balance_updated", "withdrawal.completed" ], "description": "Main webhook endpoint", "active": true } '''

List Webhooks

'''http GET /api/v1/webhooks '''

Update Webhook

'''http PUT /api/v1/webhooks/{webhook_id} '''

Delete Webhook

'''http DELETE /api/v1/webhooks/{webhook_id} '''

Best Practices

Idempotency

Handle duplicate webhooks gracefully by implementing idempotency checks:

'''javascript const processed事件 = new Set();

app.post('/webhook', (req, res) => { const { event, data } = req.body; const eventId = data.id;

if (processed事件.has(eventId)) { return res.status(200).send('Already processed'); }

// Process event processEvent(event, data); processed事件.add(eventId);

res.status(200).send('OK'); }); '''

错误处理

Return appropriate HTTP status codes:

  • '200' - Success
  • '400' - 错误请求
  • '401' - 未授权
  • '500' - Server error

Retry Logic

We implement exponential backoff for failed webhooks:

  • Initial retry: 1 second
  • Second retry: 2 seconds
  • Third retry: 4 seconds
  • Maximum retries: 5 attempts

Timeout

Webhook endpoints should respond within 30 seconds.

测试 Webhooks

Local Development

Use tools like ngrok to expose your local server:

'''bash

Install ngrok

npm install -g ngrok

Expose local port

ngrok http 3000

使用 provided URL for webhook configuration

'''

Webhook 测试ing Tool

We provide a webhook testing tool in your dashboard to send test events to your endpoints.

Troubleshooting

Common Issues

  1. Webhook not received

    • Check firewall settings
    • Verify URL accessibility
    • Check webhook configuration
  2. Signature verification fails

    • Ensure you're using the correct webhook secret
    • Verify payload is not modified
    • Check header name case sensitivity
  3. Duplicate events

    • Implement idempotency checks
    • Use event IDs for deduplication

Webhook Logs

View webhook delivery logs in your dashboard to debug issues.

Rate Limits

  • Maximum 1000 webhooks per minute per endpoint
  • Maximum 10 concurrent webhook deliveries per endpoint

Released under the MIT License.