Para desarrolladores

API de agenda

Cómo leer las citas de un estudio desde otro sistema —un servicio de recordatorios, una automatización— y cómo suscribir su agenda a un calendario.

Qué es esto

Un estudio que usa Hive puede dejar que otro sistema lea su agenda. Es lo que hace falta, por ejemplo, para mandarle a un socio un recordatorio de su cita desde un servicio de fuera.

Todo es de solo lectura. No hay forma de agendar, mover, cancelar ni confirmar una cita desde aquí. Y no viaja ningún dato clínico del socio: qué queda fuera.

Quien decide abrir su agenda es el estudio, y puede cerrarla cuando quiera. Si dejas de recibir respuesta, lo primero que hay que preguntarle es si revocó la llave.

Cómo se obtiene la llave

La genera la propio estudio, no nosotros. Un administrador entra a Ajustes → Integraciones, crea una llave para «un servicio externo» y la copia con un botón.

Conviene una llave por proveedor: así el estudio puede cortarle a uno sin dejar sin servicio a los demás. Y trátala como una contraseña — quien la tenga ve esa agenda.

Consultar las citas

curl -H "Authorization: Bearer TU_LLAVE" \
  "https://hivegyms.com/api/v1/appointments?desde=2026-08-26&hasta=2026-09-02"

Sin cabecera, o con una llave inválida o revocada, responde 401.

Parámetros

Parámetro Qué hace
desde
hasta
Rango de fechas (AAAA-MM-DD). Máximo 62 días por consulta. Sin ellos: hoy y los siete días siguientes. Para un solo día, la misma fecha en las dos.
sucursal_id Solo las citas de esa sede. Los números salen en sucursales de la respuesta.
actualizadas_desde Instante ISO 8601. Devuelve solo lo modificado desde entonces — la forma barata de preguntar «¿qué cambió?» en vez de barrer la agenda entera cada vez.
cursor Página siguiente. Sale en siguiente_cursor.
limite Citas por página. Máximo 500, por omisión 200.

La respuesta

{
  "ok": true,
  "desde": "2026-08-26",
  "hasta": "2026-09-02",
  "zona": "America/Bogota",
  "sucursales": [
    { "id": 3, "nombre": "Sede Norte" },
    { "id": 4, "nombre": "Sede Sur" }
  ],
  "siguiente_cursor": null,
  "citas": [
    {
      "id": 4821,
      "fecha": "2026-08-27",
      "hora": "10:00",
      "duracion_minutos": 30,
      "inicio": "2026-08-27T10:00:00-05:00",
      "zona": "America/Bogota",
      "estado": "confirmada",
      "recordatorio": "ninguno",
      "sucursal": { "id": 3, "nombre": "Sede Norte" },
      "coach": { "id": 12, "nombre": "Coach Forero" },
      "socio": {
        "id": 990,
        "nombre": "Juan Pérez",
        "telefono": "+57 3001112233",
        "email": "[email protected]",
        "acepta_whatsapp": true
      },
      "actualizada_en": "2026-08-26T09:12:44Z"
    }
  ]
}

La hora: usa inicio

Es el error más fácil de cometer aquí. fecha y hora son la hora de pared de la estudio: «las 10:00» quiere decir las diez en el consultorio, sin huso. inicio es ese mismo momento con el desfase real de la sucursal, y es el único campo contra el que se debe calcular «24 horas antes». Si restas sobre la hora suelta, los avisos salen corridos.

Por eso zona viene por cita y no por estudio: una cadena puede tener sedes en husos distintos, y Tijuana y Ciudad de México llevan dos horas de diferencia entre sí.

Estudios con varias sedes

Cada respuesta trae sucursales con las sedes que esa llave alcanza, y cada cita dice a cuál pertenece. Hay dos formas de trabajar, según cómo la haya creado la estudio:

Una llave para todal estudio

Lo normal. Vienen las citas de todas las sedes juntas, cada una con su sucursal. Si solo interesa una, se filtra con sucursal_id.

Una llave por sede

El estudio la acota al crearla, y esa llave no puede ver las demás por más que se le pidan.

Pedir una sucursal_id que la llave no alcanza responde 422 con el motivo, no una lista vacía — para que no se confunda «no hay citas» con «no tengo acceso».

Campos que pueden venir vacíos

coach es null en las citas agendadas sin asignar profesional (pasa en recepción, es normal). telefono y email son null cuando la estudio no los tiene cargados.

Conviene contarlos antes de prometer cobertura: el número de citas no es el número de recordatorios que se pueden mandar.

acepta_whatsapp

Dice si en la ficha del socio alguien marcó explícitamente que acepta recibir WhatsApp. Es informativo, no una instrucción. Hoy la mayoría lo tienen en false simplemente porque nadie ha ido a marcarlo, no porque se hayan negado: el consentimiento real lo tiene el estudio en su aviso de privacidad, firmado al abrir la historia.

A quién se le escribe lo decide el estudio, y es un acuerdo entre ella y su proveedor. Si el criterio es «solo a quien lo marcó», este campo sirve para filtrar; si es «a todo el que dejó teléfono» —que es lo que hace el propio WhatsApp de Hive— el campo se ignora.

Estados de una cita

programada · confirmada · llego · en_silla · en_procedimiento · checkout · completada · cancelada · no_asistio · reagendar

Las canceladas sí aparecen: saber que una cita se cayó suele ser medio motivo de consultar. Lo que no aparece nunca son los bloqueos de horario (almuerzos, juntas) ni las citas eliminadas por error.

recordatorio es el estado del aviso que manda Hive por WhatsApp (ninguno, enviado, entregado, fallido). Si los recordatorios los manda un tercero, ese campo se queda en ninguno.

Límites y errores

60 consultas por minuto y por llave.

Código Cuándo
401Llave ausente, inválida o revocada.
422Fechas mal escritas, rango mayor a 62 días, o una sucursal que la llave no alcanza.
429Más de 60 consultas en un minuto.

Todos responden { "ok": false, "error": "…" } con el motivo en castellano.

Feed de calendario

Para ver la agenda en Google Calendar, en el iPhone o en Outlook no hace falta programar nada: en Ajustes → Integraciones el estudio genera una dirección que se pega en el calendario como «suscribirse por URL».

Google Calendar decide por su cuenta cada cuánto vuelve a mirar, y suele tardar entre 8 y 24 horas. No hay forma de apurarlo. Sirve para ver la semana; para reaccionar a un cambio de última hora hay que usar la API.

Incluye desde 30 días atrás hasta 180 adelante, sin las citas canceladas (para que el hueco se borre solo del calendario), y cada evento lleva únicamente el nombre del socio, el coach y la sede.

Qué NO devuelve, y no es un descuido

Ni notas de evolución, ni el motivo de consulta escrito en la cita, ni servicios, planes, presupuestos, saldos, alergias ni anamnesis. Son datos de salud, el estudio responde por ellos, y nada de eso hace falta para avisarle a un socio de su cita.

Tampoco hay forma de escribir: ni agendar, ni mover, ni cancelar, ni confirmar. Si un flujo lo necesita, hay que hablarlo — está fuera a propósito, no por falta de tiempo.