API de Luna Salud: llaves de acceso y documentación

Activa tu token de acceso, autentícate y consulta citas, pacientes, pagos y resultados de laboratorio con la API de Luna Salud.

🔑 API para desarrolladores

Conecta tus sistemas con la API de Luna Salud: activa tu token y haz tu primera consulta

Habilita el acceso, genera tu token y autentícate en minutos
Consulta citas, pacientes, expedientes, pagos y laboratorio
Ejemplos listos para copiar, límites y errores explicados
API de solo lectura: consultas sin riesgo de modificar tus datos
⏱️ Lectura de 8 minutos · Actualizado con los endpoints de pagos

La API de Luna Salud te permite consultar la información de tu cuenta de forma programática: citas, pacientes, notas clínicas, pagos, biomarcadores y resultados de laboratorio. Es una API REST de solo lectura — puedes leer datos para reportes e integraciones, pero no crear, modificar ni eliminar registros — así que puedes experimentar sin miedo a romper nada. Esta guía te lleva desde habilitar el acceso hasta tu primera solicitud exitosa.

🚀

¿Para qué sirve la API?

La API te da acceso directo a los datos de tu organización para usarlos fuera de Luna Salud. Algunos ejemplos:

📊

Reportes personalizados

Conecta los datos de tu clínica con Google Sheets, Excel o Power BI y arma reportes a tu medida.

💳

Conciliación de pagos

Consulta los pagos registrados con el endpoint /payments y concílialos con tu contabilidad o tu ERP.

📈

Dashboards en tiempo real

Construye tableros con las métricas de citas, pacientes e ingresos de tu organización.

🧪

Seguimiento de laboratorio

Lee resultados de laboratorio y biomarcadores para alimentar sistemas de monitoreo clínico, con webhooks que te avisan cuando hay datos nuevos.

🔓

Antes de empezar: habilita el acceso a la API

El acceso a la API se habilita por organización y no viene activado de fábrica. Para poder generar tu token necesitas tres cosas:

  • Acceso a la API habilitado para tu organización. Lo activa el equipo de Luna Salud; pídelo por WhatsApp y te lo habilitamos.
  • Rol de Administrador. Solo los administradores pueden ver y generar el token de acceso.
  • Tu token generado. El token no existe hasta que lo generas tú mismo — te enseñamos cómo en la siguiente sección.
💡

¿No ves la pestaña «Herramientas de Desarrollo»?

Esa pestaña solo aparece cuando eres administrador y la API está habilitada para tu organización. Si eres administrador y no la ves en Cuenta → Organización, la API aún no está activada para tu clínica: escríbenos por WhatsApp y la habilitamos.

Si alguien de tu equipo intenta usar la API sin que esté habilitada, recibirá un error 403 con el mensaje «El acceso a la API no está habilitado para esta organización».

🔑

Activa tu token de acceso, paso a paso

1

Inicia sesión como administrador

Entra a account.lunahealth.app con una cuenta que tenga rol de Administrador.

2

Abre Herramientas de Desarrollo

Ve a Cuenta → Organización y entra a la pestaña Herramientas de Desarrollo. Ahí vive todo lo relacionado con la API: tu token, la documentación y la configuración de webhooks.

3

Genera tu token

En la sección Token de Acceso de Luna Health, pulsa «Obtener Token de Acceso». El token no existe hasta que lo generas: este clic es el que lo activa.

4

Muéstralo y cópialo

Pulsa «Mostrar Token» y luego «Copiar al Portapapeles». Guárdalo en un lugar seguro (un gestor de secretos o las variables de entorno de tu servidor).

Cuenta › Organización ›Herramientas de Desarrollo
Token de Acceso de Luna Health

Utiliza esta clave para autorizar en el servicio API de Luna Health.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi••••••••••••••••••••••••••••
Mostrar Token Copiar al Portapapeles Regenerar Token de Acceso
La primera vez verás un solo botón: «Obtener Token de Acceso». Después de generarlo aparecen las opciones para mostrarlo, copiarlo y regenerarlo.

Tu token vence a los 90 días

Cada token es válido por 90 días. Cuando expira, tus solicitudes empiezan a devolver un error 401 con el mensaje «El token de API ha expirado». La solución es regenerarlo desde esta misma pantalla y actualizar tus integraciones con el token nuevo.

