Citeri Developers
Ayuda citeri.es

Integraciones · beta

API de disponibilidad

Rutas públicas de solo lectura para mostrar en tu web o en tu sistema el catálogo y los huecos libres de un negocio. Son las mismas que usa la página de reserva de Citeri.

Beta. Estas rutas no necesitan autenticación y son estables en lo esencial, pero pueden aparecer campos nuevos. Ignora los que no conozcas. Si vamos a cambiar o quitar uno que documentamos aquí, lo avisaremos en el changelog.

DetalleValor
URL basehttps://citeri.app/api/book/{slug}
AutenticaciónNinguna
FormatoJSON en UTF-8
Límite20 peticiones por minuto por IP. Ver límites.
CORSNo se admite desde otros dominios: llama desde tu servidor, no desde el navegador.
ImportesEn céntimos de euro (2500 = 25,00 €).
Fechas y horasAAAA-MM-DD y HH:MM en la zona horaria del negocio (org.default_tz).

Negocio y locales#

GET/api/book/{slug}

Datos públicos del negocio, sus locales y la configuración de reserva.

curl https://citeri.app/api/book/pruebas-panel
Respuesta (resumida)
{
  "org": {
    "id": "b2200000-0000-4000-8000-000000000002",
    "name": "Salón de Pruebas",
    "slug": "pruebas-panel",
    "categories": ["Uñas", "Pestañas"],
    "booking_enabled": true,
    "booking_slot_step_min": 15,
    "booking_window_days": 60,
    "default_tz": "Europe/Madrid",
    "…": "…"
  },
  "locations": [
    { "id": "b2200000-0000-4000-8000-000000000003", "name": "Salón de Pruebas",
      "address": "Calle Ficticia 1", "city": "Ciudad de prueba", "has_hours": true }
  ],
  "fields": { "…": "…" }
}
CampoDescripción
org.booking_enabledSi el negocio acepta reservas online.
org.booking_slot_step_minCada cuántos minutos empieza un hueco.
org.booking_window_daysCon cuántos días de antelación se puede reservar.
org.default_tzZona horaria de todas las fechas y horas.
locations[].idPara filtrar con location_id y para el parámetro loc del enlace.

Servicios#

GET/api/book/{slug}/services?location_id=
curl https://citeri.app/api/book/pruebas-panel/services
CampoDescripción
idId del servicio. Úsalo en service_id y en el parámetro service del enlace.
name, descriptionNombre y descripción.
price_centsPrecio en céntimos. Si price_is_from es true, es un precio «desde».
duration_minDuración en minutos.
categoriesCategorías del servicio.
variantsVariantes con su propio precio o duración, si las hay.
consultation_onlytrue si el servicio requiere consulta previa y no se reserva directamente.

Profesionales#

GET/api/book/{slug}/employees?service_id=&location_id=

Profesionales que pueden hacer un servicio. Si el negocio oculta la elección de profesional, la lista puede venir vacía.

curl
curl "https://citeri.app/api/book/pruebas-panel/employees?service_id=b2200000-0000-4000-8200-000000000005"
JSON
{ "employees": [ { "id": "b2200000-0000-4000-8300-000000000001", "name": "Laura", "color_hex": "#5CBE7A" } ] }

Horario#

GET/api/book/{slug}/hours?location_id=

weekday va de 0 (domingo) a 6 (sábado).

curl
curl https://citeri.app/api/book/pruebas-panel/hours
JSON
{ "hours": [ { "weekday": 1, "open_time": "09:30:00", "close_time": "20:00:00" } ] }

Días con disponibilidad#

GET/api/book/{slug}/dates?service_id=&month=AAAA-MM

Días del mes en los que queda al menos un hueco para el servicio. Acepta también employee_id y location_id.

curl "https://citeri.app/api/book/pruebas-panel/dates?service_id=b2200000-0000-4000-8200-000000000005&month=2026-11"
JSON
{ "available": ["2026-11-02", "2026-11-03", "2026-11-04"] }

Horas libres#

GET/api/book/{slug}/slots?service_id=&date=AAAA-MM-DD

Horas de inicio libres en un día. service_id y date son obligatorios; acepta también employee_id y location_id.

curl "https://citeri.app/api/book/pruebas-panel/slots?service_id=b2200000-0000-4000-8200-000000000005&date=2026-11-03"
JSON
{ "slots": ["09:30", "09:45", "10:00", "…"], "duration": 120 }

Reservar#

La API no crea reservas. Cuando la clienta elija servicio y hora, llévala al enlace de reserva con &service=: ahí confirma sus datos, verifica su contacto y paga la señal si el negocio la pide.