Proud winners of the 2026 CFIN Foodtech Frontier Awards. Learn more →

Order Events

Webhook events for customer orders

Order events are triggered when customer orders are created, updated, change status, or are deleted.

#TypeScript Interfaces

Copy these interfaces to type your webhook handlers:

/** Base event properties included in all webhook events */
interface BaseEvent {
  /** Unique event identifier (UUID) */
  id: string;
  /** Event type */
  kind: string;
  /** ISO 8601 timestamp */
  time: string;
  /** Transaction identifier for grouping related events */
  transactionId: string;
}
 
/** Order status values */
type OrderStatus =
| "pending"
| "ready"
| "inProgress"
| "completed"
| "cancelled";
 

#order.created

Triggered when a new order is created.

{
  "id": "evt_abc123",
  "kind": "order.created",
  "time": "2024-01-15T10:30:00Z",
  "transactionId": "txn_xyz789",
  "orderId": "ord_456",
  "orderShortId": "ORD-001"
}

#order.updated

Triggered when any tracked field on an order changes. The changes object contains only the fields that changed, each with from and to values.

{
  "id": "evt_abc123",
  "kind": "order.updated",
  "time": "2024-01-15T10:30:00Z",
  "transactionId": "txn_xyz789",
  "orderId": "ord_456",
  "orderShortId": "ORD-001",
  "changes": {
    "status": { "from": "pending", "to": "ready" },
    "dueDate": { "from": null, "to": "2024-02-01T00:00:00Z" }
  }
}

#order.status.changed

Triggered when an order's status is updated.

{
  "id": "evt_abc123",
  "kind": "order.status.changed",
  "time": "2024-01-15T10:30:00Z",
  "transactionId": "txn_xyz789",
  "orderId": "ord_456",
  "orderShortId": "ORD-001",
  "previousOrderStatus": "pending",
  "currentOrderStatus": "ready"
}
interface OrderStatusChangedEvent extends BaseEvent {
  kind: "order.status.changed";
  /** Order UUID */
  orderId: string;
  /** Human-readable order ID (e.g., "ORD-001") */
  orderShortId: string;
  /** Status before this change */
  previousOrderStatus: OrderStatus;
  /** New status after this change */
  currentOrderStatus: OrderStatus;
}

#Status Values

Order Status

pendingstring

Order created, awaiting processing

readystring

Order is ready for fulfillment

inProgressstring

Order is being fulfilled

completedstring

Order has been fulfilled

cancelledstring

Order was cancelled


#order.deleted

Triggered when an order is deleted.

{
  "id": "evt_abc123",
  "kind": "order.deleted",
  "time": "2024-01-15T10:30:00Z",
  "transactionId": "txn_xyz789",
  "orderId": "ord_456"
}
interface OrderDeletedEvent extends BaseEvent {
  kind: "order.deleted";
  /** Order UUID */
  orderId: string;
}

#All Order Event Types

Union type for handling any order event:

type OrderEvent =
  | OrderCreatedEvent
  | OrderUpdatedEvent
  | OrderStatusChangedEvent
  | OrderDeletedEvent;
 
// Type guard for order events
function isOrderEvent(event: BaseEvent): event is OrderEvent {
return event.kind.startsWith("order.");
}
 
// Example webhook handler
async function handleOrderWebhook(event: OrderEvent) {
switch (event.kind) {
case "order.created":
console.log(`New order created: ${event.orderShortId}`);
// Send order confirmation, notify warehouse, etc.
break;
 
    case "order.updated":
      console.log(`Order ${event.orderShortId} was updated`);
      // Sync changes to external systems
      break;
 
    case "order.status.changed":
      console.log(
        `Order ${event.orderShortId} changed from ${event.previousOrderStatus} to ${event.currentOrderStatus}`
      );
      // Trigger notifications, update external systems, etc.
      break;
 
    case "order.deleted":
      console.log(`Order ${event.orderId} was deleted`);
      // Clean up related data in external systems
      break;
 
}
}