La API publica de AgendaPro permite integrar sistemas externos con la plataforma de gestion de reservas. A traves de esta API es posible consultar, crear y modificar reservas, asi como acceder a informacion de servicios, prestadores, locales y clientes de manera programatica.
Base URL
Todas las solicitudes deben dirigirse a la siguiente URL base:
https://agendapro.com/api/public/v1/
Todos los endpoints documentados en esta guia se construyen a partir de esta URL base. Por ejemplo, para acceder al listado de reservas, la URL completa seria:
https://agendapro.com/api/public/v1/bookings
Protocolo
Todas las solicitudes deben realizarse mediante HTTPS. Las solicitudes realizadas por HTTP plano seran rechazadas por el servidor. Esto garantiza que las credenciales de autenticacion y los datos transmitidos viajen cifrados en todo momento.
Formato de solicitudes y respuestas
Headers requeridos
Toda solicitud a la API debe incluir el siguiente header para indicar que se espera una respuesta en formato JSON:
accept: application/json
Para solicitudes que envian datos al servidor (metodos POST y PATCH), se debe incluir ademas el header de tipo de contenido:
content-type: application/json
Formato de respuestas
Todas las respuestas de la API se entregan en formato JSON. Esto aplica tanto para respuestas exitosas como para mensajes de error.
Autenticacion
La API utiliza HTTP Basic Auth como mecanismo de autenticacion. Cada solicitud debe incluir las credenciales en el header Authorization.
Obtener credenciales
Las credenciales de acceso (usuario y contrasena) se obtienen desde el panel de administracion de AgendaPro:
https://app.agendapro.com/company_settings/integration
Formato del header
La cadena usuario:contrasena debe codificarse en Base64 y enviarse en el header de la siguiente forma:
Authorization: Basic {credenciales_en_base64}Por ejemplo, si el usuario es mi_usuario y la contrasena es mi_clave, la cadena mi_usuario:mi_clave se codifica en Base64 y se envia asi:
Authorization: Basic bWlfdXN1YXJpbzptaV9jbGF2ZQ==
Ejemplo con curl
La forma mas sencilla de autenticarse con curl es usando la opcion -u, que se encarga automaticamente de la codificacion Base64:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ https://agendapro.com/api/public/v1/locations
Si las credenciales son invalidas o no se envian, la API responde con un error de autenticacion (codigos 401 o 403) indicando que las credenciales deben ser verificadas.
Rate Limits (Limites de uso)
La API tiene un limite de solicitudes diarias para proteger la estabilidad del servicio.
Cuota incluida
El Plan Pro incluye 1,000 solicitudes por dia por cada local contratado. Este limite se reinicia diariamente.
Solicitudes adicionales
Las solicitudes que excedan la cuota diaria tienen un costo de $0.004 USD por solicitud adicional.
Headers de rate limit
Cada respuesta de la API incluye headers informativos sobre el estado del consumo:
Header | Descripcion |
| Numero maximo de solicitudes permitidas en el periodo actual. |
| Numero de solicitudes restantes antes de alcanzar el limite. |
| Timestamp (epoch) que indica cuando se reinicia el contador de solicitudes. |
Cuando se supera el limite, la API responde con un codigo 429 Too Many Requests. Se recomienda implementar logica de reintento con espera exponencial (exponential backoff) al recibir este codigo.
Paginacion
No todos los endpoints de listado retornan resultados paginados. Algunos endpoints paginan los resultados en bloques de 30 registros por pagina, mientras que otros retornan todos los registros en una sola respuesta.
Endpoints con paginacion (30 registros por pagina)
Los siguientes endpoints paginan sus resultados. Se debe usar el parametro page para navegar entre paginas:
GET /bookingsGET /clientsGET /clients/get_paginate_clientsGET /clients/:id/chartsGET /clients/:id/bookingsGET /clients/:id/paymentsGET /paymentsGET /service_providers/:id/breaks
Endpoints sin paginacion (retornan todos los registros)
Los siguientes endpoints retornan la totalidad de los registros en una sola respuesta, sin soporte para el parametro page:
GET /servicesGET /service_providersGET /locationsGET /membershipsGET /locations/:id/servicesGET /locations/:id/providersGET /services/:id/providers
Parametro de paginacion
Este parametro aplica unicamente a los endpoints con paginacion listados arriba.
Parametro | Tipo | Descripcion |
| integer | Numero de pagina a consultar. Si no se envia, retorna la primera pagina (pagina 1). |
Metadatos de paginacion
Solo el endpoint GET /clients/get_paginate_clients retorna metadatos de paginacion en la respuesta (incluyendo total_pages). El resto de los endpoints paginados retornan unicamente un arreglo de resultados sin metadatos adicionales. Para estos endpoints, se debe iterar incrementando el parametro page hasta recibir una respuesta con menos de 30 registros o un arreglo vacio, lo que indica que se han consultado todos los resultados disponibles.
Ejemplo
Para obtener la segunda pagina de reservas:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/bookings?page=2"
Codigos de error comunes
La API utiliza codigos de estado HTTP estandar para indicar el resultado de cada solicitud:
Codigo | Significado | Descripcion |
200 | Exito | La solicitud se proceso correctamente. La respuesta contiene los datos solicitados. |
400 | Solicitud invalida | La solicitud esta mal formada o contiene parametros que el servidor no puede interpretar. |
401 | No autorizado | Las credenciales de autenticacion no fueron enviadas o son invalidas. Verificar que el header |
403 | Prohibido | El recurso pertenece a otra empresa o se violo una regla de negocio. Ejemplos: intentar acceder a una reserva de otra compania, o intentar reservar un horario que ya fue tomado por otro cliente. |
422 | Entidad no procesable | Error de validacion en los datos enviados. Ejemplos: la hora solicitada esta fuera del horario de atencion, el formato de fecha es invalido, o faltan campos obligatorios. La respuesta incluye detalle del error. |
429 | Limite de solicitudes excedido | Se supero la cuota diaria de solicitudes. Esperar hasta que se reinicie el contador (ver header |
503 | Servicio no disponible | El servidor esta temporalmente fuera de servicio por mantenimiento o alta carga. Reintentar la solicitud despues de unos segundos. |
Reservas (Bookings)
Los endpoints de reservas permiten gestionar el ciclo completo de las citas agendadas: listar, consultar, crear y modificar reservas. Las reservas son el recurso central de AgendaPro y conectan a un cliente con un servicio, un prestador y un local en una fecha y hora determinada.
GET /bookings - Listar reservas
Obtiene el listado de reservas de la empresa, ordenadas por fecha de creacion descendente (las mas recientes primero). Permite filtrar por multiples criterios como rango de fechas, local, prestador, servicio, estado y cliente. Los resultados se paginan en bloques de 30 reservas.
URL
GET https://agendapro.com/api/public/v1/bookings
Parametros de consulta (query parameters)
Todos los parametros son opcionales. Se pueden combinar entre si para refinar la busqueda.
Parametro | Tipo | Descripcion |
| integer | Numero de pagina para paginacion. Cada pagina retorna hasta 30 reservas. Si no se envia, retorna la primera pagina. |
| string (fecha: | Fecha de inicio del rango de busqueda. Filtra reservas cuya fecha de atencion ( |
| string (fecha: | Fecha de fin del rango de busqueda. Filtra reservas cuya fecha de atencion ( |
| string (fecha: | Filtra reservas creadas a partir de esta fecha. Util para sincronizar solo reservas nuevas desde la ultima consulta. Funciona en par con |
| string (fecha: | Filtra reservas creadas hasta esta fecha. Funciona en par con |
| string (fecha: | Filtra reservas que hayan sido modificadas a partir de esta fecha. Busca en el historial de cambios de la reserva. Util para detectar cambios recientes (ediciones, cancelaciones, cambios de estado). Funciona en par con |
| string (fecha: | Filtra reservas modificadas hasta esta fecha. Funciona en par con |
| integer (array) | IDs de locales. Filtra reservas que pertenezcan a estos locales especificos. Se envia como array en la URL: |
| integer (array) | IDs de servicios. Filtra reservas asociadas a estos servicios especificos. Se envia como array en la URL: |
| integer (array) | IDs de prestadores. Filtra reservas asignadas a estos prestadores (profesionales). Se envia como array en la URL: |
| integer (array) | IDs de clientes. Filtra reservas realizadas por estos clientes especificos. Se envia como array en la URL: |
| integer (array) | IDs de estados. Filtra reservas que se encuentren en estos estados (por ejemplo: 1=Reservado, 5=Cancelado). Se envia como array en la URL: |
| string | Si se envia |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/bookings?range_from=2025-12-01&range_to=2025-12-31&page=1"
Ejemplo con filtros multiples:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/bookings?locations[]=54724&providers[]=660296&statuses[]=1&details=history"
Ejemplo de respuesta
[ { "id": 174783837, "service_provider_id": 660296, "service_id": 562733, "location_id": 54724, "price": 30000.0, "status_id": 1, "payment_id": null, "notes": "Tienes que confirmar pooooorfa", "company_comment": "", "service": "Corte cabello", "service_provider": "Ana Muñoz", "location": "Las Condes", "status": "Reservado", "start": "2025-12-11T10:30:00.000Z", "end": "2025-12-11T11:30:00.000Z", "is_session": false, "created_date": "2025-12-11T12:13:03.203Z", "client": { "id": 39743958, "first_name": "Pedro", "last_name": "Gómez", "email": "pedro@ejemplo.com", "phone": "", "identification": "12345678-9", "custom_attributes": [ { "category_name": "Otros", "custom_attribute_id": 10510, "name": "Tipo de Reserva", "datatype": "text", "description": "", "value": "" } ] } } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico de la reserva en AgendaPro. Usar este ID para consultar o editar la reserva en los demas endpoints. |
| integer | ID del prestador asignado a la reserva. Corresponde al profesional que atendera al cliente (ej: el peluquero, el doctor, el terapeuta). |
| integer | ID del servicio reservado. Corresponde al tipo de atencion que se realizara (ej: "Corte cabello", "Consulta medica"). |
| integer | ID del local donde se realizara la atencion. Cada local representa una sucursal o punto de atencion del negocio. |
| float | Precio de la reserva en la moneda local del negocio. Puede diferir del precio base del servicio si se aplico un precio personalizado al momento de crear la reserva. |
| integer | ID numerico del estado actual de la reserva. Los valores posibles dependen de los estados configurados por el negocio (ej: 1=Reservado, 5=Cancelado). |
| integer / null | ID del pago asociado a esta reserva. Es |
| string | Notas del cliente. Texto libre que el cliente puede agregar al momento de reservar (ej: "Llego 5 min tarde", "Quiero el mismo corte de la vez pasada"). Visible tanto para el negocio como para el cliente. |
| string | Comentario interno del negocio. Texto libre que el equipo puede agregar para uso interno (ej: "Cliente VIP", "Tiene deuda pendiente"). No es visible para el cliente. |
| string | Nombre legible del servicio reservado (ej: "Corte cabello", "Masaje relajante"). Corresponde al nombre del servicio identificado por |
| string | Nombre publico del prestador asignado a la reserva (ej: "Ana Muñoz"). Corresponde al prestador identificado por |
| string | Nombre del local donde se atendera la reserva (ej: "Las Condes", "Sucursal Centro"). Corresponde al local identificado por |
| string | Nombre legible del estado actual de la reserva (ej: "Reservado", "Cancelado", "Confirmado"). Corresponde al estado identificado por |
| string (ISO 8601) | Fecha y hora de inicio de la atencion en formato UTC. Ejemplo: |
| string (ISO 8601) | Fecha y hora de fin de la atencion en formato UTC. La diferencia entre |
| boolean | Indica si la reserva forma parte de un paquete de sesiones (ej: "10 sesiones de kinesiologia"). Cuando es |
| integer | Solo presente cuando |
| integer | Solo presente cuando |
| integer | Solo presente cuando |
| string (ISO 8601) | Fecha y hora en que se creo la reserva en el sistema. Este campo solo aparece en el listado (index), no en la consulta individual (show). |
| object | Datos del cliente que realizo la reserva. Contiene los subcampos detallados a continuacion. |
| integer | ID unico del cliente en AgendaPro. Permite identificar al cliente de forma univoca para consultas futuras o para crear nuevas reservas usando |
| string | Nombre del cliente tal como esta registrado en el sistema. |
| string | Apellido del cliente tal como esta registrado en el sistema. |
| string | Direccion de email del cliente. Se utiliza para enviar confirmaciones y recordatorios. |
| string | Numero de telefono del cliente con codigo de pais (ej: |
| string | Numero de identificacion del cliente segun el pais (RUT en Chile, DNI en Argentina, cedula en Colombia, etc.). |
| array | Atributos personalizados del cliente configurados por el negocio. Cada elemento del array contiene: |
Campos adicionales con details=history
Cuando se incluye el parametro details=history, cada reserva incorpora un campo adicional con el historial completo de cambios:
Campo | Tipo | Descripcion |
| array | Historial de cambios de la reserva. Cada entrada representa una accion realizada sobre la reserva, ordenada cronologicamente. |
| string | Descripcion de la accion realizada (ej: "Creada por API", "Modificada por API", "Cancelada por API", "Creada por Ana Muñoz"). |
| integer | ID del prestador que tenia asignado la reserva al momento de esta accion. Permite rastrear reasignaciones. |
| integer | ID del servicio asociado a la reserva al momento de esta accion. Permite rastrear cambios de servicio. |
| integer | Estado numerico de la reserva al momento de esta accion. |
| string | Nombre del servicio al momento de esta accion. |
| string | Nombre del prestador al momento de esta accion. |
| string | Nombre del estado al momento de esta accion (ej: "Reservado", "Confirmado", "Cancelado"). |
| string (ISO 8601) | Hora de inicio de la reserva al momento de esta accion. Permite ver si se reprogramo la cita. |
| string (ISO 8601) | Fecha y hora exacta en que se realizo esta accion. Indica cuando ocurrio el cambio. |
| string | Email del usuario que realizo la accion. Si la accion fue realizada via API, este campo estara vacio. |
| string | Codigo del empleado que realizo la accion, si aplica. Util para auditorias internas. |
GET /bookings/:id - Ver una reserva
Obtiene el detalle completo de una reserva especifica, incluyendo siempre su historial de cambios.
URL
GET https://agendapro.com/api/public/v1/bookings/:id
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | ID unico de la reserva que se desea consultar. Se obtiene del campo |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ https://agendapro.com/api/public/v1/bookings/174783837
Ejemplo de respuesta
{ "id": 174783837, "service_provider_id": 660296, "service_id": 562733, "location_id": 54724, "price": 30000.0, "status_id": 1, "payment_id": null, "notes": "Tienes que confirmar pooooorfa", "company_comment": "", "service": "Corte cabello", "service_provider": "Ana Muñoz", "location": "Las Condes", "status": "Reservado", "start": "2025-12-11T10:30:00.000Z", "end": "2025-12-11T11:30:00.000Z", "is_session": false, "client": { "id": 39743958, "first_name": "Pedro", "last_name": "Gómez", "email": "pedro@ejemplo.com", "phone": "", "identification": "12345678-9", "custom_attributes": [ { "category_name": "Otros", "custom_attribute_id": 10510, "name": "Tipo de Reserva", "datatype": "text", "description": "", "value": "" } ] }, "history": [ { "action": "Creada por API", "service_provider_id": 660296, "service_id": 562733, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "start": "2025-12-11T10:30:00.000Z", "date_time": "2025-12-11T12:13:03.203Z", "user": "", "employee_code": "" } ] }Campos de la respuesta
Los campos son identicos a los del listado (ver seccion anterior), con las siguientes diferencias:
Incluye siempre el campo
historycon el historial completo de cambios de la reserva.El campo
created_dateesta disponible exclusivamente en el listado (GET /bookings).
POST /bookings - Crear una reserva
Crea una nueva reserva en AgendaPro. Requiere indicar el servicio, el prestador, la fecha/hora y los datos del cliente. El sistema valida disponibilidad del prestador, horarios de atencion y conflictos con otras reservas antes de confirmar la creacion.
URL
POST https://agendapro.com/api/public/v1/bookings
Parametros del cuerpo (body)
El cuerpo de la solicitud debe enviarse en formato JSON.
Parametro | Tipo | Requerido | Descripcion |
| string (ISO 8601) | Si | Fecha y hora de inicio de la reserva. Formato: |
| string (ISO 8601) | Si | Fecha y hora de fin de la reserva. Debe ser posterior a |
| integer | Si | ID del servicio a reservar. Debe corresponder a un servicio activo de la empresa. Se puede obtener consultando |
| integer | Si | ID del prestador que atendera la reserva. El prestador debe tener asignado el servicio indicado en |
| string | Si (si no se envia | Nombre del cliente. Si el cliente ya existe en AgendaPro (detectado automaticamente por email, telefono o numero de identificacion), se actualizan sus datos con los valores enviados. Si no existe, se crea un nuevo registro de cliente. |
| string | No | Apellido del cliente. Se usa para crear o actualizar el registro del cliente. |
| string | No | Email del cliente. Se usa como uno de los criterios para detectar si el cliente ya existe en el sistema. Tambien se utiliza para enviar confirmaciones y recordatorios. |
| string | No | Telefono del cliente con codigo de pais (ej: |
| string | No | Numero de identificacion del cliente (RUT, DNI, cedula, segun el pais). Se usa como criterio de deteccion de cliente existente. |
| integer | No | ID de un cliente ya existente en AgendaPro. Si se envia este parametro, se ignoran |
| float | No | Precio personalizado para esta reserva en la moneda local del negocio. Si no se envia, se usa automaticamente el precio del servicio configurado en AgendaPro. |
| string | No | Notas visibles del cliente. Texto libre que se mostrara en el detalle de la reserva y sera visible tanto para el negocio como para el cliente (ej: "Llego 5 minutos tarde"). |
| string | No | Comentario interno del negocio. Solo visible para el equipo de trabajo, no se muestra al cliente. Util para anotaciones internas (ej: "Cliente frecuente, ofrecer descuento"). |
| boolean | No | Si es |
| boolean | No | Si es |
| boolean | No | Si es |
| boolean | No | Si se envia (con cualquier valor), permite crear la reserva aunque exista un conflicto de horario con otra reserva del mismo prestador. Util para forzar reservas en horarios ya ocupados cuando el negocio asi lo requiera. |
| integer | No | ID del recurso de tiempo alternativo. Permite usar el horario disponible de otro prestador que "presta" su agenda. Para configuraciones avanzadas de disponibilidad compartida entre prestadores. |
| object | No | Objeto con atributos personalizados del cliente. Las claves del objeto se construyen usando el slug del atributo personalizado configurado en el negocio. Permite establecer valores para campos personalizados del cliente al momento de reservar. |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -H "content-type: application/json" \ -X POST \ -d '{ "start": "2025-12-15T14:00:00Z", "end": "2025-12-15T15:00:00Z", "service_id": 562733, "provider_id": 660296, "first_name": "Juan", "last_name": "Perez", "email": "juan.perez@ejemplo.com", "phone": "+56912345678", "notes": "Primera visita", "send_mail": true }' \ https://agendapro.com/api/public/v1/bookingsEjemplo con client_id (cliente existente):
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -H "content-type: application/json" \ -X POST \ -d '{ "start": "2025-12-15T14:00:00Z", "end": "2025-12-15T15:00:00Z", "service_id": 562733, "provider_id": 660296, "client_id": 39743958 }' \ https://agendapro.com/api/public/v1/bookingsEjemplo de respuesta
{ "id": 174800001, "service_provider_id": 660296, "service_id": 562733, "location_id": 54724, "price": 30000.0, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "location": "Las Condes", "start": "2025-12-15T14:00:00.000Z", "end": "2025-12-15T15:00:00.000Z", "client": { "id": 39750001, "first_name": "Juan", "last_name": "Perez", "email": "juan.perez@ejemplo.com", "identification": "" }, "history": [ { "action": "Creada por API", "service_provider_id": 660296, "service_id": 562733, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "start": "2025-12-15T14:00:00.000Z", "date_time": "2025-12-11T18:30:00.000Z", "user": "", "employee_code": "" } ], "company_nane": "Mi Salon", "location_address": "Av. Apoquindo 1234, Las Condes", "links": { "confirm": "https://agendapro.com/bookings/confirm/abc123", "cancel": "https://agendapro.com/bookings/cancel/abc123", "edit": "https://agendapro.com/bookings/edit/abc123" } }Campos adicionales en la respuesta de creacion
Ademas de los campos estandar de la reserva, la respuesta de creacion incluye:
Campo | Tipo | Descripcion |
| string | Nombre de la empresa propietaria de la reserva. Nota: la clave en el JSON es |
| string | Direccion fisica del local donde se atendera la reserva. |
| object | URLs de accion para la reserva creada. |
| string | URL para que el cliente confirme la reserva. |
| string | URL para que el cliente cancele la reserva. |
| string | URL para que el cliente modifique la reserva. |
Errores posibles
Codigo | Mensaje | Causa |
422 |
| El formato de las fechas |
422 |
| La configuracion del negocio requiere que el cliente exista previamente ( |
403 |
| El horario solicitado ya esta ocupado por otra reserva del mismo prestador. Usar |
403 |
| El servicio grupal ya alcanzo su capacidad maxima de participantes para ese horario. |
422 |
| El horario solicitado coincide con un bloqueo o descanso configurado para el prestador. |
422 |
| Error general de validacion. La respuesta incluye detalles especificos del problema (ej: campos faltantes, servicio inactivo, prestador sin ese servicio asignado). |
PATCH /bookings/:id - Editar una reserva
Modifica una reserva existente. Permite cambiar la fecha/hora, el prestador, el estado, las notas y el comentario interno. Solo se deben enviar los campos que se desean modificar.
URL
PATCH https://agendapro.com/api/public/v1/bookings/:id
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | ID unico de la reserva que se desea modificar. |
Parametros del cuerpo (body)
El cuerpo de la solicitud debe enviarse en formato JSON. Solo se deben incluir los campos que se desean modificar.
Parametro | Tipo | Requerido | Descripcion |
| string (ISO 8601) | No | Nueva fecha y hora de inicio de la reserva. Si se cambia, tambien se debe enviar |
| string (ISO 8601) | No | Nueva fecha y hora de fin de la reserva. Se debe enviar junto con |
| integer | No | ID del nuevo prestador para la reserva. Permite reasignar la atencion a otro profesional. El nuevo prestador debe tener asignado el servicio de la reserva. |
| integer | No | Nuevo estado para la reserva. Permite cambiar el estado (ej: de "Reservado" a "Confirmado"). No permite establecer el estado "Cancelado". Para cancelar una reserva, usar |
| string | No | Nuevas notas del cliente. Reemplaza las notas existentes. |
| string | No | Nuevo comentario interno del negocio. Reemplaza el comentario existente. |
Ejemplo con curl
Reprogramar una reserva a una nueva fecha y hora:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -H "content-type: application/json" \ -X PATCH \ -d '{ "start": "2025-12-16T09:00:00Z", "end": "2025-12-16T10:00:00Z" }' \ https://agendapro.com/api/public/v1/bookings/174783837Cambiar el prestador asignado:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -H "content-type: application/json" \ -X PATCH \ -d '{ "provider_id": 660300 }' \ https://agendapro.com/api/public/v1/bookings/174783837Actualizar el comentario interno:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -H "content-type: application/json" \ -X PATCH \ -d '{ "company_comment": "Cliente solicito cambio de horario por telefono" }' \ https://agendapro.com/api/public/v1/bookings/174783837Ejemplo de respuesta
{ "id": 174783837, "service_provider_id": 660296, "service_id": 562733, "location_id": 54724, "price": 30000.0, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "location": "Las Condes", "start": "2025-12-16T09:00:00.000Z", "end": "2025-12-16T10:00:00.000Z", "client": { "id": 39743958, "first_name": "Pedro", "last_name": "Gómez", "email": "pedro@ejemplo.com", "phone": "", "identification": "12345678-9", "custom_attributes": [ { "category_name": "Otros", "custom_attribute_id": 10510, "name": "Tipo de Reserva", "datatype": "text", "description": "", "value": "" } ] }, "history": [ { "action": "Creada por API", "service_provider_id": 660296, "service_id": 562733, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "start": "2025-12-11T10:30:00.000Z", "date_time": "2025-12-11T12:13:03.203Z", "user": "", "employee_code": "" }, { "action": "Modificada por API", "service_provider_id": 660296, "service_id": 562733, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "start": "2025-12-16T09:00:00.000Z", "date_time": "2025-12-12T08:45:00.000Z", "user": "", "employee_code": "" } ] }Errores posibles
Codigo | Mensaje | Causa |
422 |
| Error de validacion al intentar modificar la reserva. Puede deberse a conflictos de horario, prestador sin el servicio asignado, o formato de datos invalido. La respuesta incluye detalles del error. |
DELETE /bookings/:id - Cancelar una reserva
Cancela una reserva existente. Al ejecutar este endpoint, la reserva cambia su estado a "Cancelado" y se registra una entrada en el historial con la accion "Cancelada por API". La respuesta retorna el objeto de la reserva con el estado actualizado y el historial incluyendo la nueva entrada de cancelacion.
URL
DELETE https://agendapro.com/api/public/v1/bookings/:id
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | ID unico de la reserva que se desea cancelar. |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -X DELETE \ https://agendapro.com/api/public/v1/bookings/174783837
Ejemplo de respuesta
{ "id": 174783837, "service_provider_id": 660296, "service_id": 562733, "location_id": 54724, "price": 30000.0, "status_id": 5, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Cancelado", "location": "Las Condes", "start": "2025-12-16T09:00:00.000Z", "end": "2025-12-16T10:00:00.000Z", "client": { "id": 39743958, "first_name": "Pedro", "last_name": "Gómez", "email": "pedro@ejemplo.com", "phone": "", "identification": "12345678-9", "custom_attributes": [] }, "history": [ { "action": "Creada por API", "service_provider_id": 660296, "service_id": 562733, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "start": "2025-12-11T10:30:00.000Z", "date_time": "2025-12-11T12:13:03.203Z", "user": "", "employee_code": "" }, { "action": "Cancelada por API", "service_provider_id": 660296, "service_id": 562733, "status_id": 5, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Cancelado", "start": "2025-12-16T09:00:00.000Z", "date_time": "2025-12-12T10:00:00.000Z", "user": "", "employee_code": "" } ] }Campos de la respuesta
Los campos son identicos a los de la respuesta de GET /bookings/:id. La reserva retornada tendra status con valor "Cancelado" y el campo history incluira una nueva entrada con action igual a "Cancelada por API".
Clientes
La API de Clientes permite gestionar la base de datos de clientes de tu empresa en AgendaPro. Puedes listar, buscar, crear, editar y eliminar clientes, asi como consultar sus reservas, pagos, fichas clinicas y atributos personalizados.
URL base: https://agendapro.com/api/public/v1
Endpoints disponibles
Metodo | Endpoint | Descripcion |
GET |
| Listar clientes |
GET |
| Listar clientes con metadatos de paginacion |
GET |
| Ver un cliente especifico |
POST |
| Crear un cliente |
PATCH |
| Editar un cliente |
DELETE |
| Eliminar un cliente |
GET |
| Listar fichas de un cliente |
GET |
| Listar reservas de un cliente |
GET |
| Listar pagos de un cliente |
GET |
| Obtener atributos personalizados |
1. GET /clients
Retorna el listado de clientes de la empresa, ordenados por fecha de creacion descendente. Los resultados se paginan en bloques de 30 clientes.
Parametros de consulta (query params)
Todos los parametros son opcionales.
Parametro | Tipo | Descripcion |
| integer | Numero de pagina para la paginacion de resultados. Cada pagina retorna hasta 30 clientes. Si no se envia, retorna la primera pagina por defecto. |
| string | Busqueda por texto libre. El sistema busca coincidencias parciales en el nombre, apellido, email, telefono o numero de identificacion del cliente. Util para localizar un cliente especifico cuando no se conoce su ID. |
| integer (array) | Permite filtrar clientes por genero. Se envia como array en la URL: |
| string (fecha) | Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o posterior a esta fecha. Formato: |
| string (fecha) | Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o anterior a esta fecha. Formato: |
| string (fecha) | Filtrar clientes cuyo registro fue creado a partir de esta fecha. Formato: |
| string (fecha) | Filtrar clientes cuyo registro fue creado hasta esta fecha. Formato: |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients?page=1&search=maria" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Ejemplo con filtros de fecha
curl -X GET "https://agendapro.com/api/public/v1/clients?created_at_from=2026-01-01&created_at_to=2026-01-31&page=1" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
[ { "id": 46765492, "first_name": "Laura", "last_name": "Díaz", "email": "laura@ejemplo.com", "identification_number": "", "phone": "+56922334455", "second_phone": "", "age": null, "birth_day": null, "birth_month": null, "birth_year": null, "record_number": "", "address": "", "district": "", "city": "", "gender": 0, "created_at": "2026-01-28T16:10:08.246Z", "custom_attributes": { "a52537_attribute": "asdasd" } } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico del cliente en AgendaPro. Este ID es necesario para consultar, editar o eliminar el cliente, asi como para filtrar reservas y pagos asociados a el. |
| string | Nombre de pila del cliente tal como fue registrado en el sistema. |
| string | Apellido del cliente. Junto con |
| string | Direccion de correo electronico principal del cliente. Se utiliza para enviarle confirmaciones automaticas de reservas, recordatorios previos a la cita y comunicaciones de marketing si estan habilitadas. |
| string | Numero de identificacion del cliente. El formato depende del pais: RUT en Chile, DNI en Peru, cedula en Colombia, etc. Se almacena como texto libre segun lo ingresado por el usuario. Retorna string vacio si no fue registrado. |
| string | Telefono principal del cliente incluyendo el codigo de pais (ejemplo: |
| string | Telefono secundario o alternativo del cliente. Puede usarse como contacto de respaldo. Retorna string vacio si no fue registrado. |
| integer/null | Edad actual del cliente, calculada automaticamente a partir de su fecha de nacimiento. Retorna |
| integer/null | Dia de nacimiento del cliente, valor numerico entre 1 y 31. Retorna |
| integer/null | Mes de nacimiento del cliente, valor numerico entre 1 (enero) y 12 (diciembre). Retorna |
| integer/null | Ano de nacimiento del cliente (ejemplo: |
| string | Numero de ficha del cliente. Este campo es especialmente util para negocios del area de salud (clinicas, consultorios medicos, centros de estetica) que manejan fichas clinicas y necesitan asociar un numero de ficha interno a cada paciente. Retorna string vacio si no fue registrado. |
| string | Direccion fisica del cliente (calle, numero, etc.). Retorna string vacio si no fue registrada. |
| string | Comuna, distrito o barrio del cliente. Retorna string vacio si no fue registrado. |
| string | Ciudad donde reside el cliente. Retorna string vacio si no fue registrada. |
| integer | Genero del cliente representado como numero entero. Valores posibles: |
| string (ISO 8601) | Fecha y hora exacta en que el registro del cliente fue creado en el sistema, en formato ISO 8601 con zona horaria UTC (ejemplo: |
| object | Objeto de clave-valor que contiene los atributos personalizados del cliente. Cada clave corresponde al slug del atributo concatenado con |
2. GET /clients/get_paginate_clients
Retorna los clientes con un formato de respuesta alternativo que incluye metadatos de paginacion. Este endpoint fue creado para mantener retrocompatibilidad con el endpoint /clients original, ofreciendo un formato de respuesta que incluye el total de paginas disponibles. Esto permite a los consumidores de la API saber cuantas paginas existen sin necesidad de iterar hasta obtener una respuesta vacia.
Parametros de consulta (query params)
Acepta exactamente los mismos parametros que GET /clients:
Parametro | Tipo | Descripcion |
| integer | Numero de pagina para la paginacion de resultados. Cada pagina retorna hasta 30 clientes. Si no se envia, retorna la primera pagina por defecto. |
| string | Busqueda por texto libre. El sistema busca coincidencias parciales en el nombre, apellido, email, telefono o numero de identificacion del cliente. |
| integer (array) | Filtrar clientes por genero. Se envia como array en la URL: |
| string (fecha) | Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o posterior a esta fecha. Formato: |
| string (fecha) | Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o anterior a esta fecha. Formato: |
| string (fecha) | Filtrar clientes creados a partir de esta fecha. Formato: |
| string (fecha) | Filtrar clientes creados hasta esta fecha. Formato: |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients/get_paginate_clients?page=2&search=orellana" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
{ "clients": [ { "id": 46765492, "first_name": "Laura", "last_name": "Díaz", "email": "laura@ejemplo.com", "identification_number": "", "phone": "+56922334455", "second_phone": "", "age": null, "birth_day": null, "birth_month": null, "birth_year": null, "record_number": "", "address": "", "district": "", "city": "", "gender": 0, "created_at": "2026-01-28T16:10:08.246Z", "custom_attributes": { "a52537_attribute": "asdasd" } } ], "total_pages": 5 }Diferencias con GET /clients
A diferencia de GET /clients que retorna un arreglo directo de clientes, este endpoint envuelve la respuesta en un objeto con dos claves:
Campo | Tipo | Descripcion |
| array | Arreglo de objetos cliente. Cada objeto tiene exactamente los mismos campos descritos en |
| integer | Numero total de paginas disponibles segun los filtros aplicados. Permite implementar controles de paginacion en la interfaz o saber cuando dejar de iterar en un proceso de sincronizacion. |
3. GET /clients/:id
Retorna la informacion detallada de un cliente especifico identificado por su ID. Los campos de la respuesta son los mismos que se obtienen en el listado.
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del cliente en AgendaPro. Se obtiene del listado de clientes o de otros endpoints que referencian clientes. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients/46765492" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
{ "id": 46765492, "first_name": "Laura", "last_name": "Díaz", "email": "laura@ejemplo.com", "identification_number": "", "phone": "+56922334455", "second_phone": "", "age": null, "birth_day": null, "birth_month": null, "birth_year": null, "record_number": "", "address": "", "district": "", "city": "", "gender": 0, "created_at": "2026-01-28T16:10:08.246Z", "custom_attributes": { "a52537_attribute": "asdasd" } }Campos de la respuesta
Los campos son los mismos descritos en la seccion GET /clients. Consulta esa tabla para la descripcion detallada de cada campo.
4. POST /clients
Crea un nuevo cliente en la empresa. Solo el campo first_name es obligatorio. El sistema validara que no exista otro cliente con el mismo telefono en la empresa; si ya existe, retornara un error de validacion.
Parametros del cuerpo (body)
Parametro | Tipo | Requerido | Descripcion |
| string | Si | Nombre de pila del cliente. Es el unico campo obligatorio para crear un registro de cliente. No puede estar vacio. |
| string | No | Apellido del cliente. Se recomienda enviarlo para facilitar la identificacion del cliente en listados y busquedas. |
| string | No | Direccion de correo electronico del cliente. Debe tener un formato valido de email. Si se envia un email que ya esta registrado para otro cliente de la misma empresa, puede generar un error de validacion. |
| string | No | Telefono principal del cliente incluyendo el codigo de pais (ejemplo: |
| string | No | Telefono secundario del cliente con codigo de pais. Sirve como contacto alternativo. Mismo formato que |
| string | No | Numero de identificacion del cliente (RUT, DNI, cedula, pasaporte, etc.). Se almacena como texto libre, por lo que acepta cualquier formato. |
| string | No | Direccion fisica del cliente (calle, numero, departamento, etc.). |
| string | No | Comuna, distrito o barrio donde reside el cliente. |
| string | No | Ciudad de residencia del cliente. |
| string | No | Edad del cliente. Aunque representa un numero, se envia como string (ejemplo: |
| string | No | Genero del cliente. Se envia como string numerico: |
| string | No | Dia de nacimiento del cliente. String numerico con dos digitos (ejemplo: |
| string | No | Mes de nacimiento del cliente. String numerico con dos digitos (ejemplo: |
| string | No | Ano de nacimiento del cliente. String numerico de cuatro digitos (ejemplo: |
| string | No | Numero de ficha del cliente. Se mapea internamente al campo |
| string | No | Atributos personalizados del cliente. El nombre del parametro se construye concatenando el slug del atributo personalizado con el sufijo |
Ejemplo de solicitud
curl -X POST "https://agendapro.com/api/public/v1/clients" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json" \ -d '{ "first_name": "Maria", "last_name": "Gonzalez", "email": "maria.gonzalez@email.com", "phone": "+56912345678", "identification_number": "12345678-9", "gender": "2", "birth_day": "15", "birth_month": "03", "birth_year": "1990", "address": "Av. Providencia 1234", "district": "Providencia", "city": "Santiago", "a52537_attribute": "Consulta general" }'Respuesta exitosa (201 Created)
Retorna el objeto del cliente recien creado con todos sus campos, en el mismo formato descrito en GET /clients/:id.
Errores comunes
Codigo | Descripcion |
422 | El telefono enviado ya pertenece a otro cliente de la empresa. |
422 | Formato de email invalido. |
422 | Formato de telefono invalido. |
422 | Falta un atributo personalizado marcado como obligatorio ( |
5. PATCH /clients/:id
Permite actualizar la informacion de un cliente existente. Solo es necesario enviar los campos que se desean modificar; los campos no incluidos en el cuerpo de la solicitud mantendran sus valores actuales.
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del cliente que se desea editar. |
Parametros del cuerpo (body)
Acepta los mismos campos que POST /clients, pero todos son opcionales. Solo se deben enviar los campos que se quieren actualizar.
Parametro | Tipo | Requerido | Descripcion |
| string | No | Nuevo nombre del cliente. |
| string | No | Nuevo apellido del cliente. |
| string | No | Nuevo email del cliente. Debe ser un formato valido y no estar en uso por otro cliente de la empresa. |
| string | No | Nuevo telefono principal con codigo de pais. No debe pertenecer a otro cliente de la empresa. |
| string | No | Nuevo telefono secundario con codigo de pais. |
| string | No | Nuevo numero de identificacion. |
| string | No | Nueva direccion del cliente. |
| string | No | Nueva comuna o distrito. |
| string | No | Nueva ciudad. |
| string | No | Nueva edad (string numerico). |
| string | No | Nuevo genero ( |
| string | No | Nuevo dia de nacimiento (string numerico). |
| string | No | Nuevo mes de nacimiento (string numerico). |
| string | No | Nuevo ano de nacimiento (string numerico). |
| string | No | Nuevo numero de ficha. |
| string | No | Atributos personalizados a actualizar. Mismo formato que en la creacion: slug del atributo + |
Ejemplo de solicitud
curl -X PATCH "https://agendapro.com/api/public/v1/clients/46765492" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json" \ -d '{ "phone": "+56987654321", "address": "Av. Las Condes 5678", "city": "Santiago", "a52537_attribute": "Seguimiento mensual" }'Respuesta exitosa (200 OK)
Retorna el objeto del cliente actualizado con todos sus campos, en el mismo formato descrito en GET /clients/:id.
Errores comunes
Codigo | Descripcion |
404 | No se encontro un cliente con el ID especificado. |
422 | El telefono enviado ya pertenece a otro cliente de la empresa. |
422 | Formato de email invalido. |
6. DELETE /clients/:id
Elimina un cliente de la empresa. Esta accion es irreversible.
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del cliente que se desea eliminar. |
Ejemplo de solicitud
curl -X DELETE "https://agendapro.com/api/public/v1/clients/46765492" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
{ "message": "Client deleted", "status": "ok" }Campos de la respuesta
Campo | Tipo | Descripcion |
| string | Mensaje confirmando que el cliente fue eliminado exitosamente. |
| string | Estado de la operacion. Retorna |
Errores comunes
Codigo | Descripcion |
404 | No se encontro un cliente con el ID especificado. |
422 | El cliente tiene datos asociados que impiden su eliminacion. |
7. GET /clients/:id/charts
Retorna las fichas clinicas o de seguimiento asociadas a un cliente. Las fichas son registros personalizados que los negocios usan para llevar el historial de cada atencion (por ejemplo: diagnosticos medicos, detalles del tratamiento, anotaciones del profesional). Los resultados se paginan en bloques de 30.
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del cliente cuyas fichas se desean consultar. |
Parametros de consulta (query params)
Parametro | Tipo | Descripcion |
| integer | Numero de pagina para la paginacion de resultados. Cada pagina retorna hasta 30 fichas. Si no se envia, retorna la primera pagina por defecto. |
| string (fecha) | Filtrar fichas creadas a partir de esta fecha. Formato: |
| string (fecha) | Filtrar fichas creadas hasta esta fecha. Formato: |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients/46765492/charts?page=1&range_from=2026-01-01&range_to=2026-02-28" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Campos de la respuesta
Campo | Tipo | Descripcion |
| string | Fecha en que fue creada o registrada la ficha. Corresponde a la fecha de la atencion o consulta. |
| string | Tipo o categoria de la ficha, segun las plantillas configuradas por el negocio (ejemplo: "Consulta general", "Control", "Evaluacion inicial"). |
| object | Datos basicos del cliente asociado a la ficha. Incluye los campos |
| object/null | Reserva vinculada a esta ficha, si existe. Cuando la ficha fue creada a partir de una cita agendada, este objeto contiene los datos de esa reserva. Retorna |
| integer | ID de la reserva asociada. |
| integer | ID del profesional que atendio la cita. |
| integer | ID del servicio reservado. |
| integer | ID de la sucursal donde se realizo la atencion. |
| float | Precio del servicio en la reserva. |
| string | Nombre del servicio reservado. |
| string | Nombre del profesional que atendio. |
| string | Nombre de la sucursal. |
| string (ISO 8601) | Fecha y hora de inicio de la reserva. |
| string (ISO 8601) | Fecha y hora de fin de la reserva. |
| object | Valores dinamicos de la ficha. Las claves y tipos de este objeto dependen completamente de los campos configurados por el negocio en sus plantillas de fichas. Cada negocio puede definir campos distintos (texto, numeros, seleccion multiple, etc.), por lo que la estructura de este objeto varia. |
8. GET /clients/:id/bookings
Retorna las reservas asociadas a un cliente especifico, ordenadas por fecha de creacion descendente. Este endpoint es una forma conveniente de obtener el historial de citas de un cliente sin necesidad de filtrar el listado general de reservas. Los resultados se paginan en bloques de 30.
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del cliente cuyas reservas se desean consultar. |
Parametros de consulta (query params)
Acepta los mismos filtros disponibles en GET /bookings:
Parametro | Tipo | Descripcion |
| integer | Numero de pagina. Cada pagina retorna hasta 30 reservas. |
| string (fecha) | Filtrar reservas desde esta fecha. Formato: |
| string (fecha) | Filtrar reservas hasta esta fecha. Formato: |
| string (fecha) | Filtrar reservas actualizadas desde esta fecha. Formato: |
| string (fecha) | Filtrar reservas actualizadas hasta esta fecha. Formato: |
| integer | Filtrar por IDs de sucursales. Se puede enviar multiples veces para filtrar por varias sucursales. |
| integer | Filtrar por IDs de servicios. |
| integer | Filtrar por IDs de profesionales/prestadores. |
| integer | Filtrar por IDs de estado de la reserva. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients/39743958/bookings?page=1&range_from=2025-12-01&range_to=2025-12-31" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
[ { "id": 174783837, "service_provider_id": 660296, "service_id": 562733, "location_id": 54724, "price": 30000.0, "status_id": 1, "service": "Corte cabello", "service_provider": "Ana Muñoz", "status": "Reservado", "location": "Las Condes", "start": "2025-12-11T10:30:00.000Z", "end": "2025-12-11T11:30:00.000Z", "is_session": false, "client": { "id": 39743958, "first_name": "Pedro", "last_name": "Gómez", "email": "pedro@ejemplo.com", "phone": "", "identification": "12345678-9" } } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico de la reserva en AgendaPro. |
| integer | ID del profesional o prestador de servicio asignado a la reserva. |
| integer | ID del servicio agendado en la reserva. |
| integer | ID de la sucursal donde se realizara (o realizo) la atencion. |
| float | Precio del servicio asociado a la reserva, en la moneda configurada por el negocio. |
| integer | ID numerico del estado de la reserva. |
| string | Nombre legible del servicio reservado (ejemplo: "Corte cabello"). |
| string | Nombre completo del profesional asignado a la reserva. |
| string | Nombre legible del estado de la reserva (ejemplo: "Reservado", "Confirmado", "Cancelado"). |
| string | Nombre de la sucursal donde se atendera o atendio la reserva. |
| string (ISO 8601) | Fecha y hora de inicio de la reserva en formato ISO 8601 con zona horaria UTC. |
| string (ISO 8601) | Fecha y hora de finalizacion de la reserva en formato ISO 8601 con zona horaria UTC. |
| boolean | Indica si la reserva corresponde a una sesion de un paquete o bono de sesiones. |
| object | Datos basicos del cliente asociado a la reserva. |
| integer | ID del cliente. |
| string | Nombre del cliente. |
| string | Apellido del cliente. |
| string | Email del cliente. |
| string | Telefono del cliente. |
| string | Numero de identificacion del cliente. |
Nota: A diferencia del endpoint GET /bookings, la respuesta de este endpoint NO incluye los campos payment_id, notes, company_comment, custom_attributes ni history. Si necesitas esta informacion adicional, consulta la reserva especifica con GET /bookings/:id.
9. GET /clients/:id/payments
Retorna los pagos realizados por un cliente especifico. Permite revisar el historial financiero de un cliente: cuanto ha pagado, por que servicios y con que metodos de pago. Los resultados se paginan en bloques de 30.
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del cliente cuyos pagos se desean consultar. |
Parametros de consulta (query params)
Parametro | Tipo | Descripcion |
| integer | Numero de pagina para la paginacion de resultados. Cada pagina retorna hasta 30 pagos. Si no se envia, retorna la primera pagina por defecto. |
| string (fecha) | Filtrar pagos desde esta fecha. Formato: |
| string (fecha) | Filtrar pagos hasta esta fecha. Formato: |
| integer (array) | Filtrar por IDs de sucursales. Se puede enviar multiples veces para filtrar por varias sucursales. Funciona igual que en |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients/39743958/payments?page=1" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
La respuesta utiliza el mismo formato que GET /payments, con los pagos envueltos dentro de una clave "payments". Consulta la documentacion de Pagos para ver el detalle completo de los campos.
10. GET /clients/custom_attributes
Retorna la lista de atributos personalizados (custom attributes) configurados para los clientes de la empresa. Estos atributos permiten al negocio almacenar informacion adicional sobre sus clientes mas alla de los campos estandar, como por ejemplo: alergias, tipo de piel, preferencias de horario, motivo de consulta, entre otros. El slug de cada atributo es fundamental para enviar valores al crear o editar clientes.
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/clients/custom_attributes" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json"
Respuesta exitosa (200 OK)
[ { "company_id": 16564, "name": "motivo consulta", "description": "asdasd", "datatype": "text", "mandatory": true, "created_at": "2025-03-28T18:20:01.263Z", "updated_at": "2025-03-28T18:20:01.263Z", "slug": "a52537", "show_on_calendar": true, "show_on_workflow": false, "mandatory_on_calendar": true, "mandatory_on_workflow": false, "attribute_group_id": 18506, "order": 11, "attribute_group_name": "Otros" } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador de la empresa a la que pertenece este atributo personalizado. Todos los atributos retornados corresponden a la empresa autenticada con el token. |
| string | Nombre del atributo tal como se muestra en la interfaz de AgendaPro (ejemplo: "motivo consulta", "alergias", "tipo de piel"). Este es el nombre visible para los usuarios del negocio. |
| string | Descripcion adicional del atributo, que puede incluir instrucciones sobre como completarlo o que informacion se espera. |
| string | Tipo de dato que acepta este atributo. Define que tipo de valor se debe enviar al crear o editar un cliente. Valores posibles: |
| boolean | Indica si este atributo es obligatorio al crear o editar un cliente. Si es |
| string | Identificador tecnico unico del atributo. Este slug se usa para construir el nombre del parametro al enviar valores en |
| boolean | Indica si este atributo se muestra en la vista de calendario de AgendaPro. Cuando es |
| boolean | Indica si este atributo se muestra en el flujo de atencion (workflow) de AgendaPro. El flujo de atencion es la pantalla que usan los profesionales al momento de atender al cliente. |
| boolean | Indica si es obligatorio completar este atributo cuando se crea o edita una reserva desde la vista de calendario. |
| boolean | Indica si es obligatorio completar este atributo durante el flujo de atencion al cliente. |
| integer | Identificador del grupo al que pertenece este atributo. Los atributos se organizan en grupos para una mejor visualizacion en la interfaz. |
| integer | Posicion numerica que define el orden en que se muestra este atributo dentro de su grupo. Los atributos se ordenan de menor a mayor. |
| string | Nombre del grupo de atributos al que pertenece (ejemplo: "Datos medicos", "Preferencias", "Otros"). Permite agrupar atributos relacionados visualmente. |
| array | Solo presente cuando |
Uso practico de custom_attributes
Para enviar atributos personalizados al crear o editar un cliente, sigue estos pasos:
Consulta este endpoint para obtener los atributos disponibles y sus slugs.
Construye el nombre del parametro concatenando el slug con
_attribute.Envia el valor en el cuerpo de la solicitud
POSToPATCH.
Ejemplo: Si tienes un atributo con slug "a52537" y nombre "motivo consulta":
curl -X POST "https://agendapro.com/api/public/v1/clients" \ -H "Authorization: Token token=TU_TOKEN_AQUI" \ -H "Content-Type: application/json" \ -d '{ "first_name": "Carlos", "last_name": "Perez", "a52537_attribute": "Dolor de espalda" }'Pagos
Base URL: https://agendapro.com/api/public/v1
Los pagos en AgendaPro representan transacciones comerciales realizadas en un local. Un pago puede incluir múltiples items de distinto tipo: reservas cobradas, servicios sin reserva previa ("al vuelo"), productos, planes/membresías y gift cards. Cada pago registra los medios de pago utilizados, los comprobantes emitidos y el detalle de cada item cobrado.
1. Listar pagos
GET /payments
Retorna los pagos registrados en la empresa, ordenados por fecha de creación descendente. Los resultados se paginan en bloques de 30 pagos por página.
Parámetros de consulta
Todos los parámetros son opcionales.
Parámetro | Tipo | Descripción |
| integer | Número de página para la paginación. Cada página retorna hasta 30 pagos. Si no se envía, retorna la primera página. |
| string (fecha: | Filtrar pagos desde esta fecha (inclusive). Filtra por la fecha del pago ( |
| string (fecha: | Filtrar pagos hasta esta fecha (inclusive). Funciona en par con |
| integer (array) | IDs de locales. Filtra pagos realizados en los locales indicados. Se envía como array en la query string (ej: |
| integer (array) | IDs de clientes. Filtra pagos asociados a los clientes indicados. Se envía como array en la query string (ej: |
Ejemplo de solicitud
# Listar pagos (primera página) curl -X GET "https://agendapro.com/api/public/v1/payments" \ -H "Authorization: Token token=TU_API_TOKEN" # Listar pagos con filtros de fecha y local curl -X GET "https://agendapro.com/api/public/v1/payments?from=2025-12-01&to=2025-12-31&locations[]=54724&page=1" \ -H "Authorization: Token token=TU_API_TOKEN" # Listar pagos de clientes específicos curl -X GET "https://agendapro.com/api/public/v1/payments?clients[]=12345&clients[]=67890" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
{ "payments": [ { "id": 50973320, "payment_date": "2025-12-05T13:18:12.413Z", "location_id": 54724, "location_name": "Las Condes", "amount": 1200.0, "paid_amount": 1200.0, "change_amount": 0.0, "employee_code_id": null, "employee_code_name": "", "client": "", "bookings": [], "products": [], "mock_bookings": [ { "price": 86.0, "discount": 0.0, "payment_id": 50973320, "service": "14 Sesiones", "provider": "Pedro Gómez", "receipt_id": 60784763 } ], "memberships": [], "giftcards": [], "down_payment": [ { "payment_transactions": [ { "number": null, "amount": 1200.0, "installments": 0, "payment_method": "Efectivo", "payment_method_type": "", "bank": "" } ] } ], "receipts": [ { "id": 60784763, "amount": 1200.0, "date": "2025-12-05", "number": "14", "receipt_type": "Boleta" } ] } ] }Campos de la respuesta
Campo | Tipo | Descripción |
| integer | Identificador único del pago en AgendaPro. |
| string (ISO 8601) | Fecha y hora en que se registró el pago en el sistema. |
| integer | ID del local donde se realizó el pago. Corresponde a uno de los locales de la empresa. |
| string | Nombre del local donde se realizó el pago. |
| float | Monto total del pago después de aplicar descuentos. Es lo que efectivamente se cobró al cliente. |
| float | Monto total recibido del cliente. Puede ser mayor que |
| float | Vuelto entregado al cliente. Es la diferencia entre |
| integer/null | ID del código de empleado que registró el pago en caja. |
| string | Nombre del empleado que registró el pago. Vacío si no se registró con un código de empleado. |
| object/string | Datos del cliente asociado al pago. Si no hay cliente asociado, es un string vacío |
| array | Reservas existentes que fueron cobradas en este pago. Cada elemento incluye: |
| array | Productos vendidos en este pago. Cada elemento incluye: |
| array | Servicios cobrados sin reserva previa, es decir, servicios registrados directamente en caja sin haber creado una reserva antes ("al vuelo"). Cada elemento incluye: |
| array | Planes o membresías vendidos en este pago. Cada elemento incluye: |
| array | Gift cards vendidas en este pago. Cada elemento incluye: |
| array | Abonos del pago. Cada abono contiene un array |
| array | Transacciones de pago (medios de pago utilizados). Cada transacción incluye: |
| array | Comprobantes tributarios emitidos para este pago. Cada comprobante incluye: |
2. Ver un pago
GET /payments/:id
Retorna el detalle completo de un pago específico.
Parámetros de ruta
Parámetro | Tipo | Requerido | Descripción |
| integer | Sí | ID del pago a consultar. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/payments/50973320" \ -H "Authorization: Token token=TU_API_TOKEN"
Respuesta
Retorna los mismos campos que el listado, pero para un solo pago. La respuesta no viene envuelta en la clave "payments", sino que retorna el objeto del pago directamente.
Nota: En este endpoint, la clave de abonos se llama down_payments (plural) en lugar de down_payment (singular) como en el listado.
3. Crear un pago
POST /payments
Crea un nuevo pago en AgendaPro. Este endpoint permite registrar pagos que incluyan distintos tipos de items: servicios sin reserva previa, reservas existentes, planes/membresías, gift cards y productos. Un mismo pago puede combinar múltiples items de diferentes tipos.
Parámetros del cuerpo (JSON)
Parámetro | Tipo | Requerido | Descripción |
| integer | Sí | ID del cliente al que se le registra el pago. Debe ser un cliente existente en AgendaPro. |
| integer | Sí | ID del local donde se realiza el pago. Determina en qué sucursal se registra la transacción. |
| string (ISO 8601) | Sí | Fecha y hora del pago. Formato ISO 8601 (ej: |
| array | Sí | Array de transacciones que representan los medios de pago utilizados. La suma de los montos de todas las transacciones debe ser mayor o igual al total de los items. Si es mayor, la diferencia se registra como vuelto. |
| array | Sí | Array de comprobantes. Cada comprobante agrupa uno o más items cobrados. |
Campos de transactions[]
Parámetro | Tipo | Requerido | Descripción |
| string | Sí | Medio de pago utilizado. Valores posibles: |
| float | Sí | Monto de esta transacción en la moneda local del negocio. |
| string | No | Número de voucher, referencia o comprobante de la transacción. Útil para conciliación bancaria. |
| integer | No | Número de cuotas en que se divide el pago. Solo aplica cuando |
| string | No | Tipo o marca de tarjeta. Solo aplica cuando |
Campos de receipts[]
Parámetro | Tipo | Requerido | Descripción |
| string | Sí | Tipo de comprobante tributario. Valores posibles: |
| string | No | Número del comprobante. Permite registrar el número correlativo del documento tributario. |
| string | No | Notas adicionales del comprobante. Texto libre para observaciones. |
| array | Sí | Items incluidos en este comprobante. Cada item puede ser de un tipo distinto (servicio, reserva, plan, gift card o producto). |
Tipos de items (receipts[].items[])
Servicio sin reserva previa (new_service)
Permite cobrar un servicio sin necesidad de tener una reserva creada previamente. Útil para servicios "al vuelo" o walk-ins.
Campo | Tipo | Requerido | Descripción |
| string | Sí | Debe ser |
| integer | No | ID del servicio a cobrar. Si no se envía, se registra como un servicio genérico sin asociar a un servicio del catálogo. |
| integer | No | ID del prestador que realizó el servicio. Permite asociar la venta a un profesional específico. |
| float | Sí | Precio efectivamente cobrado al cliente por este servicio. |
| float | No | Precio de lista del servicio (precio sin descuento). Si no se envía, se usa el precio configurado del servicio o el valor de |
Cobrar una reserva existente (past_booking)
Permite asociar un pago a una reserva que ya existe en el sistema pero que aún no ha sido cobrada.
Campo | Tipo | Requerido | Descripción |
| string | Sí | Debe ser |
| integer | Sí | ID de la reserva a cobrar. La reserva debe existir y no debe tener un pago asociado previamente. |
| float | Sí | Precio cobrado por la reserva. Puede diferir del precio original del servicio si se aplica un descuento o ajuste. |
Venta de plan/membresía (membership)
Permite vender un plan o membresía al cliente, otorgándole acceso a los servicios incluidos en el plan durante el período de vigencia.
Campo | Tipo | Requerido | Descripción |
| string | Sí | Debe ser |
| integer | Sí | ID del plan o membresía a vender. Debe corresponder a un plan activo. Se puede obtener con |
| float | Sí | Precio cobrado al cliente por el plan. |
| float | No | Precio de lista del plan. Si no se envía, se usa el precio configurado del plan. |
| string (fecha) | No | Fecha de inicio de vigencia del plan. Formato |
| string (fecha) | No | Fecha de fin de vigencia del plan. Formato |
Venta de gift card (payment_giftcard)
Permite vender una gift card (tarjeta de regalo) que otorga crédito al beneficiario para usar en futuros servicios.
Campo | Tipo | Requerido | Descripción |
| string | Sí | Debe ser |
| integer | No | ID de una gift card predefinida en el sistema. Si no se envía, se crea una gift card personalizada. |
| float | Sí | Monto de crédito que tendrá la gift card. Es el saldo que el beneficiario podrá usar en servicios. |
| float | Sí | Precio de venta de la gift card. Puede diferir del |
| boolean | No | Si es |
| integer | No | ID del cliente beneficiario de la gift card. Solo aplica si |
| string (fecha) | No | Fecha de inicio de vigencia de la gift card. Formato |
| string (fecha) | No | Fecha de fin de vigencia de la gift card. Formato |
| string | No | Nombre personalizado para la gift card. Si no se envía, se genera un nombre automáticamente. |
| float | No | Descuento aplicado sobre el precio de la gift card. |
| string | No | Tipo de descuento aplicado. Valores posibles: |
Venta de producto (product)
Permite registrar la venta de un producto físico del inventario.
Campo | Tipo | Requerido | Descripción |
| string | Sí | Debe ser |
| integer | Sí | ID del producto a vender. Debe corresponder a un producto existente en el inventario. |
| float | Sí | Precio cobrado al cliente por cada unidad del producto. |
| float | Sí | Precio de lista del producto (precio sin descuento). |
| integer | Sí | Cantidad de unidades vendidas del producto. |
| integer | No | ID del vendedor que realizó la venta. Puede ser un prestador u otro empleado. |
| string | No | Tipo del vendedor (ej: tipo de empleado). |
| float | No | Descuento aplicado sobre el precio del producto. |
Ejemplo de solicitud
# Crear un pago con un servicio sin reserva previa curl -X POST "https://agendapro.com/api/public/v1/payments" \ -H "Authorization: Token token=TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": 12345, "location_id": 54724, "payment_date": "2025-01-15T10:00:00Z", "transactions": [ { "payment_method": "cash", "amount": 30000 } ], "receipts": [ { "receipt_type": "receipt", "receipt_number": "001", "notes": "", "items": [ { "item_type": "new_service", "service_id": 562733, "provider_id": 660296, "price": 30000, "list_price": 30000 } ] } ] }' # Crear un pago cobrando una reserva existente curl -X POST "https://agendapro.com/api/public/v1/payments" \ -H "Authorization: Token token=TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": 12345, "location_id": 54724, "payment_date": "2025-01-15T10:00:00Z", "transactions": [ { "payment_method": "debit", "amount": 25000, "transaction_number": "VOC-4521" } ], "receipts": [ { "receipt_type": "receipt", "items": [ { "item_type": "past_booking", "booking_id": 987654, "price": 25000 } ] } ] }' # Crear un pago con múltiples items y medios de pago curl -X POST "https://agendapro.com/api/public/v1/payments" \ -H "Authorization: Token token=TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "client_id": 12345, "location_id": 54724, "payment_date": "2025-01-15T10:00:00Z", "transactions": [ { "payment_method": "credit", "amount": 50000, "transaction_number": "VOC-9876", "installments": 3, "payment_method_type": "visa" }, { "payment_method": "cash", "amount": 25000 } ], "receipts": [ { "receipt_type": "invoice", "receipt_number": "F-001", "items": [ { "item_type": "membership", "membership_id": 44943, "price": 75000, "list_price": 75000 } ] } ] }'Errores comunes
Código | Mensaje | Descripción |
422 |
| La suma de los montos en |
422 |
| La reserva indicada en |
422 | Errores de validación | Campos requeridos faltantes, IDs inexistentes u otros errores de validación. |
Administracion de pagos
La API ofrece acceso de consulta y creacion de pagos. La modificacion y eliminacion de pagos se realiza desde el panel de AgendaPro.
Planes (Membresías)
Base URL: https://agendapro.com/api/public/v1
Los planes (también llamados membresías) en AgendaPro permiten vender paquetes de servicios recurrentes a los clientes. Un plan define qué servicios incluye, cuántas veces se pueden usar en un período determinado y su vigencia. Por ejemplo: "5 cortes de pelo por semana", "sesiones ilimitadas de kinesiología por mes" o "10 clases de yoga al año".
1. Listar planes
GET /memberships
Retorna todos los planes o membresías configurados en la empresa. Incluye tanto planes activos como inactivos, junto con los servicios que cada plan incluye y sus condiciones de uso.
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/memberships" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
[ { "id": 44943, "name": "5 Cortes - Prueba comisiones", "has_sales_taxes": true, "expiry_time_quantity": null, "active": true, "comission_value": 0.0, "price": 75000.0, "unlimited": true, "expiry_time_measurement": "ilimitada", "comission_type": "percentage", "membership_services": [ { "recurrence_quantity": 5, "recurrence_time_measurement": "day", "service": { "id": 562733, "price": 30000.0, "name": "Corte cabello", "duration": 60, "service_category": "CORTE" } } ] } ]Campos de la respuesta
Campo | Tipo | Descripción |
| integer | Identificador único del plan. Este ID se utiliza al vender un plan a través de |
| string | Nombre comercial del plan, tal como se muestra a los clientes y en el punto de venta (ej: "5 Cortes", "Plan Mensual Premium", "Pack 10 Sesiones"). |
| boolean | Indica si el precio del plan incluye impuestos de venta (IVA, IGV u otro impuesto local según el país). Si es |
| integer/null | Cantidad de unidades de tiempo que dura la vigencia del plan. Se interpreta junto con |
| boolean | Indica si el plan está activo y disponible para la venta. Los planes inactivos ( |
| float | Valor de la comisión que se asigna al prestador o vendedor al vender este plan. Se interpreta según el campo |
| float | Precio del plan en la moneda local del negocio. Es el monto que se cobra al cliente por adquirir el plan completo. |
| boolean | Indica si el plan tiene vigencia ilimitada. Si es |
| string | Unidad de tiempo para la vigencia del plan. Valores posibles: |
| string | Tipo de comisión que se paga al vender este plan. Valores posibles: |
| array | Lista de servicios incluidos en el plan. Cada elemento define un servicio y las condiciones de uso (frecuencia permitida). |
| integer | Cantidad de veces que el cliente puede usar este servicio dentro de cada período de recurrencia. Por ejemplo, |
| string | Período de recurrencia en el que se renuevan los usos del servicio. Valores posibles: |
| object | Datos del servicio incluido en el plan. |
| integer | ID del servicio. |
| float | Precio individual del servicio (precio que se cobraría sin el plan). |
| string | Nombre del servicio. |
| integer | Duración del servicio en minutos. |
| string | Categoría a la que pertenece el servicio. |
2. Ver un plan
GET /memberships/:id
Retorna el detalle de un plan específico.
Parámetros de ruta
Parámetro | Tipo | Requerido | Descripción |
| integer | Sí | ID del plan a consultar. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/memberships/44943" \ -H "Authorization: Token token=TU_API_TOKEN"
Respuesta
Retorna la misma estructura que el listado, pero para un solo plan.
Administracion de planes
La API ofrece acceso de consulta a los planes. La creacion y administracion de planes se realiza desde el panel de AgendaPro.
La gestión de planes se realiza exclusivamente desde la interfaz web de AgendaPro.
Locales
Base URL: https://agendapro.com/api/public/v1
Los locales representan las ubicaciones físicas (sucursales, sedes, consultorios) donde la empresa atiende a sus clientes. Cada local tiene su propia dirección, horarios de atención, servicios disponibles y prestadores asignados. El ID de un local se utiliza como filtro en múltiples endpoints de la API (reservas, pagos, servicios, prestadores).
1. Listar locales
GET /locations
Retorna los locales activos de la empresa, ordenados según su configuración de orden interna. Solo se incluyen locales que están habilitados para operar.
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/locations" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
{ "locations": [ { "id": 54724, "address": "Alonso de Córdova", "district": "Las Condes", "city": "Santiago", "region": "Región Metropolitana", "country": "Chile", "name": "Las Condes", "second_address": "a", "phone": "569991299", "longitude": -70.5838346, "latitude": -33.4044705 } ] }Nota: La respuesta viene envuelta en la clave "locations".
Campos de la respuesta
Campo | Tipo | Descripción |
| integer | Identificador único del local. Este ID se utiliza para filtrar reservas, pagos, y para consultar los servicios y prestadores disponibles en un local específico. |
| string | Dirección principal del local (calle y número). |
| string | Comuna, municipio o barrio donde se ubica el local. La denominación varía según el país (comuna en Chile, colonia en México, barrio en Colombia, etc.). |
| string | Ciudad donde se ubica el local. |
| string | Región, estado o provincia donde se ubica el local. La denominación varía según el país. |
| string | País donde se ubica el local. |
| string | Nombre comercial del local, tal como se muestra a los clientes (ej: "Sede Centro", "Sucursal Mall", "Consulta Las Condes"). |
| string | Información adicional de dirección, como piso, oficina, local comercial o referencia (ej: "Piso 3, Oficina 301", "Local 25, Mall Plaza"). |
| string | Teléfono de contacto del local. Formato libre, puede incluir código de país. |
| float | Longitud geográfica del local (coordenada X). Útil para mostrar la ubicación en un mapa o calcular distancias. |
| float | Latitud geográfica del local (coordenada Y). Útil para mostrar la ubicación en un mapa o calcular distancias. |
2. Ver un local
GET /locations/:id
Retorna el detalle de un local específico, incluyendo sus horarios de atención por día de la semana.
Parámetros de ruta
Parámetro | Tipo | Requerido | Descripción |
| integer | Sí | ID del local a consultar. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/locations/54724" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
{ "id": 54724, "address": "Alonso de Córdova", "district": "Las Condes", "city": "Santiago", "region": "Región Metropolitana", "country": "Chile", "name": "Las Condes", "second_address": "a", "phone": "569991299", "longitude": -70.5838346, "latitude": -33.4044705, "location_times": [ { "day": 1, "day_name": "Lunes", "open": "09:00", "close": "20:30" }, { "day": 2, "day_name": "Martes", "open": "09:00", "close": "20:00" }, { "day": 6, "day_name": "Sábado", "open": "09:00", "close": "19:00" } ] }Campos adicionales de la respuesta
Además de todos los campos del listado, este endpoint incluye:
Campo | Tipo | Descripción |
| array | Horarios de atención del local por día de la semana. Solo incluye los días en que el local está abierto. Si un día no aparece en el array, significa que el local está cerrado ese día. |
| integer | Número del día de la semana. Los valores son: |
| string | Nombre del día de la semana en español (ej: "Lunes", "Martes", "Sábado"). |
| string (HH:MM) | Hora de apertura del local en formato 24 horas (ej: |
| string (HH:MM) | Hora de cierre del local en formato 24 horas (ej: |
3. Listar servicios de un local
GET /locations/:id/services
Retorna los servicios activos disponibles en el local especificado. Solo incluye servicios que tienen al menos un prestador activo asignado en ese local. Este endpoint es útil para armar un flujo de reserva: primero se selecciona el local, luego el servicio, y finalmente el prestador.
Parámetros de ruta
Parámetro | Tipo | Requerido | Descripción |
| integer | Sí | ID del local del que se quieren obtener los servicios. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/locations/54724/services" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
[ { "id": 414827, "name": "Servicio se puede pagar", "duration": 20, "category": "PRUEBAS PARA PRD" } ]Campos de la respuesta
Campo | Tipo | Descripción |
| integer | Identificador único del servicio. |
| string | Nombre del servicio. |
| integer | Duración del servicio en minutos. |
| string | Categoría a la que pertenece el servicio. |
Nota: La respuesta es un array directo (no viene envuelta en una clave). El formato es similar a GET /services pero filtrado por local y sin el campo has_sessions.
4. Listar prestadores de un local
GET /locations/:id/providers
Retorna los prestadores activos asignados al local especificado. La respuesta tiene un formato simplificado con solo el ID y nombre de cada prestador.
Parámetros de ruta
Parámetro | Tipo | Requerido | Descripción |
| integer | Sí | ID del local del que se quieren obtener los prestadores. |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/locations/54724/providers" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
[ { "id": 207094, "name": "Nuevo con to" }, { "id": 660296, "name": "Ana Muñoz" } ]Campos de la respuesta
Campo | Tipo | Descripción |
| integer | Identificador único del prestador. |
| string | Nombre del prestador. |
5. Obtener sellers de un local
GET /locations/sellers
Retorna los "sellers" (vendedores) habilitados en un local. Los sellers son las personas autorizadas para registrar ventas y pagos en ese local. Pueden ser prestadores de servicios u otros empleados del negocio. Este endpoint es útil al crear pagos con productos que requieren indicar un seller_id.
Parámetros de consulta
Parámetro | Tipo | Requerido | Descripción |
| string | No | ID del local. Si no se envia, retorna sellers de todos los locales de la empresa. Soporta multiples IDs separados por coma (ej: |
Ejemplo de solicitud
curl -X GET "https://agendapro.com/api/public/v1/locations/sellers?id=54724" \ -H "Authorization: Token token=TU_API_TOKEN"
Ejemplo de respuesta
[ { "id": 344568, "seller_type": 0, "full_name": "Cali Anato", "role_name": "Prestador" } ]Campos de la respuesta
Campo | Tipo | Descripción |
| integer | Identificador del seller. Puede corresponder a un |
| integer | Tipo numérico del seller. |
| string | Nombre completo del seller. |
| string | Rol del seller en el negocio (ej: "Prestador", "Administrador"). Indica la función que cumple dentro de la organización. |
Administracion de locales
La API ofrece acceso de consulta a los locales. La creacion y administracion de locales se realiza desde el panel de AgendaPro.
La gestión de locales se realiza exclusivamente desde la interfaz web de AgendaPro.
Servicios (Services)
Los endpoints de servicios permiten consultar el catalogo de atenciones que ofrece el negocio en AgendaPro. Un servicio representa el tipo de atencion que se brinda al cliente (por ejemplo: "Corte de cabello", "Consulta medica", "Masaje relajante"). Los servicios estan organizados por categorias y pueden tener sesiones asociadas. Ademas, es posible consultar que prestadores realizan un servicio especifico y que horarios estan disponibles para reservar.
URL base: https://agendapro.com/api/public/v1
Nota: Los servicios son recursos de consulta en la API publica. Su gestion se realiza desde el panel de AgendaPro.
Endpoints disponibles
Metodo | Endpoint | Descripcion |
GET |
| Listar todos los servicios |
GET |
| Ver un servicio especifico |
GET |
| Listar prestadores de un servicio |
GET |
| Consultar horas disponibles para un servicio |
1. GET /services
Retorna todos los servicios activos de la empresa, ordenados por categoria y luego por orden de configuracion.
Nota: Este endpoint retorna todos los servicios activos de la empresa en una sola respuesta (sin paginacion).
URL
GET https://agendapro.com/api/public/v1/services
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/services"
Ejemplo de respuesta
[ { "id": 562733, "name": "Corte cabello", "duration": 60, "category": "CORTE", "decription": "", "order": 0, "has_sessions": false }, { "id": 553863, "name": "TERAPIA OCUPACIONAL 3 SESIONES", "duration": 60, "category": "Consulta", "decription": "", "order": 82, "has_sessions": true, "sessions_amount": 3 } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico del servicio en AgendaPro. Usar este ID para consultar los prestadores que realizan el servicio ( |
| string | Nombre comercial del servicio tal como lo ve el cliente en la plataforma de reservas (ejemplo: "Corte cabello", "Consulta Psicologica", "Masaje relajante"). Este nombre es configurado por el negocio desde el panel de administracion. |
| integer | Duracion del servicio expresada en minutos. Define cuanto tiempo bloquea en la agenda del prestador al crear una reserva. Por ejemplo, un servicio con |
| string | Nombre de la categoria a la que pertenece el servicio (ejemplo: "CORTE", "Consulta", "Facial", "Masajes"). Las categorias son configuradas libremente por el negocio y permiten organizar los servicios en grupos logicos. Los servicios se retornan ordenados primero por categoria y luego por el campo |
| string | Descripcion del servicio, que puede incluir detalles adicionales sobre la atencion. Nota: el nombre del campo en la respuesta es |
| integer | Posicion de ordenamiento del servicio dentro de su categoria. Los servicios se muestran ordenados de menor a mayor valor. Un servicio con |
| boolean | Indica si el servicio es un "servicio con sesiones" o paquete de sesiones. Cuando es |
| integer | Cantidad total de sesiones del paquete. Solo presente cuando |
2. GET /services/:id
Retorna la informacion detallada de un servicio especifico identificado por su ID. Los campos de la respuesta son los mismos que se obtienen en el listado.
URL
GET https://agendapro.com/api/public/v1/services/:id
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del servicio que se desea consultar. Se obtiene del campo |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ https://agendapro.com/api/public/v1/services/562733
Ejemplo de respuesta
{ "id": 562733, "name": "Corte cabello", "duration": 60, "category": "CORTE", "decription": "", "order": 0, "has_sessions": false }Campos de la respuesta
Los campos son los mismos descritos en la seccion GET /services. Consulta esa tabla para la descripcion detallada de cada campo.
3. GET /services/:id/providers
Retorna los prestadores activos que tienen asignado el servicio especificado. Este endpoint es util para armar un flujo de reserva: despues de que el usuario elige un servicio, se muestran solo los prestadores capacitados para realizarlo. La respuesta tiene un formato simplificado que incluye unicamente el ID y el nombre de cada prestador.
URL
GET https://agendapro.com/api/public/v1/services/:id/providers
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del servicio cuyos prestadores se desean consultar. Se obtiene del campo |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ https://agendapro.com/api/public/v1/services/562733/providers
Ejemplo de respuesta
[ { "id": 141109, "name": "NICOLAS" }, { "id": 119162, "name": "Pedro Gómez" }, { "id": 660296, "name": "Ana Muñoz" } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico del prestador. Usar este ID como |
| string | Nombre publico del prestador, tal como lo ven los clientes (ejemplo: "NICOLAS", "Pedro Gómez", "Ana Muñoz"). |
Nota: A diferencia del endpoint GET /service_providers, esta respuesta tiene un formato simplificado que solo incluye id y name. No incluye location_id ni el horario de trabajo (times). Si necesitas esa informacion adicional, consulta el prestador directamente con GET /service_providers/:id.
4. GET /services/:id/available_hours
Retorna los bloques de hora disponibles para un servicio en una fecha especifica. Este es el endpoint clave para implementar un flujo de reserva online: muestra exactamente que horarios estan libres, con que prestador, para que el usuario pueda elegir. El calculo de disponibilidad considera el horario de atencion del local, el horario de trabajo del prestador, los bloqueos configurados (almuerzos, reuniones, dias libres) y las reservas existentes.
URL
GET https://agendapro.com/api/public/v1/services/:id/available_hours
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del servicio para el que se desea consultar disponibilidad. Se obtiene del campo |
Parametros de consulta (query params)
Parametro | Tipo | Requerido | Descripcion |
| string (YYYY-MM-DD) | No | Fecha para la que se desea consultar la disponibilidad de horarios. Debe ser una fecha futura o el dia actual. Si no se envia, se usa la fecha actual (hoy) por defecto. Si la fecha cae en un dia en que el local esta cerrado, la API retornara un error 403 con el mensaje "Bad date.". |
| integer | No* | ID del prestador especifico para el que se desea consultar disponibilidad. Si se envia, la respuesta muestra solo los horarios libres de ese prestador. Se obtiene del listado de prestadores ( |
| integer | No* | ID del local para el que se desea consultar disponibilidad. Si se envia, la respuesta muestra los horarios libres de todos los prestadores del local que tienen asignado el servicio. Se obtiene del listado de locales ( |
*Importante: Se debe enviar provider_id o location_id. Si se envian ambos, solo se considera provider_id. Si no se envia ninguno de los dos, la API retorna un error 403 con el mensaje "No Available Providers".
Ejemplo con curl
Consultar disponibilidad por prestador:
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/services/562733/available_hours?date=2026-03-05&provider_id=660296"
Consultar disponibilidad por local (todos los prestadores del local):
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/services/562733/available_hours?date=2026-03-05&location_id=54724"
Ejemplo de respuesta
{ "available_hours": [ { "start_time": "2026-03-05T09:00:00.000+00:00", "end_time": "2026-03-05T10:00:00.000+00:00", "service_name": "Corte cabello", "provider_name": "Ana Muñoz", "provider_id": 660296, "start_block": "09:00" }, { "start_time": "2026-03-05T10:00:00.000+00:00", "end_time": "2026-03-05T11:00:00.000+00:00", "service_name": "Corte cabello", "provider_name": "Ana Muñoz", "provider_id": 660296, "start_block": "10:00" } ], "day": 4, "day_name": "Jueves", "day_number": 5, "formatted_date": "2026-03-05" }Campos de la respuesta
Campo | Tipo | Descripcion |
| array | Lista de bloques de hora disponibles para el servicio en la fecha consultada. Cada elemento del array representa un slot de tiempo donde se puede crear una reserva. Si no hay disponibilidad, el array estara vacio. |
| string (ISO 8601) | Fecha y hora de inicio del bloque disponible en formato ISO 8601. Usar este valor como el campo |
| string (ISO 8601) | Fecha y hora de fin del bloque disponible en formato ISO 8601. Usar este valor como el campo |
| string | Nombre del servicio consultado. Coincide con el nombre del servicio identificado por el |
| string | Nombre del prestador disponible en este bloque horario. Cuando se consulta por |
| integer | ID del prestador disponible en este bloque. Usar como el campo |
| string (HH:MM) | Hora de inicio del bloque en formato legible de 24 horas (ejemplo: |
| integer | Dia de la semana correspondiente a la fecha consultada. Los valores van de 1 a 7 donde 1=Lunes, 2=Martes, 3=Miercoles, 4=Jueves, 5=Viernes, 6=Sabado, 7=Domingo. |
| string | Nombre del dia de la semana en espanol (ejemplo: "Lunes", "Jueves", "Domingo"). Util para mostrar al usuario. |
| integer | Numero del dia dentro del mes (ejemplo: |
| string (YYYY-MM-DD) | Fecha consultada en formato |
Errores posibles
Codigo | Mensaje | Causa |
403 |
| No se envio |
403 |
| La fecha consultada cae en un dia en que el local esta cerrado (por ejemplo, un domingo si el local no abre los domingos). |
Flujo tipico de reserva
Para implementar un flujo completo de reserva online, se recomienda seguir estos pasos:
Obtener servicios:
GET /servicespara mostrar el catalogo al usuario.Obtener prestadores del servicio:
GET /services/:id/providerspara mostrar los profesionales disponibles.Consultar disponibilidad:
GET /services/:id/available_hours?date=YYYY-MM-DD&provider_id=IDpara mostrar los horarios libres.Crear la reserva:
POST /bookingscon los datos del bloque seleccionado (start_time,end_time,provider_id) y los datos del cliente.
# Paso 1: Listar servicios curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/services" # Paso 2: Listar prestadores del servicio elegido curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/services/562733/providers" # Paso 3: Consultar horas disponibles curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/services/562733/available_hours?date=2026-03-05&provider_id=660296" # Paso 4: Crear la reserva con el bloque elegido curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ -H "content-type: application/json" \ -X POST \ -d '{ "start": "2026-03-05T09:00:00.000+00:00", "end": "2026-03-05T10:00:00.000+00:00", "service_id": 562733, "provider_id": 660296, "first_name": "Juan", "last_name": "Perez", "email": "juan@ejemplo.com", "phone": "+56912345678" }' \ https://agendapro.com/api/public/v1/bookingsPrestadores (Service Providers)
Los endpoints de prestadores permiten consultar los profesionales que realizan las atenciones en AgendaPro. Un prestador es el profesional que brinda el servicio al cliente (por ejemplo: un estilista, un medico, un terapeuta, un instructor). Cada prestador esta asignado a un local, tiene un horario de trabajo propio y puede tener uno o mas servicios asignados. Es posible consultar los servicios que realiza cada prestador y los bloqueos de su agenda.
URL base: https://agendapro.com/api/public/v1
Nota: Los prestadores son recursos de consulta en la API publica. Su gestion se realiza desde el panel de AgendaPro.
Endpoints disponibles
Metodo | Endpoint | Descripcion |
GET |
| Listar todos los prestadores |
GET |
| Ver un prestador especifico |
GET |
| Listar servicios de un prestador |
GET |
| Listar bloqueos de un prestador |
1. GET /service_providers
Retorna todos los prestadores activos de la empresa, ordenados por local y luego por orden de configuracion. Cada prestador incluye su horario de trabajo semanal.
Nota: Este endpoint retorna todos los prestadores activos de la empresa en una sola respuesta (sin paginacion).
URL
GET https://agendapro.com/api/public/v1/service_providers
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/service_providers"
Ejemplo de respuesta
[ { "id": 660296, "name": "Ana Muñoz", "location_id": 54724, "times": [ { "day": 1, "day_name": "Lunes", "open": "09:00", "close": "20:30" }, { "day": 2, "day_name": "Martes", "open": "09:00", "close": "20:00" }, { "day": 3, "day_name": "Miércoles", "open": "09:00", "close": "20:00" }, { "day": 4, "day_name": "Jueves", "open": "09:00", "close": "20:00" }, { "day": 5, "day_name": "Viernes", "open": "09:00", "close": "20:00" }, { "day": 6, "day_name": "Sábado", "open": "09:00", "close": "19:00" } ] } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico del prestador en AgendaPro. Usar este ID para consultar los servicios que realiza ( |
| string | Nombre publico del prestador, tal como lo ven los clientes en la plataforma de reservas (ejemplo: "Ana Muñoz", "Dr. Perez", "NICOLAS"). Este nombre es configurado por el negocio desde el panel de administracion. |
| integer | ID del local al que pertenece el prestador. Un prestador solo puede estar asignado a un unico local. El local determina la sucursal donde el prestador atiende. Se puede obtener informacion del local consultando |
| array | Horario de trabajo semanal del prestador. Contiene un elemento por cada dia de la semana en que el prestador trabaja. Solo incluye los dias en que el prestador tiene jornada configurada. Si un dia no aparece en el array, significa que el prestador no trabaja ese dia (por ejemplo, si no aparece el dia 7, el prestador no trabaja los domingos). |
| integer | Dia de la semana representado como numero entero. Los valores van de 1 a 7 donde: 1=Lunes, 2=Martes, 3=Miercoles, 4=Jueves, 5=Viernes, 6=Sabado, 7=Domingo. |
| string | Nombre del dia de la semana en espanol (ejemplo: "Lunes", "Martes", "Miercoles", "Sabado"). Util para mostrar el horario al usuario de forma legible. |
| string (HH:MM) | Hora de inicio de la jornada laboral del prestador para ese dia, en formato de 24 horas (ejemplo: |
| string (HH:MM) | Hora de fin de la jornada laboral del prestador para ese dia, en formato de 24 horas (ejemplo: |
2. GET /service_providers/:id
Retorna la informacion detallada de un prestador especifico identificado por su ID. Los campos de la respuesta son los mismos que se obtienen en el listado, incluyendo su horario de trabajo semanal.
URL
GET https://agendapro.com/api/public/v1/service_providers/:id
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del prestador que se desea consultar. Se obtiene del campo |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ https://agendapro.com/api/public/v1/service_providers/660296
Ejemplo de respuesta
{ "id": 660296, "name": "Ana Muñoz", "location_id": 54724, "times": [ { "day": 1, "day_name": "Lunes", "open": "09:00", "close": "20:30" }, { "day": 2, "day_name": "Martes", "open": "09:00", "close": "20:00" }, { "day": 3, "day_name": "Miércoles", "open": "09:00", "close": "20:00" }, { "day": 4, "day_name": "Jueves", "open": "09:00", "close": "20:00" }, { "day": 5, "day_name": "Viernes", "open": "09:00", "close": "20:00" }, { "day": 6, "day_name": "Sábado", "open": "09:00", "close": "19:00" } ] }Campos de la respuesta
Los campos son los mismos descritos en la seccion GET /service_providers. Consulta esa tabla para la descripcion detallada de cada campo.
3. GET /service_providers/:id/services
Retorna los servicios activos asignados al prestador especificado. Muestra que tipos de atencion puede realizar este profesional. La respuesta tiene un formato simplificado que incluye el ID, nombre, duracion y categoria de cada servicio.
URL
GET https://agendapro.com/api/public/v1/service_providers/:id/services
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del prestador cuyos servicios se desean consultar. Se obtiene del campo |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ https://agendapro.com/api/public/v1/service_providers/660296/services
Ejemplo de respuesta
[ { "id": 1089712, "name": "Pack 5 Cortes", "duration": 60, "category": "CORTE" }, { "id": 405308, "name": "Rebaje de Barba", "duration": 10, "category": "CORTE" }, { "id": 562733, "name": "Corte cabello", "duration": 60, "category": "CORTE" } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| integer | Identificador unico del servicio. Usar este ID como |
| string | Nombre comercial del servicio tal como lo ve el cliente (ejemplo: "Pack 5 Cortes", "Rebaje de Barba", "Corte cabello"). |
| integer | Duracion del servicio expresada en minutos. Define cuanto tiempo ocupa la atencion en la agenda del prestador (ejemplo: |
| string | Nombre de la categoria a la que pertenece el servicio (ejemplo: "CORTE", "Consulta", "Facial"). Las categorias son configuradas por el negocio. |
Nota: A diferencia del endpoint GET /services, esta respuesta tiene un formato simplificado que solo incluye id, name, duration y category. No incluye los campos decription, order, has_sessions ni sessions_amount. Si necesitas esa informacion adicional, consulta el servicio directamente con GET /services/:id.
4. GET /service_providers/:id/breaks
Retorna los bloqueos de agenda del prestador especificado. Un bloqueo es un periodo de tiempo en que el prestador no esta disponible para recibir reservas. Los bloqueos pueden representar distintos motivos: hora de almuerzo, reuniones internas, dias libres, vacaciones, capacitaciones, entre otros. Los resultados se paginan en bloques de 30 registros.
URL
GET https://agendapro.com/api/public/v1/service_providers/:id/breaks
Parametros de ruta
Parametro | Tipo | Requerido | Descripcion |
| integer | Si | Identificador unico del prestador cuyos bloqueos se desean consultar. Se obtiene del campo |
Parametros de consulta (query params)
Parametro | Tipo | Descripcion |
| integer | Numero de pagina para la paginacion de resultados. Cada pagina retorna hasta 30 bloqueos. Si no se envia, retorna la primera pagina por defecto. |
| string (YYYY-MM-DD) | Filtrar bloqueos desde esta fecha. Se debe usar junto con |
| string (YYYY-MM-DD) | Filtrar bloqueos hasta esta fecha. Se debe usar junto con |
Ejemplo con curl
curl -u "mi_usuario:mi_clave" \ -H "accept: application/json" \ "https://agendapro.com/api/public/v1/service_providers/660296/breaks?page=1"
Ejemplo de respuesta
[ { "name": "Almuerzo", "start_time": "2026-03-05T13:00:00.000Z", "end_time": "2026-03-05T14:00:00.000Z", "service_provider_id": 660296, "service_provider_name": "Ana Muñoz" } ]Campos de la respuesta
Campo | Tipo | Descripcion |
| string | Nombre o motivo del bloqueo, tal como fue configurado por el negocio (ejemplo: "Almuerzo", "Reunion de equipo", "Vacaciones", "Capacitacion", "Dia libre"). Describe la razon por la que el prestador no esta disponible durante ese periodo. |
| string (ISO 8601) | Fecha y hora de inicio del bloqueo en formato ISO 8601 con zona horaria UTC (ejemplo: |
| string (ISO 8601) | Fecha y hora de fin del bloqueo en formato ISO 8601 con zona horaria UTC (ejemplo: |
| integer | ID del prestador al que pertenece el bloqueo. Coincide con el |
| string | Nombre del prestador al que pertenece el bloqueo. Util para mostrar informacion legible al usuario. |
Nota: Los bloqueos configurados en AgendaPro ya son considerados automaticamente por el endpoint GET /services/:id/available_hours. Es decir, los horarios bloqueados no apareceran como disponibles al consultar la disponibilidad de un servicio. Este endpoint es util para visualizar directamente los bloqueos del prestador, por ejemplo, para mostrar en un calendario la razon por la que ciertos horarios no estan disponibles.
