VozMedica API

Sistema de Dictado e Historias Clinicas Medicas

https://vozmedica.co/api
REST API JSON v2026.1.0 13 Endpoints

Inicio Rapido

Tres pasos para conectar tu aplicacion a VozMedica

1

Autenticarse

POST a /api/auth.php con usuario y contrasena para obtener tu API key

2

Enviar API Key

Incluye el header X-API-Key en cada peticion

3

Usar Endpoints

Enviar reportes, gestionar pacientes, firmar historias clinicas

Autenticacion

Todas las peticiones requieren un API key en el header

Como obtener tu API Key

Tu API key es personal y se obtiene al iniciar sesion

1. Iniciar sesion via API
# POST /api/auth.php con tus credenciales de medico
curl -X POST https://vozmedica.co/api/auth.php \
  -H "Content-Type: application/json" \
  -d '{ "username": "tu.usuario", "password": "tu.contrasena" }'

# La respuesta incluye tu api_key personal
2. Incluir en cada peticion
# Header requerido en todas las peticiones:
X-API-Key: tu-api-key-personal

# Ejemplo:
curl https://vozmedica.co/api/doctor.php \
  -H "X-API-Key: tu-api-key-personal"
Nota: Las credenciales son proporcionadas por el administrador del sistema. La app iOS obtiene el API key automaticamente al iniciar sesion.

Endpoints

Todos los endpoints disponibles de la API

POST /api/auth.php Login y obtener API key Sin auth
Request Body
{
  "username": "drgarcia",
  "password": "secret123"
}
Response (200)
{
  "success": true,
  "user": { "id": 1, "username": "drgarcia", "role": "doctor" },
  "doctor": {
    "id": 1, "name": "Dr. Garcia",
    "specialty": "Alergologia",
    "has_pin": true,
    "report_count": 42,
    "patient_count": 15
  },
  "api_key": "abc123def456...",
  "message": "Autenticacion exitosa"
}
GET /api/doctor.php Perfil del medico + estadisticas API Key
Response (200)
{
  "success": true,
  "doctor": {
    "id": 1, "name": "Dr. Garcia",
    "specialty": "Alergologia",
    "license_number": "RM-12345",
    "has_pin": true
  },
  "stats": {
    "total_reports": 42,
    "draft_reports": 5,
    "signed_reports": 30,
    "sent_reports": 7,
    "today_reports": 3,
    "patient_count": 15
  }
}
POST /api/submit.php Crear o actualizar reporte API Key
Request Body
{
  "content": "Paciente masculino de 35 anos...",   // requerido
  "patient_cedula": "1234567890",
  "report_type": "consulta",                     // consulta|emergencia|control|...
  "diagnosis": "Rinitis alergica",
  "treatment": "Loratadina 10mg/dia"
}
Tipos de reporte
consultaConsulta general (default)
emergenciaEmergencia
controlControl / seguimiento
interconsultaInterconsulta
hospitalizacionHospitalizacion
cirugiaCirugia
laboratorioLaboratorio
imagenImagen diagnostica
otroOtro
Response (200)
{
  "success": true,
  "action": "created",
  "uuid": "abc123def456",
  "status": "draft",
  "url": "https://vozmedica.co/report.php?id=abc123def456"
}
GET /api/reports.php Listar reportes con filtros y paginacion API Key
Parametros de consulta
ParametroTipoDescripcion
statusstringFiltrar: draft, signed, sent
datestringFiltrar por fecha: YYYY-MM-DD
searchstringBusqueda en contenido, cedula, diagnostico
uuidstringObtener un reporte especifico
limitintResultados por pagina (max 100, default 50)
offsetintPaginacion
POST /api/sign.php Firmar reporte con PIN Doctor Key
Request Body
{
  "uuid": "abc123def456",
  "pin": "1234"
}
Response (200)
{
  "success": true,
  "message": "Reporte firmado correctamente",
  "report": {
    "uuid": "abc123def456",
    "status": "signed",
    "signed_by": "Dr. Garcia"
  }
}
Codigos de error
PIN_NOT_SETEl medico no ha configurado un PIN
INVALID_PINPIN incorrecto
ALREADY_SIGNEDEl reporte ya no esta en estado borrador
GET /api/patients.php Listar y buscar pacientes API Key
Parametros de consulta
ParametroTipoDescripcion
qstringBuscar por nombre, cedula, telefono, email
cedulastringBusqueda exacta por cedula
idintPaciente especifico + historial de reportes
limitintResultados por pagina (max 100)
offsetintPaginacion
POST /api/patients.php Registrar nuevo paciente API Key
Request Body
{
  "name": "Juan Perez",              // requerido
  "cedula": "1234567890",            // 6-10 digitos
  "date_of_birth": "1990-05-15",
  "gender": "M",
  "phone": "+57 300 123 4567",
  "email": "juan@email.com",
  "blood_type": "O+",
  "allergies": "Penicilina, polen"
}
POST /api/auth.php?action=set_pin Configurar PIN de firma digital Doctor Key
Request Body
{
  "pin": "1234",            // 4-6 digitos
  "confirm_pin": "1234"    // debe coincidir
}
PUT /api/doctor.php Actualizar perfil del medico Doctor Key
Request Body (solo campos a actualizar)
{
  "email": "nuevo@email.com",
  "phone": "+57 300 999 8888"
}
GET /api/status.php Estado del sistema API Key
Response (200)
{
  "success": true,
  "active": true,
  "recent_count": 3,
  "stats": { "total": 150, "draft": 12, "signed": 120, "sent": 18 },
  "version": "2026.1.0"
}

Codigos HTTP y Errores

Codigo Significado Descripcion
200 OK Peticion exitosa
201 Created Recurso creado (paciente nuevo)
400 Bad Request Datos invalidos o faltantes
401 Unauthorized API key faltante o invalida
403 Forbidden Permisos insuficientes
404 Not Found Recurso no encontrado
409 Conflict Duplicado (cedula ya existe)
429 Rate Limited Demasiadas peticiones, espere
500 Server Error Error interno del servidor
// Todas las respuestas de error siguen este formato:
{
  "success": false,
  "error": "Mensaje descriptivo del error"
}

Rate Limits

Limites de peticiones por IP por minuto

EndpointLimite / minuto
auth.php (login)10
sign.php20
submit.php30
reports.php, patients.php, doctor.php60
status.php120