Regenerar invalida el token anterior al instante. Cualquier sistema que siga usando el token viejo dejará de funcionar en ese momento, así que planea el cambio.

🔐

Autentícate: tu primera solicitud

Todas las solicitudes van a la misma URL base:

URL base
https://account.lunahealth.app/api

Y todas requieren tu token en el encabezado Authorization con el prefijo Bearer. Esta solicitud lista tus pacientes y es perfecta para verificar que todo funciona:

GET /patients
# Tu primera solicitud: listar pacientes curl "https://account.lunahealth.app/api/patients?rowsPerPage=5&page=0" \ -H "Authorization: Bearer TU_TOKEN_DE_ACCESO"

Si recibes un 200 OK con un JSON como este, ya estás dentro:

Respuesta
{ "items": [ { "id": "pat456", "first_name": "María", "last_name": "García", "email": "maria@ejemplo.com" } ], "meta": { "totalRowCount": 128, "page": 0, "rowsPerPage": 5 } }

Si en cambio recibes un 401 o un 403, salta a la sección de errores comunes más abajo: ahí está el significado exacto de cada mensaje y cómo resolverlo.

📋

Endpoints disponibles

Todos los endpoints son de solo lectura (método GET) y devuelven JSON. Los datos siempre están limitados a tu organización: nunca verás información de otra clínica, y los endpoints de pacientes jamás exponen cuentas del personal.

EndpointQué devuelveFiltros y parámetros
/appointments Citas de tu organización. from, to (fecha ISO), status (NEW, PENDING, CONFIRMED, COMPLETED, CANCELED), patientId, rowsPerPage (5–200), page, sortDir
/patients Directorio de pacientes. active, query (coincidencia exacta de nombre, apellido o correo), rowsPerPage (5–200), page, sortDir
/patient Perfil básico de un paciente. id (obligatorio)
/patient-charts Notas clínicas y expediente estructurado: consultas, signos vitales, alergias, diagnósticos y procedimientos. patientId (obligatorio)
/biomarkers Biomarcadores de un paciente, con conteos por estado. patientId (obligatorio), start_date, end_date, status (OPTIMAL, ACCEPTABLE, CRITICAL, IN_VERIFICATION), page, limit (1–100)
/lab-tests Estudios de laboratorio de un paciente. patientId (obligatorio), start_date, end_date, page, limit (1–100)
/lab-test-biomarkers Biomarcadores de un estudio específico, con valores, unidades y rangos de referencia. labTestId (obligatorio)
/payments Pagos (recibos) de tu organización. from, to, status (PAID, PENDING, CANCELED, REFUNDED), paymentMethod (CARD, BANK, CASH, INSURANCE, OTHER), patientId, rowsPerPage (5–200), page, sortDir
/payment Un pago específico. id (obligatorio)
/webhooks/config La configuración de webhooks de tu organización (nunca incluye la llave secreta).
📖

Referencia técnica completa

Cada endpoint tiene su esquema de respuesta detallado, todos los parámetros y ejemplos de código en Node.js y Python en docs.lunasalud.mx. Este artículo es la guía de arranque; la referencia es esa.

💻

Ejemplos prácticos

Citas de un mes, con su respuesta

GET /appointments
# Citas de agosto 2026, 50 por página curl "https://account.lunahealth.app/api/appointments?from=2026-08-01T00:00:00Z&to=2026-08-31T23:59:59Z&rowsPerPage=50&page=0" \ -H "Authorization: Bearer TU_TOKEN_DE_ACCESO"
Respuesta
{ "items": [ { "id": "abc123", "status": "CONFIRMED", "title": "Consulta general", "start_time": "2026-08-15T10:00:00.000Z", "end_time": "2026-08-15T10:30:00.000Z", "telemedicine": false, "patient": { "id": "pat456", "first_name": "María", "last_name": "García" }, "staffs": [{ "id": "stf789", "first_name": "Ana", "last_name": "López" }], "service": { "id": "srv001", "name": "Consulta general" }, "location": { "id": "loc001", "name": "Consultorio Roma Norte" } } ], "meta": { "totalRowCount": 42, "page": 0, "rowsPerPage": 50 } }

Pagos con tarjeta del mes

