POST /v1/locations/{locationId}/booking_configuration; léalo con GET en la misma ruta.
Requisitos previos
- Su app tiene el permiso sobre el local.
- Publicar requiere
bookings:configure; leer requierebookings:read. - Maple habilitó el indicador de despliegue
bookings-public-apidel local. - El local tiene una conexión nativa de Maple, o todavía no tiene ninguna conexión de reservas. Los locales administrados por un proveedor responden
422 capability_unsupported.
booking_profile.enabled antes de ofrecer disponibilidad.
Publique una configuración
Los cuerpos de configuración usan camelCase, igual que los documentos de menú.poolId y unitId son identificadores estables definidos por usted. Los ID de unidad deben ser únicos en todo el documento.
object: "booking_configuration", revision, location_id, version_id, published_at y livemode. Las lecturas materializan los valores predeterminados de las políticas; no tienen que reproducir byte por byte los campos omitidos.
Publique sin sobrescribir lo del establecimiento
Los gerentes del restaurante pueden editar la misma configuración en el panel de Maple. Para no reemplazar sus ediciones, lea la configuración, modifíquela y publíquela con elrevision que leyó como expected_revision:
409 stale_configuration y no se reemplaza nada: léala de nuevo, vuelva a aplicar su cambio y publique con la nueva revisión. Envíe "expected_revision": null para una primera configuración. Si omite expected_revision, la configuración se reemplaza sin condiciones. El revision cambia solo cuando cambia la configuración; las publicaciones de menú mueven version_id, pero no revision.
Reglas de publicación
- El documento reemplaza la configuración de reservas definida por el establecimiento, no su menú ni otros recursos y políticas del catálogo no relacionados. Las publicaciones posteriores del proveedor o del menú también conservan esa configuración de reservas.
- Volver a publicar una configuración idéntica no crea otra versión. La configuración no tiene un campo
idempotency_key. - Los cambios en los tiempos de rotación o en las políticas rigen para las nuevas cotizaciones de disponibilidad. Las reservas existentes conservan los términos con los que se fijaron.
- La moneda debe coincidir con la de un catálogo existente. Una primera configuración establece la moneda cuando no hay catálogo.
- Las horas son
HH:MMen la hora local del establecimiento; el fin de un turno debe ser posterior a su inicio. Divida los horarios que cruzan la medianoche entre días. - Los tramos de rotación deben estar ordenados y sin traslapes. Las combinaciones deben nombrar unidades distintas de su propia área.
- Todas las áreas se pueden reservar. La disponibilidad prueba primero la primera área de
areasy luego las demás en orden depoolId(el orden en que las devuelve una lectura), y sienta al grupo en la primera que tenga una mesa o combinación libre en la que quepa; una reserva se queda en el área donde se sentó. Los turnos y las fechas de cierre aplican a todo el local. - Los campos desconocidos, las zonas o fechas no válidas y los límites no válidos se rechazan. Las respuestas de validación
400identifican el dato no válido.422 configuration_rejectedsignifica que el documento no se puede aplicar al catálogo. - Una lectura antes de que exista una configuración responde
404.
Los flujos de reserva con tarjeta en archivo o depósito y el cobro de cargos por cancelación son capacidades aparte; declarar una política no es una integración de pagos.
Fechas bloqueadas
Las fechas bloqueadas son días o partes de un día en que el establecimiento está abierto pero no toma reservas: un evento privado, un feriado, una noche solo para clientes sin reserva. Se diferencian de losclosedDates de la configuración:
Lea la lista actual en
blackout_dates de GET /v1/locations/{locationId}/booking_profile (bookings:read). Para reemplazarla se requiere bookings:configure:
null en las horas o la nota que falten de un rango, y su nueva revision: { "object": "booking_blackouts", "location_id": "…", "blackout_dates": [...], "revision": "…" }.
- El cuerpo es la lista completa: los rangos que omita se eliminan, y
[]los borra todos. El establecimiento edita la misma lista en su panel, así que leablackout_datesyblackout_dates_revisiondel perfil, edite y envíe esa revisión comoexpected_revision. Si la lista cambió desde que la leyó, la escritura responde409 stale_blackout_datesy no cambia nada: léala de nuevo y vuelva a aplicar su edición. Sinexpected_revision, la escritura reemplaza lo que haya. - Las fechas están en la hora local del establecimiento e inclusivas. Un rango sin horas bloquea días completos;
start_timeaplica al primer día yend_timeal último. Máximo 100 rangos, con notas de hasta 200 caracteres. - Los rangos no válidos (una fecha que no existe, un fin anterior al inicio, una hora mal formada) responden
400 invalid_blackout_datesy no cambian nada. - La disponibilidad omite los espacios dentro de una fecha bloqueada; los locales nativos también retienen las sentadas que invadirían una. Una cotización tomada antes de agregar una fecha bloqueada se rechaza al retenerla o reservarla:
409 slot_unavailableen los locales nativos y422 date_blockeden los administrados por un proveedor. Las reservas existentes dentro de una nueva fecha bloqueada no se cancelan, ni tampoco una reserva de un local administrado por un proveedor que ya esté en curso cuando se guarda la fecha bloqueada. - Una fecha bloqueada detiene las reservas, no la recepción: los clientes sin reserva (
POST /v1/locations/{locationId}/walk_ins) y los grupos de la lista de espera que se van a sentar siguen funcionando dentro de una, según la disponibilidad normal de mesas. - En un local administrado por un proveedor, los canales propios del proveedor (como el sitio web de OpenTable) no ven la lista de Maple; el establecimiento también debe bloquear las fechas allí.
Aprovisione un sandbox de reservas
En el portal de administración de Maple, seleccione Native bookings + sample floor al aprovisionar el sandbox del socio. La opción viene desactivada de forma predeterminada. Crea una conexión de reservas de Maple habilitada y, si no hay configuración, genera cuatro mesas, turnos de 90 minutos y horarios de apertura diarios. Volver a ejecutarla conserva una configuración existente y se niega a reemplazar una conexión de OpenTable. La CLI de aprovisionamiento de staging expone la misma opción como--booking-connection. Para un socio que solo usa reservas, puede omitir la conexión con el POS; un permiso sobre el local es suficiente para las reservas. Las claves existentes que carecen de alcances (scopes) de reservas necesitan una clave nueva.
El campo bookings_configured del resultado del aprovisionamiento confirma que el paso se ejecutó, no que el despliegue esté habilitado. Maple debe dirigir el local del sandbox en el proyecto de PostHog de staging para bookings-public-api. Luego ejecute buscar → retener → crear → cancelar con la credencial del sandbox.