Яндекс Афиша

Яндекс Афиша не подстраивается под партнёра: она ходит своими методами и ждёт свой жизненный цикл заказа. Поэтому у нас есть отдельный адаптер — те же брони и заказы, но в её контракте и с её статусами. Отдельный 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

Пример продажи

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 и интеграции».