Обновлено: 22.09.2026
Билеты и абонементы
Продажа билетов на матчи и мероприятия, привязка к профилю пользователя и программе лояльности. Схемы залов и ценовые зоны настраиваются отдельно в админ-панели.
Обзор методов
| Метод | Путь | Описание |
|---|---|---|
GET | /events | Список мероприятий |
GET | /events/{event_id}/tickets | Доступные билеты на событие |
POST | /tickets/purchase | Оформить покупку |
GET | /orders/{id} | Статус заказа |
DELETE | /orders/{id} | Вернуть билет |
GET | /season-passes | Абонементы на сезон |
POST | /season-passes/{id}/purchase | Купить абонемент |
GET | /orders | Список заказов пользователя |
Список мероприятий
GET /eventsБлижайшие матчи и события клуба, доступные для продажи билетов.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
from | query | string (ISO 8601) | нет | Показывать события начиная с этой даты. По умолчанию сегодня. |
limit | query | integer | нет | Размер страницы, до 50. |
curl "https://api.virazh.io/v1/events?from=2026-09-01" \
-H "Authorization: Bearer sk_test_51H..."{
"data": [
{ "id": "evt_2213", "title": "Сокол — Комета", "starts_at": "2026-09-06T18:30:00Z" },
{ "id": "evt_2214", "title": "Сокол — Молния", "starts_at": "2026-09-14T18:30:00Z" }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<Event> | Список событий с полями id, title, starts_at. |
Доступные билеты на событие
GET /events/{event_id}/ticketsСписок тарифов и свободных мест по указанному событию.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
event_id | путь | string | да | Идентификатор события. |
curl https://api.virazh.io/v1/events/evt_2213/tickets \
-H "Authorization: Bearer sk_test_51H..."{
"event_id": "evt_2213",
"tickets": [
{ "zone": "Фан-сектор", "price": 800, "available": 240 },
{ "zone": "Центральная трибуна", "price": 1500, "available": 96 }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
event_id | string | Идентификатор события. |
tickets | array<TicketZone> | Зоны с полями zone, price, available. |
Оформить покупку
POST /tickets/purchaseСоздаёт заказ на билет и резервирует место на 15 минут. Оплата подтверждается отдельным вебхуком payment.succeeded.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
event_id | тело | string | да | Идентификатор события. |
user_id | тело | string | да | Идентификатор покупателя. |
zone | тело | string | да | Название ценовой зоны из /events/{event_id}/tickets. |
promo_code | тело | string | нет | Промокод, предварительно проверенный через /promo-codes/{code}/validate. |
curl https://api.virazh.io/v1/tickets/purchase \
-X POST \
-H "Authorization: Bearer sk_test_51H..." \
-H "Content-Type: application/json" \
-d '{
"event_id": "evt_2213",
"user_id": "usr_8f21c",
"zone": "Фан-сектор"
}'{
"order_id": "ord_77a1",
"status": "pending_payment",
"amount": 800,
"expires_at": "2026-08-25T12:00:00Z"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
order_id | string | Идентификатор созданного заказа. |
status | string | pending_payment сразу после создания. |
amount | integer | Сумма к оплате в рублях. |
expires_at | string (ISO 8601) | Момент, когда резерв места снимется без оплаты. |
Статус заказа
GET /orders/{id}Возвращает статус оплаты и данные купленного билета, например чтобы показать QR-код.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор заказа. |
curl https://api.virazh.io/v1/orders/ord_77a1 \
-H "Authorization: Bearer sk_test_51H..."{
"order_id": "ord_77a1",
"status": "paid",
"qr_code": "https://tickets.virazh.io/qr/ord_77a1.png"
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
order_id | string | Идентификатор заказа. |
status | string | pending_payment, paid, refunded или expired. |
qr_code | string | Ссылка на QR-код билета, доступна после оплаты. |
Вернуть билет
DELETE /orders/{id}Отменяет заказ и возвращает деньги по правилам клуба. Обычно билет можно вернуть до определённого срока перед матчем.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор заказа. |
curl https://api.virazh.io/v1/orders/ord_77a1 \
-X DELETE \
-H "Authorization: Bearer sk_test_51H..."{
"order_id": "ord_77a1",
"status": "refunded",
"refunded_amount": 800
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
order_id | string | Идентификатор заказа. |
status | string | refunded при успешном возврате. |
refunded_amount | integer | Возвращённая сумма в рублях. |
Абонементы на сезон
GET /season-passesДоступные виды абонементов клуба с ценой, количеством включённых матчей и остатком мест по зонам.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
season | query | string | нет | Сезон в формате 2026-2027. По умолчанию текущий. |
curl "https://api.virazh.io/v1/season-passes?season=2026-2027" \
-H "Authorization: Bearer sk_test_51H..."{
"data": [
{ "id": "sp_full_home", "name": "Полный домашний", "matches": 26, "price": 14000, "available": 340 },
{ "id": "sp_half_home", "name": "Половина сезона", "matches": 13, "price": 7800, "available": 512 }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<SeasonPass> | Виды абонементов с полями id, name, matches, price, available. |
Купить абонемент
POST /season-passes/{id}/purchaseОформляет покупку абонемента на пользователя. После оплаты билеты на все матчи сезона автоматически появляются в /orders.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
id | путь | string | да | Идентификатор вида абонемента. |
user_id | тело | string | да | Идентификатор покупателя. |
zone | тело | string | да | Ценовая зона абонемента. |
curl https://api.virazh.io/v1/season-passes/sp_full_home/purchase \
-X POST \
-H "Authorization: Bearer sk_test_51H..." \
-H "Content-Type: application/json" \
-d '{ "user_id": "usr_8f21c", "zone": "Центральная трибуна" }'{
"order_id": "ord_sp_2201",
"status": "pending_payment",
"amount": 14000,
"matches_included": 26
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
order_id | string | Идентификатор заказа на абонемент. |
status | string | pending_payment сразу после создания. |
amount | integer | Сумма к оплате. |
matches_included | integer | Количество матчей, входящих в абонемент. |
Список заказов пользователя
GET /ordersВсе заказы пользователя на билеты и абонементы. Подходит для раздела «Мои билеты» в личном кабинете.
Параметры
| Параметр | Где | Тип | Обязателен | Описание |
|---|---|---|---|---|
user_id | query | string | да | Идентификатор пользователя. |
status | query | string | нет | Фильтр по статусу заказа. |
curl "https://api.virazh.io/v1/orders?user_id=usr_8f21c" \
-H "Authorization: Bearer sk_test_51H..."{
"data": [
{ "order_id": "ord_77a1", "event": "Сокол — Комета", "status": "paid" },
{ "order_id": "ord_sp_2201", "event": "Абонемент 2026-2027", "status": "paid" }
]
}Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data | array<OrderSummary> | Заказы с полями order_id, event, status. |
Полезно знать
- Резерв места на
/tickets/purchaseдействует 15 минут. Если за это время оплата не подтвердится вебхукомpayment.succeeded, место освободится автоматически. - Возврат через
DELETE /orders/{id}работает только до начала события. Точный срок, после которого возврат закрывается, задаётся в настройках билетной программы клуба. - QR-код в ответе
/orders/{id}приходит постоянной ссылкой. Хранить её в кеше дольше, чем живёт заказ, нельзя: после возврата билета ссылка перестаёт действовать. - В заказах абонемент (
/season-passes) отдельной сущностью не считается. После покупки билеты на все матчи сезона появляются в/ordersкак обычные заказы с привязкой кseason_pass_id.
