Skip to content

Создать заказ ​

http
POST /api/v1/orders

Бронирует билеты на 15 минут. После оплаты на вашей стороне вызовите confirm.

Перед использованием прочитайте Процесс продажи.

Тело запроса ​

ПолеТипОбязательноОписание
partner_order_idstringдаВаш уникальный номер заказа, до 255 символов. Ключ идемпотентности
event_item_idintegerдаID сеанса
seatsinteger[]*ID мест. Без повторов
zonesobject[]*Билеты в зоны: { "zone_id": integer, "quantity": integer }
pricesobject[]*Билеты по категориям для сеансов без мест (type = 6): { "price_id": integer, "quantity": integer }
customerobjectнетДанные покупателя
customer.full_namestringнетФИО, до 255 символов
customer.emailstringнетEmail, проверяется формат
customer.phonestringнетТелефон, до 255 символов

* Нужен хотя бы один билет:

  • для сеанса со схемой зала — seats и/или zones;
  • для сеанса без мест (type = 6) — только prices.

Если одна зона или категория указана несколько раз, количества суммируются.

Ограничения ​

  • Не больше 50 билетов в заказе.
  • Не больше limit_per_pack сеанса, если он задан.
  • Все места должны быть свободны (is_available: true), а в зонах и категориях должно хватать остатка. Иначе не бронируется ничего.
  • Если ценовая категория места продаётся только целыми рядами, нужно заказать весь ряд.

Примеры ​

Места и зона ​

bash
curl -X POST https://gateway.ticket.kg/api/v1/orders \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "partner_order_id": "ORD-1001",
    "event_item_id": 2505,
    "seats": [101, 102],
    "zones": [{"zone_id": 11, "quantity": 2}],
    "customer": {
      "full_name": "Иван Иванов",
      "email": "ivan@example.com",
      "phone": "+996700000000"
    }
  }'

Сеанс без мест ​

bash
curl -X POST https://gateway.ticket.kg/api/v1/orders \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "partner_order_id": "ORD-1002",
    "event_item_id": 2610,
    "prices": [{"price_id": 4179, "quantity": 2}, {"price_id": 4180, "quantity": 1}]
  }'

Ответ ​

  • 201 Created — заказ создан.
  • 200 OK — заказ с таким partner_order_id уже существует, возвращён он без изменений.
json
{
  "data": {
    "id": "3f6c2a1e-8b4d-4c7a-9e2f-1a2b3c4d5e6f",
    "partner_order_id": "ORD-1001",
    "status": "held",
    "expires_at": "2026-11-01T14:15:00+06:00",
    "total": 6000,
    "currency": "KGS",
    "customer": {
      "full_name": "Иван Иванов",
      "email": "ivan@example.com",
      "phone": "+996700000000"
    },
    "created_at": "2026-11-01T14:00:00+06:00",
    "tickets": [
      {
        "id": 884512,
        "event_item_id": 2505,
        "seat_id": 101,
        "zone_id": null,
        "price_id": 4170,
        "section": "Партер",
        "row": "5",
        "seat": "12",
        "price": 1500,
        "status": "held",
        "pin": null,
        "pin_formatted": null,
        "paid_at": null
      },
      {
        "id": 884513,
        "event_item_id": 2505,
        "seat_id": 102,
        "zone_id": null,
        "price_id": 4170,
        "section": "Партер",
        "row": "5",
        "seat": "13",
        "price": 1500,
        "status": "held",
        "pin": null,
        "pin_formatted": null,
        "paid_at": null
      },
      {
        "id": 884514,
        "event_item_id": 2505,
        "seat_id": null,
        "zone_id": 11,
        "price_id": 4171,
        "section": "Фан-зона",
        "row": null,
        "seat": null,
        "price": 1500,
        "status": "held",
        "pin": null,
        "pin_formatted": null,
        "paid_at": null
      },
      {
        "id": 884515,
        "event_item_id": 2505,
        "seat_id": null,
        "zone_id": 11,
        "price_id": 4171,
        "section": "Фан-зона",
        "row": null,
        "seat": null,
        "price": 1500,
        "status": "held",
        "pin": null,
        "pin_formatted": null,
        "paid_at": null
      }
    ],
    "refunded_tickets": []
  }
}

data — объект Order.

WARNING

Повторный запрос с тем же partner_order_id возвращает существующий заказ, не сравнивая тело запроса. Для другого набора билетов используйте новый partner_order_id.

Ошибки ​

HTTPcodeПричинаdetails
400invalid_jsonНевалидный JSON или неверные типы полей—
422validation_errorНеверный состав заказа (список причин)для рядов — seat_id, required_seats
422event_item_not_availableСеанс не существует или не продаётся—
409seat_unavailableМеста заняты или недоступныseats
409limit_exceededНе хватает билетов или превышен лимит на заказlimit_per_order, zones, prices или requested/available

Пример:

json
{
  "error": {
    "code": "seat_unavailable",
    "message": "some seats are not available",
    "details": { "seats": [102] }
  },
  "request_id": "9f2c4e7a1b3d5f60718293a4b5c6d7e8"
}