Webhook Payload Format
Every webhook delivery is an HTTP POST request with a JSON body. The structure is always the same regardless of the event type.
Top-Level Fields
| Field | Type | Description |
|---|---|---|
event | string | The event type: order.created, order.confirmed, order.canceled, or order.failed |
timestamp | string | ISO 8601 datetime when the event was dispatched |
data | object | The event payload containing full order data |
Order Data Fields
| Field | Type | Description |
|---|---|---|
id | string | EasyConfirm order ID (UUID) |
externalOrderId | string | Your external order ID (the one you sent when creating the order) |
status | string | Current order status: pending, confirmed, canceled, or failed |
customerAction | string | null | Customer's action: approved, canceled, or null if no action yet |
deliveryStatus | string | null | WhatsApp message delivery status: sent, delivered, read, failed, or null |
customerName | string | Customer's name |
customerPhone | string | Customer's phone number |
customerAddress | string | null | Customer's delivery address |
subtotal | number | Subtotal before shipping |
shippingCost | number | Shipping cost |
totalCost | number | Total order cost |
currency | string | Currency code (e.g., EGP) |
failureReason | string | null | Failure reason (only present when status is failed) |
items | array | Order items array |
createdAt | string | ISO 8601 datetime when the order was created |
updatedAt | string | ISO 8601 datetime of the last update |
Item Fields
| Field | Type | Description |
|---|---|---|
id | string | Item ID |
productName | string | Product name |
variantName | string | Variant description |
quantity | number | Quantity ordered |
unitPrice | number | Price per unit |
totalPrice | number | Total price for this item |
Example Structure
{
"event": "order.confirmed",
"timestamp": "2026-01-15T10:05:30.000Z",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"externalOrderId": "EO-12345",
"status": "confirmed",
"customerAction": "approved",
"deliveryStatus": "read",
"customerName": "Ahmed Mohamed",
"customerPhone": "201234567890",
"customerAddress": "15 Tahrir St, Cairo",
"subtotal": 150,
"shippingCost": 25,
"totalCost": 175,
"currency": "EGP",
"failureReason": null,
"items": [
{
"id": "item-uuid-1",
"productName": "iPhone Case",
"variantName": "Black / Large",
"quantity": 2,
"unitPrice": 75,
"totalPrice": 150
}
],
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-01-15T10:05:30.000Z"
}
}