Tipos de datos de la API de Google Health

En la siguiente tabla, se incluye la lista completa de tipos de datos, con varias columnas para ayudarte a comprender la representación de cada tipo en la API de Google Health y el alcance en el que está disponible cada uno.

Campos de tipo de datos

La tabla de tipos de datos de la API de Google Health incluye varias columnas de campos para ayudarte a comprender la representación y los requisitos de cada tipo de datos. Estas columnas son las siguientes:

Tabla: Descripciones de los campos de tipos de datos de la API de Google Health
Campo Descripción
dataType Es el identificador separado por guiones (por ejemplo, active-minutes) que se usa en las URLs de los extremos.
Parámetro filter Es el identificador separado por guiones bajos (por ejemplo, active_minutes) que se usa como valor para el parámetro de filtro dataType en las solicitudes de resumen diario y de resumen.
Tipo de registro

Indica la estructura y el formato de los datos grabados. De forma interna, esto se alinea con la representación de recursos de los datos. Los siguientes son los valores posibles:

  • Interval (Representa las mediciones registradas durante un período).
  • Sample (representa mediciones instantáneas)
  • Daily (Representa las mediciones agregadas o registradas diariamente).
  • Session (Representa un bloque continuo de grabación, como un entrenamiento o una sesión de electrocardiograma [ECG]).
  • Food (representa un alimento o una entidad de datos relacionada con la nutrición)
Operaciones disponibles Enumera los métodos de la API compatibles con el tipo de datos (como list, create y rollUp).
Alcance Los permisos de OAuth necesarios para acceder al tipo de datos.
Compatibilidad con webhooks Indica que el tipo de datos admite notificaciones en tiempo real con webhooks cuando se sincronizan datos nuevos.
Compatibilidad con ceros verdaderos Indica que el tipo de datos admite el registro de valores cero explícitos para diferenciar entre un valor cero activo (como cero minutos de actividad) y datos faltantes o no registrados.
Resolución de almacenamiento Es el intervalo mínimo de grabación o muestreo en el que se almacenan los datos (por ejemplo, 1 minuto para steps). En el caso de los resúmenes, representa el windowSize mínimo recomendado para garantizar una agregación distribuida de manera uniforme sin artefactos de datos de subintervalos.
Dispositivos compatibles Es una lista expandible de dispositivos físicos que pueden registrar y sincronizar este tipo de datos con la API de Google Health (a través de la app de Fitbit).

Tabla: Tipos de datos de la API de Google Health
Tipo de datos Operaciones de
disponibles
Alcance
Energía activa quemada
dataType: active-energy-burned
filter parameter: active_energy_burned
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minutos de actividad
dataType: active-minutes
filter parameter: active_minutes
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

  • Fitbit Air
  • Fitbit Alta
  • Fitbit Alta HR
  • Fitbit Blaze
  • Fitbit Charge 2
  • Fitbit Charge 3
  • Fitbit Flex 2
  • Fitbit Inspire
  • Fitbit Inspire HR
  • Pixel Watch 4
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minutos en zona activa
dataType: active-zone-minutes
filter parameter: active_zone_minutes
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Nivel de actividad
dataType: activity-level
filter parameter: activity_level
Tipo de registro: Intervalo
list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitud
dataType: altitude
filter parameter: altitude
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Glucemia
dataType: blood-glucose
filter parameter: blood_glucose
Tipo de registro: Muestra
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Grasa corporal
dataType: body-fat
filter parameter: body_fat
Tipo de registro: Muestra

Dispositivos compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Calorías en la zona de frecuencia cardíaca
dataType: calories-in-heart-rate-zone
filter parameter: calories_in_heart_rate_zone
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Temperatura corporal central
dataType: core-body-temperature
filter parameter: core_body_temperature
Tipo de registro: Muestra
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilidad de la frecuencia cardíaca diaria
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Zonas de frecuencia cardíaca diarias
dataType: daily-heart-rate-zones
filter parameter: daily_heart_rate_zones
Tipo de registro: Diario
list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Saturación de oxígeno diaria
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Frecuencia respiratoria diaria
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Frecuencia cardíaca en reposo diaria
dataType: daily-resting-heart-rate
filter parameter: daily_resting_heart_rate
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Desviaciones diarias de la temperatura durante el sueño
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 máx. diario
dataType: daily-vo2-max
filter parameter: daily_vo2_max
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Distancia
dataType: distance
filter parameter: distance
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Electrocardiograma (ECG)
dataType: electrocardiogram
filter parameter: electrocardiogram
Tipo de registro: Sesión

