Final supports multiple predefined trigger events in Zapier, such as order completion, product creation, stock changes, and more. These triggers are powered by webhooks in Final’s backend and are sent automatically when the corresponding event occurs.
This article outlines the structure of the payloads sent for each supported trigger event.
The following trigger events are available:
Customer Created or Updated
Product Created
Inventory Updated
Order Completed
Session Closed
Each of these sends a structured JSON payload to Zapier when the event occurs.
Trigger: Fires when a customer is added or modified in Final.
Payload structure:
{
"eventType": "customer_updated",
"timestamp": "2024-10-10T17:44:12.239Z",
"customer": {
"id": "cus_xxxxxx",
"firstName": "Jamie",
"lastName": "Nguyen",
"email": "jamie@example.com",
"phone": "+17095551234",
"shippingAddress": {
"line1": "123 Main St",
"city": "St. John's",
"province": "NL",
"postalCode": "A1A1A1",
"country": "CA"
},
"billingAddress": {
"line1": "123 Main St",
"city": "St. John's",
"province": "NL",
"postalCode": "A1A1A1",
"country": "CA"
}
}
}
Trigger: Fires when a new product is added in Manage.
Payload structure:
{
"eventType": "product_created",
"timestamp": "2024-10-10T17:44:12.239Z",
"product": {
"id": "prod_xxxxxx",
"name": "Espresso",
"description": "Double shot",
"category": "Drinks",
"price": 375,
"taxClass": "Standard",
"sku": "ESP-001",
"imageUrl": "https://cdn.final.app/image.png",
"options": [],
"status": "active"
}
}
Trigger: Fires when stock levels are changed due to a sale, adjustment, or recount.
Payload structure:
{
"eventType": "inventory_updated",
"timestamp": "2024-10-10T17:44:12.239Z",
"product": {
"id": "prod_xxxxxx",
"name": "Espresso"
},
"outlet": {
"id": "out_xxxxxx",
"name": "Main Outlet"
},
"previousQuantity": 100,
"newQuantity": 98,
"changeSource": "sale",
"changeAmount": -2
}
Trigger: Fires when an order is finalized at checkout.
Payload structure:
{
"eventType": "order_completed",
"timestamp": "2024-10-10T17:44:12.239Z",
"order": {
"id": "ord_xxxxxx",
"status": "completed",
"subtotal": 1800,
"tax": 270,
"total": 2070,
"paymentMethods": [
{
"type": "card",
"amount": 2070
}
],
"notes": ""
},
"cart": [
{
"productId": "prod_xxxxxx",
"name": "Latte",
"quantity": 2,
"price": 750,
"total": 1500
},
{
"productId": "prod_yyyyyy",
"name": "Muffin",
"quantity": 1,
"price": 300,
"total": 300
}
],
"customer": {
"id": "cus_xxxxxx",
"firstName": "Jamie",
"lastName": "Nguyen"
},
"outlet": {
"id": "out_xxxxxx",
"name": "Main Outlet"
}
}
Trigger: Fires when a Station session is ended by a user.
Payload structure:
{
"eventType": "session_closed",
"timestamp": "2024-10-10T17:44:12.239Z",
"station": {
"id": "sta_xxxxxx",
"name": "Front iPad"
},
"outlet": {
"id": "out_xxxxxx",
"name": "Main Outlet"
},
"user": {
"id": "usr_xxxxxx",
"firstName": "Alex",
"lastName": "Martins"
},
"sessionSummary": {
"ordersCompleted": 42,
"totalSales": 84000,
"cashTotal": 21500,
"cardTotal": 62500,
"giftCardTotal": 0
}
}
All monetary amounts (e.g., price, subtotal, total) are in the smallest currency unit (e.g., cents).
Not all fields are guaranteed for all events. For example, customer will be omitted if no customer is linked to the order.
These payloads cannot be customized. They are sent automatically when the event occurs and reflect the state of data at that time.