mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 21:32:18 +00:00
Merge branch 'fix/v14311-integ' into release/v1.43.11
This commit is contained in:
commit
eaaff23858
88 files changed
+3311
-384
No files matched your search
+42
-5
@@ -20339,6 +20339,13 @@ paths:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorEnvelope"
|
||||
"401": *a1
|
||||
"410":
|
||||
description: Google turned the legacy Fitbit Web API off on 2026-10-30; nothing is fetched. `meta.errorCode` =
|
||||
`provider_retired`. The data already imported stays; Google Health reads the same devices.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorEnvelope"
|
||||
"413":
|
||||
description: Body exceeds 64 KiB.
|
||||
content:
|
||||
@@ -20953,6 +20960,13 @@ paths:
|
||||
schema:
|
||||
$ref: "#/components/schemas/FitbitIntegrationTestEnvelope"
|
||||
"401": *a1
|
||||
"410":
|
||||
description: Google turned the legacy Fitbit Web API off on 2026-10-30; nothing is probed. `meta.errorCode` =
|
||||
`provider_retired`.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorEnvelope"
|
||||
"422": *a49
|
||||
"429": *a50
|
||||
"502": *a51
|
||||
@@ -36298,8 +36312,8 @@ components:
|
||||
health_score_config_conflict, insights_layout_conflict, invalid_base_updated_at,
|
||||
json_carries_no_intake_time, json_not_an_array, medication_layout_conflict, missing_required_columns,
|
||||
modules_conflict, mood_tag_layout_conflict, not_configured, notification_prefs_conflict, oidc_only,
|
||||
private_origin_not_approved, private_origin_not_grantable, rate_limited_self, sync_in_progress,
|
||||
too_many_rows, unreadable_json, upstream_invalid_json, vapid_not_configured"
|
||||
private_origin_not_approved, private_origin_not_grantable, provider_retired, rate_limited_self,
|
||||
sync_in_progress, too_many_rows, unreadable_json, upstream_invalid_json, vapid_not_configured"
|
||||
type: string
|
||||
capability:
|
||||
description: "On an AI refusal: the capability that is unavailable, one of the keys of `AiCapabilities` (`coach`,
|
||||
@@ -79384,13 +79398,36 @@ components:
|
||||
allowPrivateHost:
|
||||
description: Nightscout only.
|
||||
type: boolean
|
||||
retirement:
|
||||
description: Fitbit only. The end of the legacy Fitbit Web API.
|
||||
type: object
|
||||
properties:
|
||||
endsOn:
|
||||
type: string
|
||||
pattern: ^\d{4}-\d{2}-\d{2}$
|
||||
description: The day Google turns the legacy Fitbit Web API off.
|
||||
ended:
|
||||
type: boolean
|
||||
description: "The day has come: the connection no longer syncs, its imported data stays, and `health` is null."
|
||||
successor:
|
||||
type: string
|
||||
enum:
|
||||
- google-health
|
||||
description: The integration that reads the same Fitbit and Pixel devices. Moving needs a fresh consent; the Fitbit
|
||||
grant cannot be carried over.
|
||||
required:
|
||||
- endsOn
|
||||
- ended
|
||||
- successor
|
||||
additionalProperties: false
|
||||
health:
|
||||
anyOf:
|
||||
- $ref: "#/components/schemas/ConnectionHealth"
|
||||
- type: "null"
|
||||
description: The unified connection state, null when the provider is not connected. It supersedes `state`, `lastError`,
|
||||
`consecutiveFailuresByKind`, `syncHealth`, `tokenExpired`, `needsReauth`, `hasActivityScope`,
|
||||
`planUnavailable` and `scopeReconnect` on this entry; those nine are deprecated and removed in v1.44.
|
||||
description: The unified connection state, null when the provider is not connected (and for Fitbit once
|
||||
`retirement.ended`). It supersedes `state`, `lastError`, `consecutiveFailuresByKind`, `syncHealth`,
|
||||
`tokenExpired`, `needsReauth`, `hasActivityScope`, `planUnavailable` and `scopeReconnect` on this entry;
|
||||
those nine are deprecated and removed in v1.44.
|
||||
required:
|
||||
- integration
|
||||
- state
|
||||
|
||||
@@ -16,14 +16,24 @@ Settings. The internal integration key is `fitbit`.
|
||||
> consent screen with `unauthorized_client — Invalid client_id`, because Fitbit
|
||||
> and Google Cloud are separate client registries.
|
||||
|
||||
> **Heads-up — new registrations are closed.** Fitbit has **discontinued
|
||||
> self-serve app registration**: the form at `dev.fitbit.com/apps/new` is
|
||||
> disabled for new applications, and the classic Fitbit Web API sunsets in
|
||||
> **September 2026**. If you already hold a registered Fitbit app, it keeps
|
||||
> working until the sunset and the setup below still applies. If you are
|
||||
> connecting Fitbit data for the first time, use the
|
||||
> [Google Health integration](google-health.md) instead — Fitbit devices sync
|
||||
> into Google's health stack, which HealthLog reads directly.
|
||||
> **The classic Fitbit Web API is turned off on 30 October 2026.** Google
|
||||
> ended support for it on 30 September 2026 and turns it off on
|
||||
> **30 October 2026**, after which it "will no longer function or sync data"
|
||||
> ([Google's migration guide](https://developers.google.com/health/migration)).
|
||||
> New app registrations at `dev.fitbit.com/apps/new` are already closed.
|
||||
>
|
||||
> From that day HealthLog stops calling the Web API for every Fitbit
|
||||
> connection: no hourly sync, no backfill, no token refresh, and no new
|
||||
> connection. Nothing is deleted. The connection and every reading it imported
|
||||
> stay, and the Fitbit card explains the move instead of asking for a
|
||||
> reconnect. To keep Fitbit and Pixel data coming, connect the
|
||||
> [Google Health integration](google-health.md). It reads the same devices,
|
||||
> but Google asks for consent once more: Fitbit tokens cannot be carried over.
|
||||
>
|
||||
> Both integrations can run side by side while you move. Where both deliver the
|
||||
> same day, the source-priority ladder keeps one of them per day (Fitbit ranks
|
||||
> just above Google Health by default), so steps, sleep and the other daily
|
||||
> values are not counted twice. After the turndown only Google Health delivers.
|
||||
|
||||
## 1. Use an existing Fitbit developer app
|
||||
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
|
||||
HealthLog reads Fitbit, Pixel Watch and Fitbit Air data through the **Google
|
||||
Health API** (`health.googleapis.com/v4`), the successor to the classic Fitbit
|
||||
Web API. Google retires the classic Fitbit Web API in **September 2026**, and
|
||||
Fitbit access/refresh tokens do not carry over — every account re-consents
|
||||
through Google OAuth. This integration is that path.
|
||||
Web API. Google ended support for the classic Fitbit Web API on 30 September
|
||||
2026 and turns it off on **30 October 2026**
|
||||
([migration guide](https://developers.google.com/health/migration)); from that
|
||||
day HealthLog's `fitbit` connection stops syncing and keeps what it imported.
|
||||
Fitbit access/refresh tokens do not carry over, so every account consents once
|
||||
more through Google OAuth. This integration is that path.
|
||||
|
||||
The OAuth app is a **Google Cloud** OAuth client, not a Fitbit developer-console
|
||||
app. Credentials are brought **per user**: each user registers their own Google
|
||||
|
||||
Reference in new issue
Block a user