POS orders
The normalized order shape for point-of-sale and marketplace integrations.
Coastly normalizes orders from every vertical, marketplace, F&B, delivery, and services, into a single shape so your POS or back-office sees one consistent object regardless of where the order originated. You can read orders over REST and receive them in real time over webhooks.
The order object
{
"id": "ord_5T8w2h",
"status": "confirmed",
"vendor_id": "prop_1a2b3c",
"customer": {
"id": "cus_2k9d",
"name": "Ana Rivera",
"email": "ana@example.com",
"phone": "+50760000000"
},
"fulfillment": {
"type": "delivery",
"address": "Playa Venao, Los Santos",
"pin": "https://maps.google.com/?q=7.4285,-80.1985",
"scheduled_for": "2026-07-12T18:30:00Z"
},
"items": [
{
"sku": "ceviche-classic",
"name": "Classic ceviche",
"qty": 2,
"unit_price": 850,
"modifiers": [{ "name": "Extra plantain", "price": 150 }],
"line_total": 2000
}
],
"totals": {
"subtotal": 2000,
"delivery_fee": 300,
"tax": 0,
"total": 2300,
"currency": "USD"
},
"commission": { "rate": 0.15, "amount": 300 },
"created": 1751328000,
"updated": 1751328600
}
Field notes
| Field | Notes |
|---|---|
status |
Order lifecycle, for example pending, confirmed, fulfilled, cancelled. |
fulfillment.type |
delivery, pickup, or dine_in. |
fulfillment.pin |
Map pin for delivery; Coastly is record-only, delivery is vendor-run. |
items[].unit_price and all totals |
Integer minor units (for example cents), paired with totals.currency. |
modifiers |
Per-item options with their own price deltas, already reflected in line_total. |
commission |
Coastly's commission on this order; see commission. |
Amounts are always integers in the currency's minor unit to avoid floating-point rounding. Divide by 100 for a two-decimal currency.
Receiving orders
Subscribe to order.created and order.updated. The webhook data is exactly the object above.
{
"id": "evt_9Xk2",
"type": "order.created",
"created": 1751328000,
"data": { "id": "ord_5T8w2h", "status": "confirmed", "totals": { "total": 2300, "currency": "USD" } }
}
Handle order.updated for every status transition rather than assuming a fixed sequence, and process by updated timestamp so an out-of-order retry never rolls state backward. See webhooks for signature verification.