{
  "openapi": "3.1.0",
  "info": {
    "title": "Venue Seating Wizard API",
    "version": "1.0.0",
    "summary": "Public read-only description of the Venue Seating Wizard seating optimizer.",
    "description": "Venue Seating Wizard optimizes event seating entirely in the browser, so there is no compute endpoint to call. This API publishes everything a client or agent needs in order to drive the tool correctly: the guests and tables CSV schemas, the hard limits, the objective function the solver minimizes, and worked examples. Every operation is an unauthenticated GET returning JSON. Stable operations live under the major-version path /api/v1; a breaking payload change appears under a new major path rather than mutating /api/v1. Deprecations are announced with RFC 9745 Deprecation and RFC 8594 Sunset response headers at least 180 days before an operation is withdrawn, and are also listed on the developer portal. There are no write operations, so Idempotency-Key, pagination, batch and asynchronous-job patterns do not apply.",
    "termsOfService": "https://venue-seating-wizard.aviramk.com/en/terms/",
    "contact": {
      "name": "Venue Seating Wizard support",
      "url": "https://venue-seating-wizard.aviramk.com/contact/"
    },
    "x-deprecation-policy": "https://venue-seating-wizard.aviramk.com/deprecation-policy/",
    "x-sandbox": "https://venue-seating-wizard.aviramk.com/api/v1/sandbox.json",
    "x-sunset-policy": {
      "noticePeriodDays": 180,
      "headers": [
        "Deprecation (RFC 9745)",
        "Sunset (RFC 8594)"
      ],
      "policyUrl": "https://venue-seating-wizard.aviramk.com/deprecation-policy/",
      "currentlyDeprecated": []
    }
  },
  "servers": [
    {
      "url": "https://venue-seating-wizard.aviramk.com",
      "description": "Production"
    },
    {
      "url": "https://venue-seating-wizard.aviramk.com",
      "description": "Sandbox - identical to production because every operation is a read-only GET over static documents. See /api/v1/sandbox.json.",
      "x-sandbox": true
    }
  ],
  "externalDocs": {
    "description": "Developer portal",
    "url": "https://venue-seating-wizard.aviramk.com/developers/"
  },
  "tags": [
    {
      "name": "discovery",
      "description": "Service index and metadata."
    },
    {
      "name": "schemas",
      "description": "File formats and the objective function."
    },
    {
      "name": "examples",
      "description": "Worked examples and downloadable sample files."
    }
  ],
  "paths": {
    "/api/v1/index.json": {
      "get": {
        "operationId": "getApiIndex",
        "tags": [
          "discovery"
        ],
        "summary": "Get the API index",
        "description": "Returns the list of published operations, each with its URL, method and summary, plus links to the documentation, OpenAPI description and error format.",
        "security": [],
        "responses": {
          "200": {
            "description": "The service index.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "ApiIndex",
                  "description": "Index of every published operation.",
                  "required": [
                    "service",
                    "api_version",
                    "operations"
                  ],
                  "properties": {
                    "service": {
                      "type": "string",
                      "description": "Service name."
                    },
                    "description": {
                      "type": "string",
                      "description": "What the API covers."
                    },
                    "api_version": {
                      "type": "string",
                      "description": "Major contract version.",
                      "examples": [
                        "v1"
                      ]
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Developer portal URL."
                    },
                    "openapi_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of this OpenAPI description."
                    },
                    "terms_of_service": {
                      "type": "string",
                      "format": "uri",
                      "description": "Terms of service URL."
                    },
                    "privacy_policy": {
                      "type": "string",
                      "format": "uri",
                      "description": "Privacy policy URL."
                    },
                    "authentication": {
                      "type": "string",
                      "enum": [
                        "none"
                      ],
                      "description": "Authentication required to call the API."
                    },
                    "operations": {
                      "type": "array",
                      "description": "Published operations.",
                      "items": {
                        "type": "object",
                        "required": [
                          "operationId",
                          "method",
                          "url",
                          "summary"
                        ],
                        "properties": {
                          "operationId": {
                            "type": "string",
                            "description": "Matches the operationId in the OpenAPI description."
                          },
                          "method": {
                            "type": "string",
                            "enum": [
                              "GET"
                            ],
                            "description": "HTTP method."
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Absolute URL of the operation."
                          },
                          "summary": {
                            "type": "string",
                            "description": "One-line description of the operation."
                          }
                        }
                      }
                    },
                    "errors": {
                      "type": "object",
                      "description": "How errors are reported.",
                      "properties": {
                        "format": {
                          "type": "string",
                          "description": "Error document format."
                        },
                        "documentation_url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Documentation for the error format."
                        },
                        "example_url": {
                          "type": "string",
                          "format": "uri",
                          "description": "An example problem document."
                        }
                      }
                    },
                    "versioning": {
                      "type": "object",
                      "description": "How this API is versioned.",
                      "properties": {
                        "scheme": {
                          "type": "string",
                          "description": "Where the version appears."
                        },
                        "current": {
                          "type": "string",
                          "description": "Current major version."
                        },
                        "breaking_changes": {
                          "type": "string",
                          "description": "How a breaking change is delivered."
                        }
                      }
                    },
                    "deprecation_policy": {
                      "type": "object",
                      "description": "How and how far in advance an operation's removal is announced.",
                      "properties": {
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "The published policy."
                        },
                        "notice_period_days": {
                          "type": "integer",
                          "description": "Minimum days between announcement and removal."
                        },
                        "signalled_by": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Response headers used to signal a pending removal."
                        },
                        "currently_deprecated": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "operationIds scheduled for removal. Empty when none are."
                        },
                        "sunset": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "RFC 8594 sunset date for the current major version, or null when none is set."
                        }
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    },
    "/api/v1/app.json": {
      "get": {
        "operationId": "getApplicationMetadata",
        "tags": [
          "discovery"
        ],
        "summary": "Get application metadata",
        "description": "Returns what the application can do, which languages it speaks, where guest data lives, and the hard limits on guest rows, tables and file size.",
        "security": [],
        "responses": {
          "200": {
            "description": "Application metadata, capabilities and limits.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "ApplicationMetadata",
                  "description": "What the application does, and the limits it enforces.",
                  "required": [
                    "name",
                    "url",
                    "capabilities",
                    "limits"
                  ],
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "Application name."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical site URL."
                    },
                    "application_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL that opens the optimizer."
                    },
                    "description": {
                      "type": "string",
                      "description": "What the application does."
                    },
                    "price": {
                      "type": "object",
                      "description": "What the application costs.",
                      "properties": {
                        "amount": {
                          "type": "string",
                          "description": "Price amount."
                        },
                        "currency": {
                          "type": "string",
                          "description": "ISO 4217 currency code."
                        }
                      }
                    },
                    "authentication": {
                      "type": "string",
                      "enum": [
                        "none"
                      ],
                      "description": "Authentication required to use the application."
                    },
                    "requires_account": {
                      "type": "boolean",
                      "description": "Whether an account is needed."
                    },
                    "data_residency": {
                      "type": "string",
                      "description": "Where guest data is processed and stored."
                    },
                    "languages": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Interface languages as BCP 47 tags."
                    },
                    "capabilities": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Stable identifiers for supported features."
                    },
                    "limits": {
                      "type": "object",
                      "description": "Hard limits enforced by the application.",
                      "properties": {
                        "max_guest_rows": {
                          "type": "integer",
                          "description": "Largest number of guest rows accepted."
                        },
                        "max_tables": {
                          "type": "integer",
                          "description": "Largest number of tables accepted."
                        },
                        "max_guests_file_bytes": {
                          "type": "integer",
                          "description": "Largest accepted guests file in bytes."
                        },
                        "max_group_cohesion_strength": {
                          "type": "integer",
                          "description": "Highest cohesion strength a group can be given."
                        }
                      }
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "User documentation URL."
                    },
                    "developer_portal_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Developer portal URL."
                    },
                    "source_code_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Public source repository."
                    },
                    "versioning": {
                      "type": "object",
                      "description": "How this API is versioned.",
                      "properties": {
                        "scheme": {
                          "type": "string",
                          "description": "Where the version appears."
                        },
                        "current": {
                          "type": "string",
                          "description": "Current major version."
                        },
                        "breaking_changes": {
                          "type": "string",
                          "description": "How a breaking change is delivered."
                        }
                      }
                    },
                    "deprecation_policy": {
                      "type": "object",
                      "description": "How and how far in advance an operation's removal is announced.",
                      "properties": {
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "The published policy."
                        },
                        "notice_period_days": {
                          "type": "integer",
                          "description": "Minimum days between announcement and removal."
                        },
                        "signalled_by": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Response headers used to signal a pending removal."
                        },
                        "currently_deprecated": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "operationIds scheduled for removal. Empty when none are."
                        },
                        "sunset": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "RFC 8594 sunset date for the current major version, or null when none is set."
                        }
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    },
    "/api/v1/csv-schema.json": {
      "get": {
        "operationId": "getCsvSchema",
        "tags": [
          "schemas"
        ],
        "summary": "Get the CSV schemas",
        "description": "Returns the column-level schema of the guests file, the tables file and the exported seating file, including which columns are required, what each means, and how group paths are written.",
        "security": [],
        "responses": {
          "200": {
            "description": "Column-level schema for every CSV file.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "CsvSchema",
                  "description": "Schemas of every CSV file the application accepts or produces.",
                  "required": [
                    "api_version",
                    "files"
                  ],
                  "properties": {
                    "api_version": {
                      "type": "string",
                      "description": "Major contract version."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Human-readable documentation."
                    },
                    "files": {
                      "type": "object",
                      "description": "One entry per CSV file.",
                      "properties": {
                        "guests": {
                          "type": "object",
                          "title": "CsvFileSchema",
                          "description": "Schema for one of the CSV files the application accepts or produces.",
                          "required": [
                            "purpose",
                            "media_type",
                            "columns"
                          ],
                          "properties": {
                            "purpose": {
                              "type": "string",
                              "description": "What one row of the file represents."
                            },
                            "media_type": {
                              "type": "string",
                              "description": "Media type of the file.",
                              "examples": [
                                "text/csv"
                              ]
                            },
                            "header_matching": {
                              "type": "string",
                              "description": "How header names are matched."
                            },
                            "max_rows": {
                              "type": "integer",
                              "description": "Largest number of data rows accepted."
                            },
                            "max_bytes": {
                              "type": "integer",
                              "description": "Largest accepted file size in bytes."
                            },
                            "example_url": {
                              "type": "string",
                              "format": "uri",
                              "description": "Downloadable example of this file."
                            },
                            "columns": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "title": "CsvColumn",
                                "description": "One column of a CSV file the application accepts or produces.",
                                "required": [
                                  "name",
                                  "type",
                                  "description"
                                ],
                                "properties": {
                                  "name": {
                                    "type": "string",
                                    "description": "Column header as it appears in the file."
                                  },
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "string",
                                      "integer",
                                      "number"
                                    ],
                                    "description": "Value type expected in the column."
                                  },
                                  "required": {
                                    "type": "boolean",
                                    "description": "Whether the column must be present in the file."
                                  },
                                  "nullable": {
                                    "type": "boolean",
                                    "description": "Whether an empty cell is accepted."
                                  },
                                  "minimum": {
                                    "type": "number",
                                    "description": "Smallest accepted value for numeric columns."
                                  },
                                  "description": {
                                    "type": "string",
                                    "description": "What the column means."
                                  },
                                  "examples": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    },
                                    "description": "Example cell values."
                                  }
                                }
                              },
                              "description": "Columns of the file, in order."
                            }
                          }
                        },
                        "tables": {
                          "type": "object",
                          "title": "CsvFileSchema",
                          "description": "Schema for one of the CSV files the application accepts or produces.",
                          "required": [
                            "purpose",
                            "media_type",
                            "columns"
                          ],
                          "properties": {
                            "purpose": {
                              "type": "string",
                              "description": "What one row of the file represents."
                            },
                            "media_type": {
                              "type": "string",
                              "description": "Media type of the file.",
                              "examples": [
                                "text/csv"
                              ]
                            },
                            "header_matching": {
                              "type": "string",
                              "description": "How header names are matched."
                            },
                            "max_rows": {
                              "type": "integer",
                              "description": "Largest number of data rows accepted."
                            },
                            "max_bytes": {
                              "type": "integer",
                              "description": "Largest accepted file size in bytes."
                            },
                            "example_url": {
                              "type": "string",
                              "format": "uri",
                              "description": "Downloadable example of this file."
                            },
                            "columns": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "title": "CsvColumn",
                                "description": "One column of a CSV file the application accepts or produces.",
                                "required": [
                                  "name",
                                  "type",
                                  "description"
                                ],
                                "properties": {
                                  "name": {
                                    "type": "string",
                                    "description": "Column header as it appears in the file."
                                  },
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "string",
                                      "integer",
                                      "number"
                                    ],
                                    "description": "Value type expected in the column."
                                  },
                                  "required": {
                                    "type": "boolean",
                                    "description": "Whether the column must be present in the file."
                                  },
                                  "nullable": {
                                    "type": "boolean",
                                    "description": "Whether an empty cell is accepted."
                                  },
                                  "minimum": {
                                    "type": "number",
                                    "description": "Smallest accepted value for numeric columns."
                                  },
                                  "description": {
                                    "type": "string",
                                    "description": "What the column means."
                                  },
                                  "examples": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    },
                                    "description": "Example cell values."
                                  }
                                }
                              },
                              "description": "Columns of the file, in order."
                            }
                          }
                        },
                        "seating_export": {
                          "type": "object",
                          "title": "CsvFileSchema",
                          "description": "Schema for one of the CSV files the application accepts or produces.",
                          "required": [
                            "purpose",
                            "media_type",
                            "columns"
                          ],
                          "properties": {
                            "purpose": {
                              "type": "string",
                              "description": "What one row of the file represents."
                            },
                            "media_type": {
                              "type": "string",
                              "description": "Media type of the file.",
                              "examples": [
                                "text/csv"
                              ]
                            },
                            "header_matching": {
                              "type": "string",
                              "description": "How header names are matched."
                            },
                            "max_rows": {
                              "type": "integer",
                              "description": "Largest number of data rows accepted."
                            },
                            "max_bytes": {
                              "type": "integer",
                              "description": "Largest accepted file size in bytes."
                            },
                            "example_url": {
                              "type": "string",
                              "format": "uri",
                              "description": "Downloadable example of this file."
                            },
                            "columns": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "title": "CsvColumn",
                                "description": "One column of a CSV file the application accepts or produces.",
                                "required": [
                                  "name",
                                  "type",
                                  "description"
                                ],
                                "properties": {
                                  "name": {
                                    "type": "string",
                                    "description": "Column header as it appears in the file."
                                  },
                                  "type": {
                                    "type": "string",
                                    "enum": [
                                      "string",
                                      "integer",
                                      "number"
                                    ],
                                    "description": "Value type expected in the column."
                                  },
                                  "required": {
                                    "type": "boolean",
                                    "description": "Whether the column must be present in the file."
                                  },
                                  "nullable": {
                                    "type": "boolean",
                                    "description": "Whether an empty cell is accepted."
                                  },
                                  "minimum": {
                                    "type": "number",
                                    "description": "Smallest accepted value for numeric columns."
                                  },
                                  "description": {
                                    "type": "string",
                                    "description": "What the column means."
                                  },
                                  "examples": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    },
                                    "description": "Example cell values."
                                  }
                                }
                              },
                              "description": "Columns of the file, in order."
                            }
                          }
                        }
                      }
                    },
                    "group_semantics": {
                      "type": "object",
                      "description": "How group paths are interpreted.",
                      "properties": {
                        "identity": {
                          "type": "string",
                          "description": "How a group is identified."
                        },
                        "default_strength": {
                          "type": "string",
                          "description": "How default cohesion strength is assigned."
                        },
                        "separators": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Accepted hierarchy separators."
                        }
                      }
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    },
    "/api/v1/objective.json": {
      "get": {
        "operationId": "getObjective",
        "tags": [
          "schemas"
        ],
        "summary": "Get the objective function",
        "description": "Returns the terms, weights and scaling of the penalty the solver minimizes, the neighbourhoods the search explores, and the constraints that always hold in a reported arrangement.",
        "security": [],
        "responses": {
          "200": {
            "description": "The objective function and search description.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Objective",
                  "description": "The penalty the solver minimizes and how it searches.",
                  "required": [
                    "terms",
                    "hard_constraints"
                  ],
                  "properties": {
                    "api_version": {
                      "type": "string",
                      "description": "Major contract version."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Human-readable documentation."
                    },
                    "summary": {
                      "type": "string",
                      "description": "How the penalty is reported."
                    },
                    "scaling": {
                      "type": "object",
                      "description": "How raw penalties are converted to reported integers.",
                      "properties": {
                        "factor": {
                          "type": "integer",
                          "description": "Multiplier applied before rounding."
                        },
                        "rounding": {
                          "type": "string",
                          "description": "Rounding mode applied after scaling."
                        }
                      }
                    },
                    "terms": {
                      "type": "array",
                      "description": "The terms summed into the penalty.",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "weight",
                          "description"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Stable identifier for the term."
                          },
                          "weight": {
                            "type": "number",
                            "description": "Weight applied to the term."
                          },
                          "formula": {
                            "type": "string",
                            "description": "How the term is computed."
                          },
                          "charged_per": {
                            "type": "string",
                            "description": "What each charge of the term corresponds to."
                          },
                          "description": {
                            "type": "string",
                            "description": "What the term expresses."
                          }
                        }
                      }
                    },
                    "search": {
                      "type": "object",
                      "description": "How the solver explores arrangements.",
                      "properties": {
                        "construction": {
                          "type": "string",
                          "description": "How the first arrangement is built."
                        },
                        "improvement": {
                          "type": "string",
                          "description": "How arrangements are improved."
                        },
                        "neighbourhoods": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Move types the search explores."
                        },
                        "evaluation": {
                          "type": "string",
                          "description": "How candidate moves are scored."
                        },
                        "capacity": {
                          "type": "string",
                          "description": "How capacity is handled during the search."
                        },
                        "optimality": {
                          "type": "string",
                          "description": "What guarantee the solver offers."
                        }
                      }
                    },
                    "hard_constraints": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Properties that hold in every reported arrangement."
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    },
    "/api/v1/examples.json": {
      "get": {
        "operationId": "getExamples",
        "tags": [
          "examples"
        ],
        "summary": "Get worked examples",
        "description": "Returns links to downloadable valid sample CSV files, a step-by-step walkthrough from raw guest list to exported arrangement, and an example of the export format.",
        "security": [],
        "responses": {
          "200": {
            "description": "Sample files and a walkthrough.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Examples",
                  "description": "Downloadable sample files and a walkthrough.",
                  "required": [
                    "files"
                  ],
                  "properties": {
                    "api_version": {
                      "type": "string",
                      "description": "Major contract version."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Human-readable documentation."
                    },
                    "files": {
                      "type": "array",
                      "description": "Downloadable sample files.",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "url",
                          "media_type",
                          "description"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Stable identifier for the sample."
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Download URL."
                          },
                          "media_type": {
                            "type": "string",
                            "description": "Media type of the sample."
                          },
                          "description": {
                            "type": "string",
                            "description": "What the sample demonstrates."
                          }
                        }
                      }
                    },
                    "walkthrough": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Ordered steps from raw guest list to exported arrangement."
                    },
                    "export_example": {
                      "type": "string",
                      "description": "An example of the exported seating CSV."
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    },
    "/api/v1/health.json": {
      "get": {
        "operationId": "getHealth",
        "tags": [
          "discovery"
        ],
        "summary": "Get the service descriptor",
        "description": "Returns a static service descriptor naming the contract version and confirming that the service has no backend dependencies.",
        "security": [],
        "responses": {
          "200": {
            "description": "The service descriptor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Health",
                  "description": "Static service descriptor.",
                  "required": [
                    "status",
                    "service",
                    "api_version"
                  ],
                  "properties": {
                    "status": {
                      "type": "string",
                      "enum": [
                        "ok"
                      ],
                      "description": "Service status."
                    },
                    "service": {
                      "type": "string",
                      "description": "Service name."
                    },
                    "api_version": {
                      "type": "string",
                      "description": "Major contract version."
                    },
                    "architecture": {
                      "type": "string",
                      "description": "How the service is deployed and where computation happens."
                    },
                    "backend_dependencies": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Backend services this site depends on. Always empty."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Developer portal URL."
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    },
    "/api/v1/sandbox.json": {
      "get": {
        "operationId": "getSandbox",
        "tags": [
          "examples"
        ],
        "summary": "Describe the demo workspace",
        "description": "Returns the URL that opens the optimizer pre-loaded with the published example dataset, the dataset's own URLs and totals, and why no separate API sandbox base URL exists. Use it to exercise the full import, optimize and export flow without touching a real guest list.",
        "security": [],
        "responses": {
          "200": {
            "description": "The demo workspace descriptor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Sandbox",
                  "description": "The demo workspace: a reachable test environment for exercising the tool end to end.",
                  "required": [
                    "name",
                    "description",
                    "demo_url",
                    "dataset"
                  ],
                  "properties": {
                    "api_version": {
                      "type": "string",
                      "description": "Major contract version."
                    },
                    "name": {
                      "type": "string",
                      "description": "Name of the test environment."
                    },
                    "description": {
                      "type": "string",
                      "description": "What the demo workspace does."
                    },
                    "demo_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Opens the optimizer pre-loaded with the example dataset."
                    },
                    "demo_url_he": {
                      "type": "string",
                      "format": "uri",
                      "description": "The same demo in Hebrew."
                    },
                    "dataset": {
                      "type": "object",
                      "description": "The example data the demo loads.",
                      "properties": {
                        "guests": {
                          "type": "string",
                          "format": "uri",
                          "description": "Guests CSV used by the demo."
                        },
                        "tables": {
                          "type": "string",
                          "format": "uri",
                          "description": "Tables CSV used by the demo."
                        },
                        "guest_rows": {
                          "type": "integer",
                          "description": "Number of guest rows in the demo dataset."
                        },
                        "seats_needed": {
                          "type": "integer",
                          "description": "Seats the demo guest list needs."
                        },
                        "tables_count": {
                          "type": "integer",
                          "description": "Number of tables in the demo venue."
                        },
                        "seats_available": {
                          "type": "integer",
                          "description": "Seats the demo venue provides."
                        }
                      }
                    },
                    "isolation": {
                      "type": "string",
                      "description": "Why a demo run cannot affect anyone else."
                    },
                    "api_sandbox": {
                      "type": "object",
                      "description": "Whether a separate API base URL is needed for testing.",
                      "properties": {
                        "required": {
                          "type": "boolean",
                          "description": "Always false: the API is read-only."
                        },
                        "reason": {
                          "type": "string",
                          "description": "Why no separate base URL exists."
                        },
                        "base_url": {
                          "type": "string",
                          "format": "uri",
                          "description": "The single API base URL."
                        }
                      }
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Human-readable sandbox documentation."
                    }
                  }
                }
              }
            },
            "headers": {
              "Deprecation": {
                "description": "RFC 9745. Present only once this operation has been deprecated, carrying the date the deprecation took effect. Absent while the operation is current, which is the case for every operation today.",
                "required": false,
                "schema": {
                  "type": "string",
                  "examples": [
                    "@1735689600",
                    "Wed, 01 Jan 2025 00:00:00 GMT"
                  ]
                }
              },
              "Sunset": {
                "description": "RFC 8594. Present only once this operation has a removal date, carrying the date it stops being served. Announced at least 180 days before removal. See the deprecation policy at https://venue-seating-wizard.aviramk.com/deprecation-policy/.",
                "required": false,
                "schema": {
                  "type": "string",
                  "format": "http-date",
                  "examples": [
                    "Sat, 01 Aug 2026 00:00:00 GMT"
                  ]
                }
              },
              "Link": {
                "description": "RFC 8288 links to the service description, catalogs and markdown alternates. When an operation is deprecated this also carries a rel=\"successor-version\" link to its replacement.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Entity tag identifying this version of the document. Send it back as If-None-Match to revalidate cheaply.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No endpoint is published at this path. The body is an RFC 9457 problem document whose `status` member is 404; because the site is static, the transport status is 200.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Problem",
                  "description": "RFC 9457 problem document describing an error.",
                  "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string",
                      "description": "Short, human-readable summary of the problem type."
                    },
                    "status": {
                      "type": "integer",
                      "description": "Authoritative HTTP status code for the problem."
                    },
                    "code": {
                      "type": "string",
                      "description": "Stable machine-readable error code.",
                      "examples": [
                        "endpoint_not_found"
                      ]
                    },
                    "detail": {
                      "type": "string",
                      "description": "Human-readable explanation specific to this occurrence."
                    },
                    "resolution": {
                      "type": "string",
                      "description": "Hint describing how a client can resolve the problem."
                    },
                    "documentation_url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Documentation covering this error."
                    }
                  }
                }
              }
            }
          },
          "304": {
            "description": "The document is unchanged since the ETag supplied in If-None-Match. No body is returned; keep using the cached copy.",
            "headers": {
              "ETag": {
                "description": "Entity tag identifying this version of the document.",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "deprecated": false,
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "required": false,
            "description": "An ETag from a previous response. The CDN answers 304 Not Modified when the document is unchanged, so an agent can revalidate a cached copy without downloading it again.",
            "schema": {
              "type": "string",
              "examples": [
                "W/\"0e1558ed3324e3169dbaa6629cc7e746\""
              ]
            }
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {},
    "schemas": {
      "Problem": {
        "type": "object",
        "title": "Problem",
        "description": "RFC 9457 problem document describing an error.",
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "URI identifying the problem type."
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the problem type."
          },
          "status": {
            "type": "integer",
            "description": "Authoritative HTTP status code for the problem."
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable error code.",
            "examples": [
              "endpoint_not_found"
            ]
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation specific to this occurrence."
          },
          "resolution": {
            "type": "string",
            "description": "Hint describing how a client can resolve the problem."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Documentation covering this error."
          }
        }
      },
      "CsvColumn": {
        "type": "object",
        "title": "CsvColumn",
        "description": "One column of a CSV file the application accepts or produces.",
        "required": [
          "name",
          "type",
          "description"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Column header as it appears in the file."
          },
          "type": {
            "type": "string",
            "enum": [
              "string",
              "integer",
              "number"
            ],
            "description": "Value type expected in the column."
          },
          "required": {
            "type": "boolean",
            "description": "Whether the column must be present in the file."
          },
          "nullable": {
            "type": "boolean",
            "description": "Whether an empty cell is accepted."
          },
          "minimum": {
            "type": "number",
            "description": "Smallest accepted value for numeric columns."
          },
          "description": {
            "type": "string",
            "description": "What the column means."
          },
          "examples": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Example cell values."
          }
        }
      },
      "CsvFileSchema": {
        "type": "object",
        "title": "CsvFileSchema",
        "description": "Schema for one of the CSV files the application accepts or produces.",
        "required": [
          "purpose",
          "media_type",
          "columns"
        ],
        "properties": {
          "purpose": {
            "type": "string",
            "description": "What one row of the file represents."
          },
          "media_type": {
            "type": "string",
            "description": "Media type of the file.",
            "examples": [
              "text/csv"
            ]
          },
          "header_matching": {
            "type": "string",
            "description": "How header names are matched."
          },
          "max_rows": {
            "type": "integer",
            "description": "Largest number of data rows accepted."
          },
          "max_bytes": {
            "type": "integer",
            "description": "Largest accepted file size in bytes."
          },
          "example_url": {
            "type": "string",
            "format": "uri",
            "description": "Downloadable example of this file."
          },
          "columns": {
            "type": "array",
            "items": {
              "type": "object",
              "title": "CsvColumn",
              "description": "One column of a CSV file the application accepts or produces.",
              "required": [
                "name",
                "type",
                "description"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Column header as it appears in the file."
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "string",
                    "integer",
                    "number"
                  ],
                  "description": "Value type expected in the column."
                },
                "required": {
                  "type": "boolean",
                  "description": "Whether the column must be present in the file."
                },
                "nullable": {
                  "type": "boolean",
                  "description": "Whether an empty cell is accepted."
                },
                "minimum": {
                  "type": "number",
                  "description": "Smallest accepted value for numeric columns."
                },
                "description": {
                  "type": "string",
                  "description": "What the column means."
                },
                "examples": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Example cell values."
                }
              }
            },
            "description": "Columns of the file, in order."
          }
        }
      },
      "ApiIndex": {
        "type": "object",
        "title": "ApiIndex",
        "description": "Index of every published operation.",
        "required": [
          "service",
          "api_version",
          "operations"
        ],
        "properties": {
          "service": {
            "type": "string",
            "description": "Service name."
          },
          "description": {
            "type": "string",
            "description": "What the API covers."
          },
          "api_version": {
            "type": "string",
            "description": "Major contract version.",
            "examples": [
              "v1"
            ]
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Developer portal URL."
          },
          "openapi_url": {
            "type": "string",
            "format": "uri",
            "description": "URL of this OpenAPI description."
          },
          "terms_of_service": {
            "type": "string",
            "format": "uri",
            "description": "Terms of service URL."
          },
          "privacy_policy": {
            "type": "string",
            "format": "uri",
            "description": "Privacy policy URL."
          },
          "authentication": {
            "type": "string",
            "enum": [
              "none"
            ],
            "description": "Authentication required to call the API."
          },
          "operations": {
            "type": "array",
            "description": "Published operations.",
            "items": {
              "type": "object",
              "required": [
                "operationId",
                "method",
                "url",
                "summary"
              ],
              "properties": {
                "operationId": {
                  "type": "string",
                  "description": "Matches the operationId in the OpenAPI description."
                },
                "method": {
                  "type": "string",
                  "enum": [
                    "GET"
                  ],
                  "description": "HTTP method."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Absolute URL of the operation."
                },
                "summary": {
                  "type": "string",
                  "description": "One-line description of the operation."
                }
              }
            }
          },
          "errors": {
            "type": "object",
            "description": "How errors are reported.",
            "properties": {
              "format": {
                "type": "string",
                "description": "Error document format."
              },
              "documentation_url": {
                "type": "string",
                "format": "uri",
                "description": "Documentation for the error format."
              },
              "example_url": {
                "type": "string",
                "format": "uri",
                "description": "An example problem document."
              }
            }
          },
          "versioning": {
            "type": "object",
            "description": "How this API is versioned.",
            "properties": {
              "scheme": {
                "type": "string",
                "description": "Where the version appears."
              },
              "current": {
                "type": "string",
                "description": "Current major version."
              },
              "breaking_changes": {
                "type": "string",
                "description": "How a breaking change is delivered."
              }
            }
          },
          "deprecation_policy": {
            "type": "object",
            "description": "How and how far in advance an operation's removal is announced.",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The published policy."
              },
              "notice_period_days": {
                "type": "integer",
                "description": "Minimum days between announcement and removal."
              },
              "signalled_by": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Response headers used to signal a pending removal."
              },
              "currently_deprecated": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "operationIds scheduled for removal. Empty when none are."
              },
              "sunset": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "RFC 8594 sunset date for the current major version, or null when none is set."
              }
            }
          }
        }
      },
      "ApplicationMetadata": {
        "type": "object",
        "title": "ApplicationMetadata",
        "description": "What the application does, and the limits it enforces.",
        "required": [
          "name",
          "url",
          "capabilities",
          "limits"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Application name."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical site URL."
          },
          "application_url": {
            "type": "string",
            "format": "uri",
            "description": "URL that opens the optimizer."
          },
          "description": {
            "type": "string",
            "description": "What the application does."
          },
          "price": {
            "type": "object",
            "description": "What the application costs.",
            "properties": {
              "amount": {
                "type": "string",
                "description": "Price amount."
              },
              "currency": {
                "type": "string",
                "description": "ISO 4217 currency code."
              }
            }
          },
          "authentication": {
            "type": "string",
            "enum": [
              "none"
            ],
            "description": "Authentication required to use the application."
          },
          "requires_account": {
            "type": "boolean",
            "description": "Whether an account is needed."
          },
          "data_residency": {
            "type": "string",
            "description": "Where guest data is processed and stored."
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Interface languages as BCP 47 tags."
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Stable identifiers for supported features."
          },
          "limits": {
            "type": "object",
            "description": "Hard limits enforced by the application.",
            "properties": {
              "max_guest_rows": {
                "type": "integer",
                "description": "Largest number of guest rows accepted."
              },
              "max_tables": {
                "type": "integer",
                "description": "Largest number of tables accepted."
              },
              "max_guests_file_bytes": {
                "type": "integer",
                "description": "Largest accepted guests file in bytes."
              },
              "max_group_cohesion_strength": {
                "type": "integer",
                "description": "Highest cohesion strength a group can be given."
              }
            }
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "User documentation URL."
          },
          "developer_portal_url": {
            "type": "string",
            "format": "uri",
            "description": "Developer portal URL."
          },
          "source_code_url": {
            "type": "string",
            "format": "uri",
            "description": "Public source repository."
          },
          "versioning": {
            "type": "object",
            "description": "How this API is versioned.",
            "properties": {
              "scheme": {
                "type": "string",
                "description": "Where the version appears."
              },
              "current": {
                "type": "string",
                "description": "Current major version."
              },
              "breaking_changes": {
                "type": "string",
                "description": "How a breaking change is delivered."
              }
            }
          },
          "deprecation_policy": {
            "type": "object",
            "description": "How and how far in advance an operation's removal is announced.",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "The published policy."
              },
              "notice_period_days": {
                "type": "integer",
                "description": "Minimum days between announcement and removal."
              },
              "signalled_by": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Response headers used to signal a pending removal."
              },
              "currently_deprecated": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "operationIds scheduled for removal. Empty when none are."
              },
              "sunset": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "RFC 8594 sunset date for the current major version, or null when none is set."
              }
            }
          }
        }
      },
      "CsvSchema": {
        "type": "object",
        "title": "CsvSchema",
        "description": "Schemas of every CSV file the application accepts or produces.",
        "required": [
          "api_version",
          "files"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "description": "Major contract version."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Human-readable documentation."
          },
          "files": {
            "type": "object",
            "description": "One entry per CSV file.",
            "properties": {
              "guests": {
                "type": "object",
                "title": "CsvFileSchema",
                "description": "Schema for one of the CSV files the application accepts or produces.",
                "required": [
                  "purpose",
                  "media_type",
                  "columns"
                ],
                "properties": {
                  "purpose": {
                    "type": "string",
                    "description": "What one row of the file represents."
                  },
                  "media_type": {
                    "type": "string",
                    "description": "Media type of the file.",
                    "examples": [
                      "text/csv"
                    ]
                  },
                  "header_matching": {
                    "type": "string",
                    "description": "How header names are matched."
                  },
                  "max_rows": {
                    "type": "integer",
                    "description": "Largest number of data rows accepted."
                  },
                  "max_bytes": {
                    "type": "integer",
                    "description": "Largest accepted file size in bytes."
                  },
                  "example_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Downloadable example of this file."
                  },
                  "columns": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "title": "CsvColumn",
                      "description": "One column of a CSV file the application accepts or produces.",
                      "required": [
                        "name",
                        "type",
                        "description"
                      ],
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Column header as it appears in the file."
                        },
                        "type": {
                          "type": "string",
                          "enum": [
                            "string",
                            "integer",
                            "number"
                          ],
                          "description": "Value type expected in the column."
                        },
                        "required": {
                          "type": "boolean",
                          "description": "Whether the column must be present in the file."
                        },
                        "nullable": {
                          "type": "boolean",
                          "description": "Whether an empty cell is accepted."
                        },
                        "minimum": {
                          "type": "number",
                          "description": "Smallest accepted value for numeric columns."
                        },
                        "description": {
                          "type": "string",
                          "description": "What the column means."
                        },
                        "examples": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Example cell values."
                        }
                      }
                    },
                    "description": "Columns of the file, in order."
                  }
                }
              },
              "tables": {
                "type": "object",
                "title": "CsvFileSchema",
                "description": "Schema for one of the CSV files the application accepts or produces.",
                "required": [
                  "purpose",
                  "media_type",
                  "columns"
                ],
                "properties": {
                  "purpose": {
                    "type": "string",
                    "description": "What one row of the file represents."
                  },
                  "media_type": {
                    "type": "string",
                    "description": "Media type of the file.",
                    "examples": [
                      "text/csv"
                    ]
                  },
                  "header_matching": {
                    "type": "string",
                    "description": "How header names are matched."
                  },
                  "max_rows": {
                    "type": "integer",
                    "description": "Largest number of data rows accepted."
                  },
                  "max_bytes": {
                    "type": "integer",
                    "description": "Largest accepted file size in bytes."
                  },
                  "example_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Downloadable example of this file."
                  },
                  "columns": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "title": "CsvColumn",
                      "description": "One column of a CSV file the application accepts or produces.",
                      "required": [
                        "name",
                        "type",
                        "description"
                      ],
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Column header as it appears in the file."
                        },
                        "type": {
                          "type": "string",
                          "enum": [
                            "string",
                            "integer",
                            "number"
                          ],
                          "description": "Value type expected in the column."
                        },
                        "required": {
                          "type": "boolean",
                          "description": "Whether the column must be present in the file."
                        },
                        "nullable": {
                          "type": "boolean",
                          "description": "Whether an empty cell is accepted."
                        },
                        "minimum": {
                          "type": "number",
                          "description": "Smallest accepted value for numeric columns."
                        },
                        "description": {
                          "type": "string",
                          "description": "What the column means."
                        },
                        "examples": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Example cell values."
                        }
                      }
                    },
                    "description": "Columns of the file, in order."
                  }
                }
              },
              "seating_export": {
                "type": "object",
                "title": "CsvFileSchema",
                "description": "Schema for one of the CSV files the application accepts or produces.",
                "required": [
                  "purpose",
                  "media_type",
                  "columns"
                ],
                "properties": {
                  "purpose": {
                    "type": "string",
                    "description": "What one row of the file represents."
                  },
                  "media_type": {
                    "type": "string",
                    "description": "Media type of the file.",
                    "examples": [
                      "text/csv"
                    ]
                  },
                  "header_matching": {
                    "type": "string",
                    "description": "How header names are matched."
                  },
                  "max_rows": {
                    "type": "integer",
                    "description": "Largest number of data rows accepted."
                  },
                  "max_bytes": {
                    "type": "integer",
                    "description": "Largest accepted file size in bytes."
                  },
                  "example_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Downloadable example of this file."
                  },
                  "columns": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "title": "CsvColumn",
                      "description": "One column of a CSV file the application accepts or produces.",
                      "required": [
                        "name",
                        "type",
                        "description"
                      ],
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Column header as it appears in the file."
                        },
                        "type": {
                          "type": "string",
                          "enum": [
                            "string",
                            "integer",
                            "number"
                          ],
                          "description": "Value type expected in the column."
                        },
                        "required": {
                          "type": "boolean",
                          "description": "Whether the column must be present in the file."
                        },
                        "nullable": {
                          "type": "boolean",
                          "description": "Whether an empty cell is accepted."
                        },
                        "minimum": {
                          "type": "number",
                          "description": "Smallest accepted value for numeric columns."
                        },
                        "description": {
                          "type": "string",
                          "description": "What the column means."
                        },
                        "examples": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Example cell values."
                        }
                      }
                    },
                    "description": "Columns of the file, in order."
                  }
                }
              }
            }
          },
          "group_semantics": {
            "type": "object",
            "description": "How group paths are interpreted.",
            "properties": {
              "identity": {
                "type": "string",
                "description": "How a group is identified."
              },
              "default_strength": {
                "type": "string",
                "description": "How default cohesion strength is assigned."
              },
              "separators": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Accepted hierarchy separators."
              }
            }
          }
        }
      },
      "Objective": {
        "type": "object",
        "title": "Objective",
        "description": "The penalty the solver minimizes and how it searches.",
        "required": [
          "terms",
          "hard_constraints"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "description": "Major contract version."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Human-readable documentation."
          },
          "summary": {
            "type": "string",
            "description": "How the penalty is reported."
          },
          "scaling": {
            "type": "object",
            "description": "How raw penalties are converted to reported integers.",
            "properties": {
              "factor": {
                "type": "integer",
                "description": "Multiplier applied before rounding."
              },
              "rounding": {
                "type": "string",
                "description": "Rounding mode applied after scaling."
              }
            }
          },
          "terms": {
            "type": "array",
            "description": "The terms summed into the penalty.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "weight",
                "description"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable identifier for the term."
                },
                "weight": {
                  "type": "number",
                  "description": "Weight applied to the term."
                },
                "formula": {
                  "type": "string",
                  "description": "How the term is computed."
                },
                "charged_per": {
                  "type": "string",
                  "description": "What each charge of the term corresponds to."
                },
                "description": {
                  "type": "string",
                  "description": "What the term expresses."
                }
              }
            }
          },
          "search": {
            "type": "object",
            "description": "How the solver explores arrangements.",
            "properties": {
              "construction": {
                "type": "string",
                "description": "How the first arrangement is built."
              },
              "improvement": {
                "type": "string",
                "description": "How arrangements are improved."
              },
              "neighbourhoods": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Move types the search explores."
              },
              "evaluation": {
                "type": "string",
                "description": "How candidate moves are scored."
              },
              "capacity": {
                "type": "string",
                "description": "How capacity is handled during the search."
              },
              "optimality": {
                "type": "string",
                "description": "What guarantee the solver offers."
              }
            }
          },
          "hard_constraints": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Properties that hold in every reported arrangement."
          }
        }
      },
      "Examples": {
        "type": "object",
        "title": "Examples",
        "description": "Downloadable sample files and a walkthrough.",
        "required": [
          "files"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "description": "Major contract version."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Human-readable documentation."
          },
          "files": {
            "type": "array",
            "description": "Downloadable sample files.",
            "items": {
              "type": "object",
              "required": [
                "id",
                "url",
                "media_type",
                "description"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable identifier for the sample."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Download URL."
                },
                "media_type": {
                  "type": "string",
                  "description": "Media type of the sample."
                },
                "description": {
                  "type": "string",
                  "description": "What the sample demonstrates."
                }
              }
            }
          },
          "walkthrough": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Ordered steps from raw guest list to exported arrangement."
          },
          "export_example": {
            "type": "string",
            "description": "An example of the exported seating CSV."
          }
        }
      },
      "Health": {
        "type": "object",
        "title": "Health",
        "description": "Static service descriptor.",
        "required": [
          "status",
          "service",
          "api_version"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ok"
            ],
            "description": "Service status."
          },
          "service": {
            "type": "string",
            "description": "Service name."
          },
          "api_version": {
            "type": "string",
            "description": "Major contract version."
          },
          "architecture": {
            "type": "string",
            "description": "How the service is deployed and where computation happens."
          },
          "backend_dependencies": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Backend services this site depends on. Always empty."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Developer portal URL."
          }
        }
      },
      "Sandbox": {
        "type": "object",
        "title": "Sandbox",
        "description": "The demo workspace: a reachable test environment for exercising the tool end to end.",
        "required": [
          "name",
          "description",
          "demo_url",
          "dataset"
        ],
        "properties": {
          "api_version": {
            "type": "string",
            "description": "Major contract version."
          },
          "name": {
            "type": "string",
            "description": "Name of the test environment."
          },
          "description": {
            "type": "string",
            "description": "What the demo workspace does."
          },
          "demo_url": {
            "type": "string",
            "format": "uri",
            "description": "Opens the optimizer pre-loaded with the example dataset."
          },
          "demo_url_he": {
            "type": "string",
            "format": "uri",
            "description": "The same demo in Hebrew."
          },
          "dataset": {
            "type": "object",
            "description": "The example data the demo loads.",
            "properties": {
              "guests": {
                "type": "string",
                "format": "uri",
                "description": "Guests CSV used by the demo."
              },
              "tables": {
                "type": "string",
                "format": "uri",
                "description": "Tables CSV used by the demo."
              },
              "guest_rows": {
                "type": "integer",
                "description": "Number of guest rows in the demo dataset."
              },
              "seats_needed": {
                "type": "integer",
                "description": "Seats the demo guest list needs."
              },
              "tables_count": {
                "type": "integer",
                "description": "Number of tables in the demo venue."
              },
              "seats_available": {
                "type": "integer",
                "description": "Seats the demo venue provides."
              }
            }
          },
          "isolation": {
            "type": "string",
            "description": "Why a demo run cannot affect anyone else."
          },
          "api_sandbox": {
            "type": "object",
            "description": "Whether a separate API base URL is needed for testing.",
            "properties": {
              "required": {
                "type": "boolean",
                "description": "Always false: the API is read-only."
              },
              "reason": {
                "type": "string",
                "description": "Why no separate base URL exists."
              },
              "base_url": {
                "type": "string",
                "format": "uri",
                "description": "The single API base URL."
              }
            }
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Human-readable sandbox documentation."
          }
        }
      }
    }
  },
  "security": []
}