Dispositivos compatibles

list .ecg.readonly
Ejercicio
dataType: exercise
filter parameter: exercise
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Pisos
dataType: floors
filter parameter: floors
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Comida
dataType: food
filter parameter: food
Tipo de registro: Alimentos
list, get .nutrition.readonly
.nutrition.writeonly
Unidad de medida de alimentos
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Tipo de registro: Alimentos

Dispositivos compatibles

list, get .nutrition.readonly
.nutrition.writeonly
Frecuencia cardíaca
dataType: heart-rate
filter parameter: heart_rate
Tipo de registro: Muestra
Resolución de almacenamiento: 1 segundo

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilidad de la frecuencia cardíaca
dataType: heart-rate-variability
filter parameter: heart_rate_variability
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Altura
dataType: height
filter parameter: height
Tipo de registro: Muestra
list, get, reconcile, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Registro de hidratación
dataType: hydration-log
filter parameter: hydration_log
Tipo de registro: Sesión
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Notificación de arritmias
dataType: irregular-rhythm-notification
filter parameter: irregular_rhythm_notification
Tipo de registro: Sesión
list .irn.readonly
Período menstrual
dataType: menstrual-period
filter parameter: menstrual_period
Tipo de registro: Intervalo
create, update, batchDelete .reproductive_health.writeonly
Moods
dataType: moods
filter parameter: moods
Tipo de registro: Muestra
create, update, batchDelete .mindfulness.writeonly
Registro de nutrición
dataType: nutrition-log
filter parameter: nutrition_log
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Prueba de ovulación
dataType: ovulation-test
filter parameter: ovulation_test
Tipo de registro: Muestra
create, update, batchDelete .reproductive_health.writeonly
Saturación de oxígeno
dataType: oxygen-saturation
filter parameter: oxygen_saturation
Tipo de registro: Muestra
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Resumen de sueño de la frecuencia respiratoria
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 máx. en carreras
dataType: run-vo2-max
filter parameter: run_vo2_max
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Período sedentario
dataType: sedentary-period
filter parameter: sedentary_period
Tipo de registro: Intervalo

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Sensores de temperatura cutánea v4beta
dataType: skin-temperature-sensors
filter parameter: skin_temperature_sensors
Tipo de registro: Muestra

Dispositivos compatibles

list .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Sueño
dataType: sleep
filter parameter: sleep
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly
Pasos
dataType: steps
filter parameter: steps
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Datos de largos de natación
dataType: swim-lengths-data
filter parameter: swim_lengths_data
Tipo de registro: Intervalo

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Síntomas
dataType: symptoms
filter parameter: symptoms
Tipo de registro: Muestra
create, update, batchDelete .logged_symptoms.writeonly
Tiempo en la zona de frecuencia cardíaca
dataType: time-in-heart-rate-zone
filter parameter: time_in_heart_rate_zone
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Calorías totales
dataType: total-calories
filter parameter: total_calories
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
VO2 máx.
dataType: vo2-max
filter parameter: vo2_max
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Peso
dataType: weight
filter parameter: weight
Tipo de registro: Muestra

Dispositivos compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly

Restricciones de consultas

Cuando consultes datos, resúmenes o resúmenes diarios de la API, ten en cuenta las siguientes restricciones:

  • Requisitos de filtro: Algunos tipos de datos derivados de solo lectura, como total-calories, requieren un filtro que especifique una hora de inicio del intervalo (con la hora física o civil).
  • Límites del rango de consultas: Los extremos de agregación de resúmenes y resúmenes diarios aplican límites máximos de rango de consultas según el tipo de datos:
    • Un rango de consulta máximo de 14 días para calories-in-heart-rate-zone, heart-rate, active-minutes y total-calories.
    • Un rango de consulta máximo de 90 días para todos los demás tipos de datos.
  • Tamaño de la ventana de resumen: Cuando se llama al extremo rollUp, la duración de windowSize debe ser de al menos 1 segundo ("1s"). Las duraciones de menos de un segundo se rechazan con INVALID_ARGUMENT. Además, elige un windowSize igual o mayor que la resolución de almacenamiento subyacente del tipo de datos (como "60s" para los tipos de datos de intervalos de 1 minuto, como steps y distance) para evitar una distribución desigual en los subintervalos. Para obtener más detalles, consulta Período de resumen y resolución de almacenamiento.

