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 ao longo de um período).
  • Sample (representa medições instantâneas).
  • Daily (representa 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 oferece suporte a notificações em tempo real 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 ativas queimadas
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

  • 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 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
Zonas 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 diária em repouso
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
Variações diárias da 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áx. 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
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

Dispositivos compatíveis

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
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
Vibes
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

Dispositivos compatíveis

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áx. da corrida
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áximo
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, junto com um nextPageToken. Use o nextPageToken para solicitar as páginas seguintes.
  • Tamanhos de página variáveis:os limites de restrição dependem do endpoint e do tipo de dados. Para a maioria dos tipos de dados, os tamanhos de página são limitados a um máximo de 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 intervalo 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 consolidados.

Dependendo do volume de dados históricos que seu aplicativo precisa, a recuperação de todo o conjunto de dados vai 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 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 a movimentos do braço, ajuste frouxo no pulso ou uma pontuação de confiança do sensor abaixo de 50%, além dos 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 a 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. O uso de 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.