Ir al contenido principal

API AgendaPro

Listado de funcionalidades de la API pública de AgendaPro.

Escrito por Equipo de Producto
Actualizado hace más de una semana

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

X-RateLimit-Limit

Numero maximo de solicitudes permitidas en el periodo actual.

X-RateLimit-Remaining

Numero de solicitudes restantes antes de alcanzar el limite.

X-RateLimit-Reset

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 /bookings

  • GET /clients

  • GET /clients/get_paginate_clients

  • GET /clients/:id/charts

  • GET /clients/:id/bookings

  • GET /clients/:id/payments

  • GET /payments

  • GET /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 /services

  • GET /service_providers

  • GET /locations

  • GET /memberships

  • GET /locations/:id/services

  • GET /locations/:id/providers

  • GET /services/:id/providers

Parametro de paginacion

Este parametro aplica unicamente a los endpoints con paginacion listados arriba.

Parametro

Tipo

Descripcion

page

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 Authorization este presente y que las credenciales sean correctas.

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 X-RateLimit-Reset).

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

page

integer

Numero de pagina para paginacion. Cada pagina retorna hasta 30 reservas. Si no se envia, retorna la primera pagina.

range_from

string (fecha: YYYY-MM-DD)

Fecha de inicio del rango de busqueda. Filtra reservas cuya fecha de atencion (start) sea igual o posterior a esta fecha. Funciona en par con range_to: ambos parametros deben enviarse juntos para activar el filtro.

range_to

string (fecha: YYYY-MM-DD)

Fecha de fin del rango de busqueda. Filtra reservas cuya fecha de atencion (start) sea igual o anterior a esta fecha. Funciona en par con range_from: ambos parametros deben enviarse juntos para activar el filtro.

created_from

string (fecha: YYYY-MM-DD)

Filtra reservas creadas a partir de esta fecha. Util para sincronizar solo reservas nuevas desde la ultima consulta. Funciona en par con created_to: ambos parametros deben enviarse juntos para activar el filtro.

created_to

string (fecha: YYYY-MM-DD)

Filtra reservas creadas hasta esta fecha. Funciona en par con created_from: ambos parametros deben enviarse juntos para activar el filtro.

updated_from

string (fecha: YYYY-MM-DD)

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 updated_to: ambos parametros deben enviarse juntos para activar el filtro.

updated_to

string (fecha: YYYY-MM-DD)

Filtra reservas modificadas hasta esta fecha. Funciona en par con updated_from: ambos parametros deben enviarse juntos para activar el filtro.

locations[]

integer (array)

IDs de locales. Filtra reservas que pertenezcan a estos locales especificos. Se envia como array en la URL: locations[]=123&locations[]=456.

services[]

integer (array)

IDs de servicios. Filtra reservas asociadas a estos servicios especificos. Se envia como array en la URL: services[]=123&services[]=456.

providers[]

integer (array)

IDs de prestadores. Filtra reservas asignadas a estos prestadores (profesionales). Se envia como array en la URL: providers[]=123&providers[]=456.

clients[]

integer (array)

IDs de clientes. Filtra reservas realizadas por estos clientes especificos. Se envia como array en la URL: clients[]=123&clients[]=456.

statuses[]

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: statuses[]=1&statuses[]=5. Los estados disponibles dependen de la configuracion del negocio.

details

string

Si se envia details=history, cada reserva incluira su historial completo de cambios (quien la creo, modifico, cancelo, etc., con fechas y responsables de cada accion).

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

id

integer

Identificador unico de la reserva en AgendaPro. Usar este ID para consultar o editar la reserva en los demas endpoints.

service_provider_id

integer

ID del prestador asignado a la reserva. Corresponde al profesional que atendera al cliente (ej: el peluquero, el doctor, el terapeuta).

service_id

integer

ID del servicio reservado. Corresponde al tipo de atencion que se realizara (ej: "Corte cabello", "Consulta medica").

location_id

integer

ID del local donde se realizara la atencion. Cada local representa una sucursal o punto de atencion del negocio.

price

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.

status_id

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).

payment_id

integer / null

ID del pago asociado a esta reserva. Es null si la reserva aun no ha sido pagada o no tiene un pago vinculado.

notes

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.

company_comment

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.

service

string

Nombre legible del servicio reservado (ej: "Corte cabello", "Masaje relajante"). Corresponde al nombre del servicio identificado por service_id.

service_provider

string

Nombre publico del prestador asignado a la reserva (ej: "Ana Muñoz"). Corresponde al prestador identificado por service_provider_id.

location

string

Nombre del local donde se atendera la reserva (ej: "Las Condes", "Sucursal Centro"). Corresponde al local identificado por location_id.

status

string

Nombre legible del estado actual de la reserva (ej: "Reservado", "Cancelado", "Confirmado"). Corresponde al estado identificado por status_id.

start

string (ISO 8601)

Fecha y hora de inicio de la atencion en formato UTC. Ejemplo: "2025-12-11T10:30:00.000Z". Representa el momento en que comienza la cita del cliente.

end

string (ISO 8601)

Fecha y hora de fin de la atencion en formato UTC. La diferencia entre start y end determina la duracion de la reserva.

is_session

boolean

Indica si la reserva forma parte de un paquete de sesiones (ej: "10 sesiones de kinesiologia"). Cuando es true, la reserva esta vinculada a un bono o paquete prepagado.

session_identifier

integer

Solo presente cuando is_session es true. ID del paquete de sesiones al que pertenece la reserva.

session_number

integer

Solo presente cuando is_session es true. Numero de sesion dentro del paquete (ej: sesion 3 de 5).

sessions_amount

integer

Solo presente cuando is_session es true. Cantidad total de sesiones del paquete.

created_date

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).

client

object

Datos del cliente que realizo la reserva. Contiene los subcampos detallados a continuacion.

client.id

integer

ID unico del cliente en AgendaPro. Permite identificar al cliente de forma univoca para consultas futuras o para crear nuevas reservas usando client_id.

client.first_name

string

Nombre del cliente tal como esta registrado en el sistema.

client.last_name

string

Apellido del cliente tal como esta registrado en el sistema.

client.email

string

Direccion de email del cliente. Se utiliza para enviar confirmaciones y recordatorios.

client.phone

string

Numero de telefono del cliente con codigo de pais (ej: "+56968192167"). Se utiliza para notificaciones por SMS o WhatsApp. Puede estar vacio si no fue proporcionado.

client.identification

string

Numero de identificacion del cliente segun el pais (RUT en Chile, DNI en Argentina, cedula en Colombia, etc.).

client.custom_attributes

