Open this in Magpie

A venue's seating plan can be written as one JSON document and pasted into Magpie. On Seating plan, a team admin chooses Import JSON… and Magpie adds every section, table and combination in the document to the venue the page shows. The document can also say where each table stands on its section's map, how big the room is, and where the walls, the bar, the doors and the host stand are.

An import only adds. A section whose name the venue already has gets the new tables and fixtures; a table or combination is never changed or removed. A table whose name the venue already has, archived ones included, is refused. An import never places or moves a table the venue already has: drag those on the section's map on Seating plan.

Use Copy the prompt in the import box to copy these instructions for an assistant you use. The assistant will ask you about your rooms, your tables, the tables you push together, and for photos or a sketch of each room, then write the document. Magpie writes no text itself.

Importing is all or nothing. Magpie will check the whole document before it saves anything, and will name a mistake by its place in the document, such as "sections[0].tables[3].maxParty" must be between 1 and 99. A field that is not in the format is refused.

The document

{
  "units": "cm",
  "sections": [
    {
      "name": "Main room",
      "room": { "width": 1200, "height": 800 },
      "tables": [
        { "name": "1", "minParty": 1, "maxParty": 2, "x": 150, "y": 150 },
        { "name": "2", "minParty": 1, "maxParty": 2, "x": 350, "y": 150 },
        { "name": "3", "minParty": 2, "maxParty": 4, "shape": "round", "x": 550, "y": 200 },
        { "name": "4", "minParty": 2, "maxParty": 4, "x": 750, "y": 200 },
        { "name": "5", "minParty": 4, "maxParty": 6, "shape": "rectangle", "x": 1000, "y": 200, "width": 150, "height": 90 },
        { "name": "Bar", "minParty": 1, "maxParty": 4, "shape": "bar", "x": 950, "y": 660 }
      ],
      "fixtures": [
        { "kind": "wall", "x": 600, "y": 8, "width": 1200, "height": 15 },
        { "kind": "half_wall", "x": 600, "y": 400, "width": 400, "height": 15 },
        { "kind": "bar", "x": 950, "y": 600, "width": 300, "height": 60, "text": "Bar" },
        { "kind": "door", "x": 150, "y": 792, "width": 90, "height": 15, "text": "Entrance" },
        { "kind": "host_stand", "x": 300, "y": 720 },
        { "kind": "label", "x": 600, "y": 60, "text": "Kitchen pass" }
      ]
    },
    {
      "name": "Terrace",
      "onlineBookable": false,
      "tables": [
        { "name": "T1", "minParty": 2, "maxParty": 6, "shape": "rectangle" }
      ]
    }
  ],
  "combinations": [
    { "tables": ["1", "2"], "minParty": 3, "maxParty": 4 },
    { "name": "Big table", "tables": ["3", "4"], "maxParty": 8 }
  ]
}

Fields

The document is an object with sections, a list of 1 to 30 sections, optionally combinations, a list of up to 100, and optionally units.

  • units: cm or in, the unit of every length and position in the document. It is cm when left out. A length may also be written as text with its unit, such as "90 cm", "36 in" or "3 ft 6 in".

A section has:

  • name: the section's name, up to 80 characters, such as "Main room" or "Terrace".
  • onlineBookable: false when diners cannot reserve its tables online. It is true when left out.
  • tables: its tables, in the order the book shows them. The whole document holds up to 200 tables.
  • room: optional, the room's width and height, each from 1 m to 100 m. When left out, the room is drawn as big as its tables and fixtures need, and at least 12 by 8 m.
  • fixtures: optional, up to 60 things on the map that are not tables.

A table has:

  • name: its name or number, up to 40 characters. Two tables of a venue cannot share a name.
  • minParty and maxParty: the fewest and most people it seats, from 1 to 99. They are 1 and 2 when left out.
  • shape: square, round, rectangle, booth or bar (a row of bar seats, one stool for each seat). It is square when left out. Bar seats are for walk-ins: they are never offered online, so their onlineBookable is not used. Without a width, they are 60 cm long for each seat.
  • onlineBookable: false when diners cannot reserve it online.
  • x and y: optional, where the centre of the table stands in the room. Give both or neither. A table without them is drawn in a grid on its section's map, marked as not placed yet.
  • width and height: optional, the table's size, each from 20 cm to 20 m. When left out, the table is drawn at the usual size for its shape and seats, such as 75 cm for a two-seat square and 90 cm for a four-seat round table. One side given alone on a round or square table is used for both.
  • rotation: optional, in whole degrees clockwise. It is 0 when left out.

A fixture has:

  • kind: wall, half_wall, bar, door, host_stand, window, pillar, stairs, plant or label.
  • x and y: where its centre stands in the room.
  • width and height: optional, each from 5 cm to 20 m. When left out, each kind has its own size, such as 300 by 15 cm for a wall and 90 by 15 cm for a door.
  • rotation: optional, in whole degrees clockwise.
  • text: up to 80 characters, shown on the map. A label needs it; a bar, a door, a host_stand and stairs may have it; other kinds have none. A bar, a host_stand and stairs without it show their name, such as Bar.

A combination joins tables for larger parties:

  • tables: the names of 2 to 12 tables in the same section, from this document or already in the venue.
  • name: optional, such as "Big table", up to 80 characters. Magpie names it after its tables when left out ("1+2").
  • minParty and maxParty: optional. When left out, it seats from the largest of its tables' minParty up to its tables' seats added together.
  • onlineBookable: false when diners cannot reserve it online.

Positions on the map

Each section is drawn as a rectangle seen from above. x is measured from the room's left edge to the right and y from its top edge down, in the document's units. A position is from 0 to 100 m.

Two tables of one section whose outlines overlap are refused, naming both, such as "sections[0].tables[3]" overlaps "sections[0].tables[1]". Chairs are not counted. A table may overlap a fixture, so bar seats can stand at the bar.

Positions do not need to be exact. After the import, tables and fixtures can be moved and resized on the map on Seating plan.

Writing a plan from photos

An assistant writing this document from photos or a sketch of the rooms works this way:

  1. Ask for photos or a sketch of each room and roughly how big it is, where the entrance and the host stand are, and how the restaurant numbers its tables.
  2. Describe each room as a rectangle seen from above, with the entrance at the bottom.
  3. Give every table a centre in that rectangle. Where the person has given no sizes, use ordinary ones: 75 cm for a two-seat square, 90 cm for a four-seat table, 120 cm for a six-seat round table. Leave at least 90 cm between tables for an aisle.
  4. Put the walls, the bar, the doors and the host stand in as fixtures.

If an import is refused for a reason this page does not explain, Contact support.

Ask Magpie support

Send Magpie staff a question about anything this article does not answer.