Стейдж
https://st-pa.tbx.pp.ua
Пісочниця для інтеграції: тестові події, вільні замовлення, повернення без реальних грошей. Тут ви проходите смоук-тест і налагоджуєте свій код.
Пʼять запитів від ключа до штрихкода квитка. Приклади нижче налаштовані на тестове середовище — починайте з нього. Повний опис усіх методів — в інтерактивній документації, вона живе на тому ж хості, що й API.
Набір методів, формати й поведінка однакові. Відрізняються адреса, дані та ключ.
https://st-pa.tbx.pp.ua
Пісочниця для інтеграції: тестові події, вільні замовлення, повернення без реальних грошей. Тут ви проходите смоук-тест і налагоджуєте свій код.
https://api.ticketcrm.net
Реальні події, реальні продажі. Переходите сюди, коли інтеграція пройшла перевірку на стейджі.
Ключ у кожного середовища свій. Для бойового API ми видамо окремий, новий API Key — стейджевий там не працює. Перехід на прод — це рівно дві зміни: інша адреса в базовому URL і новий ключ. Код, структури відповідей і логіка лишаються ті самі.
Усі приклади нижче оновляться. Нічого не зберігається і нікуди не надсилається — значення живуть лише у вашій вкладці.
Токен ви отримаєте на кроці 1, id події та тарифу — на кроках 2 і 3, id замовлення — на кроці 4. Повертайтесь сюди й підставляйте їх по ходу. Адресу в усіх прикладах міняє селект «Базовий URL» вгорі сторінки; ключ для кожного середовища теж свій.
Порядок обовʼязковий: кожен крок дає ідентифікатор для наступного.
Ключ обмінюється на JWT. Токен живе 24 години — кешуйте його, а не запитуйте перед кожним викликом. Ключ від стейджу працює тільки на стейджі; для проду буде виданий окремий.
curl -X POST "https://st-pa.tbx.pp.ua/api/v2/token" \
-H "Content-Type: application/json" \
-d '{"apiKey": "ВАШ_КЛЮЧ"}' У відповіді: {"token": "eyJ0eXAiOiJKV1Qi…"}. Далі він іде заголовком Authorization: Bearer … у кожен запит.
Головний ендпоінт інтеграції. Під вашим ключем видно тільки ті події, які вам відкрили, і тільки ті, де продаж ще триває.
curl "https://st-pa.tbx.pp.ua/api/v2/event-points?itemsPerPage=20&order[dateStarted]=asc" \
-H "Authorization: Bearer ТОКЕН" \
-H "X-API-Language: uk"
# фільтри, які знадобляться на бою:
# dateStarted[after]=2026-10-01&dateStarted[before]=2026-10-31
# city.id[]=1&categories.id[]=3&genres.id[]=7&venueHall.id=42 Візьміть звідси: id події для наступного кроку. Довідники /cities, /countries, /venues, /venue-halls, /categories, /genres вивантажте окремо один раз і кешуйте.
Найважчий за обсягом блок — запитуйте його на відкритті конкретної події, а не по всьому каталогу.
curl "https://st-pa.tbx.pp.ua/api/v2/event-points/{eventPointId}/sectors" \
-H "Authorization: Bearer ТОКЕН"
curl "https://st-pa.tbx.pp.ua/api/v2/event-points/{eventPointId}/places?itemsPerPage=100" \
-H "Authorization: Bearer ТОКЕН" Візьміть звідси: id вільного місця та id з його priceCategories — це тариф, який ви назвете в замовленні.
Замовлення одразу стає в статус reserved_to_time. Резерв за замовчуванням — 15 хвилин.
curl -X POST "https://st-pa.tbx.pp.ua/api/v2/orders" \
-H "Authorization: Bearer ТОКЕН" \
-H "Content-Type: application/json" \
-d '{
"eventPoint": "{eventPointId}",
"places": ["{placeId}"],
"priceCategory": "{priceCategoryId}",
"reservedMinutes": 15
}' У відповіді: id замовлення, status, reservedToDate і totalPrice. Продовжити резерв — PUT /orders/{id}/reserve, дозбирати кошик — PUT /orders/{id}/add-place.
Оплату ви приймаєте у себе, а нам повідомляєте результат одним запитом: переводите замовлення в paid. Окремий запит за штрихкодами після цього не потрібен — вони вже у відповіді.
curl -X PUT "https://st-pa.tbx.pp.ua/api/v2/orders/{orderId}/status" \
-H "Authorization: Bearer ТОКЕН" \
-H "Content-Type: application/json" \
-d '{"toStatus": "paid"}' У відповіді — усе замовлення: status, totalPrice, totalDiscount і tickets, де кожен квиток має ticketId, barcode, placeId, placeName, sectorName, rowName, price і discountPrice. Цього вистачає, щоб зібрати свій бланк квитка.
Обидва є в API, але в партнерському потоці вище не потрібні — не закладайте їх у свою інтеграцію без потреби.
type і набір полів форми. Якщо оплату приймаєте ви — цей виклик пропускаєте.403. Свої штрихкоди партнер бере з відповіді на оплату або з GET /orders/{id}.curl "https://st-pa.tbx.pp.ua/api/v2/event-points/{eventPointId}/barcodes" \
-H "Authorization: Bearer ТОКЕН" У відповіді вивантаження: barcode, placeId, placeName, sectorId, sectorName — по одному запису на квиток.
Через PUT /orders/{id}/status можна попросити тільки три з них.
Шість речей, через які інтеграція виглядає зламаною, хоча все працює як задумано.
Ключ бачить лише події, привʼязані до вашої компанії, і лише ті, де dateEndOfSale ще не минув. Завершені — окремим ендпоінтом /event-points-archived. Якщо очікуваної події немає — напишіть нам, це налаштування доступу.
Воно залишається у відповіді з availableCount: 0, щоб ви могли закрити його у себе, а не показувати застарілу пропозицію. Орієнтуйтесь саме на це поле, а не на присутність місця у списку.
id — це конкретний сеанс, ним ходять усі запити. eventId — спільний ідентифікатор події для всіх її дат: саме за ним групуйте «подія → розклад».
Максимум квитків в одному замовленні й максимум одночасно зарезервованих квитків на весь ваш акаунт налаштовані на нашому боці. Не зашивайте свої константи, ловіть 422 і читайте тіло відповіді. Непотрібні резерви краще знімати одразу — поки вони живі, вони зʼїдають ваш ліміт.
У тілі запиту очікуються "places": ["456", "765"], а не URL-посилання на ресурси. Те саме для eventPoint і priceCategory.
401 означає, що 24 години минули — перезапросіть токен і повторіть виклик. 429 означає, що запитів забагато: потрібен backoff, а не цикл ретраїв.
Решта полів у документації; цих вистачає, щоб побудувати афішу і картку події.
X-API-Language{ amount, currency }Усі шляхи — від https://st-pa.tbx.pp.ua/api/v2.
| Каталог | |
| GET /event-points | Список подій: фільтри за датою, містом, країною, категорією, жанром, залом |
| GET /event-points/{id} | Одна подія |
| GET /event-points-archived | Події, у яких продаж уже завершився |
| Схема залу | |
| GET /event-points/{id}/sectors | Сектори події |
| GET /event-points/{id}/sectors/{sectorId}/places | Місця одного сектора |
| GET /event-points/{id}/places | Усі місця події з цінами, тарифами й наявністю |
| Замовлення | |
| POST /orders | Створити замовлення й зарезервувати місця |
| GET /orders/{id} | Стан замовлення, сума, знижка, дедлайн резерву; після оплати — квитки зі штрихкодами |
| PUT /orders/{id}/add-place | Додати місце до вже створеного замовлення |
| PUT /orders/{id}/tickets/{ticketId}/remove | Прибрати квиток із замовлення |
| PUT /orders/{id}/reserve | Продовжити час резерву |
| GET /orders/{id}/payment-data | Дані для оплати від платіжної системи — потрібні, лише якщо оплата йде через нас |
| PUT /orders/{id}/status | Змінити статус замовлення |
| PUT /orders/{id}/tickets/{ticketId}/status | Змінити статус окремого квитка |
| GET /event-points/{id}/orders | Ваші замовлення по події, без квитків; фільтри status і payAt[after] |
| GET /event-points/{id}/barcodes | Усі штрихкоди події, продані й непродані — лише для подій вашої компанії-організатора |
| Довідники | |
| GET /countries · /cities | Географія |
| GET /venues · /venue-halls | Майданчики й зали |
| GET /categories · /genres | Рубрикація подій |
| GET /promocodes | Промокоди, доступні вашій компанії |
| Продажі через наш віджет | |
| GET /widget-orders | Замовлення, зроблені у віджеті на вашому сайті |
| GET /widget-orders-refunds | Повернення по таких замовленнях |
https://api.ticketcrm.net і новий API Key, який ми видамо окремо. Стейджевий ключ на проді не працює, решта коду лишається без змін.