array

Atributos personalizados del cliente configurados por el negocio. Cada elemento del array contiene: category_name (categoria del atributo), custom_attribute_id (ID del atributo), name (nombre visible del atributo), datatype (tipo de dato: text, number, etc.), description (descripcion del atributo) y value (valor actual para este cliente).

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

history

array

Historial de cambios de la reserva. Cada entrada representa una accion realizada sobre la reserva, ordenada cronologicamente.

history[].action

string

Descripcion de la accion realizada (ej: "Creada por API", "Modificada por API", "Cancelada por API", "Creada por Ana Muñoz").

history[].service_provider_id

integer

ID del prestador que tenia asignado la reserva al momento de esta accion. Permite rastrear reasignaciones.

history[].service_id

integer

ID del servicio asociado a la reserva al momento de esta accion. Permite rastrear cambios de servicio.

history[].status_id

integer

Estado numerico de la reserva al momento de esta accion.

history[].service

string

Nombre del servicio al momento de esta accion.

history[].service_provider

string

Nombre del prestador al momento de esta accion.

history[].status

string

Nombre del estado al momento de esta accion (ej: "Reservado", "Confirmado", "Cancelado").

history[].start

string (ISO 8601)

Hora de inicio de la reserva al momento de esta accion. Permite ver si se reprogramo la cita.

history[].date_time

string (ISO 8601)

Fecha y hora exacta en que se realizo esta accion. Indica cuando ocurrio el cambio.

history[].user

string

Email del usuario que realizo la accion. Si la accion fue realizada via API, este campo estara vacio.

history[].employee_code

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

id

integer

Si

ID unico de la reserva que se desea consultar. Se obtiene del campo id retornado por el listado de reservas.

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 history con el historial completo de cambios de la reserva.

  • El campo created_date esta 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

start

string (ISO 8601)

Si

Fecha y hora de inicio de la reserva. Formato: "YYYY-MM-DDTHH:MM:SSZ". Debe estar dentro del horario de atencion del prestador y no coincidir con otra reserva existente del mismo prestador (a menos que se use overbooking).

end

string (ISO 8601)

Si

Fecha y hora de fin de la reserva. Debe ser posterior a start. La diferencia entre start y end define la duracion de la atencion. No es necesario que coincida con la duracion configurada del servicio.

service_id

integer

Si

ID del servicio a reservar. Debe corresponder a un servicio activo de la empresa. Se puede obtener consultando GET /services.

provider_id

integer

Si

ID del prestador que atendera la reserva. El prestador debe tener asignado el servicio indicado en service_id. Se puede obtener consultando GET /service_providers o GET /services/:id/providers.

first_name

string

Si (si no se envia client_id)

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.

last_name

string

No

Apellido del cliente. Se usa para crear o actualizar el registro del cliente.

email

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.

phone

string

No

Telefono del cliente con codigo de pais (ej: "+56968192167"). Se usa como criterio de deteccion de cliente existente y para notificaciones por SMS o WhatsApp.

identification_number

string

No

Numero de identificacion del cliente (RUT, DNI, cedula, segun el pais). Se usa como criterio de deteccion de cliente existente.

client_id

integer

No

ID de un cliente ya existente en AgendaPro. Si se envia este parametro, se ignoran first_name, last_name, email, phone e identification_number. Util cuando ya se conoce el ID del cliente por una consulta previa.

price

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.

notes

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").

company_comment

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").

send_mail

boolean

No

Si es true, envia un email de confirmacion de la reserva al cliente. Por defecto es false.

send_whatsapp

boolean

No

Si es true, envia un mensaje de WhatsApp de confirmacion al cliente. Por defecto es false. Requiere que el negocio tenga habilitada la integracion con WhatsApp.

videocall

boolean

No

Si es true, marca la reserva como videollamada y genera automaticamente un enlace de videoconferencia. Por defecto es false.

overbooking

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.

time_resource_id

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.

custom_attributes

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/bookings

Ejemplo 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/bookings

Ejemplo 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

company_nane

string

Nombre de la empresa propietaria de la reserva. Nota: la clave en el JSON es company_nane (typo en la API), no company_name.

location_address

string

Direccion fisica del local donde se atendera la reserva.

links

object

URLs de accion para la reserva creada.

links.confirm

string

URL para que el cliente confirme la reserva.

links.cancel

string

URL para que el cliente cancele la reserva.

links.edit

string

URL para que el cliente modifique la reserva.

Errores posibles

Codigo

Mensaje

Causa

422

"Invalid dates, try with format YYYY-MM-DDT00:00:00Z or DD-MM-YYYYT00:00:00Z"

El formato de las fechas start o end es invalido. Usar formato ISO 8601.

422

"No estas ingresado como cliente."

La configuracion del negocio requiere que el cliente exista previamente (client_exclusive activo) y no se encontro un cliente con los datos proporcionados.

403

"Lo sentimos, la hora X con Provider ya fue reservada por otro cliente."

El horario solicitado ya esta ocupado por otra reserva del mismo prestador. Usar overbooking para forzar la reserva o elegir otro horario.

403

"Lo sentimos, la capacidad del servicio grupal X llego a su limite."

El servicio grupal ya alcanzo su capacidad maxima de participantes para ese horario.

422

"Lo sentimos, la hora X con Provider esta bloqueada."

El horario solicitado coincide con un bloqueo o descanso configurado para el prestador.

422

"Couldn't save booking." + mensajes de validacion

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

id

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

start

string (ISO 8601)

No

Nueva fecha y hora de inicio de la reserva. Si se cambia, tambien se debe enviar end para definir la nueva duracion. Debe cumplir las mismas validaciones de disponibilidad que al crear una reserva.

end

string (ISO 8601)

No

Nueva fecha y hora de fin de la reserva. Se debe enviar junto con start si se esta reprogramando la cita.

provider_id

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.

status_id

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 DELETE /bookings/:id.

notes

string

No

Nuevas notas del cliente. Reemplaza las notas existentes.

company_comment

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/174783837

Cambiar 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/174783837

Actualizar 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/174783837

Ejemplo 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

"Couldn't update booking." + mensajes de validacion

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

id

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

/clients

Listar clientes

GET

/clients/get_paginate_clients

Listar clientes con metadatos de paginacion

GET

/clients/:id

Ver un cliente especifico

POST

/clients

Crear un cliente

PATCH

/clients/:id

Editar un cliente

DELETE

/clients/:id

Eliminar un cliente

GET

/clients/:id/charts

Listar fichas de un cliente

GET

/clients/:id/bookings

Listar reservas de un cliente

GET

