Referencia de la API
Autenticación
Todas las peticiones a la API de doyTurnos deben realizarse hacia la URL base:
https://open-api.doyturnos.com.ar/api
Ejemplo de Header
{
"x-api-key": "tu_clave_api_aqui"
}Respuestas de Error (401 Unauthorized)
Si la clave no se envía o es incorrecta, la API retornará un estado HTTP 401 con alguno de los siguientes cuerpos:
// API Key no proporcionada
{
"error": "API Key no proporcionada."
}// API Key inválida o revocada
{
"error": "API Key inválida o revocada."
}SELF
Get Cliente by DNI
Obtiene los datos de un cliente específico utilizando su número de documento.
https://open-api.doyturnos.com.ar/api/selfQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | Documento Nacional de Identidad del cliente. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": {
"id": 123,
"dni": "12123123",
"nombre": "Juan Pérez"
}
}Respuestas de Error
No Encontrado
{
"success": false,
"message": "No se encontró ningún usuario con ese DNI en este dominio."
}Cliente Create
Registra un nuevo cliente en el sistema. Dependiendo de la configuración del dominio, los campos correo, teléfono y fecha de nacimiento pueden ser obligatoriamente requeridos por la API.
https://open-api.doyturnos.com.ar/api/self/registroBody Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | Documento Nacional de Identidad del cliente (único por dominio). |
nombre | Sí | Nombre completo del cliente. |
correo | No | Correo electrónico. Puede ser obligatorio según la configuración del dominio. |
telefono | No | Teléfono de contacto. Puede ser obligatorio según la configuración del dominio. |
nacimiento | No | Fecha de nacimiento en formato YYYY-MM-DD. Puede ser obligatoria según la configuración del dominio. |
Ejemplo de Respuesta (201 Created)
{
"message": "Cliente registrado exitosamente.",
"clienteCodigo": 1861
}Respuestas de Error
Bad Request (Validación de Dominio)
// La API retornará el mensaje correspondiente al campo faltante configurado como obligatorio por el dominio:
{
"error": true,
"message": "El teléfono es obligatorio." // o correo, o fecha de nacimiento
}Conflict (Registro Duplicado)
// Si el DNI o el correo ya existen en el dominio:
{
"error": true,
"message": "El DNI ya se encuentra registrado." // o "El correo electrónico ya se encuentra registrado."
}Servicios
Categorías GET
Lista todas las categorías de servicios disponibles. Soporta paginación y filtrado por nombre, agenda o sucursal.
https://open-api.doyturnos.com.ar/api/servicios/categoriasQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
page | Sí | Número de página actual (ej. 1). |
itemsPerPage | Sí | Cantidad de ítems por página (ej. 50). |
textSearch | No | Filtro de búsqueda parcial por nombre de categoría (ej. "fac"). |
agendaId | No | ID de la agenda para filtrar categorías específicas de un profesional. |
sucursalId | No | ID de la sucursal para filtrar categorías disponibles en una ubicación. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": [
{
"categoria": "Faciales"
},
{
"categoria": "Hifu"
},
{
"categoria": "Masajes"
}
// ...
],
"pagination": {
"page": 1,
"itemsPerPage": 50,
"totalItems": 9,
"totalPages": 1
}
}Subcategorías GET
Lista las subcategorías de servicios disponibles. Funciona de manera similar al endpoint de categorías, pero añade la posibilidad de filtrar por una categoría padre.
https://open-api.doyturnos.com.ar/api/servicios/subcategoriasQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
page | Sí | Número de página actual (ej. 1). |
itemsPerPage | Sí | Cantidad de ítems por página (ej. 50). |
textSearch | No | Filtro de búsqueda parcial por nombre de subcategoría. |
agendaId | No | ID de la agenda específica. |
sucursalId | No | ID de la sucursal. |
categoria | No | Filtro por nombre de la categoría superior a la que pertenece (ej. Faciales). |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": [
// Ejemplo de cuando hay resultados:
// {
// "subcategoria": "Limpieza Profunda"
// }
],
"pagination": {
"page": 1,
"itemsPerPage": 50,
"totalItems": 0,
"totalPages": 0
}
}Servicios GET
Obtiene el listado detallado de los servicios ofrecidos. Incluye información de precios, duración y categorización. Soporta múltiples filtros combinados para búsquedas específicas.
https://open-api.doyturnos.com.ar/api/serviciosQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
page | Sí | Número de página actual (ej. 1). |
itemsPerPage | Sí | Cantidad de ítems por página (ej. 50). |
agendaId | No | ID de la agenda específica para filtrar servicios asignados a un profesional. |
sucursalId | No | ID de la sucursal para filtrar servicios disponibles en esa ubicación. |
textSearch | No | Búsqueda parcial por nombre o descripción del servicio. |
categoria | No | Filtro exacto por nombre de la categoría (ej. "Peluqueria"). |
subcategoria | No | Filtro exacto por nombre de la subcategoría. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": [
{
"codigo": 177,
"descripcion": "Alisado",
"precio": "1000.000",
"tiempo": 120,
"categoria": "Peluqueria",
"subcategoria": "",
"tieneInfoAdicional": 0,
"infoAdicionalTexto": null,
"imagen": null,
"video": null
}
// ... más servicios
],
"pagination": {
"page": 1,
"itemsPerPage": 50,
"totalItems": 34,
"totalPages": 1
}
}Turnos Horarios
Fechas Disponibles GET
Consulta los días que tienen disponibilidad de horarios para una combinación de servicio y sucursal. Utiliza un sistema de paginación por bloques de fechas a través del objeto "hasMore".
https://open-api.doyturnos.com.ar/api/turnos-horarios/fechasQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente (útil para validar restricciones de agendamiento por usuario). |
servicios | Sí | ID del servicio o servicios requeridos (separados por coma si la API lo soporta). |
sucursalId | Sí | ID de la sucursal donde se realizará la atención. |
agendaId | No | ID de un profesional específico, si el cliente desea atenderse solo con esa persona. |
fechaDesde | No | Fecha a partir de la cual iniciar la búsqueda en formato YYYY-MM-DD. |
turnoIdReprogramacion | No | ID del turno original, en caso de que esta consulta sea para reprogramar un turno existente. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": {
"fechas": [
"2026-10-09",
"2026-10-10",
"2026-10-12",
"2026-10-13",
"2026-10-14",
"2026-10-15",
"2026-10-16",
"2026-10-17",
"2026-10-19",
"2026-10-20"
],
"hasMore": {
"prev": null,
"next": "2026-10-21"
}
}
}Respuestas de Error
Bad Request (Faltan Parámetros)
{
"success": false,
"message": "Sucursal y servicios son obligatorios."
}Not Found (Sin Profesionales)
{
"message": "No hay profesionales disponibles."
}Horarios Disponibles GET
Obtiene los bloques de horarios exactos disponibles para agendar un turno en una fecha específica, indicando con qué profesional (agendaId) se realizará la atención.
https://open-api.doyturnos.com.ar/api/turnos-horarios/horasQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente (necesario para validar restricciones de agendamiento). |
fecha | Sí | Fecha exacta a consultar en formato YYYY-MM-DD. |
servicios | Sí | ID del servicio requerido. |
sucursalId | Sí | ID de la sucursal. |
agendaId | No | Filtro opcional para ver solo los horarios de un profesional específico. |
turnoIdReprogramacion | No | ID del turno original, si esta consulta es parte de un flujo de reprogramación. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": [
{
"hora": "09:00",
"agendaId": 3,
"turno_addtime": 0
},
{
"hora": "09:30",
"agendaId": 3,
"turno_addtime": 0
},
{
"hora": "10:20",
"agendaId": 5,
"turno_addtime": 0
}
// ... más horarios disponibles
]
}Respuestas de Error
Bad Request (Faltan Parámetros)
{
"success": false,
"message": "Falta el parámetro requerido: query param \"dni\"."
}Not Found (Sin Horarios)
{
"message": "No hay profesionales disponibles para esta selección."
}Turnos
Turnos Pendientes GET
Obtiene el listado de turnos futuros o pendientes agendados por un cliente específico. Si el cliente existe pero no tiene turnos a futuro, la API responderá exitosamente (200 OK) con un array vacío en "data".
https://open-api.doyturnos.com.ar/api/turnos/pendientesQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente para buscar sus turnos asignados. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": [
{
"codigo": 18925,
"fecha": "2026-10-13",
"hora": "11:00:00",
"dia": 3,
"paq_cliente": 0
}
]
}Respuestas de Error
Bad Request (Falta DNI)
{
"success": false,
"message": "Falta el parámetro requerido: query param \"dni\"."
}Turno Get by ID
Obtiene todos los detalles de un turno específico mediante su ID de ruta. Por seguridad y privacidad, es obligatorio proveer el DNI del cliente para verificar que el turno solicitado le pertenece.
https://open-api.doyturnos.com.ar/api/turnos/:idQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente dueño del turno. |
Ejemplo de Respuesta (200 OK)
{
"success": true,
"data": {
"turno": {
"codigo": 18925,
"fecha": "2026-10-13",
"hora": "11:00:00",
"dia": 3,
"precio": "15800.000",
"pago": "0.000",
"tiempo": 30,
"paq_cliente": 0,
"agendaCodigo": 3,
"agendaNombre": "Florencia",
"agendaImagen": "https://url-de-la-imagen.jpg",
"sucursalCodigo": 1,
"sucursal": "Villa del Parque",
"direccion": "A. M. Cervantes 3084 (PB), Villa del Parque",
"mapa": "https://goo.gl/maps/1xyXTjxXnHwoAXxF7",
"telefono": "11-2394-0228",
"whatsapp_texto": "11-2394-0228",
"whatsapp_link": "5491123940228",
"cant_reprogramado": 0
},
"cupon": {},
"servicios": [
{
"codigo": 173,
"nombre": "1 Zona",
"categoria": "Mio Up",
"subcategoria": "",
"precio": "15800.000",
"tiempo": 30,
"infoAdicional": null,
"imagen": null,
"video": null
}
],
"pagos": [{ "fecha": "2026-10-09", "importe": "1000.000" }],
"paquete": {}
}
}Respuestas de Error
Bad Request (Falta DNI)
{
"success": false,
"message": "Falta el parámetro requerido: query param \"dni\"."
}Not Found / Unauthorized
{
"success": false,
"message": "El turno no se ha encontrado o no pertenece a este usuario."
}Crear Turno
Crea y confirma un nuevo turno en el sistema. Es mandatorio que el precio y el tiempo total enviados en el body coincidan exactamente con la suma matemática de los servicios seleccionados. De lo contrario, la API rechazará la solicitud para evitar inconsistencias en la facturación y la agenda. IMPORTANTE: El comercio puede tener configurada una restricción de tiempo mínimo de anticipación (ej. 24 horas) para aceptar nuevas reservas.
https://open-api.doyturnos.com.ar/api/turnosBody Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente que realiza la reserva. |
fecha | Sí | Fecha del turno en formato YYYY-MM-DD. |
hora | Sí | Hora de inicio del turno en formato HH:MM:SS. |
precio | Sí | Precio total del turno. Debe ser la suma exacta del precio de todos los servicios incluidos en el array "servicios". |
tiempo | Sí | Duración total en minutos. Debe ser la suma exacta de la duración de todos los servicios elegidos. |
agendaId | Sí | ID del profesional o agenda. |
servicios | Sí | Array de números enteros con los IDs (códigos) de los servicios a realizar. |
cuponDescuento | No | Código de cupón promocional, en caso de aplicar alguno. Enviar string vacío ("") si no se usa. |
paq_cliente | No | ID del paquete prepago del cliente. Enviar 0 si no se utiliza. |
Ejemplo de Respuesta (201 Created)
// 201 Created
{
"dni": 12123123,
"fecha": "2026-10-22",
"hora": "15:15:00",
"precio": 1000,
"tiempo": 120,
"puesto": 3,
"servicios": [177],
"cuponDescuento": "",
"paq_cliente": 0
}Respuestas de Error
Bad Request (Inconsistencia de Precios)
{
"message": "El precio total enviado no coincide con el oficial esperado."
}Bad Request (Fecha Ocupada)
{
"message": "Las siguientes fechas no están disponibles: 22-10-2026"
}Bad Request (AgendaId Requerida)
{
"message": "La agenda es requerida"
}Bad Request (Anticipación requerida)
// El número de horas variará dinámicamente según la configuración "X" de anticipación del dominio.
{
"message": "Debes reservar este servicio con al menos 24 horas de anticipación."
}Not Found (Servicios Inválidos)
{
"message": "Alguno de los servicios no existen o están borrados."
}Reprogramar Turno
Reprograma un turno existente para una nueva fecha, hora o profesional (agendaId). Por motivos de trazabilidad, el sistema genera un nuevo código de turno, vinculándolo con el antiguo que queda anulado. IMPORTANTE: Este endpoint NO permite agregar ni quitar servicios del turno original. Además, al igual que las cancelaciones, el límite de tiempo (ej. 24 horas de anticipación) para permitir una reprogramación depende de la configuración de cada dominio.
https://open-api.doyturnos.com.ar/api/turnos/:idBody Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente titular del turno original. |
fecha | Sí | Nueva fecha solicitada en formato YYYY-MM-DD. |
hora | Sí | Nueva hora solicitada en formato HH:MM. |
agendaId | Sí | ID del profesional asignado para esta nueva fecha (puede ser el mismo u otro diferente). |
Ejemplo de Respuesta (200 OK)
// 200 OK
{
"message": "Turno reprogramado exitosamente.",
"nuevoCodigoTurno": 18927,
"antiguoCodigoTurno": 18926,
"turno": {
"fecha": "2026-10-26",
"hora": "14:35:00",
"tiempo": 120,
"servicio_desc": "Alisado",
"direccion": "A. M. Cervantes 3084 (PB), Villa del Parque",
"mapa": "https://goo.gl/maps/1xyXTjxXnHwoAXxF7"
}
}Respuestas de Error
Bad Request (Profesional Inválido)
{
"message": "La agenda no realiza todos los servicios seleccionados."
}Bad Request (Fuera de término)
// El número de horas en el mensaje variará dinámicamente según la configuración del comercio.
{
"message": "Las reprogramaciones deben realizarse con al menos 24 horas de anticipación."
}Not Found
{
"message": "No se ha encontrado el turno."
}Cancelar Turno
Cancela definitivamente un turno existente en el sistema. Por seguridad, se requiere enviar el DNI por query parameter. IMPORTANTE: Las políticas de cancelación varían según la configuración de cada dominio (comercio), los cuales pueden exigir cancelar con "X" cantidad de horas de anticipación al turno. Si el cliente intenta cancelar superando ese límite de tiempo, la API devolverá un error.
https://open-api.doyturnos.com.ar/api/turnos/:idQuery Parameters
| Parámetro | Requerido | Descripción |
|---|---|---|
dni | Sí | DNI del cliente titular del turno a cancelar. |
Ejemplo de Respuesta (200 OK)
// 200 OK
{
"message": "Turno cancelado exitosamente."
}Respuestas de Error
Bad Request (Fuera de término)
// El número de horas en el mensaje (ej. 24) se adaptará automáticamente a las "X" horas que haya configurado el comercio en su panel.
{
"message": "Lo sentimos, las cancelaciones deben realizarse con al menos 24 horas de anticipación."
}Not Found
{
"message": "No se ha encontrado el turno."
}