Tipos de datos Daily y Interval

Para ciertas métricas fisiológicas, como la variabilidad de la frecuencia cardíaca (VFC) o la saturación de oxígeno (SpO2), la API de Google Health proporciona dos tipos de datos distintos: una versión diaria y una versión de intervalo. Comprender la diferencia es clave para elegir la métrica adecuada para tu caso de uso:

  • Diario: Un solo resumen agregado previamente para todo el día. Usa esta opción para ver tendencias de alto nivel y paneles diarios para ahorrar en el procesamiento.

  • Intervalo: Son mediciones detalladas y de alta resolución que se realizan durante todo el día. Usa esta opción para trazar fluctuaciones intradía o realizar análisis profundos hora por hora.

Disponibilidad de los datos

Las actualizaciones de los datos del usuario solo están disponibles después de que sincroniza su monitor de actividad o ingresa manualmente datos nuevos en la app de Google Health. El dispositivo Fitbit y la app de Google Health se pueden sincronizar automáticamente cada 15 minutos cuando la app de Google Health está abierta en el dispositivo móvil y ambos tienen una conexión de datos activa y están dentro del alcance de Bluetooth. Si el usuario hace un seguimiento de la actividad con MobileTrack, MobileTrack se sincroniza cada hora, siempre que la app esté abierta.

Consulta datos históricos

Uno de los principales beneficios de la API de Google Health es la capacidad de hacer un seguimiento del rendimiento de un usuario y supervisar sus signos vitales durante períodos prolongados. Puedes consultar los datos de un usuario desde el momento en que se registraron. La API no impone limitaciones ni restricciones en la cantidad de datos históricos que tu aplicación puede consumir.

Sin embargo, las consultas de datos históricos siguen regidas por los límites de frecuencia estándar. Para administrar la estabilidad del sistema y evitar cargas útiles excesivas, la API de Google Health usa la paginación automática con tamaños de página específicos de los extremos. Ten en cuenta los siguientes límites y comportamientos:

  • Paginación automática: Si consultas un período largo de datos, la API solo devolverá la primera página de resultados hasta el límite de tamaño de página para ese extremo, junto con un nextPageToken. Debes usar el nextPageToken para solicitar las páginas posteriores.
  • Tamaños de página variables: Los límites máximos dependen del extremo y del tipo de datos. Para la mayoría de los tipos de datos, los tamaños de página tienen un límite máximo de 10,000. Sin embargo, para ciertos tipos de datos, como exercise y sleep, el tamaño de página predeterminado y máximo tiene un límite de 25. Por ejemplo, si un cliente solicita todos los datos de sueño de los últimos 10 años, la API seguirá mostrando solo 25 sesiones de sueño en la primera página.
  • Restricciones de período de resumen: Para los extremos de resumen y agregación de datos (como rollUp y dailyRollUp), los períodos de consulta están restringidos según el tipo de datos:
    • Un rango máximo de 14 días para calories-in-heart-rate-zone, heart-rate, active-minutes y total-calories.
    • Un rango máximo de 90 días para todos los demás tipos de datos de resumen

Según el volumen de datos históricos que necesite tu aplicación, para recuperar todo el conjunto de datos, deberás paginar las páginas de forma secuencial. Ten esto en cuenta cuando diseñes el proceso de sincronización de datos de tu aplicación.

Para garantizar un rendimiento óptimo y evitar errores de la API, sigue estos lineamientos cuando consultes datos históricos:

Sincronización de datos por fases (carga en caliente frente a carga en frío)

  • Carga "activa" inicial: Recupera y renderiza solo los datos más recientes de los últimos 7 a 14 días durante la secuencia de carga principal. Esto garantiza que los usuarios vean los datos de inmediato sin esperar a que se completen las consultas de larga duración.
  • Carga "en frío" en segundo plano: Delega la recuperación de datos históricos más antiguos a una cola asíncrona de menor prioridad o a un proceso en segundo plano después de que se renderice la IU principal.

División de consultas en fragmentos para la agregación

  • Debido a que los extremos de resumen y resumen diario aplican un límite máximo de período (14 o 90 días, según el tipo de datos), debes desglosar las consultas de agregación histórica grandes en intervalos secuenciales más pequeños dentro de estos límites.
  • Agrupa o secuencia estas subconsultas de forma segura para respetar los límites de simultaneidad y mantener indicadores de progreso de la IU estables.