/clients/:id/payments

Listar pagos de un cliente

GET

/clients/custom_attributes

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

page

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.

search

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.

gender

integer (array)

Permite filtrar clientes por genero. Se envia como array en la URL: gender[]=1&gender[]=2. Los valores disponibles son: 0 (No especificado), 1 (Masculino), 2 (Femenino).

birth_from

string (fecha)

Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o posterior a esta fecha. Formato: YYYY-MM-DD. Importante: Este filtro solo compara mes y dia, NO el ano; es util para encontrar clientes que cumplen anos en un periodo del calendario. Funciona en par con birth_to: ambos parametros deben enviarse juntos para activar el filtro.

birth_to

string (fecha)

Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o anterior a esta fecha. Formato: YYYY-MM-DD. Importante: Este filtro solo compara mes y dia, NO el ano; es util para encontrar clientes que cumplen anos en un periodo del calendario. Funciona en par con birth_from: ambos parametros deben enviarse juntos para activar el filtro.

created_at_from

string (fecha)

Filtrar clientes cuyo registro fue creado a partir de esta fecha. Formato: YYYY-MM-DD. Especialmente util para procesos de sincronizacion incremental, donde solo se necesitan los clientes nuevos desde la ultima consulta. Funciona en par con created_at_to: ambos parametros deben enviarse juntos para activar el filtro.

created_at_to

string (fecha)

Filtrar clientes cuyo registro fue creado hasta esta fecha. Formato: YYYY-MM-DD. Funciona en par con created_at_from: ambos parametros deben enviarse juntos para activar el filtro.

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

id

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.

first_name

string

Nombre de pila del cliente tal como fue registrado en el sistema.

last_name

string

Apellido del cliente. Junto con first_name, forma el nombre completo que se muestra en la interfaz de AgendaPro.

email

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.

identification_number

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.

phone

string

Telefono principal del cliente incluyendo el codigo de pais (ejemplo: "+56922334455"). Se utiliza para el envio de recordatorios por SMS y mensajes de WhatsApp. Retorna string vacio si no fue registrado.

second_phone

string

Telefono secundario o alternativo del cliente. Puede usarse como contacto de respaldo. Retorna string vacio si no fue registrado.

age

integer/null

Edad actual del cliente, calculada automaticamente a partir de su fecha de nacimiento. Retorna null si no se ha registrado la fecha de nacimiento.

birth_day

integer/null

Dia de nacimiento del cliente, valor numerico entre 1 y 31. Retorna null si no se ha registrado.

birth_month

integer/null

Mes de nacimiento del cliente, valor numerico entre 1 (enero) y 12 (diciembre). Retorna null si no se ha registrado.

birth_year

integer/null

Ano de nacimiento del cliente (ejemplo: 1990). Retorna null si no se ha registrado.

record_number

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.

address

string

Direccion fisica del cliente (calle, numero, etc.). Retorna string vacio si no fue registrada.

district

string

Comuna, distrito o barrio del cliente. Retorna string vacio si no fue registrado.

city

string

Ciudad donde reside el cliente. Retorna string vacio si no fue registrada.

gender

integer

Genero del cliente representado como numero entero. Valores posibles: 0 (No especificado), 1 (Masculino), 2 (Femenino).

created_at

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: "2026-01-28T16:10:08.246Z").

custom_attributes

object

Objeto de clave-valor que contiene los atributos personalizados del cliente. Cada clave corresponde al slug del atributo concatenado con _attribute (ejemplo: "a52537_attribute"), y el valor es el dato ingresado para ese cliente. Los slugs disponibles se obtienen mediante el endpoint GET /clients/custom_attributes. Si el cliente no tiene atributos personalizados, el objeto estara vacio.


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

page

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.

search

string

Busqueda por texto libre. El sistema busca coincidencias parciales en el nombre, apellido, email, telefono o numero de identificacion del cliente.

gender

integer (array)

Filtrar clientes por genero. Se envia como array en la URL: gender[]=1&gender[]=2. Valores: 0 (No especificado), 1 (Masculino), 2 (Femenino).

birth_from

string (fecha)

Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o posterior a esta fecha. Formato: YYYY-MM-DD. Solo compara mes y dia, NO el ano. Funciona en par con birth_to: ambos deben enviarse juntos para activar el filtro.

birth_to

string (fecha)

Filtrar clientes cuyo cumpleanos (mes y dia) sea igual o anterior a esta fecha. Formato: YYYY-MM-DD. Solo compara mes y dia, NO el ano. Funciona en par con birth_from: ambos deben enviarse juntos para activar el filtro.

created_at_from

string (fecha)

Filtrar clientes creados a partir de esta fecha. Formato: YYYY-MM-DD. Funciona en par con created_at_to: ambos deben enviarse juntos para activar el filtro.

created_at_to

string (fecha)

Filtrar clientes creados hasta esta fecha. Formato: YYYY-MM-DD. Funciona en par con created_at_from: ambos deben enviarse juntos para activar el filtro.

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

clients

array

Arreglo de objetos cliente. Cada objeto tiene exactamente los mismos campos descritos en GET /clients.

total_pages

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

id

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

first_name

string

Si

Nombre de pila del cliente. Es el unico campo obligatorio para crear un registro de cliente. No puede estar vacio.

last_name

string

No

Apellido del cliente. Se recomienda enviarlo para facilitar la identificacion del cliente en listados y busquedas.

email

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.

phone

string

No

Telefono principal del cliente incluyendo el codigo de pais (ejemplo: "+56968192164"). Si se envia un numero de telefono que ya pertenece a otro cliente de la empresa, la API retorna un error 422. El formato debe incluir el signo + seguido del codigo de pais.

second_phone

string

No

Telefono secundario del cliente con codigo de pais. Sirve como contacto alternativo. Mismo formato que phone.

identification_number

string

No

Numero de identificacion del cliente (RUT, DNI, cedula, pasaporte, etc.). Se almacena como texto libre, por lo que acepta cualquier formato.

address

string

No

Direccion fisica del cliente (calle, numero, departamento, etc.).

district

string

No

Comuna, distrito o barrio donde reside el cliente.

city

string

No

Ciudad de residencia del cliente.

age

string

No

Edad del cliente. Aunque representa un numero, se envia como string (ejemplo: "29").

gender

string

No

Genero del cliente. Se envia como string numerico: "0" para No especificado, "1" para Masculino, "2" para Femenino.

birth_day

string

No

Dia de nacimiento del cliente. String numerico con dos digitos (ejemplo: "06" para el dia 6). Valores validos: "01" a "31".

birth_month

string

No

