Webhook events
Hub webhooks are subscribed per community and use the platform-standard
transport: the same X-Quiqqy-Signature HMAC-SHA256 signing, headers, 10-second
timeout and retry ladder documented in Webhooks. Verify the
signature against the raw body before trusting a payload, and dedupe on
X-Quiqqy-Delivery-Id.
Subscribing
Section titled “Subscribing”POST /communities/{communityId}/webhooks{ "name": "Ops relay", "url": "https://ops.example.com/hooks/quiqqy", "events": ["order.created", "order.status_changed"], "is_active": true}Omit events (or include "*") to receive everything. The subscription’s
signing secret is shown once on creation — store it server-side. Manage
subscriptions with GET/PUT/DELETE on /webhooks/{webhookId}, send a
test delivery with POST /webhooks/{webhookId}/test, and inspect attempts —
event type, your response status, the start of your response body — at
GET /webhooks/{webhookId}/deliveries.
order.created
Section titled “order.created”A community order was placed — through your app, the community storefront, or
an operator. Fires once for the parent order, after Hub has split it into
child orders and begun forwarding. The payload uses the same generic envelope
as every platform webhook; data.order carries the full parent order,
including child_orders[].
{ "event_type": "order.created", "event_id": "evt_7c6d5e4f3a2b", "community_id": "com_8f14e45fce9a", "timestamp": "2026-07-30T09:14:22.108Z", "data": { "order": { "order_id": "ord_3e5f7a9b1c2d", "order_number": "CQ-10428", "community_id": "com_8f14e45fce9a", "status": "pending", "fulfillment_type": "delivery", "payment_status": "pending", "currency": "INR", "subtotal": 68000, "tax": 3400, "delivery_fee": 4000, "discount": 6800, "tip": 2000, "total_amount": 74250, "customer": { "customer_id": "cus_c7d8e9f01a2b", "name": "Anita R.", "phone": "+919812345678" }, "items": [ { "line_id": "lin_1a0b9c8d7e6f", "item_id": "itm_9f8e7d6c5b4a", "store_id": "st_6a1f0b2e9c3d", "name": "Kerala Fish Curry", "quantity": 2, "unit_price": 32000, "subtotal": 64000, "modifiers": [ { "modifier_id": "mod_3c4d5e6f7a8b", "name": "Medium", "price": 0, "quantity": 1 } ] } ], "child_orders": [ { "order_id": "ord_4f6a8b0c2d3e", "store_id": "st_6a1f0b2e9c3d", "store_name": "Cayibel Kochi", "status": "pending", "subtotal": 64000, "line_ids": ["lin_1a0b9c8d7e6f"] } ], "created_at": "2026-07-30T09:14:22.000Z", "updated_at": "2026-07-30T09:14:22.000Z" } }}order.status_changed
Section titled “order.status_changed”The parent order’s status advanced — including roll-ups from child orders.
Same envelope: data.previous_status carries the status it moved from, and
data.order the full order as it now stands.
{ "event_type": "order.status_changed", "event_id": "evt_8d7e6f5a4b3c", "community_id": "com_8f14e45fce9a", "timestamp": "2026-07-30T09:31:05.442Z", "data": { "previous_status": "confirmed", "order": { "order_id": "ord_3e5f7a9b1c2d", "order_number": "CQ-10428", "community_id": "com_8f14e45fce9a", "status": "preparing", "fulfillment_type": "delivery", "payment_status": "completed", "currency": "INR", "total_amount": 74250, "customer": { "customer_id": "cus_c7d8e9f01a2b", "name": "Anita R." }, "…": "items and child_orders as in order.created", "created_at": "2026-07-30T09:14:22.000Z", "updated_at": "2026-07-30T09:31:05.000Z" } }}data.order.status follows the
ladder: pending,
confirmed, preparing, ready, out_for_delivery, delivered,
cancelled. The payload carries the full parent order, but you can always
re-fetch GET /communities/{communityId}/orders/{orderId} for the latest
state.