API pĂşblica
Conecta tu sitio web o tu propio sistema con la agenda de Lexa. Con una clave de API puedes consultar sucursales, servicios, profesionales y horas disponibles, buscar un paciente por RUT y agendarle una cita, todo desde tu cĂłdigo y sin entrar a Lexa.
1. Cuándo te sirve (y cuándo no)
La API es para agendar desde afuera: tu sitio web con diseño propio, tu app, un chatbot, o un sistema que ya usas y quieres que escriba en la agenda de Lexa.
đź”´ La API no crea fichas de pacientes. Solo agenda para pacientes que ya existen en tu centro. Es a propĂłsito: el consentimiento de datos de la Ley 21.719 lo tiene que dar el paciente en pantalla, y eso lo hace el centro, no un sistema de un tercero.
Si lo que necesitas es que un paciente nuevo reserve solo, lo tuyo es la Agenda online: un widget que se pega en tu web, pide el consentimiento y crea la ficha. No hace falta programar nada.
| Quiero... | Uso |
|---|---|
| Que un paciente nuevo reserve desde mi web, sin programar | Agenda online |
| Que mi web con diseño propio muestre horas y agende | API pública |
| Agendar desde un sistema que ya uso (CRM, ERP, bot) | API pĂşblica |
| Que un paciente pague al reservar | Agenda online |
2. Crear tu clave
Como administrador, ve a AdministraciĂłn → Cuenta Lexa → Claves de API y ponle un nombre que te diga despuĂ©s para quĂ© es ("Web del centro", "Bot de WhatsApp"). Cada integraciĂłn deberĂa tener la suya: asĂ puedes revocar una sin dejar caer las demás.
⚠️ La clave se muestra una sola vez. No se guarda en ninguna parte que la pueda recuperar, ni siquiera nosotros: en la base solo queda su huella. Cópiala al crearla y guárdala donde guardes tus otras contraseñas. Si la pierdes, revoca esa y crea otra.
En esa misma pantalla ves cada clave con su último uso y el consumo del mes, y puedes revocar la que ya no uses. Una clave revocada deja de funcionar de inmediato: cualquier sistema que la esté usando empieza a recibir error en la siguiente llamada.
Trátala como una contraseña. Quien la tenga puede leer tu agenda y crear citas a nombre de tu centro, asà que no la pongas en el código JavaScript de tu página: ahà la ve cualquiera que abra el navegador. Va en tu servidor.
3. CĂłmo autenticar
Cada llamada lleva la clave en la cabecera X-Api-Key:
curl https://lexa-api.azurewebsites.net/public/v1/branches \
-H "X-Api-Key: lxa_live_tuclaveaca"
La clave identifica a tu centro. No hace falta mandar ningĂşn identificador de empresa: si lo mandaras, se ignora. Todo lo que la API lee y escribe es de tu centro y de ningĂşn otro.
4. Los endpoints
Todos cuelgan de https://lexa-api.azurewebsites.net/public/v1.
Los identificadores son cĂłdigos largos (tipo 3fa85f64-5717-4562-b3fc-2c963f66afa6) y no nĂşmeros correlativos. Los obtienes de las respuestas: primero pides sucursales, con esa sucursal pides servicios, y asĂ.
| Método y ruta | Para qué | Parámetros |
|---|---|---|
GET /branches |
Tus sucursales | — |
GET /services |
Servicios reservables de una sucursal | branchId |
GET /therapists |
Profesionales que atienden ese servicio ahĂ | branchId, serviceId |
GET /availability |
Horas libres de un dĂa | branchId, serviceId, therapistId, date (yyyy-MM-dd) |
GET /patients/lookup |
ÂżEste RUT es paciente del centro? | rut |
POST /appointments |
Agendar | Cuerpo JSON, ver abajo |
Horas: siempre con zona horaria
Las horas van y vuelven en formato ISO-8601 con el desfase horario explĂcito: 2026-09-20T10:00:00-03:00. No es un capricho de formato. En Chile el reloj cambia dos veces al año, y hay un dĂa en que las 00:30 sencillamente no existen; con el desfase puesto, la hora que pides es la que agendas, sin ambigĂĽedad.
Agendar
curl -X POST https://lexa-api.azurewebsites.net/public/v1/appointments \
-H "X-Api-Key: lxa_live_tuclaveaca" \
-H "Idempotency-Key: 9f1c6e2a-3b4d-4c8e-9a11-7f2e5d0c8b41" \
-H "Content-Type: application/json" \
-d '{
"patientId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"branchId": "1c2d3e4f-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"serviceId": "2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
"therapistId": "4d5e6f7a-8b9c-0d1e-2f3a-4b5c6d7e8f9a",
"start": "2026-09-20T10:00:00-03:00"
}'
La cita se crea con las mismas reglas que si la agendara alguien desde Lexa: horario del profesional, feriados, choques con otras citas, precio del servicio. Si alguna regla la rechaza, te llega el motivo redactado, no un error genérico.
La cita queda visible en la agenda al instante y recepciĂłn recibe su aviso, igual que con una reserva online.
5. Reintentos sin citas duplicadas
El POST /appointments exige la cabecera Idempotency-Key: un valor Ăşnico que inventas tĂş por cada operaciĂłn (un UUID sirve).
Sirve para lo que pasa de verdad: mandas la peticiĂłn, se corta la conexiĂłn y no sabes si la cita quedĂł. Reintentas con la misma clave y en vez de una segunda cita recibes la respuesta de la primera. Distinto es agendar otra cita: eso lleva una clave nueva.
- Misma clave, mismo contenido → te devolvemos la respuesta guardada. No se crea nada.
- Misma clave, contenido distinto → error: es otra operación, usa otra clave.
- Misma clave mientras la primera todavĂa se está procesando → error temporal, reintenta en unos segundos.
Las claves se recuerdan 24 horas.
6. LĂmites y consumo
| LĂmite | Cuánto | Por quĂ© |
|---|---|---|
| Ráfaga | 60 llamadas por minuto | Un bucle desbocado no puede tumbar tu centro |
| BĂşsqueda por RUT | 10 por minuto | Ese endpoint responde "Âżeste RUT es paciente?", asĂ que se limita para que una clave filtrada no sirva para armar un padrĂłn |
| Simultáneas | 5 a la vez |
Cada respuesta trae tu consumo del mes en las cabeceras X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset. El mismo número lo ves en Administración → Cuenta Lexa → Claves de API.
Pasarse de la ráfaga devuelve 429: espera y reintenta, no insistas en el momento.
7. Errores
Los errores vienen en JSON con un campo code estable —léelo desde tu código, en vez de comparar el texto— y un detail en español pensado para mostrárselo a alguien.
| Código | Qué pasó |
|---|---|
branch_not_found, service_not_found, therapist_not_found |
Ese identificador no es de tu centro, o no existe |
patient_not_found |
El paciente no está registrado en tu centro. La API no lo crea: ver el punto 1 |
invalid_date |
La fecha no viene como yyyy-MM-dd |
invalid_local_time |
Esa hora no existe por el cambio de hora |
booking_rejected |
Una regla del centro no deja agendar ahà (horario ocupado, feriado, fuera de la ventana del profesional). El detail dice cuál |
idempotency_key_required |
Falta la cabecera en un POST |
idempotency_key_reuse |
Esa clave ya se usĂł para otra operaciĂłn |
idempotency_key_in_progress |
Hay una peticiĂłn igual en curso |
monthly_quota_exceeded |
Te pasaste del cupo del mes |
Un 401 es clave inválida, revocada o vencida. Un 429, demasiadas llamadas.
8. Preguntas frecuentes
¿Cuánto cuesta? Está incluida en tu plan. El consumo se cuenta y se te muestra, y hoy no se corta por cupo.
ÂżPuedo cancelar o reagendar por la API? TodavĂa no. Esta primera versiĂłn lee el catálogo, busca paciente y agenda. Cancelar y reagendar se hacen desde Lexa.
ÂżPuedo cobrarle al paciente al agendar? Por la API no. Si necesitas cobro al reservar, eso lo hace la Agenda online con Flow.
PerdĂ la clave, Âżme la pueden recuperar? No, y no es una polĂtica: tĂ©cnicamente no existe en ninguna parte. Revoca esa y crea otra.
¿Qué pasa si revoco una clave que está en uso? Deja de funcionar en la siguiente llamada. Si es la de un sistema en producción, ten lista la nueva antes de revocar la vieja.
ÂżLa API puede ver datos clĂnicos? No. Solo el catálogo para agendar (sucursales, servicios, profesionales, horas), y de un paciente devuelve nada más que su nombre para que confirmes a quiĂ©n estás agendando. Notas clĂnicas, documentos y datos de contacto no se exponen.