What the RMS Must Provide
Your RMS must expose two things for the POS integration to work:
- A webhook endpoint to receive POS order events from Mozrest.
- 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
Authorizationheader
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 value | When it fires |
|---|---|
create | The first event for an order — a new order is opened in the POS |
update | Any 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
| Field | Type | Description |
|---|---|---|
type | String | Event type: create or update |
venueId | String | Your venue identifier (RMS-side ID, not a Mozrest ID) |
bookingId | String | Your booking identifier (RMS-side ID). May be null on creation if no reservation is linked yet |
checkNumber | String | Check/order identifier in the POS |
partySize | Integer | Number of guests |
date | Integer | Order timestamp (UTC Unix) |
status | String | OPEN, CLOSE, or VOID |
tables[] | Array | Table IDs associated with the order |
Timestamps
| Field | Type | Description |
|---|---|---|
openedAt | Integer | When the order was opened (UTC Unix) |
updatedAt | Integer | Last update timestamp |
closedAt | Integer | When closed (nullable) |
voidedAt | Integer | When voided (nullable) |
Commercials
| Field | Type | Description |
|---|---|---|
commercials.totalAmount | Number | Final amount after tax, tip, and discounts |
commercials.tax | Number | Tax applied |
commercials.tip | Number | Gratuity |
commercials.discount | Number | Discounts applied |
commercials.prepayment | Number | Amount already prepaid |
commercials.paymentType | String | credit_card, cash, check, or others |
Items
| Field | Type | Description |
|---|---|---|
items[].id | Integer | Item ID in the POS |
items[].name | String | Item name |
items[].price | Number | Price per unit |
items[].quantity | Integer | Quantity 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"
}
]
| Field | Type | Required | Description |
|---|---|---|---|
id | String | Yes | Unique table identifier in the RMS |
name | String | Yes | Human-readable table label |
posId | String | No | POS-side table identifier. When provided, Mozrest uses it to verify table matching. Mismatches are flagged for manual review. |
area | String | No | Name of the area/room the table belongs to. Matched case-insensitively against existing areas; a new area is created when no match is found. |
areaId | String | No | Your area identifier. When provided, it takes precedence over area for matching. |