Tipos de dados da API Google Health

A tabela a seguir contém a lista completa de tipos de dados, com várias colunas para ajudar você a entender a representação de cada tipo na API Google Health, além do escopo em que cada um está disponível.

Campos de tipo de dados

A tabela de tipos de dados da API Google Health inclui várias colunas de campo para ajudar você a entender a representação e os requisitos de cada tipo de dados. Estas são as colunas:

Tabela: descrições dos campos de tipo de dados da API Google Health
Campo Descrição
dataType O identificador separado por hifens (por exemplo, active-minutes) usado em URLs de endpoint.
Parâmetro filter O identificador separado por sublinhados (por exemplo, active_minutes) usado como o valor do parâmetro de filtro dataType em solicitações de rollup diário e rollup.
Tipo de registro

Indica a estrutura e o formato dos dados gravados. Internamente, isso se alinha à representação de recursos dos pontos de dados. Os valores possíveis são:

  • Interval (representa as medições registradas em um período).
  • Sample (representa medições instantâneas).
  • Daily (representa as medições agregadas ou registradas diariamente).
  • Session (representa um bloco contínuo de gravação, como um treino ou uma sessão de eletrocardiograma (ECG)).
  • Food (representa um alimento ou uma entidade de dados relacionada à nutrição).
Operações disponíveis Lista os métodos de API compatíveis com o tipo de dados (como list, create e rollUp).
Escopo Os escopos do OAuth necessários para acessar o tipo de dados.
Suporte a webhooks Indica que o tipo de dados é compatível com notificações usando webhooks quando novos dados são sincronizados.
Suporte a zeros verdadeiros Indica que o tipo de dados permite registrar valores zero explícitos para diferenciar um valor zero ativo (como zero minutos de atividade) de dados ausentes ou não registrados.
Resolução de armazenamento O intervalo mínimo de gravação ou amostragem em que os pontos de dados são armazenados (por exemplo, 1 minuto para steps). Para rollups, isso representa o windowSize mínimo recomendado para garantir uma agregação distribuída de maneira uniforme sem artefatos de dados de subintervalo.
Dispositivos compatíveis Uma lista expansível de dispositivos físicos que podem registrar e sincronizar esse tipo de dado com a API Google Health (usando o app Fitbit).

Tabela: tipos de dados da API Google Health
Tipo de dado Operações
disponíveis
Escopo
Calorias gastas em atividade
dataType: active-energy-burned
parâmetro de filtro: active_energy_burned
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minutos de atividade
dataType: active-minutes
parâmetro de filtro: active_minutes
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minutos na faixa ativa
dataType: active-zone-minutes
parâmetro de filtro: active_zone_minutes
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Nível de atividade
dataType: activity-level
parâmetro de filtro: activity_level
Tipo de registro: Intervalo
list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitude
dataType: altitude
parâmetro de filtro: altitude
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Glicose no sangue
dataType: blood-glucose
parâmetro de filtro: blood_glucose
Tipo de registro: amostra
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Gordura corporal
dataType: body-fat
parâmetro de filtro: body_fat
Tipo de registro: amostra

Dispositivos compatíveis

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Calorias na faixa de frequência cardíaca
dataType: calories-in-heart-rate-zone
parâmetro de filtro: calories_in_heart_rate_zone
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto
rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Temperatura corporal interna
dataType: core-body-temperature
parâmetro de filtro: core_body_temperature
Tipo de registro: amostra
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilidade da frequência cardíaca diária
dataType: daily-heart-rate-variability
parâmetro de filtro: daily_heart_rate_variability
Tipo de registro: diário

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Faixas de frequência cardíaca diárias
dataType: daily-heart-rate-zones
parâmetro de filtro: daily_heart_rate_zones
Tipo de registro: diário
list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Saturação de oxigênio diária
dataType: daily-oxygen-saturation
parâmetro de filtro: daily_oxygen_saturation
Tipo de registro: diário

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Ritmo respiratório diário
dataType: daily-respiratory-rate
parâmetro de filtro: daily_respiratory_rate
Tipo de registro: diário

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Frequência cardíaca em repouso diária
dataType: daily-resting-heart-rate
parâmetro de filtro: daily_resting_heart_rate
Tipo de registro: diário

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Derivações diárias de temperatura durante o sono
dataType: daily-sleep-temperature-derivations
parâmetro de filtro: daily_sleep_temperature_derivations
Tipo de registro: diário

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO₂ máximo diário
dataType: daily-vo2-max
parâmetro de filtro: daily_vo2_max
Tipo de registro: diário

