Create a venue (standalone restaurants)
Creates a venue for a restaurant that is not yet in Mozrest: it runs a supported POS but has no reservation system Mozrest integrates. The venue is created under Mozrest's internal management, automatically added to your partner scope, and the response includes an onboarding link where the restaurant connects its POS account.
Once the restaurant completes the onboarding link, the venue behaves exactly like any other venue in your scope: tables, bill, payments, features.
If the restaurant is already live in Mozrest, do not create it again - ask Mozrest support to grant your partner access to the existing venue instead. A duplicate POS connection attempt is rejected during onboarding (see below).
POST /v1/pat/venues
Authorization: Bearer <token>
Content-Type: application/json
Before you start: list the available POS systems
GET /v1/pat/pos-types
Authorization: Bearer <token>
{
"posTypes": [
{ "code": "LIGHTSPEED_K_SERIES", "name": "Lightspeed Series-K" },
{ "code": "SIMPHONY", "name": "Oracle Simphony" },
{ "code": "SAAPAD", "name": "Sapaad" }
]
}
Use the code values as posType below. The list is environment-driven and grows as new POS systems are enabled - do not hardcode it.
Request body
| Name | Type | Required | Notes |
|---|---|---|---|
name | string | yes | Venue display name |
address | string | yes | Street address |
city | string | yes | City |
postalCode | string | yes | Postal code |
country | string | yes | ISO 3166-1 alpha-2 (e.g. GB) |
timezone | string | yes | IANA timezone (e.g. Europe/London) |
currency | string | yes | ISO 4217 (e.g. GBP) |
posType | string | yes | POS the restaurant runs - a code from GET /v1/pat/pos-types |
phoneNumber | string | no | Venue phone number |
email | string | no | Venue contact email |
Response - 200 OK
{
"id": "6a79db94ed1924a5507ddfd5",
"name": "The Standalone Bistro",
"address": "1 High Street",
"city": "London",
"postalCode": "N1 9GU",
"country": "GB",
"timezone": "Europe/London",
"currency": "GBP",
"posType": "LIGHTSPEED_K_SERIES",
"onboarding": {
"requestId": "3432974d-26d7-443a-9996-470fed7befc9",
"url": "https://connect.mozrest.com/onboarding/3432974d-26d7-443a-9996-470fed7befc9?platform=lightspeed_k_series",
"status": "rms_activation"
}
}
| Field | Meaning |
|---|---|
id | The new venue's Mozrest ID. Already in your partner scope - usable as {venueId} on every other endpoint immediately |
onboarding.url | Hand this link to the restaurant (embed it in your own onboarding flow or send it directly). The restaurant signs in to its POS account there and authorizes the connection. The link requires no Mozrest credentials |
The venue has no POS connection until the restaurant completes the onboarding link. To know when the connection is live, poll /features: it answers 404 (no active POS) until the POS is linked, then the payAtTable capabilities flip automatically. Tables are imported from the POS during onboarding.
Errors
| Status | When |
|---|---|
400 Bad Request | Validation failed (missing or invalid fields), or posType is not supported for partner venue creation |
401 Unauthorized | Token invalid or revoked |
403 Forbidden | Token does not belong to an active Pay-at-Table partner |
Duplicate protection during onboarding
When the restaurant authorizes its POS account, Mozrest checks whether that POS location is already connected to an existing venue. If it is, the connection is rejected and the restaurant sees "location already connected" in the onboarding UI. In that case the venue already exists in Mozrest - contact Mozrest support to get access to it and remove the duplicate you created.
Note this happens on the onboarding flow, not on this endpoint: creating the venue always succeeds; the guard fires when the POS connection is attempted.