Mes de nacimiento del cliente. String numerico con dos digitos (ejemplo: "01" para enero, "12" para diciembre). Valores validos: "01" a "12".

birth_year

string

No

Ano de nacimiento del cliente. String numerico de cuatro digitos (ejemplo: "1994").

record

string

No

Numero de ficha del cliente. Se mapea internamente al campo record_number en la respuesta. Util para negocios del area de salud que necesitan vincular un numero de ficha clinica.

{slug}_attribute

string

No

Atributos personalizados del cliente. El nombre del parametro se construye concatenando el slug del atributo personalizado con el sufijo _attribute. Por ejemplo, si el slug del atributo es "color_favorito", el parametro se llama "color_favorito_attribute". Los slugs disponibles se obtienen consultando el endpoint GET /clients/custom_attributes. Si el atributo esta marcado como mandatory: true, debe enviarse al crear el cliente.

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 (mandatory: true).


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

id

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

first_name

string

No

Nuevo nombre del cliente.

last_name

string

No

Nuevo apellido del cliente.

email

string

No

Nuevo email del cliente. Debe ser un formato valido y no estar en uso por otro cliente de la empresa.

phone

string

No

Nuevo telefono principal con codigo de pais. No debe pertenecer a otro cliente de la empresa.

second_phone

string

No

Nuevo telefono secundario con codigo de pais.

identification_number

string

No

Nuevo numero de identificacion.

address

string

No

Nueva direccion del cliente.

district

string

No

Nueva comuna o distrito.

city

string

No

Nueva ciudad.

age

string

No

Nueva edad (string numerico).

gender

string

No

Nuevo genero ("0", "1" o "2").

birth_day

string

No

Nuevo dia de nacimiento (string numerico).

birth_month

string

No

Nuevo mes de nacimiento (string numerico).

birth_year

string

No

Nuevo ano de nacimiento (string numerico).

record

string

No

Nuevo numero de ficha.

{slug}_attribute

string

No

Atributos personalizados a actualizar. Mismo formato que en la creacion: slug del atributo + _attribute.

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

id

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

message

string

Mensaje confirmando que el cliente fue eliminado exitosamente.

status

string

Estado de la operacion. Retorna "ok" cuando la eliminacion fue exitosa.

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

id

integer

Si

Identificador unico del cliente cuyas fichas se desean consultar.

Parametros de consulta (query params)

Parametro

Tipo

Descripcion

page

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.

range_from

string (fecha)

Filtrar fichas creadas a partir de esta fecha. Formato: YYYY-MM-DD. Funciona en par con range_to: ambos parametros deben enviarse juntos para activar el filtro.

range_to

string (fecha)

Filtrar fichas creadas hasta esta fecha. Formato: YYYY-MM-DD. Funciona en par con range_from: ambos parametros deben enviarse juntos para activar el filtro.

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

date

string

Fecha en que fue creada o registrada la ficha. Corresponde a la fecha de la atencion o consulta.

chart_type

string

Tipo o categoria de la ficha, segun las plantillas configuradas por el negocio (ejemplo: "Consulta general", "Control", "Evaluacion inicial").

client

object

Datos basicos del cliente asociado a la ficha. Incluye los campos first_name, last_name, phone y email.

booking

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 null si la ficha no esta asociada a ninguna reserva.

booking.id

integer

ID de la reserva asociada.

booking.service_provider_id

integer

ID del profesional que atendio la cita.

booking.service_id

integer

ID del servicio reservado.

booking.location_id

integer

ID de la sucursal donde se realizo la atencion.

booking.price

float

Precio del servicio en la reserva.

booking.service

string

Nombre del servicio reservado.

booking.service_provider

string

Nombre del profesional que atendio.

booking.location

string

Nombre de la sucursal.

booking.start

string (ISO 8601)

Fecha y hora de inicio de la reserva.

booking.end

string (ISO 8601)

Fecha y hora de fin de la reserva.

values

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

id

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

page

integer

Numero de pagina. Cada pagina retorna hasta 30 reservas.

range_from

string (fecha)

Filtrar reservas desde esta fecha. Formato: YYYY-MM-DD. Funciona en par con range_to: ambos parametros deben enviarse juntos para activar el filtro.

range_to

string (fecha)

Filtrar reservas hasta esta fecha. Formato: YYYY-MM-DD. Funciona en par con range_from: ambos parametros deben enviarse juntos para activar el filtro.

updated_from

string (fecha)

Filtrar reservas actualizadas desde esta fecha. Formato: YYYY-MM-DD.

updated_to

string (fecha)

Filtrar reservas actualizadas hasta esta fecha. Formato: YYYY-MM-DD.

locations[]

integer

Filtrar por IDs de sucursales. Se puede enviar multiples veces para filtrar por varias sucursales.

services[]

integer

Filtrar por IDs de servicios.

providers[]

integer

Filtrar por IDs de profesionales/prestadores.

statuses[]

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

id

integer

Identificador unico de la reserva en AgendaPro.

service_provider_id

integer

ID del profesional o prestador de servicio asignado a la reserva.

service_id

integer

ID del servicio agendado en la reserva.

location_id

integer

ID de la sucursal donde se realizara (o realizo) la atencion.

price

float

Precio del servicio asociado a la reserva, en la moneda configurada por el negocio.

status_id

integer

ID numerico del estado de la reserva.

service

string

Nombre legible del servicio reservado (ejemplo: "Corte cabello").

service_provider

string

Nombre completo del profesional asignado a la reserva.

status

string

Nombre legible del estado de la reserva (ejemplo: "Reservado", "Confirmado", "Cancelado").

location

string

Nombre de la sucursal donde se atendera o atendio la reserva.

start

string (ISO 8601)

Fecha y hora de inicio de la reserva en formato ISO 8601 con zona horaria UTC.

end

string (ISO 8601)

Fecha y hora de finalizacion de la reserva en formato ISO 8601 con zona horaria UTC.

is_session

boolean

Indica si la reserva corresponde a una sesion de un paquete o bono de sesiones. true si es parte de un paquete, false si es una reserva individual.

client

object

Datos basicos del cliente asociado a la reserva.

client.id

integer

ID del cliente.

client.first_name

string

Nombre del cliente.

client.last_name

string

Apellido del cliente.

client.email

string

Email del cliente.

client.phone

string

Telefono del cliente.

client.identification

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

id

integer

Si

Identificador unico del cliente cuyos pagos se desean consultar.

Parametros de consulta (query params)

Parametro

Tipo

Descripcion

page

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.

from

string (fecha)

