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:
| 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:
|
| 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). |
| Tipo de dado | Operações disponíveis |
Escopo |
|---|---|---|
|
Calorias ativas queimadas
dataType:
active-energy-burnedparâ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-minutesparâ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-minutesparâ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-levelparâmetro de filtro: activity_level
Tipo de registro: Intervalo
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitude
dataType:
altitudeparâ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-glucoseparâ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-fatparâ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-zoneparâ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-temperatureparâ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-variabilityparâ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-zonesparâ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-saturationparâ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-rateparâ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-rateparâ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-derivationsparâ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-maxparâ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:
distanceparâ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:
electrocardiogramparâmetro de filtro: electrocardiogram
Tipo de registro : sessão
Dispositivos compatíveis
|
list | .ecg.readonly |
|
Exercício
dataType:
exerciseparâ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:
floorsparâ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
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Unidade de medida de alimentos
dataType:
food-measurement-unitparâ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-rateparâ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-variabilityparâ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
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Registro de hidratação
dataType:
hydration-logparâ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-notificationparâmetro de filtro: irregular_rhythm_notification
Tipo de registro : sessão
|
list | .irn.readonly |
|
Período menstrual
dataType:
menstrual-periodparâmetro de filtro: menstrual_period
Tipo de registro: Intervalo
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Vibes
|
create, update, batchDelete | .mindfulness.writeonly |
|
Registro de alimentação
dataType:
nutrition-logparâ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-testparâmetro de filtro: ovulation_test
Tipo de registro: amostra
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Saturação de oxigênio
dataType:
oxygen-saturationparâ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-summaryparâ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-maxparâ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-periodparâ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-sensorsparâ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:
sleepparâmetro de filtro: sleep
Tipo de registro : sessão
Dispositivos compatíveis
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Etapas
dataType:
stepsparâ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-dataparâ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
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Tempo na faixa de frequência cardíaca
dataType:
time-in-heart-rate-zoneparâ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-caloriesparâ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-maxparâmetro de filtro: vo2_max
Tipo de registro : amostra
Dispositivos compatíveis
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Peso
dataType:
weightparâ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-minutesetotal-calories. - Um período máximo de consulta de 90 dias para todos os outros tipos de dados.
- Um intervalo máximo de consulta de 14 dias para
- Tamanho da janela de rollup:ao chamar o endpoint
rollUp, a duração dewindowSizeprecisa ser de pelo menos 1 segundo ("1s"). Durações de menos de um segundo são rejeitadas comINVALID_ARGUMENT. Além disso, escolha umwindowSizeigual ou maior que a resolução de armazenamento subjacente do tipo de dados (como"60s"para tipos de dados de intervalo de 1 minuto, comostepsedistance) 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 onextPageTokenpara 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
exerciseesleep, 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
rollUpedailyRollUp), 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-minutesetotal-calories. - Um período máximo de 90 dias para todos os outros tipos de dados consolidados.
- Um intervalo máximo de 14 dias para
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:
- 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.
- 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.
- 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.