Skip to main content

Event Catalogue

This page lists every event you can subscribe to, when it is sent, and what its data contains.

Envelope​

Every event is sent as JSON with the same shape:

{
"id": "evt_9c1f0b6a2d4e8f7a3b5c1d09",
"type": "order.paid",
"api_version": "2026-10-01",
"created_at": "2026-10-11T03:04:05.123Z",
"shop_id": 12,
"data": { "order": { } }
}
FieldMeaning
idUnique event ID. It stays the same across retries and redeliveries
typeEvent type, see the table below
api_versionVersion of the data shape
created_atWhen the event was created (UTC)
shop_idYour shop ID
dataThe event content; the key depends on the event type

Event list​

EventSent whendata key
order.createdAn order is created (storefront checkout, POS sale, booking or rental order)order
order.paidStatus becomes Paid (also at creation when paid immediately, for example POS cash)order
order.canceledStatus becomes Canceled (stock, coupon, and points were restored)order
order.expiredAn unpaid order expiresorder
order.status_changedEvery status change (not creation): Paid, On delivery, Delivered, Canceled, Payment expiredorder, with previous_status
refund.createdA refund is recordedrefund
stock.lowAn item drops to or below its reorder point (once per item, branch, and day; same rule as the in-app alert)item
stock.adjustedA stock movement is applied: manual adjustment, stock count, branch transfer, purchase receipt (not sales)adjustments[]
purchase_order.receivedGoods are received against a POpurchase_order, receipt
booking.createdA booking slot is createdbooking
booking.rescheduledA booking is movedbooking, with previous (old date and time)
booking.canceledA booking is canceledbooking
booking.no_showA booking is marked no-show (manual or automatic)booking
review.createdA customer submits a review (any moderation status; the status field is PUBLISHED or PENDING)review
customer.createdA customer registers or is created by staffcustomer
product.createdA product is createdproduct
product.updatedA meaningful field changed: name, description, category, price, discounts, wholesale, status, SKU, barcode, weight, flags, reorder point, stock mode, rental fields. Not stock counters, timestamps, or image orderproduct
product.deletedA product is deletedproduct (id, name, SKU, deleted_at)
webhook.testOnly from the test button; cannot be subscribed toorder (sample)

Choosing ["*"] (All events) means every event above, including new ones.

Example: order.paid​

{
"order": {
"id": 1001,
"sales_no": "INV-0001",
"status": "PAID",
"branch_id": 1,
"customer": { "id": 9, "fullname": "Sari", "email": "sari@example.com", "phone": "08123456789" },
"items": [
{
"id": 5001, "product_id": 77, "product_variant_id": null,
"product_name": "Kopi 250g", "variant_name": null, "sku": "KOPI-250",
"qty": 2, "price": 50000, "total_price": 100000, "notes": null, "refunded_qty": 0,
"booking_date": null, "rental_start_date": null, "rental_end_date": null
}
],
"subtotal": 100000, "coupon_price": 0, "delivery_fee": 10000, "fee": 0,
"tax_amount": 0, "service_charge_amount": 0, "points_spend": 0,
"grand_total": 110000, "refunded_amount": 0, "refund_status": null,
"delivery_address": null, "deposit_amount": 0, "deposit_status": null, "balance_due": 0,
"created_at": "2026-10-11T03:00:00.000Z",
"updated_at": "2026-10-11T03:04:05.000Z"
}
}

The above is the value of data. For order.status_changed the shape is the same plus "previous_status": "PAYMENT-WAITING" inside order.

What is never sent​

  • passwords, salts, tokens, or hashes of any kind
  • cost data (cost_price, cost values, margins) in any event
  • payment gateway metadata
  • customer data is limited to id, name, email, and phone

The system also strips forbidden keys anywhere in the document as a last line of defence.

Ordering and duplicates​

  • Ordering between events is not guaranteed. For example, two events close together may arrive reversed. Use the timestamps in the data, not arrival order.
  • An event can arrive more than once. Store the id of events you have processed and ignore repeats.
  • The id stays the same across retries, redeliveries, and replays. The X-Etalasse-Delivery-Id header differs per delivery, so do not use it to deduplicate.

Headers sent​

HeaderContent
X-Etalasse-Event-IdEvent ID
X-Etalasse-Event-TypeEvent type
X-Etalasse-Delivery-IdDelivery ID
X-Etalasse-AttemptAttempt number (starts at 1)
X-Etalasse-SignatureSignature, see Verifying signatures
User-AgentEtalasse-Webhooks/1.0

The body is sent as Content-Type: application/json; charset=utf-8, compact JSON, well under 256 KB.