Filtrar pagos desde esta fecha. Formato: YYYY-MM-DD. Funciona en par con to: ambos parametros deben enviarse juntos para activar el filtro.

to

string (fecha)

Filtrar pagos hasta esta fecha. Formato: YYYY-MM-DD. Funciona en par con from: ambos parametros deben enviarse juntos para activar el filtro.

locations[]

integer (array)

Filtrar por IDs de sucursales. Se puede enviar multiples veces para filtrar por varias sucursales. Funciona igual que en GET /payments.

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

company_id

integer

Identificador de la empresa a la que pertenece este atributo personalizado. Todos los atributos retornados corresponden a la empresa autenticada con el token.

name

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.

description

string

Descripcion adicional del atributo, que puede incluir instrucciones sobre como completarlo o que informacion se espera.

datatype

string

Tipo de dato que acepta este atributo. Define que tipo de valor se debe enviar al crear o editar un cliente. Valores posibles: "text" (texto libre, cualquier cadena de caracteres), "integer" (numero entero), "boolean" (valor verdadero o falso), "date" (fecha en formato YYYY-MM-DD), "datetime" (fecha y hora), "file" (archivo adjunto), "categoric" (seleccion de una categoria predefinida, las opciones se encuentran en el campo categories).

mandatory

boolean

Indica si este atributo es obligatorio al crear o editar un cliente. Si es true, la API retornara un error de validacion si no se incluye este atributo al crear un nuevo cliente.

slug

string

Identificador tecnico unico del atributo. Este slug se usa para construir el nombre del parametro al enviar valores en POST /clients o PATCH /clients/:id. La convencion es: {slug}_attribute. Por ejemplo, si el slug es "a52537", el parametro a enviar es "a52537_attribute".

show_on_calendar

boolean

Indica si este atributo se muestra en la vista de calendario de AgendaPro. Cuando es true, el valor del atributo sera visible al ver los detalles de una cita en el calendario.

show_on_workflow

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.

mandatory_on_calendar

boolean

Indica si es obligatorio completar este atributo cuando se crea o edita una reserva desde la vista de calendario.

mandatory_on_workflow

boolean

Indica si es obligatorio completar este atributo durante el flujo de atencion al cliente.

attribute_group_id

integer

Identificador del grupo al que pertenece este atributo. Los atributos se organizan en grupos para una mejor visualizacion en la interfaz.

order

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.

attribute_group_name

string

Nombre del grupo de atributos al que pertenece (ejemplo: "Datos medicos", "Preferencias", "Otros"). Permite agrupar atributos relacionados visualmente.

categories

array

Solo presente cuando datatype es "categoric". Contiene la lista de categorias u opciones predefinidas que el usuario puede seleccionar como valor para este atributo.

Uso practico de custom_attributes

Para enviar atributos personalizados al crear o editar un cliente, sigue estos pasos:

  1. Consulta este endpoint para obtener los atributos disponibles y sus slugs.

  2. Construye el nombre del parametro concatenando el slug con _attribute.

  3. Envia el valor en el cuerpo de la solicitud POST o PATCH.

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

page

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.

from

string (fecha: YYYY-MM-DD)

Filtrar pagos desde esta fecha (inclusive). Filtra por la fecha del pago (payment_date). Útil para obtener pagos de un rango temporal específico. Funciona en par con to: ambos parametros deben enviarse juntos para activar el filtro de fechas.

to

string (fecha: YYYY-MM-DD)

Filtrar pagos hasta esta fecha (inclusive). Funciona en par con from: ambos parametros deben enviarse juntos para activar el filtro de fechas.

locations[]

integer (array)

IDs de locales. Filtra pagos realizados en los locales indicados. Se envía como array en la query string (ej: locations[]=54724&locations[]=54725).

clients[]

integer (array)

IDs de clientes. Filtra pagos asociados a los clientes indicados. Se envía como array en la query string (ej: clients[]=12345&clients[]=67890).

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

id

integer

Identificador único del pago en AgendaPro.

payment_date

string (ISO 8601)

Fecha y hora en que se registró el pago en el sistema.

location_id

integer

ID del local donde se realizó el pago. Corresponde a uno de los locales de la empresa.

location_name

string

Nombre del local donde se realizó el pago.

amount

float

Monto total del pago después de aplicar descuentos. Es lo que efectivamente se cobró al cliente.

paid_amount

float

Monto total recibido del cliente. Puede ser mayor que amount si el cliente pagó con un monto superior y se le dio vuelto.

change_amount

float

Vuelto entregado al cliente. Es la diferencia entre paid_amount y amount. Si no hubo vuelto, es 0.0.

employee_code_id

integer/null

ID del código de empleado que registró el pago en caja. null si no se registró con un código de empleado.

employee_code_name

string

Nombre del empleado que registró el pago. Vacío si no se registró con un código de empleado.

client

object/string

Datos del cliente asociado al pago. Si no hay cliente asociado, es un string vacío "". Cuando existe, es un objeto que incluye: id, first_name, last_name, email, identification_number, phone, second_phone, age, birth_day, birth_month, birth_year, record_number, address, district, city.

bookings

array

Reservas existentes que fueron cobradas en este pago. Cada elemento incluye: web_origin (si se agendó desde la web), provider_lock (si el prestador está bloqueado), is_session (si es una sesión de plan), is_session_booked (si la sesión fue agendada), notes (notas de la reserva), price (precio cobrado), discount (descuento aplicado), payment_id (ID del pago), id (ID de la reserva), service (nombre del servicio), provider (nombre del prestador), status (estado de la reserva), receipt_id (ID del comprobante), start (fecha/hora inicio), end (fecha/hora fin).

products

array

Productos vendidos en este pago. Cada elemento incluye: price (precio cobrado), discount (descuento aplicado), quantity (cantidad vendida), product (nombre del producto), product_brand (marca del producto), product_display (nombre para mostrar), product_category (categoría del producto), product_price (precio de lista), receipt_id (ID del comprobante), seller_details (datos del vendedor).

mock_bookings

array

Servicios cobrados sin reserva previa, es decir, servicios registrados directamente en caja sin haber creado una reserva antes ("al vuelo"). Cada elemento incluye: price (precio cobrado), discount (descuento aplicado), payment_id (ID del pago), service (nombre del servicio), provider (nombre del prestador), receipt_id (ID del comprobante).

memberships

array

Planes o membresías vendidos en este pago. Cada elemento incluye: membership_id (ID del plan), price (precio cobrado), discount (descuento aplicado), start_date (fecha inicio de vigencia), end_date (fecha fin de vigencia), memberhip_name (nombre del plan), receipt_id (ID del comprobante), seller_details (datos del vendedor).

