{
  "api_version": "v1",
  "documentation_url": "https://venue-seating-wizard.aviramk.com/docs/",
  "files": {
    "guests": {
      "purpose": "One row per booking. Party size is the number of chairs the row needs, so a couple is a single row with party_size 2.",
      "media_type": "text/csv",
      "header_matching": "case-insensitive, surrounding whitespace ignored",
      "max_rows": 1000,
      "max_bytes": 10485760,
      "example_url": "https://venue-seating-wizard.aviramk.com/examples/guests.csv",
      "columns": [
        {
          "name": "name",
          "type": "string",
          "required": true,
          "description": "Unique identifier for the booking, shown on the seating chart."
        },
        {
          "name": "party_size",
          "type": "integer",
          "required": true,
          "minimum": 0,
          "description": "Number of chairs the booking needs. 0 marks the row inactive so it is kept in the file but not seated."
        },
        {
          "name": "groups",
          "type": "string",
          "required": true,
          "nullable": true,
          "description": "Comma-separated list of group paths. A path nests subgroups with '>' (or '<' for right-to-left lists), e.g. 'Family>Cousins'. Quote the cell when it names more than one group. May be empty.",
          "examples": ["Family>Cousins", "\"Work,Friends\"", ""]
        }
      ]
    },
    "tables": {
      "purpose": "One row per table in the venue.",
      "media_type": "text/csv",
      "header_matching": "case-insensitive, surrounding whitespace ignored",
      "max_rows": 100,
      "example_url": "https://venue-seating-wizard.aviramk.com/examples/tables.csv",
      "columns": [
        { "name": "id", "type": "string", "required": true, "description": "Unique table identifier." },
        { "name": "capacity", "type": "integer", "required": true, "minimum": 1, "description": "Number of seats at the table." },
        { "name": "x", "type": "number", "required": false, "description": "Horizontal position in the venue view. Leave blank to have the table placed automatically." },
        { "name": "y", "type": "number", "required": false, "description": "Vertical position in the venue view. Leave blank to have the table placed automatically." }
      ]
    },
    "seating_export": {
      "purpose": "One row per table, produced when the arrangement is exported.",
      "media_type": "text/csv",
      "example_url": "https://venue-seating-wizard.aviramk.com/api/v1/examples.json",
      "columns": [
        { "name": "Table", "type": "string", "description": "Table identifier." },
        { "name": "Guests", "type": "string", "description": "Comma-separated guest names inside a single quoted cell." },
        { "name": "Taken", "type": "integer", "description": "Number of guest rows seated at the table." },
        { "name": "Capacity", "type": "integer", "description": "Seats available at the table." }
      ]
    }
  },
  "group_semantics": {
    "identity": "A group is identified by its full path, so two subgroups with the same leaf name under different parents stay distinct.",
    "default_strength": "Cohesion strength defaults to 3 at the top level and rises by one per nesting level, capped at 10. Every strength is editable in the interface.",
    "separators": [">", "<"]
  }
}