Dispositivos compatíveis

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Distância
dataType: distance
parâmetro de filtro: distance
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Eletrocardiograma (ECG)
dataType: electrocardiogram
parâmetro de filtro: electrocardiogram
Tipo de registro: sessão

Dispositivos compatíveis

list .ecg.readonly
Exercício
dataType: exercise
parâmetro de filtro: exercise
Tipo de registro: sessão

Dispositivos compatíveis

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Andares
dataType: floors
parâmetro de filtro: floors
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Comida
dataType: food
parâmetro de filtro: food
Tipo de registro: comida
list, get .nutrition.readonly
.nutrition.writeonly
Unidade de medida de alimentos
dataType: food-measurement-unit
parâmetro de filtro: food_measurement_unit
Tipo de registro: comida
list, get .nutrition.readonly
.nutrition.writeonly
Frequência cardíaca
dataType: heart-rate
parâmetro de filtro: heart_rate
Tipo de registro: amostra
Resolução de armazenamento: 1 segundo

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilidade da frequência cardíaca
dataType: heart-rate-variability
parâmetro de filtro: heart_rate_variability
Tipo de registro: amostra

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Altura
dataType: height
parâmetro de filtro: height
Tipo de registro: amostra
list, get, reconcile, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Registro de hidratação
dataType: hydration-log
parâmetro de filtro: hydration_log
Tipo de registro: sessão
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Notificação de ritmo irregular
dataType: irregular-rhythm-notification
parâmetro de filtro: irregular_rhythm_notification
Tipo de registro: sessão

Dispositivos compatíveis

list .irn.readonly
Período menstrual
dataType: menstrual-period
parâmetro de filtro: menstrual_period
Tipo de registro: Intervalo
create, update, batchDelete .reproductive_health.writeonly
Humores
dataType: moods
parâmetro de filtro: moods
Tipo de registro: amostra
create, update, batchDelete .mindfulness.writeonly
Registro de alimentação
dataType: nutrition-log
parâmetro de filtro: nutrition_log
Tipo de registro: sessão
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Teste de ovulação
dataType: ovulation-test
parâmetro de filtro: ovulation_test
Tipo de registro: amostra
create, update, batchDelete .reproductive_health.writeonly
Saturação de oxigênio
dataType: oxygen-saturation
parâmetro de filtro: oxygen_saturation
Tipo de registro: amostra
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Resumo do sono: ritmo respiratório
dataType: respiratory-rate-sleep-summary
parâmetro de filtro: respiratory_rate_sleep_summary
Tipo de registro: amostra

Dispositivos compatíveis

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO₂ máximo ao correr
dataType: run-vo2-max
parâmetro de filtro: run_vo2_max
Tipo de registro: amostra

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Período sedentário
dataType: sedentary-period
parâmetro de filtro: sedentary_period
Tipo de registro: Intervalo

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Sensores de temperatura da pele v4beta
dataType: skin-temperature-sensors
parâmetro de filtro: skin_temperature_sensors
Tipo de registro: amostra

Dispositivos compatíveis

list .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Sono
dataType: sleep
parâmetro de filtro: sleep
Tipo de registro: sessão

Dispositivos compatíveis

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly
Etapas
dataType: steps
parâmetro de filtro: steps
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Dados de voltas de natação
dataType: swim-lengths-data
parâmetro de filtro: swim_lengths_data
Tipo de registro: Intervalo

Dispositivos compatíveis

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Sintomas
dataType: symptoms
parâmetro de filtro: symptoms
Tipo de registro: amostra
create, update, batchDelete .logged_symptoms.writeonly
Tempo na faixa de frequência cardíaca
dataType: time-in-heart-rate-zone
parâmetro de filtro: time_in_heart_rate_zone
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Total de calorias
dataType: total-calories
parâmetro de filtro: total_calories
Tipo de registro: Intervalo
Resolução de armazenamento: 1 minuto

Dispositivos compatíveis

rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
VO₂ máx.
dataType: vo2-max
parâmetro de filtro: vo2_max
Tipo de registro: amostra

Dispositivos compatíveis

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Peso
dataType: weight
parâmetro de filtro: weight
Tipo de registro: amostra

Dispositivos compatíveis

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

Restrições de consulta