giftcards

array

Gift cards vendidas en este pago. Cada elemento incluye: credit_amount (monto de crédito de la gift card), credit_amount_remaining (crédito restante disponible), price (precio de venta), discount (descuento aplicado), giftcard_name (nombre de la gift card), giftcard_code (código único de la gift card), start_date (fecha inicio de vigencia), end_date (fecha fin de vigencia), receipt_id (ID del comprobante), seller_details (datos del vendedor).

down_payment

array

Abonos del pago. Cada abono contiene un array payment_transactions con los medios de pago utilizados.

down_payment[].payment_transactions

array

Transacciones de pago (medios de pago utilizados). Cada transacción incluye: number (número de voucher o referencia, null si no aplica), amount (monto de la transacción), installments (número de cuotas, 0 si no aplica), payment_method (medio de pago: "Efectivo", "Tarjeta de Crédito", "Tarjeta de Débito", "Cheque", "Otro"), payment_method_type (tipo de tarjeta: "visa", "mastercard", "amex", "diners", "other"), bank (banco asociado).

receipts

array

Comprobantes tributarios emitidos para este pago. Cada comprobante incluye: id (identificador único), amount (monto del comprobante), date (fecha de emisión), number (número del comprobante), receipt_type (tipo: "Boleta", "Factura", "Otro").


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

id

integer

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

client_id

integer

ID del cliente al que se le registra el pago. Debe ser un cliente existente en AgendaPro.

location_id

integer

ID del local donde se realiza el pago. Determina en qué sucursal se registra la transacción.

payment_date

string (ISO 8601)

Fecha y hora del pago. Formato ISO 8601 (ej: "2025-01-15T10:00:00Z").

transactions

array

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.

receipts

array

Array de comprobantes. Cada comprobante agrupa uno o más items cobrados.

Campos de transactions[]

Parámetro

Tipo

Requerido

Descripción

payment_method

string

Medio de pago utilizado. Valores posibles: "cash" (efectivo), "credit" (tarjeta de crédito), "debit" (tarjeta de débito), "check" (cheque), "other" (otro medio de pago).

amount

float

Monto de esta transacción en la moneda local del negocio.

transaction_number

string

No

Número de voucher, referencia o comprobante de la transacción. Útil para conciliación bancaria.

installments

integer

No

Número de cuotas en que se divide el pago. Solo aplica cuando payment_method es "credit" (tarjeta de crédito).

payment_method_type

string

No

Tipo o marca de tarjeta. Solo aplica cuando payment_method es "credit". Valores posibles: "mastercard", "visa", "amex", "diners", "other".

Campos de receipts[]

Parámetro

Tipo

Requerido

Descripción

receipt_type

string

Tipo de comprobante tributario. Valores posibles: "receipt" (boleta), "invoice" (factura), "service_receipt" (comprobante de servicio), "giftcard" (comprobante de gift card), "other" (otro tipo de comprobante).

receipt_number

string

No

Número del comprobante. Permite registrar el número correlativo del documento tributario.

notes

string

No

Notas adicionales del comprobante. Texto libre para observaciones.

items

array

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

item_type

string

Debe ser "new_service".

service_id

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.

provider_id

integer

No

ID del prestador que realizó el servicio. Permite asociar la venta a un profesional específico.

price

float

Precio efectivamente cobrado al cliente por este servicio.

list_price

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 price.

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

item_type

string

Debe ser "past_booking".

booking_id

integer

ID de la reserva a cobrar. La reserva debe existir y no debe tener un pago asociado previamente.

price

float

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

item_type

string

Debe ser "membership".

membership_id

integer

ID del plan o membresía a vender. Debe corresponder a un plan activo. Se puede obtener con GET /memberships.

price

float

Precio cobrado al cliente por el plan.

list_price

float

No

Precio de lista del plan. Si no se envía, se usa el precio configurado del plan.

start_date

string (fecha)

No

Fecha de inicio de vigencia del plan. Formato YYYY-MM-DD. Si no se envía, se usa la fecha del pago.

end_date

string (fecha)

No

Fecha de fin de vigencia del plan. Formato YYYY-MM-DD. Si no se envía, se calcula según la duración configurada del plan.

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

item_type

string

Debe ser "payment_giftcard".

giftcard_id

integer

No

ID de una gift card predefinida en el sistema. Si no se envía, se crea una gift card personalizada.

credit_amount

float

Monto de crédito que tendrá la gift card. Es el saldo que el beneficiario podrá usar en servicios.

list_price

float

Precio de venta de la gift card. Puede diferir del credit_amount (ej: vender una gift card de $50.000 de crédito por $40.000).

to_the_carrier

boolean

No

Si es true, la gift card es "al portador", es decir, no se asocia a un cliente específico y cualquier persona con el código puede usarla.

client_id

integer

No

ID del cliente beneficiario de la gift card. Solo aplica si to_the_carrier es false o no se envía.

start_date

string (fecha)

No

Fecha de inicio de vigencia de la gift card. Formato YYYY-MM-DD.

end_date

string (fecha)

No

Fecha de fin de vigencia de la gift card. Formato YYYY-MM-DD. Después de esta fecha, el crédito restante expira.

giftcard_name

string

No

Nombre personalizado para la gift card. Si no se envía, se genera un nombre automáticamente.

discount

float

No

Descuento aplicado sobre el precio de la gift card.

discount_type

string

No

Tipo de descuento aplicado. Valores posibles: "percentage" (porcentaje sobre el precio) o "fixed" (monto fijo de descuento).

Venta de producto (product)

Permite registrar la venta de un producto físico del inventario.

Campo

Tipo

Requerido

Descripción

item_type

string

Debe ser "product".

product_id

integer

ID del producto a vender. Debe corresponder a un producto existente en el inventario.

price

float

Precio cobrado al cliente por cada unidad del producto.

list_price

float

Precio de lista del producto (precio sin descuento).

quantity

integer

Cantidad de unidades vendidas del producto.

seller_id

integer

No

ID del vendedor que realizó la venta. Puede ser un prestador u otro empleado.

seller_type

string

No

Tipo del vendedor (ej: tipo de empleado).

discount

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

"Transactions amount is less than items amount"

La suma de los montos en transactions es menor que el total de los items. El monto pagado debe cubrir el total de lo cobrado.

422

"Booking already associated to other payment"

La reserva indicada en booking_id ya tiene un pago asociado. Una reserva solo puede cobrarse una vez.

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

id

integer

Identificador único del plan. Este ID se utiliza al vender un plan a través de POST /payments con item_type "membership".

