PANA Login API
Documentación completa para consumir la API de PANA Login. Esta API permite automatizar el proceso de login y obtener el PHPSESSID necesario para mantener sesiones activas en el sistema PANA.
Bienvenido a PANA Login API
Esta API permite automatizar el proceso de login en el sistema PANA y obtener información de usuarios. Utiliza Puppeteer para automatizar el navegador y mantener sesiones activas.
Navega por los endpoints en el menú lateral izquierdo o usa el roadmap en el lado derecho para acceder rápidamente a cada sección.
📊 Endpoints de Información
Endpoints para consultar, leer y obtener datos del sistema.
⚙️ Endpoints de Sistemas
Endpoints para realizar acciones, operaciones y gestionar el sistema.
POST /api/login
POST /api/login
Realiza el proceso de login automatizado en PANA y obtiene el PHPSESSID. El proceso utiliza Puppeteer para automatizar el navegador, realizar el login con las credenciales proporcionadas, y extraer la cookie de sesión. El navegador permanece abierto después del login exitoso para permitir operaciones posteriores.
POST /api/login Content-Type: application/json { "username": "sc366368", "password": "12345678Sa.", "headless": true }
{
"success": true,
"phpsessid": "abc123def456...",
"message": "Login exitoso",
"logs": [...]
}
Probar Endpoint
Response
GET /api/login
GET /api/login
Versión simplificada del endpoint de login que utiliza credenciales por defecto. Útil para pruebas rápidas sin necesidad de especificar usuario y contraseña en cada request.
GET /api/login
{
"success": true,
"phpsessid": "abc123def456...",
"message": "Login exitoso",
"logs": [...]
}
Probar Endpoint
Response
GET /api/phpsessid
GET /api/phpsessid
Obtiene el PHPSESSID guardado del último login exitoso. El PHPSESSID se almacena automáticamente después de cada login exitoso y puede ser consultado en cualquier momento sin necesidad de realizar un nuevo login.
GET /api/phpsessid
{
"success": true,
"phpsessid": "abc123def456...",
"timestamp": "2026-02-09T16:00:00.000Z",
"username": "sc366368",
"message": "PHPSESSID encontrado"
}
{
"success": false,
"message": "No hay PHPSESSID guardado...",
"phpsessid": null
}
Probar Endpoint
Response
DELETE /api/phpsessid
DELETE /api/phpsessid
Elimina el PHPSESSID guardado del sistema.
DELETE /api/phpsessid
{
"success": true,
"message": "PHPSESSID eliminado correctamente"
}
Probar Endpoint
Response
GET /api/screenshot
GET /api/screenshot
Toma una captura de pantalla del navegador para ver el estado actual de la sesión.
GET /api/screenshot
{
"success": true,
"screenshot": "data:image/png;base64,...",
"currentUrl": "https://10.150.201.61/pana/index.php",
"pageTitle": "PANA",
"timestamp": "2026-02-09T16:00:00.000Z"
}
Probar Endpoint
Response
GET /api/browser/status
GET /api/browser/status
Obtiene el estado actual del navegador (abierto/cerrado, número de páginas, URLs).
GET /api/browser/status
{
"browserOpen": true,
"pagesCount": 1,
"pages": [
{
"index": 0,
"url": "https://10.150.201.61/pana/index.php"
}
]
}
Probar Endpoint
Response
POST /api/browser/close
POST /api/browser/close
Cierra el navegador manualmente.
POST /api/browser/close
{
"success": true,
"message": "Navegador cerrado correctamente"
}
Probar Endpoint
Response
GET /api/logs
GET /api/logs
Obtiene los logs del último proceso de login o screenshot.
GET /api/logs
{
"logs": [
{
"timestamp": "2026-02-09T16:00:00.000Z",
"type": "info",
"message": "🚀 Iniciando automatización de PANA..."
}
]
}
Probar Endpoint
Response
POST /api/captcha
POST /api/captcha
Envía el valor del captcha cuando aparece durante el proceso de login. El sistema detecta automáticamente cuando aparece un captcha, toma un screenshot automáticamente y espera a que se envíe el valor a través de este endpoint. El navegador ingresará automáticamente el captcha en el formulario. Usa GET /api/captcha/status para ver el screenshot del captcha.
POST /api/captcha Content-Type: application/json { "captcha": "ABC123" }
{
"success": true,
"message": "Captcha enviado correctamente",
"captcha": "ABC123"
}
{
"success": false,
"error": "No hay un proceso de login esperando captcha",
"message": "No hay un proceso de login esperando captcha"
}
Probar Endpoint
Response
GET /api/captcha/status
GET /api/captcha/status
Verifica si el sistema está esperando un captcha durante el proceso de login. Cuando se detecta un captcha, automáticamente se toma un screenshot que se muestra aquí para que puedas verlo y escribir el valor.
GET /api/captcha/status
{
"waiting": true,
"hasScreenshot": true,
"screenshot": "iVBORw0KGgoAAAANSUhEUgAA...",
"message": "El sistema está esperando un captcha..."
}
{
"waiting": false,
"hasScreenshot": false,
"message": "No hay proceso esperando captcha"
}
Probar Endpoint
Response
POST /api/username
POST /api/username
Obtiene la información completa de un usuario a partir de su cédula. Utiliza el PHPSESSID guardado o uno proporcionado para realizar la consulta al sistema PANA. La respuesta del servidor (script JavaScript) se parsea automáticamente y se devuelve como JSON estructurado.
POST /api/username Content-Type: application/json { "cedula": "1234567890", "phpsessid": "abc123def456..." // Opcional, usa el guardado si no se proporciona }
{
"success": true,
"cedula": "1234567890",
"datacodigo": "SC366368",
"cedula": "1001031330",
"nombreCompleto": "BRAYAN STYVEN USUGA BARTOLO",
"nombre1": "BRAYAN STYVEN",
"apellido1": "USUGA",
"apellido2": "BARTOLO",
"telefono": "3043840089",
"celular": "3043840089",
"direccion": "L 9 SURB 79C 115",
"fechaNacimiento": "2000-07-14",
"nombrePlan": "CONTRIBUTIVO",
"nombreSede": "SALUD DARIEN IPS SA APARTADO",
"raw": { /* Todos los campos originales */ }
},
"statusCode": 200,
"message": "Información de usuario obtenida exitosamente"
}
{
"success": false,
"cedula": "1234567890",
"error": "Usuario no encontrado",
"message": "No se encontró información del usuario...",
"data": { /* Datos parseados (nombreCompleto vacío) */ },
"statusCode": 404
}
{
"success": false,
"error": "No hay PHPSESSID disponible",
"message": "Debes realizar un login primero..."
}
Probar Endpoint
Response
POST /api/cita-medica
POST /api/cita-medica
Consulta las fechas disponibles de citas médicas para un usuario. Primero obtiene la información del usuario (incluyendo su sede) y luego consulta las citas disponibles en un rango de fechas (desde la fecha proporcionada hasta un mes después).
POST /api/cita-medica Content-Type: application/json { "cedula": "1001025341", "fecha": "2026-02-01", "phpsessid": "abc123def456..." // Opcional, usa el guardado si no se proporciona }
{
"success": true,
"cedula": "1001025341",
"phpsessid": "abc123...",
"fecha": "2026-02-01",
"fechaEnd": "2026-03-01",
"codigoSede": "366",
"nombreSede": "SALUD DARIEN IPS SA APARTADO",
"citas": { /* JSON con fechas disponibles */ },
"statusCode": 200,
"message": "Citas consultadas exitosamente"
}
{
"success": false,
"cedula": "1001025341",
"fecha": "2026-02-01",
"phpsessid": null,
"error": "No hay PHPSESSID disponible",
"message": "Debes realizar un login primero..."
}
{
"success": false,
"cedula": "1001025341",
"fecha": "2026-02-01",
"phpsessid": "abc123...",
"error": "Sede no encontrada",
"message": "No se pudo encontrar el código de sede...",
"nombreSede": "Nombre de la sede del usuario"
}
Probar Endpoint
Response
POST /api/cita-odontologica
POST /api/cita-odontologica
Consulta las fechas disponibles de citas odontológicas para un usuario. Primero obtiene la información del usuario (incluyendo su sede) y luego consulta las citas odontológicas disponibles en un rango de fechas (desde la fecha proporcionada hasta un mes después).
POST /api/cita-odontologica Content-Type: application/json { "cedula": "1001025341", "fecha": "2026-02-01", "phpsessid": "abc123def456..." // Opcional, usa el guardado si no se proporciona }
{
"success": true,
"cedula": "1001025341",
"phpsessid": "abc123...",
"fecha": "2026-02-01",
"fechaEnd": "2026-03-01",
"codigoSede": "366",
"nombreSede": "SALUD DARIEN IPS SA APARTADO",
"citas": { /* JSON con fechas disponibles */ },
"statusCode": 200,
"message": "Citas odontológicas consultadas exitosamente"
}
{
"success": false,
"cedula": "1001025341",
"fecha": "2026-02-01",
"phpsessid": null,
"error": "No hay PHPSESSID disponible",
"message": "Debes realizar un login primero..."
}
{
"success": false,
"cedula": "1001025341",
"fecha": "2026-02-01",
"phpsessid": "abc123...",
"error": "Sede no encontrada",
"message": "No se pudo encontrar el código de sede...",
"nombreSede": "Nombre de la sede del usuario"
}
Probar Endpoint
Response
POST /api/citas-agendadas
POST /api/citas-agendadas
Consulta las citas agendadas de un usuario. Primero obtiene el código de usuario (ccodigo_usr) mediante el endpoint de username, y luego consulta todas las citas agendadas. El endpoint filtra automáticamente las citas para mostrar solo aquellas que tienen fecha futura (comparando con la hora actual de Bogotá, UTC-5) y que tienen estado "AUTORIZADO".
POST /api/citas-agendadas Content-Type: application/json { "cedula": "1001025341", "phpsessid": "abc123def456..." // Opcional, usa el guardado si no se proporciona }
{
"success": true,
"cedula": "1001025341",
"phpsessid": "abc123...",
"ccodigo_usr": "12345",
"totalCitas": 20,
"citasFuturasAutorizadas": 3,
"citas": [
{
"codcit": "7128979233",
"pacien": "1001025341 - LUIS FELIPE TERAN MERCADO",
"med": "PAULA ESTER ESPINOSA RIVERA",
"esp": "ODONTOLOGIA",
"purp": "Consulta/Procedimiento Odontologia",
"fecha": "2026-02-23 12:00:00",
"cons": "3333",
"est": "AUTORIZADO",
"btns": "<button...>...</button>"
}
],
"statusCode": 200,
"message": "Citas agendadas consultadas exitosamente"
}
{
"success": false,
"cedula": "1001025341",
"phpsessid": null,
"error": "No hay PHPSESSID disponible",
"message": "Debes realizar un login primero o proporcionar un PHPSESSID válido"
}
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
cedula |
string | Sí | Cédula del usuario para consultar sus citas agendadas |
phpsessid |
string | No | Cookie de sesión PHPSESSID. Si no se proporciona, se usa la guardada en la API |
- El endpoint filtra automáticamente las citas para mostrar solo las que tienen fecha futura (comparando con la hora actual de Bogotá, UTC-5)
- Solo se muestran las citas con estado "AUTORIZADO"
- El campo
totalCitasmuestra el total de citas encontradas (sin filtrar) - El campo
citasFuturasAutorizadas muestra cuántas citas cumplen los criterios de filtrado
Probar Endpoint
Response
POST /api/cancelar-cita
POST /api/cancelar-cita
Cancela una cita agendada utilizando su código de cita (codcit). El endpoint realiza la cancelación en el sistema PANA y retorna el resultado de la operación. La justificación de cancelación incluye automáticamente la fecha y hora actual de Bogotá (UTC-5).
POST /api/cancelar-cita Content-Type: application/json { "codcit": "7128979233", "phpsessid": "abc123def456..." // Opcional, usa el guardado si no se proporciona }
{
"success": true,
"codcit": "7128979233",
"phpsessid": "abc123...",
"fechaCancelacion": "2026-02-09 19:30:45",
"mensaje": "Se canceló correctamente la cita. Código de cancelación: 7020727729.",
"codigoCancelacion": "7020727729",
"data": {
"data": true,
"msj": "Se canceló correctamente la cita. Código de cancelación: 7020727729."
},
"statusCode": 200,
"message": "Cita cancelada exitosamente"
}
{
"success": false,
"codcit": "7128979233",
"phpsessid": "abc123...",
"fechaCancelacion": "2026-02-09 19:30:45",
"error": "No se pudo procesar la solicitud",
"mensaje": "No se pudo procesar la solicitud. Intente nuevamente.",
"data": {
"data": false,
"msj": "..."
},
"statusCode": 400,
"message": "No se pudo cancelar la cita"
}
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
codcit |
string | Sí | Código de la cita a cancelar (obtenido del endpoint de citas agendadas) |
phpsessid |
string | No | Cookie de sesión PHPSESSID. Si no se proporciona, se usa la guardada en la API |
- La justificación de cancelación se genera automáticamente con el formato: "CANCELADA AGENTE VIRTUAL DARY BOT [fecha y hora actual]"
- La fecha y hora se calculan en la zona horaria de Bogotá (UTC-5)
- El código de cancelación se extrae automáticamente del mensaje de respuesta cuando está disponible
- Si
dataesfalseen la respuesta, significa que no se pudo procesar la solicitud
Probar Endpoint
Response
GET /api/status
GET /api/status
Obtiene el estado del servicio y lista todos los endpoints disponibles.
GET /api/status
{
"status": "online",
"service": "PANA Login API",
"version": "1.0.0",
"endpoints": {...}
}