Receive real-time notifications for batch processing completion and asynchronous operations via webhooks.
Webhooks provide a way for our API to notify your application when certain events occur, such as completion of batch processing jobs. Instead of polling the API repeatedly to check job status, you can register a webhook URL and receive a POST request when the operation completes. This enables efficient asynchronous workflows for large-scale data processing.
Configure your webhook endpoint in your dashboard or include it in API requests that support webhook callbacks:
// Include webhook URL in batch request
POST /v1/batch/categorize
{
"domains": ["example1.com", "example2.com", "..."],
"webhook_url": "https://your-app.com/webhooks/categorization",
"webhook_secret": "your_webhook_secret"
}
We send webhooks for the following event types:
Triggered when a batch categorization job finishes processing all domains. Includes results summary and download link for full results.
Triggered if a batch job fails due to errors. Includes error details and partial results if available.
Triggered when your API usage reaches 80% of your monthly quota. Helps you anticipate and manage usage limits.
Triggered when your monthly quota is exhausted. Prompts you to upgrade your plan to continue service.
Webhook payloads follow a consistent structure with event metadata and event-specific data:
{
"event": "batch.completed",
"timestamp": "2024-01-15T10:30:00Z",
"webhook_id": "wh_abc123xyz",
"data": {
"batch_id": "batch_def456",
"total_domains": 1000,
"successful": 985,
"failed": 15,
"processing_time_seconds": 45,
"results_url": "https://api.websitecategorizationapi.com/v1/batch/batch_def456/results"
}
}
All webhooks include a signature header for verification. Always verify signatures to ensure webhooks originated from our servers:
// Webhook headers
X-Webhook-Signature: sha256=abcd1234...
X-Webhook-Timestamp: 1705315800
// Verification in Node.js
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const timestamp = req.headers['x-webhook-timestamp'];
const signedPayload = `${timestamp}.${JSON.stringify(payload)}`;
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(signedPayload)
.digest('hex');
return `sha256=${expectedSignature}` === signature;
}
Always verify webhook signatures before processing. Reject webhooks with invalid signatures to prevent spoofed requests. Store your webhook secret securely using the same practices as your API key.
Your webhook endpoint should respond quickly with a 2xx status code to acknowledge receipt. We retry failed deliveries with exponential backoff:
// Example webhook handler (Express.js)
app.post('/webhooks/categorization', (req, res) => {
// Verify signature first
if (!verifyWebhook(req.body, req.headers['x-webhook-signature'], WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Acknowledge receipt immediately
res.status(200).send('OK');
// Process webhook asynchronously
processWebhookAsync(req.body);
});
Start building efficient asynchronous workflows with webhook notifications.
View Full Documentation