name

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").

has_sales_taxes

boolean

Indica si el precio del plan incluye impuestos de venta (IVA, IGV u otro impuesto local según el país). Si es true, el precio ya incluye impuestos.

expiry_time_quantity

integer/null

Cantidad de unidades de tiempo que dura la vigencia del plan. Se interpreta junto con expiry_time_measurement. Por ejemplo, si expiry_time_quantity es 3 y expiry_time_measurement es "month", el plan vence a los 3 meses. null cuando el plan tiene vigencia ilimitada.

active

boolean

Indica si el plan está activo y disponible para la venta. Los planes inactivos (false) no se pueden vender a nuevos clientes, pero los clientes que ya los compraron mantienen su vigencia.

comission_value

float

Valor de la comisión que se asigna al prestador o vendedor al vender este plan. Se interpreta según el campo comission_type.

price

float

Precio del plan en la moneda local del negocio. Es el monto que se cobra al cliente por adquirir el plan completo.

unlimited

boolean

Indica si el plan tiene vigencia ilimitada. Si es true, el plan no tiene fecha de vencimiento y los servicios incluidos se pueden usar indefinidamente.

expiry_time_measurement

string

Unidad de tiempo para la vigencia del plan. Valores posibles: "day" (días), "week" (semanas), "month" (meses), "year" (años), "ilimitada" (sin vencimiento). Se usa junto con expiry_time_quantity para calcular la fecha de expiración.

comission_type

string

Tipo de comisión que se paga al vender este plan. Valores posibles: "percentage" (la comisión es un porcentaje del precio del plan) o "fixed" (la comisión es un monto fijo independiente del precio).

membership_services

array

Lista de servicios incluidos en el plan. Cada elemento define un servicio y las condiciones de uso (frecuencia permitida).

membership_services[].recurrence_quantity

integer

Cantidad de veces que el cliente puede usar este servicio dentro de cada período de recurrencia. Por ejemplo, 5 significa que el cliente tiene derecho a 5 usos del servicio.

membership_services[].recurrence_time_measurement

string

Período de recurrencia en el que se renuevan los usos del servicio. Valores posibles: "day" (diario), "week" (semanal), "month" (mensual), "year" (anual). Se interpreta junto con recurrence_quantity. Ejemplo: recurrence_quantity=5 + recurrence_time_measurement="week" significa "5 usos por semana".

membership_services[].service

object

Datos del servicio incluido en el plan.

membership_services[].service.id

integer

ID del servicio.

membership_services[].service.price

float

Precio individual del servicio (precio que se cobraría sin el plan).

membership_services[].service.name

string

Nombre del servicio.

membership_services[].service.duration

integer

Duración del servicio en minutos.

membership_services[].service.service_category

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

id

integer

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

id

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.

address

string

Dirección principal del local (calle y número).

district

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.).

city

string

Ciudad donde se ubica el local.

region

string

Región, estado o provincia donde se ubica el local. La denominación varía según el país.

country

string

País donde se ubica el local.

name

string

Nombre comercial del local, tal como se muestra a los clientes (ej: "Sede Centro", "Sucursal Mall", "Consulta Las Condes").

second_address

string

Información adicional de dirección, como piso, oficina, local comercial o referencia (ej: "Piso 3, Oficina 301", "Local 25, Mall Plaza").

phone

string

Teléfono de contacto del local. Formato libre, puede incluir código de país.

longitude

float

Longitud geográfica del local (coordenada X). Útil para mostrar la ubicación en un mapa o calcular distancias.

latitude

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

id

integer

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

location_times

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.

location_times[].day

integer

Número del día de la semana. Los valores son: 1 = Lunes, 2 = Martes, 3 = Miércoles, 4 = Jueves, 5 = Viernes, 6 = Sábado, 7 = Domingo.

location_times[].day_name

string

Nombre del día de la semana en español (ej: "Lunes", "Martes", "Sábado").

location_times[].open

string (HH:MM)

Hora de apertura del local en formato 24 horas (ej: "09:00", "08:30").

location_times[].close

string (HH:MM)

Hora de cierre del local en formato 24 horas (ej: "20:30", "19:00").


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

id

integer

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

id

integer

Identificador único del servicio.

name

string

Nombre del servicio.

duration

integer

Duración del servicio en minutos.

category

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

id

integer

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

id

integer

Identificador único del prestador.

name

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

id

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: ?id=54724,54725).

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

id

integer

Identificador del seller. Puede corresponder a un service_provider_id (si es un prestador) u otro tipo de empleado. Este ID se usa como seller_id al crear pagos con productos.

seller_type

integer

Tipo numérico del seller. 0 corresponde a un prestador de servicios.

full_name

string

Nombre completo del seller.

role_name

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

/services

Listar todos los servicios

GET

/services/:id

Ver un servicio especifico

GET

/services/:id/providers

Listar prestadores de un servicio

GET

/services/:id/available_hours

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

id

integer

Identificador unico del servicio en AgendaPro. Usar este ID para consultar los prestadores que realizan el servicio (GET /services/:id/providers), las horas disponibles (GET /services/:id/available_hours), o al crear una reserva con POST /bookings en el campo service_id.

name

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.

duration

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 duration: 60 ocupara un bloque de 1 hora en el calendario del profesional.

category

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 order.

decription

string

Descripcion del servicio, que puede incluir detalles adicionales sobre la atencion. Nota: el nombre del campo en la respuesta es "decription" (sin la letra 's'). Retorna string vacio si no se ha configurado una descripcion.

order

integer

Posicion de ordenamiento del servicio dentro de su categoria. Los servicios se muestran ordenados de menor a mayor valor. Un servicio con order: 0 aparece antes que uno con order: 82 dentro de la misma categoria.

has_sessions

boolean

Indica si el servicio es un "servicio con sesiones" o paquete de sesiones. Cuando es true, el servicio representa un bono o paquete prepagado (ejemplo: "10 sesiones de kinesiologia", "3 sesiones de terapia ocupacional"). Al crear una reserva con un servicio de sesiones, el sistema genera automaticamente las sesiones pendientes del paquete.

sessions_amount

integer

Cantidad total de sesiones del paquete. Solo presente cuando has_sessions es true. Indica cuantas sesiones incluye el servicio (ejemplo: 3 para un paquete de 3 sesiones). Este campo no aparece en servicios regulares sin sesiones.


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

id

integer

Si

Identificador unico del servicio que se desea consultar. Se obtiene del campo id retornado por el listado de servicios (GET /services).

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

id

integer

Si

Identificador unico del servicio cuyos prestadores se desean consultar. Se obtiene del campo id retornado por el listado de servicios (GET /services).

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

