Схемы залов
Схема зала разделена на две части: геометрию (что где нарисовано) и занятость (что уже продано).
Это главное решение раздела: геометрия арены на 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.
Как держать схему актуальной
- Геометрию тянете один раз и кешируете по
ETag. - Занятость опрашиваете периодически и накладываете на геометрию у себя.
- Свои брони держите отдельно: место, забронированное вами, приходит в
reserved— не показывайте его покупателю как чужое.