Ao consultar pontos de dados, rollups ou rollups diários da API, lembre-se das seguintes restrições:

  • Requisitos de filtro: alguns tipos de dados derivados somente leitura, como total-calories, exigem um filtro que especifique um horário de início do intervalo (usando o horário físico ou civil).
  • Limites de intervalo de consulta: os endpoints de agregação de rollup e rollup diário aplicam limites máximos de intervalo de consulta com base no tipo de dados:
    • Um intervalo máximo de consulta de 14 dias para calories-in-heart-rate-zone, heart-rate, active-minutes e total-calories.
    • Um período máximo de consulta de 90 dias para todos os outros tipos de dados.
  • Tamanho da janela de rollup: ao chamar o endpoint rollUp, a duração de windowSize precisa ser de pelo menos 1 segundo ("1s"). Durações de menos de um segundo são rejeitadas com INVALID_ARGUMENT. Além disso, escolha um windowSize igual ou maior que a resolução de armazenamento subjacente do tipo de dados (como "60s" para tipos de dados de intervalo de 1 minuto, como steps e distance) para evitar uma distribuição desigual entre os subintervalos. Para mais detalhes, consulte Janela de rollup e resolução de armazenamento.

Tipos de dados diários x de intervalo

Para determinadas métricas fisiológicas, como variabilidade da frequência cardíaca (VFC) ou saturação de oxigênio (SpO2), a API Google Health fornece dois tipos de dados distintos: uma versão diária e uma versão de intervalo. Entender a diferença é fundamental para escolher a métrica certa para seu caso de uso:

  • Diário: um único resumo pré-agregado para o dia inteiro. Use isso para tendências de alto nível e painéis diários para economizar no processamento.

  • Intervalo: medições granulares de alta resolução feitas ao longo do dia. Use isso para traçar flutuações intradiárias ou realizar análises profundas, hora a hora.

Disponibilidade de dados

As atualizações dos dados do usuário só ficam disponíveis depois que ele sincroniza o monitor fitness ou insere manualmente novos dados no app Google Health. O dispositivo Fitbit e o app Google Health podem ser sincronizados automaticamente a cada 15 minutos quando o app Google Health está aberto no dispositivo móvel, os dois têm uma conexão de dados ativa e estão dentro do alcance do Bluetooth. Se o usuário estiver monitorando a atividade usando o MobileTrack, ele será sincronizado a cada hora, desde que o app esteja aberto.

Consultar dados históricos

Um dos principais benefícios da API Google Health é a capacidade de acompanhar o desempenho de um usuário e monitorar os sinais vitais de saúde dele por longos períodos. É possível consultar os dados de um usuário desde o início do registro. A API não impõe limitações ou restrições à quantidade de dados históricos que o aplicativo pode consumir.

No entanto, a consulta de dados históricos ainda é regida por limites de taxa padrão. Para gerenciar a estabilidade do sistema e evitar payloads excessivos, a API Google Health usa paginação automática com tamanhos de página específicos do endpoint. Observe os seguintes limites e comportamentos:

  • Paginação automática: se você consultar um longo período de dados, a API vai retornar apenas a primeira página de resultados até o limite de tamanho da página para esse endpoint, além de um nextPageToken. Use o nextPageToken para solicitar as páginas seguintes.
  • Tamanhos de página variáveis: os limites de limitação dependem do endpoint e do tipo de dados. Para a maioria dos tipos de dados, o tamanho das páginas é limitado a no máximo 10.000. No entanto, para determinados tipos de dados, como exercise e sleep, o tamanho padrão e máximo da página é limitado a 25. Por exemplo, se um cliente solicitar todos os dados de sono dos últimos 10 anos, a API ainda vai retornar apenas 25 sessões de sono na primeira página.
  • Restrições de período de rollup: para endpoints de rollup e agregação de dados (como rollUp e dailyRollUp), os períodos de consulta são restritos com base no tipo de dados:
    • Um período máximo de 14 dias para calories-in-heart-rate-zone, heart-rate, active-minutes e total-calories.
    • Um período máximo de 90 dias para todos os outros tipos de dados de visualização completa.

Dependendo do volume de dados históricos que seu aplicativo precisa, a recuperação de todo o conjunto de dados exigirá a paginação sequencial das páginas. Lembre-se disso ao projetar o processo de sincronização de dados do aplicativo.

Para garantir o desempenho ideal e evitar erros de API, siga estas diretrizes ao consultar dados históricos:

Sincronização de dados em fases (carga quente x carregamento a frio)

  • Carregamento "quente" inicial: busque e renderize apenas os dados mais recentes de 7 a 14 dias durante a sequência de carregamento principal. Isso garante que os usuários vejam os dados imediatamente, sem esperar por consultas de longa duração.
  • Carregamento "frio" em segundo plano: delegue a recuperação de dados históricos mais antigos a uma fila assíncrona de menor prioridade ou a um processo em segundo plano depois que a interface principal for renderizada.

