Яндекс Афиша
Яндекс Афиша не подстраивается под партнёра: она ходит своими методами и ждёт свой жизненный цикл заказа.
Поэтому у нас есть отдельный адаптер — те же брони и заказы, но в её контракте и с её статусами.
Отдельный API учить не нужно: если вы интегрируетесь напрямую, используйте /v1.
Жизненный цикл заказа
CREATED → RESERVED → BOOKED → APPROVED
↘ CANCELLED
У нас бронь и выпуск билетов — две операции, поэтому BOOKED проскакивается:
после подтверждения оплаты заказ сразу становится APPROVED.
Методы
| Метод | Путь | Назначение |
|---|---|---|
| GET | /yaga/v1/sessions | сеансы на продажу |
| GET | /yaga/v1/sessions/{id}/available-seats | свободные места с ценой |
| POST | /yaga/v1/reserve | бронь под заказ |
| GET | /yaga/v1/orders/{orderId} | статус заказа |
| POST | /yaga/v1/orders/{orderId}/confirm | оплата принята — выпустить билеты |
| POST | /yaga/v1/orders/{orderId}/clear-reservation | снять бронь |
Отличия от нашего /v1
- Идентификатор места — одна строка
«zone|seat», а не пара полей. - Деньги —
{"value": 300000, "currency": "RUB"}вместоamount. - Отдаются только свободные места: Афиша не рисует наш зал целиком.
- Ошибки — в её конверте:
{"error": {"code": "SEATS_UNAVAILABLE", ...}}, коды заглавными. - Деньги принимает Афиша, мы выпускаем билеты по
confirm.
Пример продажи
POST https://api.ctickets.ru/yaga/v1/reserve
{ "sessionId": "145", "seats": ["zone-1|zone-1-2-1", "zone-1|zone-1-2-2"], "ttl": 900 }
→ { "orderId": "rsv_01kz4q4ttt...", "status": "RESERVED",
"amount": { "value": 600000, "currency": "RUB" },
"expiresAt": "2026-08-04T00:20:46+03:00" }
POST https://api.ctickets.ru/yaga/v1/orders/rsv_01kz4q4ttt.../confirm
{ "customer": { "email": "buyer@example.com", "name": "Иван Петров" }, "paymentId": "ya-pay-001" }
→ { "status": "APPROVED", "externalOrderId": "ORD-20260804-OAKKPQ",
"tickets": [{ "barcode": "824419288253", "sector": "1 сектор", "row": "2", "seat": "1" }] }
Оговорка
Полная спецификация YAGA выдаётся Яндексом после заключения договора. Адаптер построен по публично описанной части контракта; после получения спецификации сверяются названия полей. Бизнес-логика при этом не меняется — брони и продажа вынесены в общие сервисы и одинаковы для всех каналов.
Вопросы по интеграции — api@ctickets.ru.
Ключи и журнал запросов — в кабинете организатора, раздел «API и интеграции».