Схемы залов

Схема зала разделена на две части: геометрию (что где нарисовано) и занятость (что уже продано). Это главное решение раздела: геометрия арены на 5000 мест весит 615 КБ, а занятость — 130 байт. Если отдавать их вместе, каждое обновление статусов тянуло бы весь зал. Право: scheme:read.

Геометрия

GET https://api.ctickets.ru/v1/events/145/scheme
If-None-Match: "e3b0c44298fc1c14..."

Ответ содержит ETag. Присылайте его в If-None-Match — при неизменной схеме придёт 304 без тела.

{
  "data": {
    "scheme": { "id": 8, "name": "Общая схема", "width": 1600, "height": 1200 },
    "price_groups": [{ "id": "tier-a", "name": "Партер", "color": "#22c55e", "price": {"amount": 300000, "currency": "RUB"} }],
    "zones": [{
      "id": "zone-1",
      "name": "1 сектор",
      "is_standing": false,
      "seats": [{ "id": "zone-1-1-1", "row": "1", "number": "1", "x": 402, "y": 548, "price_group_id": "tier-a" }]
    }],
    "stage": { "x": 700, "y": 120, "width": 400, "height": 90, "rotation": 0 },
    "labels": []
  }
}

Зона без мест (is_standing: true) — стоячая: танцпол или фан-зона. Она продаётся количеством, а не местами, и имеет capacity.

Занятость

GET https://api.ctickets.ru/v1/events/145/availability
{
  "data": {
    "sold": ["zone-1|zone-1-4-4", "zone-3|zone-3-4-14"],
    "reserved": ["zone-1|zone-1-1-1"],
    "standing": [{ "zone_id": "zone-9", "capacity": 500, "left": 487 }],
    "as_of": "2026-08-03T19:33:01+03:00"
  }
}

Ключ места — zone_id|seat_id. Отдаём только занятое: свободных мест всегда больше, и передавать их бессмысленно. Опрашивать раз в 5–15 секунд достаточно; ответ не кешируется.

Плоский список мест

GET https://api.ctickets.ru/v1/events/145/seats?filter.zone_id=zone-1&filter.status=available&per_page=1000

Если вы рисуете схему сами и геометрия зон вам не нужна — берите места списком: адрес, цена, статус, координаты.

Картинка схемы

GET https://api.ctickets.ru/v1/events/145/scheme.svg

Готовый SVG для превью и печати. Кешируется, поддерживает If-None-Match.

Как держать схему актуальной

  1. Геометрию тянете один раз и кешируете по ETag.
  2. Занятость опрашиваете периодически и накладываете на геометрию у себя.
  3. Свои брони держите отдельно: место, забронированное вами, приходит в reserved — не показывайте его покупателю как чужое.
Вопросы по интеграции — api@ctickets.ru. Ключи и журнал запросов — в кабинете организатора, раздел «API и интеграции».