Divisão de consultas para agregação

  • Como os endpoints de rollup e rollup diário aplicam um limite máximo de período (14 ou 90 dias, dependendo do tipo de dados), é necessário dividir as consultas de agregação histórica grandes em intervalos menores e sequenciais dentro desses limites.
  • Agrupe ou sequencie essas subconsultas com segurança para respeitar os limites de simultaneidade e manter indicadores de progresso da interface estáveis.

Aproveitar as consolidações pré-agregadas

Reestruture os painéis de visão geral e os gráficos de tendências para usar endpoints de resumo pré-agregados (como DailyRollUpDataPoints). Isso reduzirá drasticamente a sobrecarga de computação no back-end e o tempo de transferência de rede para o cliente.

Tratamento de erros resiliente (novas tentativas inteligentes)

  • Implemente um tratamento rigoroso de espera exponencial ao encontrar limites de taxa (429 Too Many Requests) e tempos limite de gateway do servidor (504 Gateway Timeout). Nunca tente reenviar payloads grandes que falharam imediatamente. As novas tentativas instantâneas multiplicam o congestionamento do back-end e agravam a degradação do sistema.

Acesso de terceiros

Os dispositivos Fitbit não podem se comunicar diretamente com aplicativos ou serviços de terceiros. Esses dispositivos foram projetados para se comunicar e sincronizar exclusivamente com o app Google Health.

O dispositivo sincroniza dados automaticamente ao longo do dia, sempre que o app Google Health está aberto ou a cada 15 minutos se o Bluetooth está ativo e o app está em execução em segundo plano. Depois que esse processo de sincronização é concluído, os dados ficam disponíveis para serviços de terceiros pela API Google Health.

Filtragem de qualidade de dados e validade

Para fornecer métricas de saúde confiáveis sem exigir filtragem de ruído personalizada do lado do cliente, a API Google Health valida a telemetria do sensor e exclui medições inválidas antes de retornar respostas:

  • Para a saturação de oxigênio no sangue por minuto (oxygen-saturation), a API retorna apenas leituras validadas e remove os minutos marcados como inválidos devido ao movimento do braço, ao ajuste solto no pulso ou a uma pontuação de confiança do sensor abaixo de 50%, bem como os 3 minutos antes e depois de uma leitura inválida e trechos válidos isolados com menos de 4 minutos. Como resultado, a cobertura por minuto pode ser esparsa, e lacunas são esperadas. Para mais detalhes, consulte Filtragem de SpO2 por minuto e validade dos dados.

Padrões de distância

As distâncias de exercício, como elevationGainMillimeters, são medidas em milímetros como unidade padrão pelos seguintes motivos:

  1. Manter a precisão dos dados: o motivo mais importante para usar milímetros é garantir que não percamos nenhuma precisão nos dados que lemos e fornecemos. Usar uma unidade detalhada como milímetros permite representar medidas com alta precisão.
  2. Padronização: os milímetros são a unidade padronizada projetada em todos os nossos serviços. Essa consistência ajuda a garantir uma experiência uniforme para os desenvolvedores que interagem com diferentes partes da API.
  3. Suporte amplo a sistemas de medição: o uso de uma unidade de base, como milímetros, facilita a conversão para qualquer outra unidade escolhida, seja ela métrica, imperial ou de outros sistemas de medição.

Duração variável do dia

O processamento de tempo da API Health prioriza o tempo do usuário para considerar as durações variáveis do dia causadas pelo horário de verão ou por viagens. Cada ponto de dados é armazenado com um carimbo de data/hora UTC físico e o deslocamento UTC ativo no momento do evento. Isso permite que o sistema:

  • Mapeie o evento para um instante físico preciso.
  • Corrija o horário para o contexto local do usuário para agregação.

Horário de verão

Quando o horário de verão acontece, um "atraso" resulta em um dia civil de 25 horas, e o resumo dessa data vai conter 25 horas de dados. O "horário de verão" resulta em um dia civil de 23 horas em que o horário volta ao horário padrão.

Viagem

Viagens entre fusos horários podem causar variações ainda mais significativas na duração física de um único dia civil.

Use o endpoint dailyRollUp para reconciliar as diferenças de fuso horário. Ele atribui automaticamente os dados ao dia do calendário em que foram registrados, de acordo com o horário local do usuário, "unindo" o dia apesar das mudanças de fuso horário. Para mais detalhes e exemplos, consulte Agregar em dias corridos no guia de dados agregados.