GET /payments
# Pagos pagados con tarjeta en agosto 2026 curl "https://account.lunahealth.app/api/payments?from=2026-08-01T00:00:00Z&to=2026-08-31T23:59:59Z&status=PAID&paymentMethod=CARD" \ -H "Authorization: Bearer TU_TOKEN_DE_ACCESO"

Biomarcadores críticos de un paciente

GET /biomarkers
# Solo los biomarcadores en estado crítico curl "https://account.lunahealth.app/api/biomarkers?patientId=pat456&status=CRITICAL" \ -H "Authorization: Bearer TU_TOKEN_DE_ACCESO"
📏

Límites y paginación

  • 100 solicitudes por minuto por usuario. Si te pasas, recibirás un 429; espera unos segundos y reintenta. Para cargas grandes, espacia tus solicitudes.
  • Paginación en todos los listados. Usa page (empieza en 0) con rowsPerPage (5–200 en citas, pacientes y pagos) o limit (1–100 en biomarcadores y estudios de laboratorio). El total viene en meta.
  • La paginación profunda está limitada. Si page × rowsPerPage supera 10,000, recibirás un 400. No es un capricho: en lugar de recorrer miles de páginas, acota con from/to o los filtros de fecha y recorre ventanas más pequeñas.

El patrón recomendado para sincronizar datos

Recorre por ventanas de fecha (por ejemplo, semana por semana con from y to) en lugar de paginar todo el histórico de golpe. Es más rápido, no choca con el límite de paginación y te permite reanudar donde te quedaste.

🚨

Errores comunes y cómo resolverlos

Los errores llegan con su código HTTP y un mensaje claro. Estos son los que verás con más frecuencia:

CódigoMensajeCómo resolverlo
401 «No autorizado. Por favor, proporcione un token de API válido.» Falta el encabezado o está mal formado. Verifica que envías Authorization: Bearer TU_TOKEN — con el prefijo Bearer y un espacio.
401 «El token de API ha expirado.» Pasaron los 90 días de vigencia. Regenera el token en Herramientas de Desarrollo y actualiza tus integraciones.
401 «El token de API ha sido revocado.» Alguien regeneró el token después de que copiaste el tuyo. Usa siempre el token más reciente de la pantalla de Herramientas de Desarrollo.
403 «El acceso a la API no está habilitado para esta organización.» Tu organización aún no tiene la API activada. Escríbenos por WhatsApp para habilitarla.
404 «Paciente no encontrado.» / «Recurso no encontrado.» El ID no existe o pertenece a otra organización. Verifica que el ID venga de una consulta previa a tu propia cuenta.
400 «El desplazamiento de paginación es demasiado grande.» Superaste el límite de 10,000 registros de profundidad. Acota con filtros de fecha en lugar de paginar tan profundo.
429 «Límite de solicitudes excedido.» Superaste las 100 solicitudes por minuto. Espera unos segundos y reintenta, idealmente con reintentos exponenciales.
🔔

Webhooks: entérate sin preguntar

Además de consultar la API, puedes configurar un webhook para que Luna Salud avise a tu servidor cuando haya datos nuevos, en lugar de estar consultando cada cierto tiempo. Hoy hay dos tipos de eventos:

🧪
Sucede algo en Luna Salud

Se sube un estudio de laboratorio o se actualizan biomarcadores de un paciente

📤
Luna Salud te notifica

Enviamos un POST a la URL que configuraste, firmado con tu llave secreta

⚙️
Tu sistema reacciona

Consulta el detalle con la API y actualiza tus tableros o alertas

La configuración vive en la misma pestaña de Herramientas de Desarrollo, en la sección Configuración de Webhooks:

Herramientas de Desarrollo ›Configuración de Webhooks
URL del Webhook
https://tu-servidor.ejemplo.com/webhooks/luna
Llave secreta
••••••••••••••••••••
☑️ Habilitar webhooks ☑️ Actualizaciones de biomarcadores ☑️ Actualizaciones de estudios de laboratorio
Guardar configuración Probar Webhook
La llave secreta debe tener al menos 16 caracteres y sirve para que tu servidor verifique que la notificación viene de Luna Salud. Usa «Probar Webhook» para mandar un evento de prueba antes de conectar nada en producción.

Puedes consultar tu configuración actual (URL, eventos suscritos y estado) con GET /webhooks/config. Por seguridad, ese endpoint nunca devuelve la llave secreta; los cambios de configuración se hacen siempre desde la plataforma, no por la API.

