This page lists every field in the ORDER 0.1 schema, entity by entity. The canonical, machine-readable schema is schema.json — this page is a human-readable index of it, not a replacement for it.
Every object below rejects properties it does not list, with one standing exception: a property named x_<vendor> (matching `^x_[a-z0-9_]+$`) is always allowed on every object, and is never listed again per-entity below. See The specification for what a vendor extension is for.
The root object.
| Field |
Type |
Required |
Notes |
order_version |
string |
Yes |
Pattern `^0\.\d+$` (MAJOR.MINOR). |
modules |
array<string> |
Yes |
At least one entry, unique. Open list — not an enum. |
generator |
object |
Yes |
See Generator. |
restaurant |
object |
Yes |
See Restaurant. |
rooms |
array<Room> |
No |
|
tables |
array<Table> |
No |
|
table_groups |
array<TableGroup> |
No |
|
service_periods |
array<ServicePeriod> |
No |
|
closures |
array<Closure> |
No |
|
menus |
array<Menu> |
No |
|
labels |
array<Label> |
No |
|
reservations |
array<Reservation> |
No |
Requires "reservations" in modules. Contains personal data. |
Identifies what produced the document.
| Field |
Type |
Required |
Notes |
name |
string |
Yes |
Non-empty. |
version |
string |
No |
|
exported_at |
string |
Yes |
Date-time. |
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
Document-scoped identifier, 1–128 characters. |
name |
string |
Yes |
Non-empty. |
timezone |
string |
Yes |
An IANA tz-database identifier. The reference validator checks real existence (via the platform’s Intl timezone database, canonical and alias names both accepted), not just shape. |
currency |
string |
Yes |
ISO 4217, pattern `^[A-Z]{3}$`. |
description |
string |
No |
|
default_language |
string |
Yes |
At least 2 characters. |
supported_languages |
array<string> |
Yes |
At least one entry. |
contact |
object |
No |
See Restaurant profile objects. |
address |
object |
No |
See Restaurant profile objects. |
branding |
object |
No |
See Restaurant profile objects. |
public_hours |
array<HoursSpec> |
No |
Display/marketing hours: `{ days, opens, closes, ends_next_day? }` per entry. MAY differ from service_periods — see The specification. |
Contact — all fields optional: phone (string), email (string, email format), website (string, URI format).
Address — all fields optional: street, city, region, postal_code (string), country (string, ISO 3166-1 alpha-2, pattern `^[A-Z]{2}$`), coordinates (`{ lat, lng }`, lat in [-90, 90], lng in [-180, 180]).
Branding — all fields optional: logo (Media — `{ url, path? }`), colors (`{ primary?, secondary?, text? }`, each a `#RRGGBB` color string), font_family (string), social_links (a map of platform name to URI; keys match `^[a-z][a-z0-9_]*$`).
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
name |
string |
Yes |
Non-empty. |
floor_plan |
object |
No |
See Floor plan. |
| Field |
Type |
Required |
Notes |
coordinate_system |
object |
Yes |
See Coordinate system. |
area_sqm |
number |
No |
Greater than 0. |
background_image_url |
string |
No |
URI format. |
outline |
array<OutlineSegment> |
No |
The room’s boundary. Each segment is `{ type: "polygon" | "rectangle" | "circle", ... } ` with the fields its type requires (points for a polygon, x/y/width/height for a rectangle, cx/cy/radius for a circle). Points are absolute in the room’s coordinate_system — contrast with a table’s shape, whose points are centre-relative. |
unusable_areas |
array<UnusableArea> |
No |
A region that cannot seat guests (bar, kitchen pass, pillar): the same shape as outline’s segments, plus a required ref and an optional label. Points are absolute, as for outline. |
| Field |
Type |
Required |
Notes |
units |
string |
Yes |
meters or pixels. |
origin |
string |
Yes |
Constant: top_left. |
x_axis |
string |
Yes |
Constant: right. |
y_axis |
string |
Yes |
Constant: down. |
pixels_per_meter |
number |
No (SHOULD when units is pixels) |
Greater than 0. Absent means the plan is unscaled; readers MUST NOT infer real-world distance. Triggers the floor_plan_unscaled warning. |
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
source_id |
string |
No |
Informational only — not for cross-document identity. |
number |
string |
Yes |
Non-empty. |
display_name |
string |
No |
|
room_ref |
string |
No |
|
seats |
object |
Yes |
`{ min: integer ≥ 1, max: integer ≥ 1 }`. min <= max is enforced by the reference validator (not expressible in JSON Schema itself). |
status |
string |
Yes |
active, inactive, or maintenance. |
geometry |
object |
No |
`{ position, rotation_deg?, shape }`. position is the table’s centre. rotation_deg is degrees clockwise, [0, 360). shape.points (for a polygon) are relative to position — the opposite convention from a floor outline’s absolute points. A rectangle shape requires width/height; a circle requires radius. |
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
table_refs |
array<string> |
Yes |
At least 2 entries, unique. |
seats |
object |
Yes |
Same `{ min, max }` shape as Table.seats. |
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
name |
string |
Yes |
Non-empty. |
description |
string |
No |
|
days |
array<string> |
Yes |
At least one entry, unique. Values: monday … sunday. |
opens |
string |
Yes |
Wall-clock HH:MM in restaurant.timezone. |
closes |
string |
Yes |
Wall-clock HH:MM. |
ends_next_day |
boolean |
No, default false |
Cross-midnight flag. A reader MUST NOT infer it from closes < opens; a producer translating its own source, where end < start is deliberate, may set it. |
max_covers |
integer or null |
No |
At least 1. |
turns |
array<Turn> |
No |
See Turn. |
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
opens |
string |
Yes |
Wall-clock HH:MM. |
closes |
string |
Yes |
Wall-clock HH:MM. |
ends_next_day |
boolean |
No, default false |
Cross-midnight flag — a turn opening 23:30 and closing 01:00. Same reader-binding rule as service_period.ends_next_day. |
duration_minutes |
integer |
Yes |
1–480. |
party_size |
object |
No |
`{ min: integer ≥ 1, max: integer ≥ 1 }`. min <= max is enforced by the reference validator. |
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
date |
string |
Yes |
YYYY-MM-DD, calendar-checked (not just shape). |
table_refs |
array<string> |
No |
Empty or absent means the closure applies to the whole restaurant. |
turn_ref |
string or null |
No |
null means a whole-day closure. |
reason |
string |
Yes |
Non-empty. |
notes |
string |
No |
|
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
source_id |
string |
No |
|
name |
string |
Yes |
Non-empty. |
description |
string |
No |
|
image |
object |
No |
Media: `{ url, path? }`. |
sections |
array<MenuSection> |
No |
|
notes |
array<MenuNote> |
No |
|
translations |
object |
No |
Keyed by BCP-47 tag — see The specification. |
Recursive: a section can hold subsections.
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
name |
string |
Yes |
Non-empty. |
description |
string |
No |
|
image |
object |
No |
Media. |
sections |
array<MenuSection> |
No |
Subcategories, nested arbitrarily deep. |
items |
array<MenuItem> |
No |
|
translations |
object |
No |
|
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
source_id |
string |
No |
|
name |
string |
Yes |
Non-empty. |
description |
string |
No |
|
prices |
array<Price> |
Yes |
At least one entry — always an array, even for a single price. |
allergens |
array<string> |
No |
Unique. The EU FIC Reg. 1169/2011 Annex II enum — see The specification. |
label_refs |
array<string> |
No |
Unique. Free-form, restaurant-defined — distinct from allergens. |
available |
boolean |
No, default true |
|
frozen |
boolean |
No, default false |
|
pairs_with |
array<Pairing> |
No |
`{ item_ref, note? }` per entry. |
image |
object |
No |
Media. |
translations |
object |
No |
|
| Field |
Type |
Required |
Notes |
label |
string or null |
No |
For example Glass / Bottle on a wine. |
amount |
string |
Yes |
Decimal string, pattern `^-?\d+(\.\d{1,4})?$` — never a float. The minor-unit count is governed by restaurant.currency, not fixed at two: `"1200"` (JPY), `"6.00"` (EUR), `"0.500"` (KWD) are all well-formed. |
translations |
object |
No |
|
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
name |
string |
Yes |
Non-empty. |
color |
string |
No |
`#RRGGBB`. |
icon |
string |
No |
|
translations |
object |
No |
|
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
anchor |
object |
Yes |
`{ type: "menu" | "section" | "item", ref }`. |
position |
string |
Yes |
header or footer. |
kind |
string |
Yes |
info, warning, or tip. |
title |
string |
No |
Up to 100 characters. |
body |
string |
Yes |
1–1000 characters. |
color |
string |
No |
`#RRGGBB`. |
show_icon |
boolean |
No |
|
translations |
object |
No |
|
Requires the reservations module. Contains personal data — see ORDER overview § Modules.
| Field |
Type |
Required |
Notes |
ref |
string |
Yes |
|
source_id |
string |
No |
|
date |
string |
Yes |
YYYY-MM-DD. |
starts_at |
string |
Yes |
RFC 3339 with a mandatory offset. |
ends_at |
string |
No |
RFC 3339 with a mandatory offset. |
party_size |
integer |
Yes |
At least 1. |
table_refs |
array<string> |
No |
Empty means unassigned. |
turn_ref |
string or null |
No |
|
status |
string |
Yes |
pending, confirmed, seated, completed, cancelled, or no_show. |
source |
string |
No |
landing_page, crm, phone, walk_in, or api. |
guest |
object |
No |
See Guest. Personal data. |
special_requests |
string |
No |
|
notes |
string |
No |
|
cancellation_reason |
string |
No |
|
locale |
string |
No |
|
Personal data. Present only within the reservations module.
| Field |
Type |
Required |
Notes |
name |
string |
Yes |
Non-empty. |
email |
string |
No |
Email format. |
phone |
string |
No |
|