Clonación de esquemas

La clonación crea una copia completa de un esquema de recinto: toda la distribución de asientos, todas las secciones, filas y asientos, los metadatos y coordenadas de los asientos, y las zonas de precios (copiadas como plantillas, sin conservar los mismos ID). Úsala para crear variaciones de un esquema existente, configurar recintos similares rápidamente o duplicar un esquema para pruebas.

La clonación es asíncrona. Iniciar la operación devuelve un UUID de inmediato; la copia se ejecuta en segundo plano y debes consultar un endpoint de resultado hasta que termine.

Autenticación

Ambos endpoints pertenecen a la Booking API privada y requieren la cabecera X-API-Key con el token de tu organización:

X-API-Key: {organizationToken}

La clave API secreta está disponible en el panel de administración del Editor (Organization Details, campo “Clave API secreta”) y también se devuelve en la respuesta de login del Editor como user.organizationToken para los administradores de la organización. Trátalo como una cadena opaca y envía el valor tal cual.

Paso 1 - iniciar la clonación

POST /api/private/v2.0/schemas/clone/{id}
Parámetro En Obligatorio Descripción
id path sí ID numérico del esquema a clonar.

El cuerpo de la respuesta es el UUID de la operación de clonación:

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"
Estado Significado
200 Clonación iniciada; el cuerpo contiene el UUID de la operación.
403 Tu organización no tiene acceso a este esquema.
404 Esquema no encontrado.

Paso 2 - consultar el resultado

GET /api/private/v2.0/schemas/clone/result/{uuid}
Parámetro En Obligatorio Descripción
uuid path sí UUID de la operación devuelto por la llamada de inicio.
curl "https://booking.seatmap.pro/api/private/v2.0/schemas/clone/result/123e4567-e89b-12d3-a456-426614174000" \
  -H "X-API-Key: ${ORG_TOKEN}"

Mientras la clonación sigue en curso:

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "state": "IN_PROCESS",
  "schemaId": 1001,
  "newSchemaId": null
}

Cuando termina:

{
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "state": "DONE",
  "schemaId": 1001,
  "newSchemaId": 1002
}

newSchemaId es el ID del esquema clonado; úsalo en todas las llamadas posteriores a la API para trabajar con la copia.

Estados de la operación

state Significado
CREATED Operación registrada; la copia aún no ha comenzado.
IN_PROCESS La copia está en curso — sigue consultando.
DONE Terminal. El clon está listo; lee newSchemaId.
ERROR Terminal. La clonación falló; vuelve a iniciar la operación.

Intervalo de consulta recomendado: 2-5 segundos para esquemas típicos.

Fragmento de sondeo

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`);
}

Notas

  • El clon es un esquema totalmente independiente: los cambios en la copia nunca afectan al original.
  • Las zonas de precios se copian como plantillas; las asignaciones de precios de un evento concreto no se trasladan.
  • El flujo de autenticación, inicio y sondeo mostrado arriba está cubierto por nuestra suite de pruebas end-to-end.

Ver también

Escriba una función, un ajuste, un endpoint o un método del SDK.