Webhooks API
Event notifications and webhook configuration endpoints.
Webhooks API
The Webhooks API allows you to configure and manage webhook endpoints that receive real-time notifications when specific events occur in the system.
Webhook Events
Smart Shelf can send webhook notifications for various events:
Product Events
product.created- New product addedproduct.updated- Product information changedproduct.deleted- Product deactivated
Inventory Events
inventory.low_stock- Product stock below reorder pointinventory.out_of_stock- Product stock reached zeroinventory.movement- Stock movement recordedinventory.adjustment- Inventory adjustment made
Order Events
order.created- New order placedorder.updated- Order status changedorder.shipped- Order shipped to customerorder.delivered- Order deliveredorder.cancelled- Order cancelled
User Events
user.created- New user account createduser.updated- User information changeduser.login- User logged in
Webhook Payload Format
All webhooks include a standard payload structure:
{
"id": "wh_123456",
"event": "product.created",
"created": 1640995200,
"data": {
"object": {
"id": "prod_123",
"name": "Smart Widget",
// ... full object data
},
"previous_attributes": {
// ... previous values for update events
}
},
"api_version": "2024-01-15"
}
Webhook Security
Webhooks include a signature header for verification:
X-Signature: sha256=calculated_signature
To verify the signature:
const crypto = require('crypto')
function verifyWebhook(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
return `sha256=${expectedSignature}` === signature
}
Endpoints
GET /api/webhooks
Retrieve configured webhooks.
Response:
{
"data": [
{
"id": "webhook_001",
"url": "https://your-app.com/webhooks/inventory",
"events": [
"inventory.low_stock",
"inventory.out_of_stock"
],
"is_active": true,
"secret": "whsec_...",
"description": "Inventory alerts webhook",
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
]
}
POST /api/webhooks
Create a new webhook.
Request Body:
{
"url": "https://your-app.com/webhooks/orders",
"events": [
"order.created",
"order.updated",
"order.shipped"
],
"description": "Order management webhook",
"is_active": true
}
Response:
{
"data": {
"id": "webhook_002",
"url": "https://your-app.com/webhooks/orders",
"events": [
"order.created",
"order.updated",
"order.shipped"
],
"is_active": true,
"secret": "whsec_1a2b3c4d5e6f7g8h9i0j",
"description": "Order management webhook",
"created_at": "2024-01-16T00:00:00Z",
"updated_at": "2024-01-16T00:00:00Z"
}
}
PUT /api/webhooks/:id
Update an existing webhook.
Request Body:
{
"url": "https://your-app.com/webhooks/orders-v2",
"events": [
"order.created",
"order.updated",
"order.shipped",
"order.delivered"
],
"is_active": true
}
Response:
{
"data": {
"id": "webhook_002",
"url": "https://your-app.com/webhooks/orders-v2",
"events": [
"order.created",
"order.updated",
"order.shipped",
"order.delivered"
],
"updated_at": "2024-01-16T01:00:00Z"
}
}
DELETE /api/webhooks/:id
Delete a webhook.
Response:
{
"data": {
"message": "Webhook successfully deleted"
}
}
POST /api/webhooks/:id/test
Test a webhook by sending a test event.
Request Body:
{
"event_type": "product.created"
}
Response:
{
"data": {
"webhook_id": "webhook_001",
"test_event_id": "test_123",
"status": "sent",
"response_code": 200,
"response_time": 250,
"sent_at": "2024-01-16T01:30:00Z"
}
}
GET /api/webhooks/:id/deliveries
Get webhook delivery history and status.
Query Parameters:
status(string): Filter by delivery status (success, failed, pending)start_date(string): Start date for delivery logend_date(string): End date for delivery logpage(number): Page numberlimit(number): Items per page
Response:
{
"data": [
{
"id": "delivery_001",
"webhook_id": "webhook_001",
"event_type": "inventory.low_stock",
"event_id": "event_123",
"status": "success",
"response_code": 200,
"response_time": 180,
"response_body": "OK",
"attempts": 1,
"sent_at": "2024-01-15T16:00:00Z",
"next_retry": null
},
{
"id": "delivery_002",
"webhook_id": "webhook_001",
"event_type": "inventory.out_of_stock",
"event_id": "event_124",
"status": "failed",
"response_code": 500,
"response_time": 5000,
"response_body": "Internal Server Error",
"attempts": 3,
"sent_at": "2024-01-15T15:30:00Z",
"next_retry": "2024-01-15T16:30:00Z"
}
],
"meta": {
"total": 150,
"page": 1,
"limit": 20,
"hasMore": true
}
}
POST /api/webhooks/:id/deliveries/:delivery_id/retry
Manually retry a failed webhook delivery.
Response:
{
"data": {
"delivery_id": "delivery_002",
"status": "retrying",
"attempts": 4,
"retry_at": "2024-01-16T02:00:00Z"
}
}
GET /api/webhooks/events
Get list of available webhook events.
Response:
{
"data": {
"events": [
{
"name": "product.created",
"description": "Triggered when a new product is created",
"category": "product"
},
{
"name": "product.updated",
"description": "Triggered when a product is modified",
"category": "product"
},
{
"name": "inventory.low_stock",
"description": "Triggered when product stock falls below reorder point",
"category": "inventory"
},
{
"name": "order.created",
"description": "Triggered when a new order is placed",
"category": "order"
}
],
"categories": [
{
"name": "product",
"description": "Product-related events"
},
{
"name": "inventory",
"description": "Inventory and stock events"
},
{
"name": "order",
"description": "Order lifecycle events"
},
{
"name": "user",
"description": "User account events"
}
]
}
}
Example Webhook Payloads
Product Created
{
"id": "wh_123456",
"event": "product.created",
"created": 1640995200,
"data": {
"object": {
"id": "prod_123",
"name": "Smart Widget",
"sku": "SW-001",
"price": 49.99,
"created_at": "2024-01-15T15:30:00Z"
}
},
"api_version": "2024-01-15"
}
Inventory Low Stock
{
"id": "wh_123457",
"event": "inventory.low_stock",
"created": 1640995800,
"data": {
"object": {
"product_id": "prod_456",
"product_name": "Basic Widget",
"warehouse_id": "wh_789",
"warehouse_name": "Main Warehouse",
"current_stock": 15,
"reorder_point": 20,
"max_stock_level": 200
}
},
"api_version": "2024-01-15"
}
Order Shipped
{
"id": "wh_123458",
"event": "order.shipped",
"created": 1640996400,
"data": {
"object": {
"id": "so_123",
"order_number": "SO-2024-001",
"customer_id": "cust_456",
"status": "shipped",
"tracking_number": "1Z999AA1234567890",
"carrier": "UPS",
"ship_date": "2024-01-16T14:30:00Z"
}
},
"api_version": "2024-01-15"
}