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:
| 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:
|
| 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). |
| Tipo de datos | Operaciones de disponibles |
Alcance |
|---|---|---|
|
Energía activa quemada
dataType:
active-energy-burnedfilter 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-minutesfilter parameter: active_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 |
|
Minutos en zona activa
dataType:
active-zone-minutesfilter 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-levelfilter parameter: activity_level
Tipo de registro: Intervalo
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitud
dataType:
altitudefilter 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-glucosefilter 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-fatfilter 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-zonefilter 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-temperaturefilter 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-variabilityfilter 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-zonesfilter 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-saturationfilter 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-ratefilter 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-ratefilter 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-derivationsfilter 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-maxfilter parameter: daily_vo2_max
Tipo de registro: Diario
Dispositivos compatibles
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Distancia
dataType:
distancefilter 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:
electrocardiogramfilter parameter: electrocardiogram
Tipo de registro: Sesión
Dispositivos compatibles
|
list | .ecg.readonly |
|
Ejercicio
dataType:
exercisefilter 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:
floorsfilter parameter: floors
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Comida
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Unidad de medida de alimentos
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Tipo de registro: Alimentos
Dispositivos compatibles
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Frecuencia cardíaca
dataType:
heart-ratefilter 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-variabilityfilter parameter: heart_rate_variability
Tipo de registro: Muestra
Dispositivos compatibles
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Altura
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Registro de hidratación
dataType:
hydration-logfilter 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-notificationfilter parameter: irregular_rhythm_notification
Tipo de registro: Sesión
|
list | .irn.readonly |
|
Período menstrual
dataType:
menstrual-periodfilter parameter: menstrual_period
Tipo de registro: Intervalo
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Moods
|
create, update, batchDelete | .mindfulness.writeonly |
|
Registro de nutrición
dataType:
nutrition-logfilter 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-testfilter parameter: ovulation_test
Tipo de registro: Muestra
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Saturación de oxígeno
dataType:
oxygen-saturationfilter 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-summaryfilter 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-maxfilter 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-periodfilter 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-sensorsfilter parameter: skin_temperature_sensors
Tipo de registro: Muestra
Dispositivos compatibles |
list | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Sueño
dataType:
sleepfilter parameter: sleep
Tipo de registro: Sesión
Dispositivos compatibles
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Pasos
dataType:
stepsfilter 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-datafilter parameter: swim_lengths_data
Tipo de registro: Intervalo
Dispositivos compatibles
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Síntomas
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Tiempo en la zona de frecuencia cardíaca
dataType:
time-in-heart-rate-zonefilter 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-caloriesfilter 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-maxfilter parameter: vo2_max
Tipo de registro: Muestra
Dispositivos compatibles
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Peso
dataType:
weightfilter 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-minutesytotal-calories. - Un rango de consulta máximo de 90 días para todos los demás tipos de datos.
- Un rango de consulta máximo de 14 días para
- Tamaño de la ventana de resumen: Cuando se llama al extremo
rollUp, la duración dewindowSizedebe ser de al menos 1 segundo ("1s"). Las duraciones de menos de un segundo se rechazan conINVALID_ARGUMENT. Además, elige unwindowSizeigual 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, comostepsydistance) 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 elnextPageTokenpara 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
exerciseysleep, 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
rollUpydailyRollUp), 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-minutesytotal-calories. - Un rango máximo de 90 días para todos los demás tipos de datos de resumen
- Un rango máximo de 14 días para
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:
- 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.
- 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.
- 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.