Клонирование схемы
Клонирование создаёт полную копию схемы площадки: всю рассадку, все секции, ряды и места, метаданные и координаты мест, а также ценовые зоны (копируются как шаблоны, без сохранения тех же ID). Используйте его, чтобы создавать вариации существующей схемы, быстро настраивать похожие площадки или дублировать схему для тестирования.
Клонирование асинхронное. Запуск операции сразу возвращает UUID, само копирование выполняется в фоне — результат нужно опрашивать отдельным эндпоинтом.
Аутентификация
Оба эндпоинта относятся к приватному Booking API и требуют заголовок X-API-Key с токеном организации:
X-API-Key: {organizationToken}
Секретный ключ API доступен в админ-панели Editor (Organization Details, поле «Секретный ключ API»), а также возвращается в ответе логина Editor как user.organizationToken для администраторов организации. Считайте его непрозрачной строкой и отправляйте значение как есть.
Шаг 1 - запуск клонирования
POST /api/private/v2.0/schemas/clone/{id}
| Параметр | Где | Обязателен | Описание |
|---|---|---|---|
id |
path | да | Числовой ID схемы, которую клонируем. |
Тело ответа — UUID операции клонирования:
curl -X POST \
"https://booking.seatmap.pro/api/private/v2.0/schemas/clone/1001" \
-H "X-API-Key: ${ORG_TOKEN}"
# 200
# "123e4567-e89b-12d3-a456-426614174000"
| Статус | Значение |
|---|---|
| 200 | Клонирование запущено; в теле — UUID операции. |
| 403 | У вашей организации нет доступа к этой схеме. |
| 404 | Схема не найдена. |
Шаг 2 - опрос результата
GET /api/private/v2.0/schemas/clone/result/{uuid}
| Параметр | Где | Обязателен | Описание |
|---|---|---|---|
uuid |
path | да | UUID операции, полученный при запуске клонирования. |
curl "https://booking.seatmap.pro/api/private/v2.0/schemas/clone/result/123e4567-e89b-12d3-a456-426614174000" \
-H "X-API-Key: ${ORG_TOKEN}"
Пока клонирование выполняется:
{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"state": "IN_PROCESS",
"schemaId": 1001,
"newSchemaId": null
}
Когда операция завершилась:
{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"state": "DONE",
"schemaId": 1001,
"newSchemaId": 1002
}
newSchemaId — ID клонированной схемы; используйте его во всех последующих вызовах API для работы с копией.
Состояния операции
state |
Значение |
|---|---|
CREATED |
Операция зарегистрирована, копирование ещё не началось. |
IN_PROCESS |
Копирование выполняется — продолжайте опрос. |
DONE |
Терминальное. Клон готов; читайте newSchemaId. |
ERROR |
Терминальное. Клонирование не удалось; повторите запуск. |
Рекомендуемый интервал опроса: 2-5 секунд для типичных схем.
Пример опроса
async function cloneSchema(schemaId, orgToken, baseUrl = 'https://booking.seatmap.pro') {
const headers = { 'X-API-Key': orgToken };
const startRes = await fetch(`${baseUrl}/api/private/v2.0/schemas/clone/${schemaId}`, {
method: 'POST',
headers,
});
if (!startRes.ok) throw new Error(`Clone initiation failed: ${startRes.status}`);
const operationUuid = await startRes.json();
const deadline = Date.now() + 60_000;
while (Date.now() < deadline) {
const res = await fetch(`${baseUrl}/api/private/v2.0/schemas/clone/result/${operationUuid}`, {
headers,
});
if (!res.ok) throw new Error(`Clone result poll failed: ${res.status}`);
const result = await res.json();
if (result.state === 'DONE') return result.newSchemaId;
if (result.state === 'ERROR') throw new Error(`Clone ${operationUuid} failed`);
await new Promise((resolve) => setTimeout(resolve, 3_000));
}
throw new Error(`Clone ${operationUuid} did not complete in time`);
}
Примечания
- Клон — полностью независимая схема: изменения копии никак не влияют на оригинал.
- Ценовые зоны копируются как шаблоны; назначения цен конкретного события не переносятся.
- Показанный выше флоу аутентификации, запуска и опроса покрыт нашим сквозным (end-to-end) тестом.
См. также
- Справочник API — интерактивный обозреватель API и полный справочник.