API Docs

Referencia de la API

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

Get Cliente by DNI

Obtiene los datos de un cliente específico utilizando su número de documento.

GET
https://open-api.doyturnos.com.ar/api/self
Query Parameters
ParámetroRequeridoDescripció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
404

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.

POST
https://open-api.doyturnos.com.ar/api/self/registro
Body Parameters
ParámetroRequeridoDescripció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
400

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
}
409

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

Categorías GET

Lista todas las categorías de servicios disponibles. Soporta paginación y filtrado por nombre, agenda o sucursal.

GET
https://open-api.doyturnos.com.ar/api/servicios/categorias
Query Parameters
ParámetroRequeridoDescripció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.

GET
https://open-api.doyturnos.com.ar/api/servicios/subcategorias
Query Parameters
ParámetroRequeridoDescripció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.

GET
https://open-api.doyturnos.com.ar/api/servicios
Query Parameters
ParámetroRequeridoDescripció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
  }
}

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

GET
https://open-api.doyturnos.com.ar/api/turnos-horarios/fechas
Query Parameters
ParámetroRequeridoDescripció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
400

Bad Request (Faltan Parámetros)

{
  "success": false,
  "message": "Sucursal y servicios son obligatorios."
}
404

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.

GET
https://open-api.doyturnos.com.ar/api/turnos-horarios/horas
Query Parameters
ParámetroRequeridoDescripció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
400

Bad Request (Faltan Parámetros)

{
  "success": false,
  "message": "Falta el parámetro requerido: query param \"dni\"."
}
404

Not Found (Sin Horarios)

{
  "message": "No hay profesionales disponibles para esta selección."
}

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

GET
https://open-api.doyturnos.com.ar/api/turnos/pendientes
Query Parameters
ParámetroRequeridoDescripció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
400

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.

GET
https://open-api.doyturnos.com.ar/api/turnos/:id
Query Parameters
ParámetroRequeridoDescripció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
400

Bad Request (Falta DNI)

{
  "success": false,
  "message": "Falta el parámetro requerido: query param \"dni\"."
}
404

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.

POST
https://open-api.doyturnos.com.ar/api/turnos
Body Parameters
ParámetroRequeridoDescripció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
400

Bad Request (Inconsistencia de Precios)

{
  "message": "El precio total enviado no coincide con el oficial esperado."
}
400

Bad Request (Fecha Ocupada)

{
  "message": "Las siguientes fechas no están disponibles: 22-10-2026"
}
400

Bad Request (AgendaId Requerida)

{
  "message": "La agenda es requerida"
}
400

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

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.

PUT
https://open-api.doyturnos.com.ar/api/turnos/:id
Body Parameters
ParámetroRequeridoDescripció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
400

Bad Request (Profesional Inválido)

{
  "message": "La agenda no realiza todos los servicios seleccionados."
}
400

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

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.

DELETE
https://open-api.doyturnos.com.ar/api/turnos/:id
Query Parameters
ParámetroRequeridoDescripció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
400

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

Not Found

{
  "message": "No se ha encontrado el turno."
}