Aprovecha los resúmenes agregados previamente

Reestructura los paneles de descripción general y los gráficos de tendencias para usar extremos de resumen preagregados (como DailyRollUpDataPoints). Esto reducirá drásticamente la sobrecarga de procesamiento en el backend y el tiempo de transferencia de red al cliente.

Manejo de errores resiliente (reintentos inteligentes)

  • Implementa un manejo estricto de la retirada exponencial cuando encuentres límites de frecuencia (429 Too Many Requests) y tiempos de espera de la puerta de enlace del servidor (504 Gateway Timeout). Nunca reintentes de inmediato las cargas útiles grandes que fallaron. Los reintentos instantáneos multiplican la congestión del backend y agravan la degradación del sistema.

Acceso de terceros

Los dispositivos Fitbit no pueden comunicarse directamente con aplicaciones o servicios de terceros. Estos dispositivos están diseñados para comunicarse y sincronizarse exclusivamente con la app de Google Health.

El dispositivo sincroniza los datos automáticamente durante el día, cada vez que se abre la app de Google Health o cada 15 minutos si el Bluetooth está activo y la app se ejecuta en segundo plano. Una vez que se completa este proceso de sincronización, los datos están disponibles para los servicios de terceros a través de la API de Google Health.

Filtrado de calidad y validez de los datos

Para proporcionar métricas de salud confiables sin necesidad de un filtrado de ruido personalizado del lado del cliente, la API de Google Health valida la telemetría de los sensores y excluye las mediciones no válidas antes de devolver las respuestas:

  • Para la saturación de oxígeno en sangre por minuto (oxygen-saturation), la API solo devuelve lecturas validadas y quita los minutos marcados como no válidos debido al movimiento del brazo, un ajuste de muñeca suelto o una puntuación de confianza del sensor inferior al 50%, así como los 3 minutos anteriores y posteriores a una lectura no válida y los tramos válidos aislados de menos de 4 minutos. Como resultado, la cobertura a nivel de minutos puede ser escasa y se esperan brechas. Para obtener más detalles, consulta Filtrado de SpO2 por minuto y validez de los datos.

Estándares de distancia

Las distancias de ejercicio, como elevationGainMillimeters, se miden en milímetros como unidad estándar por los siguientes motivos:

  1. Mantener la precisión de los datos: El motivo más importante para usar milímetros es garantizar que no perdamos precisión en los datos que leemos y proporcionamos. Usar una unidad detallada como los milímetros nos permite representar las mediciones con alta precisión.
  2. Estandarización: Los milímetros son la unidad estandarizada diseñada en nuestros servicios. Esta coherencia ayuda a garantizar una experiencia uniforme para los desarrolladores que interactúan con diferentes partes de la API.
  3. Compatibilidad con un sistema de medición amplio: El uso de una unidad base, como los milímetros, facilita a los desarrolladores la conversión a cualquier otra unidad elegida, independientemente de si trabajan con sistemas de medición métricos, imperiales o de otro tipo.

Duración variable de los días

El manejo del tiempo que realiza la API de Health prioriza la hora del usuario para tener en cuenta las duraciones variables de los días causadas por el horario de verano o los viajes. Cada dato se almacena con una marca de tiempo UTC física y la diferencia UTC activa en el momento del evento. Esto permite que el sistema haga lo siguiente:

  • Asigna el evento a un instante físico preciso.
  • Corrige la hora según el contexto local del usuario para la agregación.

Horario de verano

Cuando se produce el horario de verano, un "retroceso" genera un día civil de 25 horas, y el resumen de esa fecha contendrá 25 horas de datos. Un "adelanto de hora" da como resultado un día civil de 23 horas en el que la hora vuelve a la hora estándar.

Viajes

Viajar por diferentes zonas horarias puede causar variaciones aún más significativas en la duración física de un solo día civil.

Usa el extremo dailyRollUp para conciliar las diferencias de zona horaria. Atribuye automáticamente los datos al día calendario en el que se registraron según la hora local del usuario, lo que "une" el día de manera eficaz a pesar de los cambios de zona horaria. Para obtener detalles y ejemplos, consulta Agrega datos en días calendario en la guía de datos agregados.