id

integer

Identificador unico del prestador. Usar este ID como provider_id al crear una reserva con POST /bookings, o para consultar las horas disponibles del prestador con GET /services/:id/available_hours?provider_id=ID.

name

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

id

integer

Si

Identificador unico del servicio para el que se desea consultar disponibilidad. Se obtiene del campo id retornado por el listado de servicios (GET /services).

Parametros de consulta (query params)

Parametro

Tipo

Requerido

Descripcion

date

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.".

provider_id

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 (GET /service_providers) o de los prestadores del servicio (GET /services/:id/providers).

location_id

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 (GET /locations).

*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

available_hours

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.

available_hours[].start_time

string (ISO 8601)

Fecha y hora de inicio del bloque disponible en formato ISO 8601. Usar este valor como el campo start al crear una reserva con POST /bookings. Ejemplo: "2026-03-05T09:00:00.000+00:00".

available_hours[].end_time

string (ISO 8601)

Fecha y hora de fin del bloque disponible en formato ISO 8601. Usar este valor como el campo end al crear una reserva con POST /bookings. La diferencia entre end_time y start_time corresponde a la duracion del servicio.

available_hours[].service_name

string

Nombre del servicio consultado. Coincide con el nombre del servicio identificado por el :id de la URL.

available_hours[].provider_name

string

Nombre del prestador disponible en este bloque horario. Cuando se consulta por location_id, diferentes bloques pueden tener distintos prestadores.

available_hours[].provider_id

integer

ID del prestador disponible en este bloque. Usar como el campo provider_id al crear una reserva con POST /bookings. Es especialmente importante cuando se consulta por location_id, ya que permite saber que prestador corresponde a cada horario.

available_hours[].start_block

string (HH:MM)

Hora de inicio del bloque en formato legible de 24 horas (ejemplo: "09:00", "14:30"). Util para mostrar al usuario en una interfaz de seleccion de horarios.

day

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.

day_name

string

Nombre del dia de la semana en espanol (ejemplo: "Lunes", "Jueves", "Domingo"). Util para mostrar al usuario.

day_number

integer

Numero del dia dentro del mes (ejemplo: 5 para el dia 5 de marzo, 28 para el dia 28).

formatted_date

string (YYYY-MM-DD)

Fecha consultada en formato YYYY-MM-DD. Permite confirmar la fecha que se proceso en la consulta.

Errores posibles

Codigo

Mensaje

Causa

403

"No Available Providers"

No se envio provider_id ni location_id, o no se encontraron prestadores activos con el servicio asignado para el local o prestador indicado.

403

"Bad date."

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:

  1. Obtener servicios: GET /services para mostrar el catalogo al usuario.

  2. Obtener prestadores del servicio: GET /services/:id/providers para mostrar los profesionales disponibles.

  3. Consultar disponibilidad: GET /services/:id/available_hours?date=YYYY-MM-DD&provider_id=ID para mostrar los horarios libres.

  4. Crear la reserva: POST /bookings con 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/bookings

Prestadores (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

/service_providers

Listar todos los prestadores

GET

/service_providers/:id

Ver un prestador especifico

GET

/service_providers/:id/services

Listar servicios de un prestador

GET

/service_providers/:id/breaks

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

id

integer

Identificador unico del prestador en AgendaPro. Usar este ID para consultar los servicios que realiza (GET /service_providers/:id/services), sus bloqueos de agenda (GET /service_providers/:id/breaks), para filtrar reservas por prestador en GET /bookings?providers[]=ID, o como provider_id al crear una reserva con POST /bookings.

name

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.

location_id

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 GET /locations.

times

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).

times[].day

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.

times[].day_name

string

Nombre del dia de la semana en espanol (ejemplo: "Lunes", "Martes", "Miercoles", "Sabado"). Util para mostrar el horario al usuario de forma legible.

times[].open

string (HH:MM)

Hora de inicio de la jornada laboral del prestador para ese dia, en formato de 24 horas (ejemplo: "09:00", "08:30", "14:00"). Representa el momento desde el cual el prestador puede recibir reservas.

times[].close

string (HH:MM)

Hora de fin de la jornada laboral del prestador para ese dia, en formato de 24 horas (ejemplo: "20:00", "19:00", "13:30"). Representa la hora hasta la cual el prestador puede recibir reservas. La ultima reserva del dia debe terminar antes o exactamente a esta hora.


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

id

integer

Si

Identificador unico del prestador que se desea consultar. Se obtiene del campo id retornado por el listado de prestadores (GET /service_providers), o del campo service_provider_id de una reserva.

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

id

integer

Si

Identificador unico del prestador cuyos servicios se desean consultar. Se obtiene del campo id retornado por el listado de prestadores (GET /service_providers).

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

id

integer

Identificador unico del servicio. Usar este ID como service_id al crear una reserva con POST /bookings, o para consultar las horas disponibles con GET /services/:id/available_hours.

name

string

Nombre comercial del servicio tal como lo ve el cliente (ejemplo: "Pack 5 Cortes", "Rebaje de Barba", "Corte cabello").

duration

integer

Duracion del servicio expresada en minutos. Define cuanto tiempo ocupa la atencion en la agenda del prestador (ejemplo: 60 para una hora, 10 para diez minutos).

category

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

id

integer

Si

Identificador unico del prestador cuyos bloqueos se desean consultar. Se obtiene del campo id retornado por el listado de prestadores (GET /service_providers).

Parametros de consulta (query params)

Parametro

Tipo

Descripcion

page

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.

range_from

string (YYYY-MM-DD)

Filtrar bloqueos desde esta fecha. Se debe usar junto con range_to.

range_to

string (YYYY-MM-DD)

Filtrar bloqueos hasta esta fecha. Se debe usar junto con range_from.

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

name

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.

start_time

string (ISO 8601)

Fecha y hora de inicio del bloqueo en formato ISO 8601 con zona horaria UTC (ejemplo: "2026-03-05T13:00:00.000Z"). Indica el momento exacto desde el cual el prestador no esta disponible para recibir reservas.

end_time

string (ISO 8601)

Fecha y hora de fin del bloqueo en formato ISO 8601 con zona horaria UTC (ejemplo: "2026-03-05T14:00:00.000Z"). Indica el momento en que el prestador vuelve a estar disponible. La diferencia entre end_time y start_time determina la duracion del bloqueo.

service_provider_id

integer

ID del prestador al que pertenece el bloqueo. Coincide con el :id de la URL.

service_provider_name

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.

¿Ha quedado contestada tu pregunta?