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.
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 | A new order is opened in the POS |
update | An existing order is modified (items, status, payment) |
void | An order is voided / cancelled |
Core fields
| Field | Type | Description |
|---|---|---|
type | String | Event type: create, update, or void |
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"
}
]
| 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. |