🛡️

Seguridad de tu token

Tu token da acceso de lectura a la información de toda tu organización, incluyendo datos clínicos de pacientes. Trátalo como una contraseña:

  • Nunca lo pongas en código del navegador, apps móviles ni repositorios públicos como GitHub.
  • Nunca lo compartas por WhatsApp, correo o chat, ni con proveedores que no lo necesiten.
  • Nunca lo escribas directo en el código: úsalo desde variables de entorno o un gestor de secretos en tu servidor.
🧯

¿Se filtró tu token?

Regenéralo de inmediato en Cuenta → Organización → Herramientas de Desarrollo con «Regenerar Token de Acceso». El token filtrado queda invalidado al instante y solo el nuevo seguirá funcionando.

Preguntas frecuentes

¿Por qué no veo la pestaña Herramientas de Desarrollo en mi cuenta?+

El acceso a la API se habilita por organización y la pestaña solo aparece para administradores con la API activada. Si eres administrador y no la ves en Cuenta → Organización, la API aún no está habilitada para tu clínica: escríbenos por WhatsApp y la activamos.

¿Mi token de API expira?+

Sí. Cada token es válido por 90 días. Al expirar, tus solicitudes devuelven un error 401 con el mensaje «El token de API ha expirado»; genera uno nuevo con Regenerar Token de Acceso en Herramientas de Desarrollo y actualiza tus integraciones con el token nuevo.

¿Puedo crear o modificar citas y pacientes desde la API?+

No por ahora. La API es de solo lectura: puedes consultar citas, pacientes, expedientes, pagos, biomarcadores y resultados de laboratorio, pero no crear, editar ni eliminar registros. Cualquier cambio de datos se hace desde la plataforma.

¿Cuántas solicitudes puedo hacer a la API?+

Hasta 100 solicitudes por minuto por usuario. Si superas el límite recibirás un error 429; espera unos segundos y reintenta. Para volúmenes grandes, recorre los datos por ventanas de fecha con los filtros from y to en lugar de paginar todo el histórico de golpe.

¿Qué hago si mi token se filtró o alguien más lo conoce?+

Regenéralo de inmediato en Cuenta → Organización → Herramientas de Desarrollo con Regenerar Token de Acceso. El token anterior queda invalidado al instante y solo el nuevo funcionará; actualiza tus integraciones para no quedarte sin acceso.

👩‍💻

¿Listo para construir?

La referencia técnica completa tiene el esquema de cada endpoint con todos los parámetros y ejemplos de código en Node.js y Python.

FAQs

Preguntas Frecuentes

¿Por qué no veo la pestaña Herramientas de Desarrollo en mi cuenta?

El acceso a la API se habilita por organización y la pestaña solo aparece para administradores con la API activada. Si eres administrador y no la ves en Cuenta → Organización, la API aún no está habilitada para tu clínica: escríbenos por el chat de soporte y la activamos.

¿Mi token de API expira?

Sí. Cada token es válido por 90 días. Al expirar, tus solicitudes devuelven un error 401 con el mensaje «El token de API ha expirado»; genera uno nuevo con Regenerar Token de Acceso en Herramientas de Desarrollo y actualiza tus integraciones con el token nuevo.

¿Puedo crear o modificar citas y pacientes desde la API?

No por ahora. La API es de solo lectura: puedes consultar citas, pacientes, expedientes, pagos, biomarcadores y resultados de laboratorio, pero no crear, editar ni eliminar registros. Cualquier cambio de datos se hace desde la plataforma.

¿Cuántas solicitudes puedo hacer a la API?

Hasta 100 solicitudes por minuto por usuario. Si superas el límite recibirás un error 429; espera unos segundos y reintenta. Para volúmenes grandes, recorre los datos por ventanas de fecha con los filtros from y to en lugar de paginar todo el histórico de golpe.

¿Qué hago si mi token se filtró o alguien más lo conoce?

Regenéralo de inmediato en Cuenta → Organización → Herramientas de Desarrollo con Regenerar Token de Acceso. El token anterior queda invalidado al instante y solo el nuevo funcionará; actualiza tus integraciones para no quedarte sin acceso.

¿Listo para comenzar? Crea una cuenta hoy mismo

Empezar ahora
Luna Health incluyendo calendario de citas, formularios clínicos, expediente médico y métricas de desempeño