Skip to main content

What the RMS Must Provide

Your RMS must expose two things for the POS integration to work:

  1. A webhook endpoint to receive POS order events from Mozrest.
  2. A table listing endpoint so Mozrest can match POS tables to RMS reservations.

Integrations that use check matching require two additional endpoints — a reservation listing endpoint and a walk-in creation endpoint.


Webhook Endpoint

Mozrest sends a POST request to your endpoint whenever a POS order is created, updated, or voided.

  • Method: POST
  • Content-Type: application/json
  • Authentication: Bearer token in the Authorization header
Authorization: Bearer {api_key}
Content-Type: application/json

Payload

{
"type": "create",
"venueId": "your-venue-id",
"bookingId": "your-booking-id",
"checkNumber": "98766",
"partySize": 2,
"date": 1719599400,
"status": "OPEN",
"tables": [
"28c3ce8b-8c10-4a64-8099-f0dffcc549a8"
],
"openedAt": 1535548784,
"updatedAt": 1535548784,
"closedAt": null,
"voidedAt": null,
"commercials": {
"totalAmount": 150.00,
"tax": 12.00,
"tip": 20.00,
"discount": 10.00,
"prepayment": 0,
"paymentType": "credit_card"
},
"items": [
{ "id": 1, "name": "Steak", "price": 40.00, "quantity": 2 },
{ "id": 2, "name": "Wine", "price": 70.00, "quantity": 1 }
]
}

Event types

type valueWhen it fires
createThe first event for an order — a new order is opened in the POS
updateAny subsequent change (items, payment, close, void)

There is no separate event type for closed or voided orders: they arrive as update events — check the status field (CLOSE, VOID) and the closedAt / voidedAt timestamps.

Core fields

FieldTypeDescription
typeStringEvent type: create or update
venueIdStringYour venue identifier (RMS-side ID, not a Mozrest ID)
bookingIdStringYour booking identifier (RMS-side ID). May be null on creation if no reservation is linked yet
checkNumberStringCheck/order identifier in the POS
partySizeIntegerNumber of guests
dateIntegerOrder timestamp (UTC Unix)
statusStringOPEN, CLOSE, or VOID
tables[]ArrayTable IDs associated with the order

Timestamps

FieldTypeDescription
openedAtIntegerWhen the order was opened (UTC Unix)
updatedAtIntegerLast update timestamp
closedAtIntegerWhen closed (nullable)
voidedAtIntegerWhen voided (nullable)

Commercials

FieldTypeDescription
commercials.totalAmountNumberFinal amount after tax, tip, and discounts
commercials.taxNumberTax applied
commercials.tipNumberGratuity
commercials.discountNumberDiscounts applied
commercials.prepaymentNumberAmount already prepaid
commercials.paymentTypeStringcredit_card, cash, check, or others

Items

FieldTypeDescription
items[].idIntegerItem ID in the POS
items[].nameStringItem name
items[].priceNumberPrice per unit
items[].quantityIntegerQuantity ordered

Webhook retries use exponential backoff if your endpoint fails to respond with a 2xx status.


Table Listing Endpoint

Mozrest calls this endpoint to retrieve your venue's table list. This is used during onboarding and for ongoing table matching with POS systems.

  • Method: GET
  • Path: /venue/{venueId}/tables
  • Authentication: Bearer token

Response

[
{
"id": "28c3ce8b-8c10-4a64-8099-f0dffcc549a8",
"name": "001"
},
{
"id": "00f8c6da-3967-4e56-98b9-5ee063b05292",
"name": "002",
"posId": "POS-002",
"area": "Terrace",
"areaId": "AREA-1"
}
]
FieldTypeRequiredDescription
idStringYesUnique table identifier in the RMS
nameStringYesHuman-readable table label
posIdStringNoPOS-side table identifier. When provided, Mozrest uses it to verify table matching. Mismatches are flagged for manual review.
areaStringNoName of the area/room the table belongs to. Matched case-insensitively against existing areas; a new area is created when no match is found.
areaIdStringNoYour area identifier. When provided, it takes precedence over area for matching.