Skip to content
English
  • There are no suggestions because the search field is empty.

Slerp order webhook payload reference

Reference for the JSON body Slerp sends to a custom webhook endpoint.

Envelope

Field Type Description
id UUID Unique identifier for this webhook event, not the order.
type string Event type. See below.
createdAt ISO 8601 (UTC) When the event was generated. May lag slightly behind data.order.createdAt / updatedAt.
data.order object The order payload.

Event types

Type

Fired when Typical field deltas
order.created Order first placed.

Full payload. order.status = PENDING, fulfillment.status = PENDING.

On DELIVERY orders, assignedPickupTime and deliveredAt are both null.

order.status_updated Top level order status changes.

order.status changes, e.g. PENDINGACCEPTEDFULFILLED.

Can carry a fulfillment.status change in the same event, for example PICKUP orders moving to PREPARING on acceptance.

At the terminal event, order.statusFULFILLED arrives together with fulfillment.statusDELIVERED/COLLECTED and, on DELIVERY orders, delivery.deliveredAt populated.

order.delivery_status_updated Fulfilment status changes on a DELIVERY order.

fulfillment.status changes while order.status stays ACCEPTED.

May also carry a windowStart/windowEnd change.

order.pickup_status_updated Fulfilment status changes on a PICKUP order. fulfillment.status changes while order.status stays ACCEPTED.

There is no event filter in the Slerp webhook configuration, so all four types are delivered to every registered endpoint. Consumers must filter on type themselves.

Note that only order.status_updated carries the terminal state. If you filter to order.created alone, you will never see deliveredAt, the final total, or the tip.

data.order

Field Type Description
reference string Human readable order reference shown to customer and merchant, e.g. UGE6HT. Use this as the order identifier.
status enum Overall order status. PENDINGACCEPTEDFULFILLED (terminal).
createdAt ISO 8601 (UTC) Order creation time.
updatedAt ISO 8601 (UTC) Last update. Equal to createdAt at creation, bumped on every subsequent event.
orderNotes string | null Customer note on the order, e.g. "Lots of spice please".
customerDetails object See below.
recipientDetails object | null See below.
deliveryAddress object | null null on PICKUP orders.
delivery object | null null on PICKUP orders.
fulfillment object See below.
store object See below.
orderItems array See below.
summary object See below.
additionalItems object Container for add-on charges. {} when none selected.

customerDetails

Field Type Description
type enum GUEST for an unauthenticated checkout, CUSTOMER for a registered account. Name and email are present in both cases.
firstName string  
lastName string  
email string  
contactNumber string E.164 format.

There is no combined name field. Concatenate firstName and lastName.

recipientDetails

null when the recipient is the customer. Populated when the order is placed for someone else.

Field Type Description
firstName string  
lastName string  
contactNumber string E.164 format. 

No email field. Recipient contact is phone only.

deliveryAddress

null on PICKUP orders.

Field Type Description
lineOne string Primary address line.
lineTwo string | null Secondary line, e.g. company name.
city string  
zip string Postal code.

delivery

null on PICKUP orders.

Field Type Description
assignedPickupTime ISO 8601 (UTC) | null Populated once a courier is assigned.
deliveredAt ISO 8601 (UTC) | null Populated on the terminal event.
instructions string | null Customer delivery instructions, e.g. "Knock 3 times".

PICKUP orders have no equivalent collection timestamp. The COLLECTED fulfilment status is the only completion signal.

fulfillment

Field Type Description
type enum DELIVERY or PICKUP.
orderType enum Timing model. SAMEDAY_SCHEDULED (customer picks a same day window), SAMEDAY_ASAP (window defaults to now to now), PREORDER (future date).
status enum Fulfilment status. PENDING at creation. The enum differs by type, see below.
windowStart ISO 8601 (UTC) Start of the requested window. Can change after creation.
windowEnd ISO 8601 (UTC) | null End of the requested window.

Status values by type:

  • DELIVERY: PENDINGSEARCHINGPICKINGALMOST_PICKINGDELIVERINGALMOST_DELIVERINGDELIVERED (terminal)
  • PICKUP: PENDINGPREPARINGREADY_FOR_COLLECTIONCOLLECTED (terminal)

Note there are two independent status fields. order.status tracks the commercial state, fulfillment.status tracks the operational one, and they advance on different schedules.

store

Field Type Description
id UUID Store identifier.
name string Store display name.

orderItems[]

Field Type Description
name string Line item name as shown to the customer.
quantity integer  
product.name string May differ from name where item level overrides exist.
product.sku string Product SKU. 
total.base decimal string Line total before discount. This is the extended total with quantity included, so a quantity of 4 at 11.45 reports 45.80.
total.discounted decimal string Line total after discount.
modifierGroups array Selected options. [] when none.

modifierGroups

Each group holds the options selected for that item.

Field Type Description
name string Group name, e.g. Pizza size.
sku string Group SKU. 
modifiers array Selected modifiers within the group.

Each entry in modifiers:

Field Type Description
name string e.g. Small 7". May contain quote characters, so escape when serialising.
sku string  
quantity integer  
price.base decimal string Before discount.
price.discounted decimal string After discount.

 

additionalItems

Container for add-on charges. {} when nothing is selected. Currently the only key is giftWrapping.

Field Type Description
giftWrapping.message string Customer gift note.
giftWrapping.sku string e.g. GIFT_WRAP.
giftWrapping.price.base decimal string Charge before discount.
giftWrapping.price.discounted decimal string Charge after discount.

giftWrapping.price is folded into summary.subtotal rather than broken out as its own summary line, so summing the summary fields will not reveal it.

summary

Field Type Description
subtotal object Sum of item totals, including any additionalItems charges.
delivery object | null Delivery fee. discounted reflects any delivery promotion. null on PICKUP orders, not an object with null members.
storeFee object | null Store service fee.
tip string | null Single value, with no base/discounted split, since tips are not discountable. null on PICKUP orders.
total object subtotal + delivery + storeFee + tip, before and after discount. When delivery and tip are null, total = subtotal + storeFee.

Money semantics

The base / discounted naming is easy to misread. discounted is the amount payable, not the amount taken off.

On an order with a 100% off code applied:

"total": { "base": "11.00", "discounted": "0.00" } 

The customer paid nothing. Mapping base into a revenue column overstates takings. The discount value is base minus discounted.

Discounts do not necessarily propagate to line items. Where a promotion applies at order level rather than line level, a line item can read { "base": "11.00", "discounted": "11.00" } while the summary reads { "base": "11.00", "discounted": "0.00" }. Do not derive an order total by summing discounted line totals.

The promotion or discount code itself is not included in the payload. Discount amounts can be derived from the base and discounted pairs, but the code applied cannot.