Создать заказ
http
POST /api/v1/ordersБронирует билеты на 15 минут. После оплаты на вашей стороне вызовите confirm.
Перед использованием прочитайте Процесс продажи.
Тело запроса
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
partner_order_id | string | да | Ваш уникальный номер заказа, до 255 символов. Ключ идемпотентности |
event_item_id | integer | да | ID сеанса |
seats | integer[] | * | ID мест. Без повторов |
zones | object[] | * | Билеты в зоны: { "zone_id": integer, "quantity": integer } |
prices | object[] | * | Билеты по категориям для сеансов без мест (type = 6): { "price_id": integer, "quantity": integer } |
customer | object | нет | Данные покупателя |
customer.full_name | string | нет | ФИО, до 255 символов |
customer.email | string | нет | Email, проверяется формат |
customer.phone | string | нет | Телефон, до 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.
Ошибки
| HTTP | code | Причина | details |
|---|---|---|---|
400 | invalid_json | Невалидный JSON или неверные типы полей | — |
422 | validation_error | Неверный состав заказа (список причин) | для рядов — seat_id, required_seats |
422 | event_item_not_available | Сеанс не существует или не продаётся | — |
409 | seat_unavailable | Места заняты или недоступны | seats |
409 | limit_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"
}