- Get bookable capacity per service —
GET /api/v2/public/calendar/availability - List bookable services —
GET /api/v2/public/calendar/services - Book an appointment —
POST /api/v2/public/calendar/events - Listas de espera: añadir, listar, quitar y resumir entradas bajo
/api/v2/public/calendar/waitlist/
Todos los campos de una reserva son obligatorios. Esta API no tiene valores por defecto:
nunca elige por ti el servicio, el profesional ni el tipo de cita, nunca deriva la hora de fin
de una duración y nunca envía una notificación que no hayas configurado. Si un valor no
coincide con algo de tu cuenta, la solicitud se rechaza y el error lista lo que sí se habría
aceptado.
Conceptos
Una cita se compone de cuatro cosas, y tú aportas las cuatro.
Para cada uno de los tres últimos, envía el ID o el nombre. Los IDs se comparan de forma
exacta. Los nombres se comparan sin distinguir mayúsculas ni acentos, así que
consulta medica
encuentra Consulta Médica. Si envías ambos, se usa el ID.
Llama a List bookable services una vez para ver los IDs y nombres exactos que acepta tu
cuenta:
Horas y el campo timezone
Envía la hora local que le diste al cliente, más la zona IANA a la que pertenece:
2026-09-15T09:00:00-05:00); entonces el desfase prevalece sobre timezone, que sigue
siendo obligatorio.
end_at es obligatorio y nunca se deriva de la duración por defecto del servicio: cuánto dura
la cita es una afirmación tuya, no algo que la API deduzca.
Dos cosas que esta API hace distinto
- Nunca rechaza por disponibilidad. Si la hora cae fuera del horario laboral o choca con
otra cita, se agenda igualmente. Tu sistema es dueño de la agenda; Dialtu la registra. No
verás un
409en una reserva normal. - No decide qué mensajes salen. Que el cliente reciba una solicitud de confirmación o recordatorios, y con cuánta antelación, viene de la configuración del propio calendario en Dialtu (Calendario → Configuración → Notificaciones). Una cita agendada por aquí recibe exactamente los mismos mensajes que una agendada en el panel. No hay campos para ello, a propósito: esos mensajes se facturan a la cuenta de Dialtu, así que los elige el dueño de la cuenta.
Una reserva de principio a fin
data.id: es el ID de la cita en Dialtu. client_created indica si la solicitud creó
el cliente (true) o coincidió con uno existente (false).
Comprobar la capacidad antes
Get bookable capacity per service responde “¿cuántas citas más caben?” por servicio en un rango de fechas.capacity se suma por profesional, no por instante — tres profesionales
libres a las 09:00 son tres clientes a los que puedes llamar, no un hueco — y es una cota
superior: reservar un hueco puede eliminar más de un candidato cuando interactúan los
márgenes. Mantén days alineado con la ventana de búsqueda del agente que hará las llamadas,
para no encolar clientes a los que el agente luego dirá que no hay disponibilidad.
Conectarlo con n8n
1
Nodo HTTP Request
Método
POST, URL https://api.dialtu.com/api/v2/public/calendar/events.2
Autenticación
Generic Credential Type → Header Auth, nombre
Authorization, valor Bearer pk_xxxxxxxx.3
Cuerpo
Body Content Type
JSON; pega el cuerpo de arriba y sustituye los valores por
expresiones de tus nodos anteriores. Consulta una vez los nombres de servicio, profesional
y tipo de cita con List bookable services y deja los IDs fijos: nada es opcional.4
Ante un error
Lee
error_code del cuerpo de la respuesta. Ningún 400 merece reintentarse sin cambios;
un 500 sí. Ver Errores.