Skip to content
AF

Site changelog

246 logged changes, rendered from the append-only operational log this site’s daily routine writes to. Not curated for appearance — this is the record.

Log lines below sometimes name KinesteX, the AI motion SDK that funds this site — the log records that relationship the same way the affected pages disclose it.

For changes in the ecosystem rather than on this site, see API changes & deadlines. For how entries get verified, see methodology.

2026-10

  • fixmigrate

    /migrate/fitbit-web-api-to-google-health

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    Evidence only: Thryve's Fitbit-shutdown post left its home page; quote re-pointed to thryve.health/blog, where it still appears. Page text unchanged.

  • fixalternatives

    /alternatives/sency-alternatives

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    Sency's Android demo README now documents SMKit Android 1.9.6 and no longer calls itself a release candidate; RC claim and row removed, version updated (also quotes on kinestex-alternatives, quickpose-vs-sency, kinestex-vs-sency, ai-workout-tracking-apis). Stamps unchanged.

  • fixintegrate

    /integrate/withings-api /integrate/terra-api /integrate/coros-api

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    Withings: Withings+ notice (from 2026-10-12) gone from developer.withings.com by 2026-10-22; claims rewritten as an announcement cited to the Internet Archive capture of 2026-10-16, with a confirm-with-Withings caveat; Advanced Research API dropped from the solutions list. Terra spec version 2026.10.08.1 -> 2026.10.21.1. COROS 'Submit an API Application' last updated 2026-10-20 (was 2026-10-12). Stamps unchanged.

  • fixpricing

    /pricing/health-data-aggregator-pricing /pricing/thryve-api-pricing

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    FAQ: Sahha's free plan -> free trial. Thryve inconsistency paragraph replaced: both card texts now say €0.50 per additional user. Stamps unchanged.

  • fixfitness-apis

    /fitness-apis/health-data-aggregator-apis /fitness-apis/smart-ring-apis

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    Sahha pricing line now the 30-day trial. RingConn's app-features page no longer renders the 'friends and family' sharing sentence; claim removed from body and FAQ. Stamps unchanged.

  • fixcompare

    /compare/terra-vs-sahha /compare/terra-vs-thryve

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    Sahha 'Free start' cell now the 30-day trial; retention quote re-anchored. Thryve feature list now reads '€0.50 per additional user' (was '0,50ct'); wording updated. Stamps unchanged.

  • fixpricing

    /pricing/sahha-api-pricing

    source-quotes.yml failing on PR #38 and on main's scheduled run of 2026-10-21; sources re-read 2026-10-22 (raw GitHub live; others via source-snapshot runs, logs deleted after reading)

    Sahha's pricing page dropped the Free plan ($0 for 30 days, 25 dev users, sandbox) for a 30-day free trial of any plan, card required. Whole page re-verified against today's sources; stamp and sources moved to 2026-10-22. Free row, 10K webhooks and Free retention removed. Historical Free plan cited from the Internet Archive capture of 2026-10-17. ChangeEvent added.

  • fixchanges

    /changes

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    ChangeEvent added (first seen 2026-10-22, absent from the 2026-10-17 snapshot); the Garmin sign-ups watch item removed as resolved.

  • fixreport

    /state-of-fitness-apis-2026 /cost-planner

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Garmin row of the cost model and dataset rewritten; report revision note of 22 October 2026 added (an update, not a correction; no figure moved); datasets regenerated.

  • fixpricing

    /pricing/are-fitness-apis-free /pricing/fitness-api-free-tiers-compared /pricing/how-much-does-a-fitness-api-cost

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Garmin fee wording replaced (no published price for Starter, Enterprise terms tailored); Garmin stays free to call under the dataset's no-fee-documented definition; stamps stay.

  • fixfitness-apis

    /fitness-apis/wearable-data-apis /fitness-apis/fitbit-api-vs-garmin-api /fitness-apis/garmin-connect-iq-vs-health-api /fitness-apis/corporate-wellness-wearable-apis

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Garmin access, fee and activity-count claims brought in line; Personal API linked; stamps stay.

  • fixcompare

    /compare/apple-watch-vs-garmin /compare/strava-vs-garmin-connect /compare/whoop-vs-garmin

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Garmin access, cost and activity-count claims brought in line with the 2026-10-22 pages (over 30 activity types is gone from the overview; the Activity API page names running, cycling, swimming, yoga and strength training); stamps stay.

  • fixalternatives

    /alternatives/fitbit-api-alternatives /alternatives/oura-api-alternatives /alternatives/strava-api-alternatives /alternatives/whoop-api-alternatives

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Garmin business-only and licence-fee wording replaced with approval, Starter/Enterprise and Enterprise-only features; stamps stay.

  • fixalternatives

    /alternatives/garmin-api-alternatives

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Personal section now leads with the Personal API; business-only, two-business-days and fee sentences replaced; stamp stays.

  • fixfix

    /fix/garmin-api-approval

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Garmin claims rewritten to the restructured program and Personal API; Terra, HealthKit and Strava routes not re-checked, so the stamp stays.

  • fixintegrate

    /integrate/garmin-api

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Re-verified whole page; stamp to 2026-10-22. Starter vs Enterprise, Enterprise-only features, new /enterprise/ API page URLs, removed claims no longer on Garmin's pages (two business days, integration call, throttled access, over 30 activity types, cloud-to-cloud/Health SDK line).

  • fixpricing

    /pricing/garmin-api-pricing

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    Re-verified whole page against the 2026-10-22 pages; stamp to 2026-10-22. No price published for Personal or Starter; Enterprise commercial terms tailored; old no-licensing-fee sentence cited to a Wayback capture of 2026-10-17.

  • spokefix

    /fix/garmin-api-personal-use

    Garmin restructured its developer program (source snapshot 2026-10-22): program-faq 404, FAQ moved to /enterprise/program-faq/ with Starter and Enterprise Access, new Personal API; Garmin is the site's #2 click cluster

    New page: Garmin Connect Personal API (self-generated key, 24-hour tokens, not for multi-user commercial apps), written from the 2026-10-22 snapshots; evidence ops/sources/evidence/fix-garmin-api-personal-use.json; inbound links from the Garmin pages, libraries and vendor menu.

  • fixpricing

    /pricing/fitness-api-free-tiers-compared

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Partial update, stamp unchanged: ExerciseDB free-tier bullet and FAQs restated from AscendAPI docs; costModel exercisedb row rewritten, datasets, kit and package data regenerated.

  • fixfitness-apis

    /fitness-apis/free-fitness-apis

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Partial update, stamp unchanged: free-exercise-db 876 counted, wger count removed, ExerciseDB and API Ninjas free tiers restated, links to the new pages.

  • fixintegrate

    /integrate/exercisedb-api

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Partial update, stamp unchanged (RapidAPI listing could not be re-read): AscendAPI V1 free endpoint and V2 quickstart request added, free-tier FAQ and step updated.

  • sectioncompare

    /compare/exercisedb-vs-wger

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Re-verified, stamp 2026-10-22: AscendAPI V1/V2, free tiers and rate limits; the unsourced wger 520+ count removed.

  • sectionalternatives

    /alternatives/exercisedb-alternatives

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Re-verified, stamp 2026-10-22: ExerciseDB is AscendAPI; alternatives are free-exercise-db, wger, API Ninjas and stock video libraries; correction logged for API Ninjas metadata-only claim.

  • sectionfitness-apis

    /fitness-apis/exercise-database-apis

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Re-verified, stamp 2026-10-22: retitled to Exercise Database APIs, video section now points to exercise-video-apis; AscendAPI, API Ninjas images and free plan, free-exercise-db 876; wger count removed (unreadable); correction logged.

  • sectionpricing

    /pricing/exercise-database-api-pricing

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    Re-verified, stamp 2026-10-22: AscendAPI free V1 and V2 tiers, rate limits, API Ninjas plan prices and storage rule; correction logged. Evidence file added.

  • spokecompare

    /compare/exercisedb-vs-free-exercise-db

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    New page: hosted ExerciseDB (AscendAPI) vs public-domain free-exercise-db, 876 exercises counted. Evidence file added.

  • spokealternatives

    /alternatives/wger-alternatives

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    New page: wger alternatives with per-image licence detail; ExerciseDB and API Ninjas sections written to the 2026-10-22 sources. Evidence file added.

  • spokefitness-apis

    /fitness-apis/exercise-video-apis

    GSC 2026-09-22 to 2026-10-19: exercise-database cluster is the top earner (exercise-database-api-pricing 11 clicks, exercisedb-alternatives 11, exercisedb-vs-wger 5, exercise-database-apis 4); 2026-10-22 source snapshot found exercisedb.dev rebranded as AscendAPI with free tiers and API Ninjas adding premium images

    New page: which exercise APIs serve video (ExerciseDB V2 MP4, wger self-hosted, GIF and still-image APIs, GymVisual stock licence). Evidence file added. Roundup retitled away from Video to avoid cannibalisation.

  • link/pricing

    fitness-api-free-tiers-compared

    Inbound links for /pricing/polar-api-pricing

    One pointer sentence under the free-tier table. updated left as is.

  • link/pricing

    whoop-api-pricing

    Inbound links for /pricing/polar-api-pricing

    'How it compares' links the Polar page. updated left as is.

  • link/pricing

    oura-api-pricing

    Inbound links for /pricing/polar-api-pricing

    'How it compares' links the Polar page. updated left as is.

  • link/fitness-apis

    wearable-data-apis

    Inbound links for /pricing/polar-api-pricing

    Polar section links the pricing page. updated left as is.

  • link/integrate

    polar-api

    Inbound links for /pricing/polar-api-pricing

    Access table 'What does it cost?' row links the pricing page. updated left as is.

  • link/pose-keypoints

    openpose-body-25

    Inbound links for /alternatives/openpose-alternatives; 'openpose body_25' 5 impressions at position 6

    Scheme page links the alternatives page under 'Models that output it' (SCHEME_ALTERNATIVES in src/data/poseKeypointPages.ts).

  • link/guides

    camera-pose-tracking

    Inbound links for /compare/mediapipe-vs-movenet

    Model-choice section links the comparison page. updated left as is.

  • link/guides

    ai-workout-tracking-web

    Inbound links for /compare/mediapipe-vs-movenet

    Intro pointer now links the comparison page. updated left as is.

  • link/compare

    kinestex-vs-mediapipe

    Inbound links for /compare/mediapipe-vs-movenet

    MediaPipe-vs-MoveNet pointer now links the comparison page. updated left as is.

  • link/alternatives

    mediapipe-alternatives

    Inbound links for the three new motion pages

    MoveNet paragraph now links /compare/mediapipe-vs-movenet; YOLO and OpenPose bullets link /compare/mediapipe-vs-yolo-pose and /alternatives/openpose-alternatives. updated left as is.

  • link/motion

    rtmpose-models

    Inbound links for /alternatives/openpose-alternatives

    'When it fits' links the alternatives page. updated left as is.

  • link/motion

    pose-estimation-model-licenses

    Inbound links for /alternatives/openpose-alternatives

    OpenPose section links the alternatives page. updated left as is.

  • link/motion

    openpose-models

    Inbound links for /alternatives/openpose-alternatives

    'When it fits' and related link the alternatives page. updated left as is.

  • link/motion

    multi-person-pose-tracking

    Inbound links for /compare/mediapipe-vs-yolo-pose

    Single-user bullet links the comparison. updated left as is.

  • link/motion

    yolo-pose-models

    Inbound links for /compare/mediapipe-vs-yolo-pose

    'When it fits' links the comparison. updated left as is.

  • link/motion

    mediapipe-pose-landmarker-models

    Inbound links for the two new MediaPipe comparisons

    related: the overview anchor entry replaced by /compare/mediapipe-vs-movenet; /compare/mediapipe-vs-yolo-pose added. updated left as is.

  • link/motion

    movenet-models

    Inbound links for /compare/mediapipe-vs-movenet

    Opening sentence now links /compare/mediapipe-vs-movenet instead of the overview anchor. updated left as is.

  • fix/motion

    pose-estimation-models-compared

    GEO one question, one page: /compare/mediapipe-vs-movenet now owns 'movenet vs mediapipe'

    'MediaPipe vs MoveNet, head to head' cut to a three-sentence summary using only claims already on the page, linking /compare/mediapipe-vs-movenet; FAQ 'Should I pick MoveNet or MediaPipe for a fitness app?' kept with a short answer pointing to the comparison page; 'How to decide' now links the comparison page; links to /compare/mediapipe-vs-yolo-pose and /alternatives/openpose-alternatives added. No new facts. updated left as is.

  • new/pricing

    polar-api-pricing

    Google Search Console + Bing, window 2026-09-22 to 2026-10-19: 'polar flow api' 4 impressions at position 8, 'polar accesslink api' 3 at 10; 46 impressions across 24 Polar queries on Google and Bing (counted per engine, not added as one figure)

    Polar's API licence agreement (free of charge 'at the moment', fees reserved), self-serve client registration, rate limits that scale with registered users, read 2026-10-22. Evidence: ops/sources/evidence/pricing-polar-api-pricing.json. polar.com is not reachable from the dev environment; quotes are checked by source-quotes.yml.

  • new/alternatives

    openpose-alternatives

    Google Search Console, window 2026-09-22 to 2026-10-19: 'openpose alternatives' 2 impressions at position 38, 'openpose body_25' 5 at 6

    Why teams leave OpenPose (noncommercial licence, no phone build, last release 1.7.0) and the options by licence, with a BODY_25 point crosswalk to Halpe26, BlazePose 33 and COCO 17. firstParty disclosure. Evidence: ops/sources/evidence/alternatives-openpose-alternatives.json; PDF-sourced rows stay backed by the page's sources list.

  • new/compare

    mediapipe-vs-yolo-pose

    Google Search Console, window 2026-09-22 to 2026-10-19: 'mediapipe vs yolo' 9 impressions at position 10.6, 'yolo pose vs mediapipe' 6 at 9.3

    Single user vs group, Apache-2.0 vs AGPL-3.0, from Google's model cards and Ultralytics' docs and repository, read 2026-10-22. firstParty disclosure. Evidence: ops/sources/evidence/compare-mediapipe-vs-yolo-pose.json; PDF-sourced rows stay backed by the page's sources list.

  • new/compare

    mediapipe-vs-movenet

    Google Search Console, window 2026-09-22 to 2026-10-19: 'movenet vs mediapipe' 11 impressions at position 3.5, 'mediapipe vs movenet' 5 at 2.8, landing on /motion/pose-estimation-models-compared

    Third-party head-to-head of two Google pose models from the model cards, google-ai-edge/mediapipe and tensorflow/tfjs-models, read 2026-10-22. firstParty disclosure (KinesteX funds the site; neither model is ours). The overview's head-to-head section was cut to a summary linking here (one question, one page). Evidence: ops/sources/evidence/compare-mediapipe-vs-movenet.json; PDF-sourced rows stay backed by the page's sources list.

  • fixcompare

    /compare/apple-watch-vs-garmin

    Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state

    Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-08-12. Evidence: compare-apple-watch-vs-garmin.json.

  • fixcompare

    /compare/whoop-vs-garmin

    Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state

    Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (3 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-23. Evidence: compare-whoop-vs-garmin.json.

  • fixcompare

    /compare/strava-vs-garmin-connect

    Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state

    Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-23. Evidence: compare-strava-vs-garmin-connect.json.

  • fixfitness-apis

    /fitness-apis/garmin-connect-iq-vs-health-api

    Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state

    Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (4 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-10-12. Evidence: fitness-apis-garmin-connect-iq-vs-health-api.json.

  • fixfitness-apis

    /fitness-apis/fitbit-api-vs-garmin-api

    Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state

    Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-08. Evidence: fitness-apis-fitbit-api-vs-garmin-api.json.

  • fixfitness-apis

    /fitness-apis/wearable-data-apis

    Follow-up to the Garmin re-verification of 2026-10-17: the integration guide already says Garmin's overview gives the Activity API 'over 30 activity types' and that 100-plus sports is not a figure Garmin's pages state

    Garmin's Activity API count changed from 100-plus sport types to over 30 activity types, the figure on Garmin's developer program overview (2 places). An update, not a correction: Garmin's partner-only API reference may list more, and we cannot read it. Polar's 100-plus sports line left as is: AccessLink's FIT sport-mapping table names 171 Polar Flow sports. UPDATED left at 2026-07-08. Evidence: fitness-apis-wearable-data-apis.json.

  • links/motion

    how-rep-counting-works, how-form-feedback-works, /motion hub

    EXPANSION-3 2.3

    Link-only additions to the two concept pages (no stamp moved) and a new 'Exercise by exercise' hub section with its own ItemList. Burpee skipped: only one study we read measured burpees (Sousa et al. 2026, nine videos), its burpee is a composition of modules the squat, deadlift, plank and push-up pages already cover, and the other studies that name burpees either did not test them or carry the name only in markup a quote check cannot match.

  • spoke/motion

    overhead-press-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Shoulder press states and the hands-above-head check from Sousa et al. 2026, hand-height counting of seated presses from Hwang et al. 2023, and a shoulder-angle caution from Baldinger et al. 2025. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    pull-up-counter-computer-vision

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Pull-up bar-height estimation from the hands, mouth-over-bar and 150-degree elbow thresholds and 96.6% counting accuracy from Lei et al. 2025, and Sousa et al. 2026 pull-up phases with 100% on 30 videos. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    sit-up-counter-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Sit-up elbow-to-knee distance and body-to-horizontal angle from Lei et al. 2025 (one-person demonstration, no sit-up accuracy reported) and sit-up recognition by camera view from Gu et al. 2026 (95.0% side, 88.5% front, 25.7% behind). Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    jumping-jack-counter-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Jumping jack hand and feet distance cycles (Cho et al. 2022) and wrist and ankle measures normalised by height, sliding-window recognition and boundary correction (Hocking et al. 2022); both used a Kinect depth camera and neither reports counting accuracy, which the page states. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    bicep-curl-counter-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Curl elbow angle or hand height from Chen et al. 2022 and Hwang et al. 2023 (larger counting errors for curls, median filter, zero-crossing), camera set-ups from Hwang, Noteboom et al. 2022 and Peres et al. 2025, and Fieraru and Goedemé 2026 on upright exercises. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    deadlift-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Deadlift torso and elbow states from Sousa et al. 2026 (95%), the single-hip-keypoint and spine limits and camera placement from Mercadal-Baudart et al. 2024, and Shoaib et al. 2026 deadlift form classification (89.5% on the training lifters, about 50 to 74% on a held-out lifter). Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    plank-detection-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Plank as a hold timer: Sousa et al. 2026 holding state and alignment check (9 of 9, CI 69.2 to 100%) and Kim et al. 2026 classroom MediaPipe program (time-based rule, ready-posture gate, no formal benchmark). No study tested camera placement for planks; the page says so. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    lunge-detection-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Lunge knee and hip angles, Baldinger et al. 2025 four-camera OpenPose study against Vicon (RMSE by view, peak knee angle 51.5 to 99.3 degrees at one instant, back views best, Savitzky-Golay smoothing) and Sousa et al. 2026 two-knee phases and lunge results. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    push-up-counter-computer-vision

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Push-up landmarks, camera placement, the Lei et al. 2025 state machine and thresholds (140-degree elbow, 15-degree torso, 140-degree waist, keypoint correction), Oliosi et al. 2026 phone positions, Sousa et al. 2026 phases, Gu et al. 2026 views and Fieraru and Goedemé 2026 on floor-level poses. Engineering guidance only; numbers labelled as one study's result to calibrate.

  • spoke/motion

    squat-detection-pose-estimation

    EXPANSION-3 2.3 (one page per exercise for camera tracking), studies read 2026-10-18 through source-snapshot runs; evidence in ops/sources/evidence/

    Squat landmarks, phone placement and rep thresholds from Oliosi et al. 2026 (12 phone positions, 22 adults), Sousa et al. 2026 (rule-based state machines, 95% squat counting), Iizuka et al. 2026 (browser MoveNet against motion capture, projection bias) and Gu et al. 2026 (recognition by camera view). Engineering guidance only; numbers labelled as one study's result to calibrate.

  • section/workout-types

    workout-types, workout-types/healthkit, workout-types/health-connect, workout-types/wear-os, workout-types/google-health-api, and 9 activity pages

    EXPANSION-3 1.8 (one metric across platforms), owner request 2026-10-17 to fill out the clusters; no published crosswalk of HKWorkoutActivityType, Health Connect EXERCISE_TYPE_, Wear OS ExerciseType and Google Health API exerciseType exists

    Generated reference: scripts/fetch-workout-types.mjs reads Apple’s HKWorkoutActivityType index and 84 per-case docs JSON, Google’s ExerciseSessionRecord, ExerciseSegment, ExerciseSessionType and Health Services ExerciseType references, the Health Connect data-types guide and the androidx source those references link, plus healthkitIdentifiers.ts and googleHealthApi.ts. Crosswalk by name identity only (87 rows, 28 on all four); no source-stated mapping found on 9 pages searched; 6 places where Google's pages disagree published as flags; 6 same-name Health Connect/Wear OS pairs with different integers; all 61 Health Connect types numbered differently on the platform API. Activity pages only where a row joins 3+ platforms and the sources give 2+ facts beyond names (9). Dataset workout-types-crosswalk-2026 (412 rows). Linked from /healthkit-identifiers, /health-connect, /wear-os-data-types and /google-health-api; the per-type pages were left to the builder working on them.

  • spoke/data

    swimming-data-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "swimming data api"

    Platforms: Google Health API, HealthKit, Wear OS; Health Connect has none. 1119 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    running-metrics-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "running metrics api"

    Platforms: HealthKit, Wear OS, Health Connect, Bluetooth; Google Health API has none. 1152 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    cycling-power-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "cycling power api"

    Platforms: HealthKit, Health Connect, Wear OS, Bluetooth; Google Health API has none. 1112 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    heart-rate-zones-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "heart rate zones api"

    Platforms: Google Health API, Bluetooth; HealthKit, Health Connect and Wear OS have none. 1025 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    active-minutes-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "active minutes api"

    Platforms: Google Health API, HealthKit, Health Connect; Wear OS and Bluetooth have none. 1106 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    floors-elevation-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "floors climbed api"

    Platforms: Google Health API, HealthKit, Health Connect, Wear OS. 1085 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    distance-tracking-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "distance tracking api"

    Platforms: Google Health API, HealthKit, Health Connect, Wear OS. 1156 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    ecg-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "ecg api"

    Platforms: Google Health API, HealthKit; Health Connect, Wear OS and Bluetooth have none. 1244 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • spoke/data

    body-temperature-api

    EXPANSION-3 1.8 Part B: a metric that at least two platforms expose as a type and no /data guide covered; primaryQuery "body temperature api"

    Platforms: Google Health API, HealthKit, Health Connect, Bluetooth; Wear OS has none. 1497 words, 4-5 FAQs, By platform block and reverse links from metricTypeMap. Facts only from this site's generated references (Google Health API 2026-10-17, HealthKit identifiers 2026-10-02, HealthKit metadata keys 2026-10-04, Health Connect 2026-10-03, Wear OS Health Services 2026-10-04, Bluetooth GATT 2026-10-17), quoted with each type page linked, plus existing on-site pages; no vendor accuracy figures, thresholds or medical claims of our own.

  • section/data + type pages

    src/data/metricTypeMap.ts; By platform block on /data/<guide>; reverse links on /google-health-api, /healthkit-identifiers, /health-connect, /wear-os-data-types and /bluetooth-fitness type pages

    EXPANSION-3 1.8 Part A

    Hand-maintained metric-to-type map: 24 /data guides, 178 type pairings (HealthKit 59, Google Health API 39, Health Connect 38, Wear OS 24, Bluetooth 18; 172 distinct type pages), each with an evidence quote copied verbatim from the generated module (27 also cite a verified matrix row); no name-only matches, no workout or exercise types. /data guides render a By platform block from it and every mapped type page links its guide back. The four guides without a matrix row (blood glucose, blood pressure, respiratory rate, menstrual cycle) now show their Health Connect records in the derived facts block. qa: METRIC-MAP-EVIDENCE, METRIC-MAP-NO-PAGE, METRIC-MAP-LINK.

  • fixstandalone

    /corrections

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    List keys include the index (two corrections for one page on one day duplicated the key). Four new 2026-10-18 entries: free tiers, cost planner, Apple Watch vs Garmin, Strava vs Garmin. Evidence: corrections.json, 9 -> 18 rows.

  • statusstandalone

    /changes (src/data/changes.ts)

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Strava Standard Tier subscription: reported -> confirmed from Strava's own words, linked to /pricing/strava-api-pricing (which quotes them), title loses '(reported)' so its RSS guid changes, date kept at 2026. WHOOP membership restructuring: kept as the dated report, link kept on /pricing/whoop-api-pricing, summary notes WHOOP's re-verified pages do not mention it. Garmin watch item: pause restated as could-not-verify plus the Stay tuned banner. verifiedOn 2026-10-17 on the two changed entries. npm run datasets (fitness-api-changes-2026 regenerated, manifest) and bundle-package-data run. Evidence: changes.json, 12 rows.

  • correctionstandalone

    /cost-planner

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Prose and two FAQ answers no longer say Garmin publishes no pricing, settles terms privately or needs a sales call (Garmin's FAQ: no licensing or maintenance fees; licence fee or minimum order for some metrics, amounts unpublished); 'roughly half of a market is contact-sales' dropped (the dataset had 4 of 25 when the planner launched); Strava sentence restated from its 2026 terms. CORRECTIONS entry. UPDATED constant left at 2026-08-11. Evidence: cost-planner.json, 8 rows.

  • fixstandalone

    /alternatives

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Hub FAQ: Garmin 'reportedly paused for new signups' -> partner-approval-only and business use only. Update. Evidence: alternatives.json, 2 rows.

  • fixstandalone

    /ai-fitness-app

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Decision 4: Garmin pause removed (business use only). Cost shape: WHOOP, Oura and Strava 'reportedly' membership claims restated from their own pages, dated 2026-10-17. Updates. UPDATED constant left at 2026-08-11. Evidence: ai-fitness-app.json, 6 rows.

  • fixmigrate

    /migrate/adapt-to-strava-api-changes

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Intermediary routing ('reportedly no longer supported') and the subscription row settled from the API Policy (effective June 1, 2026) and the getting-started guide, quoted; one-subscription webhook row no longer '(verify)'; answer, step 7, HowTo step and aggregator FAQ follow. Updates. UPDATED left at 2026-07-20. Evidence: migrate-adapt-to-strava-api-changes.json, 13 rows.

  • fixalternatives

    /alternatives/whoop-api-alternatives

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Fitbit/Garmin alternative: Garmin 'reportedly hard to get into for new signups' -> business use only, per Garmin's FAQ. Update. UPDATED left at 2026-07-09. Evidence: alternatives-whoop-api-alternatives.json, 9 -> 11 rows.

  • fixalternatives

    /alternatives/fitbit-api-alternatives

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Single-wearable watch-out: Garmin 'reportedly hard to get into (verify)' -> business use only; Oura and WHOOP caps restated (10 users until approval; Sandbox tier of 10 members; developer membership). Updates. UPDATED left at 2026-07-09. Evidence: alternatives-fitbit-api-alternatives.json, 5 rows.

  • fixengagement

    /engagement/social-features-fitness-app

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Strava 'reportedly restrict how athlete data may be displayed' settled from the API Policy in the answer and the provider-terms section. Updates. UPDATED left at 2026-08-22. Evidence: engagement-social-features-fitness-app.json, 3 rows.

  • fixengagement

    /engagement/leaderboards-and-challenges

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Strava 'reportedly' display, AI and paid-subscription claims settled from the API Policy (data shown only to the user who provided it, AI prohibition) and the getting-started guide. Updates. UPDATED left at 2026-08-22. Evidence: engagement-leaderboards-and-challenges.json, 7 rows.

  • fixcompare

    /compare/fitbit-vs-oura

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Oura PAT deprecation settled from Oura's spec in the answer, bullets, table (plus V2 as the only integration point), section, fine print and FAQ. Updates. UPDATED left at 2026-07-23. Evidence: compare-fitbit-vs-oura.json, 7 rows.

  • fixcompare

    /compare/oura-vs-whoop

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Oura PAT deprecation settled from Oura's spec (December 2025, no longer available for use) in the answer, table, section, fine print and FAQ. Updates. UPDATED left at 2026-07-23. Evidence: compare-oura-vs-whoop.json, 5 rows.

  • fixcompare

    /compare/apple-watch-vs-whoop

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    'roughly 10-member cap (verify)' -> WHOOP's Sandbox tier of 10 members and reviewed tiers (answer, section, table, trade-off, pick list, fine print, FAQ); no-charge API Terms cited. Updates (the tiers first appeared on the site on 2026-10-18). UPDATED left at 2026-08-11. Evidence: compare-apple-watch-vs-whoop.json, 18 rows. Not changed: the unsourced 'WHOOP has restructured its membership recently' sentences.

  • correctioncompare

    /compare/apple-watch-vs-garmin

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    'No confirmation the program is free... commercial terms settled privately' and the developer-cost row restated from Garmin's FAQ; pause reports removed from the answer, section, table, pick list and FAQ ('could not be verified' line kept in the section). CORRECTIONS entry: the site's 2026-07-08 pages already called Garmin free. UPDATED left at 2026-08-12. Evidence: compare-apple-watch-vs-garmin.json, 17 rows. Not changed: PKCE/userAccessToken and '100-plus sport types' claims.

  • fixcompare

    /compare/whoop-vs-garmin

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Garmin 'terms not public', 'no confirmed fee' and pause reports replaced from Garmin's FAQ (no licensing or maintenance fees, business use only, licence fee for some metrics including enhanced beat-to-beat interval, two business days). Updates (hedged at publication). UPDATED left at 2026-07-23. Evidence: compare-whoop-vs-garmin.json, 21 rows.

  • correctioncompare

    /compare/strava-vs-garmin-connect

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Strava subscription, AI and display claims settled from Strava's API Agreement, API Policy and getting-started guide; Garmin pause and 'terms not public' replaced from Garmin's FAQ; webhook scope and rate limits settled. CORRECTIONS entry for the pick-list claim that an aggregator can sidestep Strava's per-source rules (the API Policy prohibits aggregators re-exposing its API; the migrate guide already warned on 2026-07-20). Rest are updates. UPDATED left at 2026-07-23. Evidence: compare-strava-vs-garmin-connect.json, 63 rows.

  • fixfix

    /fix/strava-api-401-unauthorized

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    'a reported paid Strava subscription now gating Standard tier access' (body and FAQ) -> the API Policy (effective June 1, 2026) subscription requirements and the getting-started guide's prerequisite; intermediary restriction restated from the policy. Update. UPDATED left at 2026-08-12. Evidence: fix-strava-api-401-unauthorized.json, 7 rows.

  • fixfix

    /fix/garmin-api-approval

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Page premised on the reported pause: answer, description, intro, 'what's going on', suspended section, reasons list, steps, triage, summary, FAQs, HowTo steps and pitch restated from Garmin's FAQ (business use only, two business days, integration call, 1-4 weeks, Stay tuned banner); says plainly the pause reports could not be verified on Garmin's own pages. FAQ 'How long does Garmin approval take once the form is open?' -> 'How long does Garmin approval take?'. H1 and metaTitle unchanged. Updates (the July Garmin guide said the same at the time). UPDATED left at 2026-07-09. Evidence: fix-garmin-api-approval.json, 40 rows.

  • fixfitness-apis

    /fitness-apis/corporate-wellness-wearable-apis

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Garmin gate row, section heading ('sign-ups reportedly paused' -> 'business use only'), section text and FAQ restated from Garmin's FAQ, including the device-count question for issued-device programs; a line says earlier versions passed on the pause reports, which Garmin's pages do not support; related-link label updated. Updates. UPDATED left at 2026-10-12. Evidence: fitness-apis-corporate-wellness-wearable-apis.json, 6 -> 18 rows.

  • fixfitness-apis

    /fitness-apis/garmin-connect-iq-vs-health-api

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Garmin pause removed from the answer, access row, access bullet, FAQ and subscribe pitch; access facts attributed to Garmin's FAQ read 2026-10-17; 'last verified July 9' clauses now say 'as verified on July 9, 2026'. Updates. UPDATED left at 2026-10-12. Evidence: fitness-apis-garmin-connect-iq-vs-health-api.json, 10 rows. Not changed: '100-plus sports' and PKCE bullets, which the re-verified Garmin guide withdrew.

  • fixfitness-apis

    /fitness-apis/fitbit-api-vs-garmin-api

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Garmin pause removed from the answer, table, section, pick list, fine print and FAQ; 'Can I still sign up' FAQ now answered from Garmin's FAQ (requests invited, two business days) and says the pause reports could not be verified on Garmin's pages. Updates. UPDATED left at 2026-07-08. Evidence: fitness-apis-fitbit-api-vs-garmin-api.json, 14 rows.

  • fixfitness-apis

    /fitness-apis/wearable-data-apis

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Garmin 'sign-ups reportedly on hold (verify)' removed from the table, section, pick list and FAQ; Garmin pricing cell from its FAQ; Oura, WHOOP and Polar '(verify)' cells settled from their own pages; WHOOP's hard 10-member cap restated as the Sandbox tier and reviewed tiers. Updates. UPDATED left at 2026-07-08. Evidence: fitness-apis-wearable-data-apis.json, 27 rows.

  • fixpricing

    /pricing/how-much-does-a-fitness-api-cost

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Wrinkle row: 'Garmin (unlisted partner terms)... Some report setup fees' -> Garmin's FAQ (no licensing or maintenance fees, business use only, licence fee or minimum device order for some metrics, amounts unpublished); Strava's no-charge API Agreement and subscription prerequisite. Update, not a correction (hedged report). UPDATED left at 2026-07-23. Evidence: pricing-how-much-does-a-fitness-api-cost.json, 9 rows.

  • correctionpricing

    /pricing/fitness-api-free-tiers-compared

    Wearable re-verification follow-through: Garmin, Strava, Oura, WHOOP and Polar pages re-read on 2026-10-17 (ops/sources/evidence/integrate-* and pricing-*); site-wide sweep for 'reportedly', 'paused', 'on hold', 'Oura for Organizations', 'partner tier' and '(verify)' near those vendors

    Figures and quoted cells now match public/datasets/fitness-apis-2026.json (checked by script): free to call 12 (48%) -> 14 (56%), free tiers 5 -> 4, both-fields-null 6, gated 7, user-side 6; metaTitle '14 of 25 Free', description 155 chars. Garmin, Oura, WHOOP, Strava and Polar cells re-quoted from the regenerated dataset; Strava moved from the free-tier list to the free-to-call table with its display and AI rules; dated note beside the figure. CORRECTIONS entry (the page inherited the report's Garmin and Strava misclassifications). UPDATED left at 2026-08-12. Evidence: pricing-fitness-api-free-tiers-compared.json, 37 rows.

  • spokefitness-apis

    /fitness-apis/smart-ring-apis

    EXPANSION-3 1.7 (smart rings roundup)

    Oura (cloud API, OAuth, 10-user gate, membership 403), Ultrahuman (UltraSignal API, personal tokens plus in-app sharing codes, 7-day ranges), Galaxy Ring through the Samsung Health Data SDK, RingConn (no developer API found on its site). Evidence: ops/sources/evidence/fitness-apis-smart-ring-apis.json.

  • spokeintegrate + apis

    /integrate/withings-api, /integrate/samsung-health-api, /integrate/suunto-api, /integrate/coros-api, /integrate/wahoo-api, /integrate/dexcom-api, /integrate/concept2-api, /apis/withings, /apis/suunto, /apis/wahoo

    EXPANSION-3 1.4 (new vendor hubs)

    Seven guides from snapshot runs of each vendor's own pages, fetched 2026-10-17. Directory entries only where every cost field is sourced (Withings, Suunto, Wahoo; noindexed under the NOINDEX_APIS rule until they show demand); Dexcom, Concept2, COROS and Samsung state no developer fee on a fetchable page, so no entry. Withings reaches three pages and joins VENDOR_HUBS. Huawei Health Kit skipped: its developer docs render client-side and the snapshot held no content. New integrate hub group Health devices & CGM.

  • sectionintegrate + pricing + alternatives

    /integrate/strava-api, /integrate/whoop-api, /integrate/oura-api, /integrate/garmin-api, /integrate/polar-api, /pricing/strava-api-pricing, /pricing/whoop-api-pricing, /pricing/oura-api-pricing, /pricing/garmin-api-pricing, /alternatives/{strava,garmin,oura,whoop}-api-alternatives

    EXPANSION-3 1.3; tracked queries garmin api, strava api, whoop api, oura api; /apis/polar flagged due a re-check

    Rewrote the five guides and four pricing pages from source-snapshot runs of each vendor's developer pages (fetched 2026-10-17) with access, auth and scopes, data, webhooks, rate limits and what-changed sections; updated stamps 2026-10-17. Alternatives pages: hub-vendor facts only (Garmin approval, Oura and WHOOP gates, Strava subscription and aggregator ban), stamps unchanged. Fitbit, Terra and ExerciseDB from item 1.3 not covered here. costModel re-sourced for garmin, oura, whoop, strava, polar. Evidence: ops/sources/evidence/{integrate,pricing,alternatives}-*.json.

  • sectionlibraries

    /libraries/python, /libraries/react-native, /libraries/flutter, /libraries/capacitor-cordova

    EXPANSION-3 4.6; SERP-30 #16 and #17 ("fitness api python", "react native health data library", "flutter health package")

    Four language landings generated from src/data/libraries.ts and src/data/librariesEditorial.ts (src/data/librariesLandings.ts, shared renderer src/app/libraries/_landing.tsx); no new facts, every version/date/licence interpolated and every data-dependent sentence asserted at build. Python 7 packages, React Native 5, Flutter 4, Capacitor and Cordova 4 (its own page: as many packages, notes and comparisons as Flutter, and its plugins do not run in React Native). Platform rules link /integrate/healthkit, /integrate/google-health-connect, /google-fit-shutdown, /fitbit-api-shutdown (turn-off date read from GHAPI_TIMELINE) and the vendor guides. Hub, package and comparison pages link their landing; sitemap, llms.txt, llms-full.txt, answers.json, search index, site-index and routeLabel registered; qa LIBS-LANDING-ROWS. Libraries refresh tried 2026-10-17 and not kept: health_kit_reporter 3.0.0 rewrote the README its notes quote, so the 2026-10-03 data stays until re-verified; no stamp moved. Also published bluetooth-fitness-gatt-2026, google-health-api-data-types-2026, health-mcp-servers-2026 and pose-keypoint-maps-2026 through /api/v1 (13 collections).

  • fixsitewide

    ClusterPage disclosure banner, /compare, /alternatives, /pricing hubs, /cost-planner, /ai-fitness-app

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    The firstParty banner now reads for pages that cover KinesteX or its competitors and names the vendors' own pages as a source; hub groups list the six new motion pages (third-party pages first); two cost-planner sentences and one ai-fitness-app sentence no longer say all motion SDK pricing sits behind a form. No stamps moved on those pages.

  • correctionstandalone, apis

    /state-of-fitness-apis-2026, src/data/costModel.ts (sency, kinestex, quickpose, apple-vision)

    EXPANSION-3 2.4 follow-through: Sency's pricing packages page publishes per-user prices, so 'contact-sales' (no public price) no longer fits

    Sency devCost contact-sales -> usage-based and approval gate restated from its pages and Terms of Use (contact form that leads to a call; separate paid service agreement), recorded as an update in the report's 18 October revision note, alongside Spike and Terra: contact-sales 3 (12%) -> 2 (8%), usage-based 5 -> 6, approval-gated unchanged at 13 (52%); the three motion SDK rows re-verified 17-18 October, 18 rows keep 11 August. Datasets, manifest and kit regenerated. Notes and provenance of KinesteX, QuickPose and Apple Vision re-pointed to sentences now on the pages (no figures). Evidence rows appended to ops/sources/evidence/state-of-fitness-apis-2026.json.

  • reverify/motion

    mediapipe-pose-landmarker-models, pose-estimation-models-compared, multi-person-pose-tracking

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    Landmarker models: num_poses ('The maximum number of poses can be detected by the PoseLandmarker', default 1) quoted with the model card's single-person scope; .task Last-Modified (April 27/28, 2023) and byte sizes re-read; Google's Android sample pins /1/. Models compared: YOLO11 to YOLO26 from Ultralytics' pose docs, OpenPose body models from doc/02_output.md, PoseNet's multi-pose and deprecation wording, MoveNet MultiPose licence gap; links to the five model pages. Both bumped to 2026-10-18. Multi-person tracking: consistency fixes only (YOLO26, num_poses, MoveNet MultiPose, RTMPose), updated not moved.

  • reverify/guides

    evaluate-motion-sdks

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    Apple's body-pose framing guidance and AVCam Simulator note (Apple docs JSON) and the Android emulator's PNG/JPEG virtual-scene import re-read 2026-10-18; the procurement section now says QuickPose and Sency publish prices; KinesteX's 97.2% FAQ figure beside the README's 90%; QuickPose platforms corrected. updated 2026-10-18.

  • reverify/fitness-apis

    ai-workout-tracking-apis

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    KinesteX moved from first to last in the table and the details, page flagged firstParty; removed the unverifiable Sency '60 fps', 'no credit card' and QuickPose 'no watermark' claims; QuickPose and Sency prices, Kemtai's regulatory and validation claims and the vendors' on-device statements from their own pages; ML Kit added to the primitives. Cost-model provenance phrases kept or re-pointed. updated 2026-10-18.

  • reverify/alternatives

    kinestex-alternatives

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    Rewritten from sources read 2026-10-17/18: Kemtai and Exer AI now described from their own pages (Kemtai's 111 vs 113 body points noted), Sency and QuickPose prices, KinesteX's two on-device statements and no-price FAQ. Dropped the unverified VAY, Onyx, Sportsbox and Asensei claims. updated 2026-10-18.

  • reverify/compare

    kinestex-vs-sency, kinestex-vs-quickpose, kinestex-vs-mediapipe

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    Every vendor fact re-checked against repos, registries and the vendors' pages: Sency's published plans, server-downloaded models, iOS 16/15 floors and FAQ on-device claim; QuickPose's Android (API 26), React Native plugin and price list; KinesteX's security page (all camera and vision processing on-device) beside its READMEs' 'optional edge processing', its FAQ's 97.2% claim beside the README's 90%, its per-active-user pricing model with no figures, Apache LICENSE.txt now in the Kotlin repo; camera and motion-sensor (not microphone) permissions; MediaPipe num_poses. updated: kinestex-vs-sency 2026-10-18, kinestex-vs-quickpose 2026-10-17, kinestex-vs-mediapipe 2026-10-18; sources arrays added.

  • spoke/compare

    quickpose-vs-sency

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    Third-party head-to-head: MediaPipe toolkit vs assessment SDK, bundled vs server-downloaded models, per-device vs per-user prices (both published, Sency's on two pages that disagree), platforms, licences, keys. KinesteX only in a labelled closing pointer. Evidence: ops/sources/evidence/compare-quickpose-vs-sency.json.

  • spoke/alternatives

    quickpose-alternatives, sency-alternatives, mediapipe-alternatives

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    Alternatives by reason for leaving, each from the vendors' repos, registries and pages read 2026-10-17/18: MediaPipe (num_poses quoted with its default of 1, not overstated; distance and depth; frozen April 2023 weights), QuickPose (MediaPipe directly, Apple Vision, ML Kit, Sency, Kemtai) and Sency (web, cheaper first paid plan, models in the app, clinical scope, open licences). KinesteX appears last and labelled. Links the five pose-model pages and /pose-keypoints rather than repeating them. Evidence files per page in ops/sources/evidence/.

  • spoke/pricing

    quickpose-pricing, sency-pricing

    EXPANSION-3 2.4 (motion SDK pricing, alternatives and head-to-heads; KinesteX disclosed, never first)

    The two motion SDKs that publish prices. QuickPose: plans by monthly active device from its SDK pricing page (free for 10, $25 to $1,000 a month up to 100,000, every feature on every plan), billing, services, and its JointTrack page's older tier answer. Sency: plans by monthly active user from its pricing packages page (Starter free up to 100, Growth from $499 a month up to 3,800, Customized), and its main pricing page, which describes the first 100 users as a paid tier after a trial. Both firstParty with KinesteX last in the comparison. KinesteX (no published prices; /pricing 404), Kemtai and Exer publish none, so no page. Sency pages read through r.jina.ai in source-snapshot runs; quotes re-checked live by source-quotes.yml. Evidence: ops/sources/evidence/pricing-quickpose-pricing.json, pricing-sency-pricing.json.

  • spoke/pricing

    mindbody-api-pricing

    EXPANSION-3 4.1: Mindbody's developer FAQ is the only gym-platform page we read that prints a per-call API price

    1,000 calls a day, then a third of a cent per call, with the sandbox free and also held to 1,000 calls a day; what the API Terms of Use add on monthly billing (from 30 days after first access to a business's data), call limits and fee changes. The FAQ still describes the SOAP/XML web services, so the page tells readers to confirm the current fee schedule; /Resources/Pricing answered with an error page on 2026-10-17 and 2026-10-18. Evidence pricing-mindbody-api-pricing.json (19 rows). New "Gym & studio software" group on /pricing. No src/data/apis.ts entry: no cost-model category fits studio software.

  • spoke/integrate

    mindbody-api, teamup-api, mariana-tek-api, wodify-api, glofox-api

    EXPANSION-3 4.1; tracked query "mindbody api"

    Five integration guides with HowTo steps, one per platform whose developer documentation was readable: Mindbody (developer account, go-live approval, per-business activation, API-Key header, HMAC-signed webhooks), TeamUp (OAuth, M2M tokens, Direct Authentication after review, 250 requests a minute), Mariana Tek (credentials from its Integrations team, sandbox tenant, technical review, OAuth with PKCE or API keys, webhooks on request), Wodify (x-api-key from Wodify Core or the Developer Portal, 5 requests a second, bursts of 20, 500,000 a month) and ABC Glofox (branch ID, API key and API token headers behind a server-side proxy, reference v2.3.0). Evidence files integrate-<slug>.json (94, 50, 63, 41 and 60 rows). New "Gym & studio software" group on /integrate.

  • spoke/fitness-apis

    gym-management-software-apis

    EXPANSION-3 4.1, approved 2026-10-17, settles SERP-30 #21 (gym-software pricing pages rank for "fitness api pricing"); tracked queries "mindbody api" and "fitness api for gym app"

    Roundup of gym and studio management software APIs for "gym management software API" and "fitness studio booking API": who issues credentials, authentication, published limits and API prices, and webhooks for Mindbody, TeamUp, Mariana Tek, Wodify and ABC Glofox, plus rows for the ABC Fitness partner program, ABC Trainerize, ClubReady, Zen Planner, PushPress, Virtuagym, Exercise.com and Sportivity. Written only from source-snapshot runs (vendor hosts are blocked here) read 2026-10-17, with 13 pages re-read 2026-10-18; evidence ops/sources/evidence/fitness-apis-gym-management-software-apis.json (98 rows). Linked from the /fitness-apis category grid.

  • linkscompliance, migrate, hubs

    is-fitness-data-phi, fda-fitness-app-regulation, migrate/fitbit-research-studies-after-turndown, /compliance, /fitness-apis

    EXPANSION-3 3.1 and 3.4 (link the new pages from related existing pages)

    Related links and one pointer sentence on is-fitness-data-phi, a related link on fda-fitness-app-regulation; the turndown guide's platform paragraph now points at the research-platform comparison instead of saying no platform could be verified (evidence: ops/sources/evidence/migrate-fitbit-research-studies-after-turndown.json); both hubs list the new pages. No stamps moved.

  • sectionfitness-apis

    corporate-wellness-wearable-apis

    EXPANSION-3 3.1 (corporate wellness exists: extend only with sourced facts)

    Added "Which privacy rules can reach a wellness vendor" from the FTC's tool and HBNR guide, linking the HIPAA, FTC and Washington pages. updated not moved. Evidence: ops/sources/evidence/fitness-apis-corporate-wellness-wearable-apis.json.

  • sectioncompliance

    hipaa-compliance-fitness-app

    EXPANSION-3 3.4 (HIPAA covered-entity tests); Bing "in what situation would a health app or fitness tracker be considered a covered entity under the hipaa privacy rule?" (4 and 3 impressions for two phrasings, position 9 to 10)

    Added "The covered-entity test, in the regulation's words" from 45 CFR 160.103, CMS's covered-entity page and the FTC's Mobile Health Apps Interactive Tool; the HBNR bullet now quotes 16 CFR 318.2; one FAQ; links to the new FTC and Washington pages. hhs.gov refused the runner (403), so HHS's app scenarios are named as unread. updated not moved (the page's other claims were not re-checked). Evidence: ops/sources/evidence/compliance-hipaa-compliance-fitness-app.json.

  • spokefitness-apis

    wearable-data-to-ehr-fhir

    EXPANSION-3 3.1 (getting wearable data into health records); Google "evaluate rook on ehr/emr data integration" (8 impressions, position 8.6)

    FHIR R4 Observation's required elements and rules, the Vital Signs profile's mandatory elements, LOINC codes, UCUM units and search requirements, and a worked mapping from a wearable reading. Sources: hl7.org R4 observation.html and observation-vitalsigns.html, the Personal Health Device IG home page, read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/fitness-apis-wearable-data-to-ehr-fhir.json.

  • spokefitness-apis

    wearable-research-data-platforms

    EXPANSION-3 3.1; Google "is there a platform that gives me a single api to pull all my participants' fitbit data at once?" (5 impressions, position 2.8), "should i build my own fitbit api integration or use a research platform? which companies offer this?" (4, position 2), "google is retiring the fitbit web api. what research platforms will still support fitbit data collection?" (1, position 7), data/gsc/latest.json 2026-09-12 to 2026-10-09

    Fitabase, Labfront, Empatica and Ametris (formerly ActiGraph): devices, data resolution, export, APIs, hosting and pricing model, plus Fitabase's Google Health API migration notes. Sources: 25 vendor pages read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/fitness-apis-wearable-research-data-platforms.json.

  • spokecompliance

    remote-patient-monitoring-device-requirements

    EXPANSION-3 3.1 (remote patient and therapeutic monitoring)

    CMS's eligibility conditions (FDA device definition, digital upload, data at least 2 days every 30), the three billed components, same-rate payment, and where consumer wearables, HIPAA and FHIR fit. Remote therapeutic monitoring is out: no CMS page describing its device rules was found. Sources: CMS remote patient monitoring page, CMS covered-entities page, CMS-1848-P page, FDA general wellness page, FTC tool, 45 CFR 160.103, read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/compliance-remote-patient-monitoring-device-requirements.json.

  • spokecompliance

    washington-my-health-my-data-act

    EXPANSION-3 3.4 (state health-privacy laws)

    Who the Act covers, what counts as consumer health data, consent, homepage link, rights deadlines, sale authorization, geofencing, enforcement and exemptions. Sources: chapter 19.373 RCW in full, RCW 19.86.090 and the Washington Attorney General's FAQ, read 2026-10-17 from source-snapshot runs, logs deleted after reading. No other state's law was fetched. Evidence: ops/sources/evidence/compliance-washington-my-health-my-data-act.json.

  • spokecompliance

    ftc-health-breach-notification-rule

    EXPANSION-3 3.4; Bing "how is personal data protected in fitness apps that are not covered by hipaa" (data/gsc/bing-latest.json)

    Who the rule covers, what counts as a breach (including an unauthorized disclosure), notice timing, method and content, penalties, HIPAA and state law, the 2024 amendment and the FTC's 2026-09-09 rescission of its 2021 health-app policy statement (also a ChangeEvent in src/data/changes.ts). Sources: 16 CFR part 318 through eCFR's renderer API, the FTC business guide, Mobile Health Apps Interactive Tool, rule page and press release, read 2026-10-17 from source-snapshot runs, logs deleted after reading. Evidence: ops/sources/evidence/compliance-ftc-health-breach-notification-rule.json.

  • correctionstandalone

    /fitbit-api-shutdown

    site-wide search for 'Thryve/Sahha' while fixing the migrate pages

    Same 'Thryve/Sahha' error in the aggregator section and an FAQ answer; same fix as the migrate pages (Thryve stays on the reported list, Sahha gets its own sentence from its integrations page). UPDATED left at 2026-08-11. CORRECTIONS entry added; evidence in ops/sources/evidence/fitbit-api-shutdown.json.

  • fixstandalone

    /no-code-fitness-app

    found 2026-10-17 while re-reading Terra's supported-integrations table

    One sentence: Oura is 'Managed' in Terra's integrations table (your own credentials optional), while WHOOP, Strava and Garmin are 'Required', with Terra's homepage claim about its own Garmin partnership noted. Recorded as an update, not a correction: no copy of the table from the page's 2026-08-14 publication. UPDATED left at 2026-08-14.

  • correction/fix

    wearable-data-delayed

    found 2026-10-17 while re-reading Terra's historical-data docs

    The backfill step paired terra-reference with terra-signature; Terra's docs match the request's terra-reference to the webhook event's terra-reference. One sentence changed, updated stamp left at 2026-07-09. CORRECTIONS entry added. Not changed and worth a separate check: the step's curl still uses api.tryterra.co/v2, while Terra's OpenAPI spec now lists access.tryterra.co/api/v2.

  • correction/migrate

    fitbit-web-api-to-google-health, migrate-off-a-deprecated-fitness-api

    found 2026-10-17 while writing the aggregator pages

    'Thryve/Sahha' written as one vendor in three sentences; now two companies. Thryve stays among vendors reported to be preparing for the Google Health move (its docs list a Google Health source and mark Fitbit deprecating on 2026-10-29); Sahha gets its own sentence from its integrations page (Fitbit data on Android reaches its SDK through Health Connect). updated stamps left at 2026-07-20 (pages not re-verified). CORRECTIONS entries for both pages.

  • correctionstandalone

    /state-of-fitness-apis-2026, /apis/terra

    EXPANSION-3 3.2 follow-through; coordinator decision: revise in place, no 2026.2 edition

    Report revised in place with a dated note ('Revised 17 October 2026') after the aggregator rows were re-verified: contact-sales 4 (16%) -> 3 (12%), usage-based 4 -> 5, approval-gated 12 (48%) -> 13 (52%), every figure re-derived from the regenerated fitness-apis-2026 dataset. Spike's move to usage-based is recorded as an update (no August copy of its pricing page); Terra's missing gate is a correction (our own 2026-08-02 Terra pages already documented it), logged in CORRECTIONS for the report and /apis/terra. 'Updated 11 August 2026' stays as the stamp for the 21 rows not re-checked; datePublished 2026-08-11, dateModified 2026-10-17. Evidence in ops/sources/evidence/state-of-fitness-apis-2026.json and corrections.json.

  • fixapis

    src/data/costModel.ts (terra, junction, rook, spike), src/data/changes.ts

    EXPANSION-3 3.2 follow-through

    Cost-model notes and provenance rewritten to sentences now on the refreshed pages (no dollar figures). Reclassified from the vendors' own pages: Spike contact-sales -> usage-based (its pricing page shows a Sandbox starting price and calls pricing usage-driven); Terra gains an approval gate (its docs name providers needing special setup); Rook's gate text made specific. This moves the fitness-apis-2026 dataset to 3 contact-sales, 5 usage-based and 13 gated items, while the State of Fitness APIs 2026 report (edition 2026.1) still prints 4, 4 and 12: the report needs a new edition or a note. New /changes entry: Terra legacy widget endpoint deprecation, 2026-11-03, confirmed. Datasets, package data and kit regenerated.

  • spoke/alternatives

    human-api-alternatives

    EXPANSION-3 3.2: humanapi.co now redirects to LexisNexis

    What Human API is now (LexisNexis Health Intelligence and LexisNexis Human API, no public price) and alternatives by data type: aggregators for wearables, Metriport for covered-entity record access, Junction and Terra for lab ordering, Rook and Spike for lab-report parsing.

  • spoke/compare

    terra-vs-thryve, terra-vs-sahha, terra-vs-open-wearables

    EXPANSION-3 3.2: head-to-heads against the market leader

    From both vendors' own pages (Open Wearables also from its README and licence) fetched 2026-10-17. Each carries a 'what we could not verify' section; the Open Wearables page notes that its own pages disagree on outbound webhooks and that its comparison page's Terra claims do not match Terra's pricing page.

  • spoke/pricing

    sahha-api-pricing, thryve-api-pricing

    EXPANSION-3 3.2: both vendors publish full price sheets

    Plan tables, our own arithmetic labelled as such, BAA tier, retention and credential caveats from sahha.ai, docs.sahha.ai, thryve.health and docs.thryve.health snapshots of 2026-10-17. Flags Sahha's undefined 'user' and Thryve's 0,50ct vs EUR 0.50 inconsistency rather than resolving them.

  • refresh/fitness-apis /pricing /compare /alternatives /integrate

    health-data-aggregator-apis, terra-vs-vital, health-data-aggregator-pricing, terra-vs-rook, terra-vs-spike, rook-vs-spike, terra-alternatives, terra-api

    EXPANSION-3 3.2; /apis/terra, /apis/junction and /apis/spike flagged 'due a re-check' (sources 2026-07-08)

    Every vendor fact re-read from Terra, Junction, Rook and Spike pages and docs fetched by source-snapshot runs on 2026-10-17; stamps bumped and Sources checked lists added. Corrections: Terra now publishes pricing and sells lab tests; Terra's widget moved to access.tryterra.co/api/widget/session (legacy endpoint deprecation planned 3 November 2026); Junction's Launch plan is a flat monthly fee rather than per-user with a minimum; Rook publishes active-user tiers and sells device and lab-report APIs; Spike publishes a Sandbox starting price and announces an acquisition by Raintree Systems; Human API is now a LexisNexis product. Evidence files in ops/sources/evidence/.

  • sectionbluetooth-fitness

    /bluetooth-fitness, /bluetooth-fitness/<characteristic>

    EXPANSION-3 4.3

    Generated Bluetooth GATT reference from the Bluetooth SIG public Bitbucket repository (main at 408f4a0, committed 2026-10-14, read 2026-10-17): 13 services, 97 in-scope characteristics (55 chosen for fitness and health device categories, the 39 on the SIG User Data list, 3 referenced by those structures), 90 with a gss structure, 44 byte-layout pages (thin-page rule: two fields or a flags field), 7 with no structure in the repository (FTMS Feature, Training Status, Control Point, Status; PLX x3). Characteristics tied to a service only where a permitted-characteristics file says so. Dataset bluetooth-fitness-gatt-2026 (structural facts and evidence lines, not the SIG descriptions; the files say they are proprietary to Bluetooth SIG and grant no licence). Gates BT-GATT-*. Link-only edits to nine /devices guides; devices hub links the reference.

  • spokeai + standalone

    /health-mcp-servers, /ai/connect-wearable-data-to-ai-assistants

    EXPANSION-3 2.5 and 2.6; tracked query "mcp server health data"

    Generated MCP-server directory: scripts/fetch-mcp-health-servers.mjs reads every page of the official MCP Registry v0.1 listing (452 pages, 45,161 latest-version entries; the registry search matches names only) and keeps 176 servers whose name, title or description names a health or fitness data source, with npm/PyPI package facts; none is under a vendor domain namespace. New dataset health-mcp-servers-2026, gates MCP-SERVER-ROWS/-OFFICIAL/-EVIDENCE, workflow mcp-health-servers.yml (schedule paused like libraries.yml). Guide from the MCP specification 2026-07-28, the registry read and the compliance pages; @aifitnessapi/mcp described with a disclosure (not in the registry, npm 404).

  • spoke/google-health-api

    (hub + scopes + fitbit-web-api-mapping + access-and-limits + webhooks + errors + 44 data-type pages)

    EXPANSION-3 1.1; the Fitbit Web API turns off 2026-10-30 (Google's About page, read 2026-10-17); data-type ids, scope strings and method names are exact developer strings

    Generated by scripts/fetch-google-health-api.mjs from Google's v4 and v4beta discovery documents (revision 20261014) and 12 developers.google.com/health pages, all fetched 2026-10-17: 44 data types, 18 documented scopes, 27 methods, 151 v4 schemas (101 rendered), 32 Fitbit data-type mappings, 63 error reasons, 8 release notes. 31 disagreements between Google's own pages published as flags, never corrected. CC BY dataset google-health-api-data-types-2026; qa gates GHAPI-TYPE-COVERAGE, -HUB-TABLE, -TYPE-FACTS, -FLAG-SHOWN, -EVIDENCE, -TOPIC-ROWS; .github/workflows/google-health-api.yml ships paused like the other PR bots. Linked from /fitbit-api-shutdown, /migrate/fitbit-web-api-to-google-health, /integrate/fitbit-api, /alternatives/fitbit-api-alternatives and /pricing/fitbit-api-pricing, no stamp moved. Correction: the pricing and shutdown pages said the successor's quota model was not public; Google's Quotas and Rate Limits page (last updated 2026-05-18, read 2026-10-17) publishes it. Pricing stays could-not-verify; logged in corrections.ts.

  • referencegenerated

    healthkit-identifiers/<slug>, wear-os-data-types/<slug>

    EXPANSION-3 1.8

    Per-type pages generated only from existing data (healthkitIdentifiers, healthkitWritability, healthkitMetadataKeys, matrix; healthServicesDataTypes): 127 HealthKit identifier pages (113 of 121 quantity, 14 of 30 category, 0 of 6 characteristic) and 25 of 65 Wear OS DataType pages. Thin-page rule: a type needs Apple's abstract (Google's description) and availability (declared type) plus at least two evidence-backed facts of its own; the other 30 and 40 stay table rows with no page or sitemap row. Table pages, group pages and Health Connect record pages link the new pages. qa gates TYPE-PAGE-RULE/EVIDENCE/UNLINKED recompute the rule from the generated files. No facts written by hand; no source re-read, so no stamp moved.

  • spokemotion

    /pose-keypoints, /pose-keypoints/<scheme> (9), /motion/movenet-models, /motion/ml-kit-pose-detection, /motion/yolo-pose-models, /motion/rtmpose-models, /motion/openpose-models

    EXPANSION-3 2.1 and 2.2. /motion is the best non-commercial section in GSC 2026-09-12 to 2026-10-09; motion queries there include movenet vs mediapipe (16 impressions, position 3.6), movenet model (position 41), openpose alternatives (34) and mediapipe pose 33 landmarks official (23).

    New generator scripts/fetch-pose-keypoints.mjs -> src/data/poseKeypoints.ts: 9 keypoint schemes, 321 points, read 2026-10-17 from MediaPipe, TF.js, MMPose, Ultralytics and OpenPose source files on raw.githubusercontent.com (branch and SHA-256 recorded), ML Kit's PoseLandmark reference and Apple's Vision docs JSON, with exact per-scheme counts and cross-source checks. Hub /pose-keypoints with a name-identity crosswalk (53 rows, 127 points unmapped by rule), one page per scheme, dataset pose-keypoint-maps-2026, qa gates POSE-KEYPOINT-ROWS/-CROSSWALK/-MAPPING. Five new /motion model pages written only from sources fetched the same day; MediaPipe lite/full/heavy and Apple Vision 2D/3D already had pages, which now link their keypoint maps.

  • sectionsitewide

    /developers, /api/v1 (index, 9 collections, 727 items), /api/v1/openapi.json, /mcp

    ops/EXPANSION-3-2026-10-17.md 4.2 (SERP-30 #27)

    The open datasets served as a static, read-only JSON API with an OpenAPI 3.1 document generated from the same collection list (src/lib/publicApi.ts), and the stdio MCP server's four tools hosted at /mcp over Streamable HTTP, stateless, from one shared module (mcp/src/tools.js). Every response carries source, CC-BY-4.0 licence, attribution and a verified date; 11 API-*/MCP-* gates. mcp/server.json for the MCP Registry (schema 2025-12-11), not published: npm and registry steps need the owner. No new claims.

  • linkssitewide

    src/data/vendorHubs.ts + components/VendorHubMenu: 14 vendor menus, 169 page placements

    EXPANSION-3 item 1.2: Google splits 'garmin api' between /fix/garmin-api-approval and /integrate/garmin-api, and 'fitbit api' across /fitbit-api-shutdown, /integrate/fitbit-api and /migrate/fitbit-web-api-to-google-health

    One menu per vendor, grouped by intent with the current page marked, leading its hub and closing every other page before the CTA. Hubs on /integrate for Garmin, Fitbit, Strava, WHOOP, Oura, HealthKit, Health Connect (with the Google Fit pages), Terra, ExerciseDB and Nutritionix; on /apis for Junction, Rook, Spike and Edamam, which have no guide. Link text is each page's own H1; 13 hand-built pages now render theirs from src/data/pageTitles.ts. Polar and Withings are under the three-page bar; KinesteX gets no menu. No new claims, no stamps moved. qa: VENDOR-HUB-PAGE, -MENU, -LINK, -LABEL, -UNLISTED.

  • processops

    scripts/check-source-quotes.mjs, .github/workflows/source-quotes.yml, ops/sources/evidence/

    EXPANSION-3 4.8

    Quote check: pages written from blocked hosts carry claim/url/quote evidence; a runner re-fetches each source on PRs, weekly and on demand, and fails when a quoted passage is missing.

  • processops

    .github/workflows/source-snapshot.yml, scripts/source-snapshot.mjs, ops/sources/

    EXPANSION-3 4.8

    Source-snapshot workflow: fetches public vendor and regulator pages from a GitHub runner and uploads a 14-day artifact, so pages can be written from primary sources the dev environment cannot reach. Snapshots are never committed.

  • processops

    ops/EXPANSION-3-2026-10-17.md

    owner approval 2026-10-17

    Three expansions (vendor developer hubs, AI motion and computer vision, B2B health-data buyer's guides) plus every other row of the list, each tagged A/CI/B/O by where its primary sources can be fetched. Eleven tracked queries added.

  • fixapis

    /apis/<id>

    SERP-30 #26 follow-up

    The vendor-page header's 'last verified' date now renders ContentAge: elapsed time, plus the amber 'due a re-check' flag past 90 days, as cluster pages do. Flags junction, polar, spike and terra (sources verified 2026-07-08); their vendor hosts are blocked by the environment's network policy, so no stamp was bumped.

  • sectionsitewide

    /fitness-apis hub, /apis/<id>, /datasets, /compare, /alternatives, /pricing, homepage hero, OG cards

    SERP-30 batch 2 (#11, #12, #15, #23, #25, #26)

    Pillar jobs name their products from the cost model; vendor pages show their source page and its verification date; Dataset creator/publisher inline per Google's Dataset docs (read 2026-10-12); count-bearing hub descriptions; hero stat 'fitness APIs in the directory'; own OG cards for /blog, /glossary, /tools, /changes. No new claims.

  • processops

    scripts/gsc-report.mjs, ops/gsc/tracked-queries.txt

    SERP-30 #9/#10

    npm run gsc prints the www. URLs still in Google (46 pages, 7%) and the 31 tracked queries per engine. Study written up in ops/SERP-30-2026-10-12.md.

  • fixsitewide

    69 JSX text runs in 41 files

    Found while checking /apis on mobile: 'and 5carry a cost'; also '22unit families', 'Disclosure:KinesteX', '10metrics'

    Next's compiler drops the leading space of a JSX text run that contains an HTML entity and spans lines (reproduced with its bundled SWC). Each run now has an explicit {" "}; new qa gate JSX-ENTITY-SPACE fails the build if one returns.

  • processsitewide

    favicon.ico, logo, manifest icons, WebSite/Organization markup

    SERP-30 #6/#7/#8: /favicon.ico answered 404; Organization had no logo; the brand never matched 'ai fitness api'

    scripts/build-icons.mjs draws the ICO and PNGs from src/app/icon.svg; alternateName 'AI Fitness API'; Organization logo 512 px.

  • meta-fix/fitness-apis

    wearable-data-apis, free-fitness-apis

    SERP-30 #13/#14: 'fitness tracker api' at 72.8; free-fitness-apis had no Google impressions in 28 days

    Titles only; stamps unchanged.

  • meta-fixhubs

    /alternatives, /compare, /pricing, /learn, /blog, /migrate, /glossary, /apis

    SERP-30 #3: eight hubs titled 'Fitness & Health API …'; Google tested them for 'fitness api' (positions 29.8 to 94.8) and ranked none

    Intent-first <title>s; H1s unchanged. /apis is now 'Fitness API List' with free-to-start (17) and no-approval (12) boxes computed from the cost model; breadcrumb label 'Fitness API list'.

  • meta-fix/

    homepage

    SERP-30 #1/#2/#6: Google ranks the homepage best for 'fitness api' (18.5, 56 impressions) while 15 other pages split the term; the ranking results lead with a definition and a list

    Title 'Fitness API Guide: Compare 24 Wearable, Health & Motion APIs' (count from the directory), description with the brand spelled out, eyebrow 'AI Fitness API', and a 'Fitness APIs at a glance' section: the /learn definition capsule plus a 24-row table from the cost model with the funding note. No new claims.

  • linkssitewide

    109 never-shown pages (21 under 6 in-body inbound links)

    GROWTH-30 #21: 58% of pages with 3-5 in-body inbound links have appeared in Google vs 88% with 11+; /healthkit-versions/ios-12, ios-14, ios-15 had none

    93 contextual links in 86 one-sentence additions across 74 source entries (max 3 per source), each checked against the target page; the hiking-app altimeter sentence narrowed to what /phone-sensors/cmaltimeter shows. Rebuilt site: every never-shown page now has 6+ in-body inbound links. Stamps unchanged.

  • regenerategenerated

    published.ts, apiDemand.ts, public/datasets, mcp/data, packages/health-data/data, public/kit

    Pages removed or moved in this wave

    backfill-published drops the 12 posts and mediapipe-vs-movenet; datasets carry the MoveNet sourceHref and change-row page moves.

  • processsitewide

    /opensearch.xml

    GROWTH-30 #29: /opensearch.xml appeared in Google results

    X-Robots-Tag: noindex on the route, held by new qa gate MACHINE-FILE-INDEXABLE (described on /gates). The 'long titles' were an HTML-escaping artifact; decoded, none over 60.

  • processops

    scripts/search-pull.mjs, scripts/gsc-report.mjs, ops/DAILY-CONTENT.md

    GROWTH-30 #24-#26: snapshot was July's; US desktop is 42% of Google impressions at 0.26% CTR; Bing names the query behind nearly every click

    Live weekly pull (Google query, page, query x page, country x device; Bing pages, queries, partial query-page pairs; sensitive query text withheld); report prints CTR with and without US desktop and reads only the newest CSV per engine; playbook rungs read Bing queries as evidence, never added to Google; §6 ships via PR. Weekly routine Mondays 05:58 UTC, notifications off.

  • fold/blog

    12 never-shown posts

    GROWTH-30 #20: 25 posts, 0 clicks; these 12 never appeared in Google

    Findings moved, dated with each post's own date, into /matrix, /methodology, /tools/aggregation-checker, /healthkit/nutrition, /healthkit/mobility (+1 FAQ), /google-fit-shutdown, /pricing/are-fitness-apis-free, /build/fitness-app-tech-stack (2 posts), /changes, /healthkit-category-values; react-native-health-stale had nothing new for /libraries/react-native-health. Each post and its .md 308. Counts re-checked against costModel.ts and healthkitIdentifiers.ts. HK modified dates for nutrition, mobility, healthkit-category-values moved to 2026-10-12.

  • faq/build

    running-app

    Contradiction found while retitling: the FAQ said iOS needs Always authorization, the body says When In Use

    FAQ corrected to the body and to Apple's 'Handling location updates in the background' (developer.apple.com docs JSON, read 2026-10-12: a CLServiceSession requiring whenInUse or always, created in the foreground). Stamp unchanged.

  • meta-fix/build

    all 24 guides

    GROWTH-30 #19: 0 clicks, 15 of 24 never shown, hub at 78.6; 'how to build an X app' results belong to agencies

    metaTitle, h1 and metaDescription lead with the problem each body solves, each checked against a quoted body sentence; stamps unchanged. EXPANSION-MAP /build items closed.

  • merge/motion

    mediapipe-vs-movenet -> pose-estimation-models-compared

    GROWTH-30 #18: 1 click on 229 impressions at 5.3 over 56 days while the roundup took 9 clicks on the same queries

    Head-to-head section in the roundup with the spoke's facts and their check date; every link repointed to #mediapipe-vs-movenet-head-to-head; 308 for the page and its .md.

  • section/apis

    all 24 vendor pages (template)

    GROWTH-30 #17: 70% shared text, 0 clicks, about 5 impressions per page; live pull 2026-09-12 to 2026-10-09

    Opening 'What developers search for about <vendor>' from src/data/apiDemand.ts (scripts/build-api-demand.mjs; Google and Bing never added; query text with URLs, identifiers or code left out). NOINDEX_APIS: junction, rook, nutritionix, edamam, usda-fdc, open-food-facts, wger, kinestex, sency, quickpose, apple-vision (bar: 20 Google or 10 Bing product-named impressions plus one other page surfaced). Sitemap lists 13 vendor pages.

  • noindex/questions

    /questions and the 25 cluster question hubs

    GROWTH-30 #16: about 75% of a hub's text repeats its spokes' FAQs; 16 of 26 never shown in Google; 1 click in 28 days

    robots noindex, follow; dropped from the sitemap (SITEMAP-NOINDEX holds it). Reverses GROWTH-50-2026-10 item 43. Pages stay for readers, site search and the machine surfaces.

  • regenerategenerated

    public/datasets (fitness-api-changes-2026), mcp/data, packages/health-data/data, public/kit

    The changes dataset still graded the Fitbit dates 'reported' after #16 confirmed them

    npm run datasets (only the changes dataset changed; manifest rotated), scripts/bundle-package-data.mjs (the changes JSON in both packages), scripts/build-kit.mjs (watch-app checklist caught up with pages added since its last build).

  • statussitewide

    exercisedb-alternatives, exercisedb-api, exercisedb-vs-wger, exercise-database-apis, free-fitness-apis, exercise-database-api-pricing, /ai-fitness-app, /no-code-fitness-app

    Follow-up to GROWTH-30 #7: pages still called exercisedb.dev free and self-hostable, contradicting the corrected pricing page

    git clone of github.com/ExerciseDB/exercisedb-api on 2026-10-12: main holds exactly README.md and LICENSE (AGPL-3.0), history from 2025-11-25, the only PR ref also README/LICENSE only; README presents a hosted API with pricing plans, terms of use and a non-production v2 playground. Every self-host claim rewritten to match, dated in prose; updated stamps unchanged (partial re-check).

  • statussitewide

    Fitbit passages: alternatives (5 pages), compare (2), fitness-apis (2), fix (3), integrate fitbit-api, migrate (2), fitbit-api-pricing, google-fit-shutdown

    Google's Google Health API about page publishes the Fitbit Web API timeline (read 2026-10-12); today's new pages state it, so the 'reported, not confirmed as of Oct 2' passages had to go

    88 replacements, drafted by script and reviewed sentence by sentence: end of support 2026-09-30 and turn-off 2026-10-30 attributed to Google's page and dated in prose; token non-transfer and account linking from the migration guide; mid-May consolidation date, end-of-May target, 120+ endpoints and aggregator readiness stay reported. Updated stamps unchanged (partial re-check). Also links the migration playbook to the research page and the wearable roundup to the corporate wellness page. Part of GROWTH-30 #23.

  • status/changes

    fitbit-api-shutdown, changes.ts, homepage tile

    Google's Google Health API about page now publishes the timeline (read 2026-10-12); needed so today's new pages do not contradict the site

    Fitbit Web API end of support 2026-09-30 and turn-off 2026-10-30 graded confirmed with Google's words quoted on /fitbit-api-shutdown; token non-transfer and account linking confirmed from the migration guide; mid-May consolidation date stays reported. UPDATED stamp unchanged (partial re-check, dated in prose). Part of GROWTH-30 #23; the remaining 'reported' passages on other pages follow in the next commit.

  • section/devices

    ftms-fitness-machine-service

    GROWTH-30 #15: Bing 'open source fitness app treadmill bluetooth ftms', 'github open source treadmill app bluetooth ftms android'; page 64 impressions at 6.6

    Six projects from their READMEs/LICENSE files and PyPI/pub.dev records (2026-10-12): QZ, Auuki, OpenRowingMonitor fork, Zwack, pycycling, flutter_ftms; one FAQ added.

  • section/data

    gps-activity-api

    GROWTH-30 #14: 'strava developers site route suggestion api endpoint' at 2.8, 14 impressions, no click

    PARTIAL: developers.strava.com unreachable. Section reports what stravalib's client wraps (routes list/get/streams, read 2026-10-12) and says a route-suggestion endpoint could not be checked.

  • meta-fix/integrate

    whoop-api

    GROWTH-30 #13: 'whoop api developer integration' at 8.8 on /compare/apple-watch-vs-whoop; integrate page 0 clicks on 741 impressions

    Developer-integration phrasing in title/H1; top-of-page link from the comparison.

  • meta-fixpillar

    no-code-fitness-app

    GROWTH-30 #12: 'ai fitness app builder' at 5.8 and 'fitness app builder' at 7.3; page moved 72.9 -> 23.1

    Title/H1 plus a builder section that ranks no tools, keeps the KinesteX disclosure and does not crown it. UPDATED unchanged.

  • meta-fix/motion

    apple-vision-body-pose

    GROWTH-30 #11: 'vndetecthumanbodyposerequest' at 8.6, 12 impressions

    VNDetectHumanBodyPoseRequest in title and H1; added the iOS 18 DetectHumanBodyPoseRequest (detectsHands) from Apple's docs JSON, 2026-10-12. Stamp unchanged.

  • meta-fix/libraries

    garminconnect (+ all package pages)

    GROWTH-30 #10: 160 impressions at 7.3, 1 click; queries 'python-garminconnect', 'garminconnect python'

    Retitled 'garminconnect: Unofficial Garmin Connect API for Python'; library template header now leads with language and registry install name on every package page. LIBRARIES_VERIFIED_ON unchanged.

  • section/fix

    garmin-api-approval

    GROWTH-30 #9: 'garmin api access application suspended' at 10.4, 33 impressions; clicks 14 -> 9

    Title/H1/description plus a 'suspended' section that says plainly what could not be verified (developer.garmin.com unreachable).

  • meta-fix/alternatives

    garmin-api-alternatives

    GROWTH-30 #8: 'garmin connect api private use alternative 2025' at 3.4, 41 impressions, 0 clicks

    Title, H1, description and an opening personal-projects section linking /libraries/garminconnect, carrying the approval page's terms-of-service caution; one FAQ replaced.

  • section/pricing

    exercise-database-api-pricing

    GROWTH-30 #7: fourth-biggest earner (9 clicks); Bing ~28 impressions of plan questions (rate limits, free tier, RapidAPI cost, 'completamente free')

    PARTIAL: RapidAPI and exercisedb.dev pricing hosts unreachable, so no prices or limits. Section from the exercisedb-api README (2026-10-12); corrected the stale exercisedb.dev self-host/$0 claims on this page. Other ExerciseDB pages still describe exercisedb.dev as self-hostable — needs re-verification.

  • spoke/fitness-apis

    corporate-wellness-wearable-apis

    GROWTH-30 #6: 'which wearable health data api is best for corporate wellness programs?' at 2.0 with no owning page; Bing HRIS/benefits integration queries at positions 2 and 4

    Reuse page: facts from on-site wearable, aggregator, build, MDM and Garmin pages plus Google's Fitbit dates (2026-10-12); no prices, no HRIS vendors. Build guide links to it.

  • spoke/migrate

    fitbit-research-studies-after-turndown

    GROWTH-30 #5: research-platform queries in Google (Fitabase prompt, 'a single api to pull all my participants' fitbit data'); Fitbit is Bing's largest theme (307 impressions)

    Google Health API about, migration, data-types, research policy and research pledge pages fetched 2026-10-12; HowTo steps; no research-platform claims (sites unreachable).

  • spoke/fitness-apis

    garmin-connect-iq-vs-health-api

    GROWTH-30 #4: 'garmin connect iq api vs health api unterschied' at 5.7, 17 impressions; no page mentioned Connect IQ

    Connect IQ facts from garmin/connectiq-apps, connectiq-companion-app-sdk-ios and connectiq-android-sdk READMEs plus Maven Central (2.4.0), fetched 2026-10-12; Health/Activity API facts reused from /integrate/garmin-api (2026-07-09), so no sources field.

  • section/fitness-apis

    exercise-database-apis

    GROWTH-30 #3: 'workout video api' at 32.7 landing on the homepage, 'exercise video api' at 41.3 landing on /learn

    Retitled for video; new video section from the exercisedb-api README (v2 videoUrl, playground warning) and wger's ExerciseVideo model and router, fetched 2026-10-12. ExerciseDB-alternatives FAQ aligned (wger supports video). Stamp unchanged.

  • spoke/motion

    pose-estimation-model-licenses

    GROWTH-30 #2: Bing 'movenet license apache 2.0'; Google 'mediapipe vs yolo' (7 impr) and 'yolo pose vs mediapipe' (6) landing on the roundup

    LICENSE files (mediapipe, tfjs-models, ultralytics, openpose, mmpose), BlazePose GHUM 3D and MoveNet model cards, ML Kit pose page and terms, Apple Vision docs JSON — all fetched 2026-10-12; roundup's licensing section links to it.

  • processops

    DAILY-CONTENT.md, EXPANSION-MAP.md

    GROWTH-30 #1: clicks per page over 28 days to 2026-10-10 — /alternatives 2.50, /pricing 2.08, /motion 1.29, /fitness-apis 1.27 vs 0-0.04 across 146 reference-format pages

    Commercial-investigation formats are the default for new work; no new reference cluster before the 2026-10-31 day-28 review.

  • spoke/data

    resting-heart-rate-api

    EXPANSION-MAP Tier-1 top unchecked item (GSC snapshot 62 days old, so backlog rung per DAILY-CONTENT §1/§2c)

    Apple restingHeartRate, heartRate and HKHeartRateMotionContext docs JSON plus Google RestingHeartRateRecord reference, data-types page and vitals guide fetched 2026-10-04; sources recorded on the entry. Vendor rows reuse on-site facts only. Links in from /data hub group, /data/heart-rate-api and /healthkit/vital-signs (links only, no stamp moves).

  • ciinfra

    .github/workflows/libraries.yml

    main requires PR + green gates

    Weekly library refresh now opens a PR with auto-merge instead of pushing to main.

  • referencegenerated

    healthkit-metadata-keys, wear-os-data-types

    GROWTH-OCT-2026-B wave D #22-24

    Generated by scripts/fetch-healthkit-metadata-keys.mjs (67 keys) and scripts/fetch-health-services-data-types.mjs (65 types, 26 with a table permission); CC BY datasets healthkit-metadata-keys-2026 and wear-os-health-services-data-types-2026 bundled into mcp/ and packages/health-data; qa gates HK-METADATA-ROWS/EVIDENCE, WEAR-DATATYPE-ROWS/PERMS/EVIDENCE, HCAPI-EQUIV-BACKLINK.

  • spoke/data

    state-of-mind-api, medications-api, mental-health-assessments-api, clinical-records-api, health-connect-medical-records-api

    GROWTH-OCT-2026-B wave D #17-21

    Entries updated 2026-10-04 (HKStateOfMind, HKMedicationDoseEvent/HKUserAnnotatedMedication, HKGAD7Assessment/HKPHQ9Assessment, HKClinicalRecord, Health Connect MedicalResource), fact-checked by the main session; new /data hub group; /compliance/app-store-health-data-rules links clinical-records-api (no stamp move).

  • cluster/health-connect-api

    hub + readrecords-pagination, aggregate-request, aggregategroupbyduration-vs-period, getchanges-incremental-sync, insertrecords-clientrecordid-upsert, deleterecords, permissioncontroller-request-permissions, read-health-data-in-background, read-health-data-history, metadata-recording-method, getfeaturestatus-feature-availability, exercise-route-consent, planned-exercise-session-training-plans, permission-ui-guidelines, healthkit-vs-health-connect-api-equivalents

    GROWTH-OCT-2026-B wave D #1-16; exact-string pattern

    Cluster 25, Android twin of /healthkit-queries; developer.android.com guides and Jetpack reference fetched 2026-10-04. Wired: registry, next.config CLUSTERS, llms/llms-full, search, header/footer/homepage, uptime/responsive. Links in from /integrate/google-health-connect, /health-connect hub, /fix/health-connect-changes-token-expired, /healthkit-queries hub and 8 spokes (equivalents), both wave D posts; glossary 'Changes token' repointed. No stamp moves.

  • postblog

    health-connect-219-permissions

    GROWTH-OCT-2026-B wave D #27

    every number computed from src/data/healthConnectRecords.ts

  • postblog

    health-connect-sdk-release-history

    GROWTH-OCT-2026-B wave D #26

    every number computed from src/data/hcReleases.ts

  • spokecompliance

    apple-health-icon-works-with-apple-health

    GROWTH-OCT-2026-B wave D #25; exact-string pattern

    HIG HealthKit icon rules + Works with Apple Health badge page, quotes verified against pages fetched 2026-10-04

  • correction/learn,/data,/glossary

    learn/what-is-rpe (correction); data/menstrual-cycle-api (links to HealthKit rows and HC record pages, no stamp move); glossary terms for the new clusters

    GROWTH-OCT-2026-B #22-24

    what-is-rpe said no health API exposes perceived effort; HealthKit has workoutEffortScore and estimatedWorkoutEffortScore (iOS 18) with no abstract, scale or unit documented. Corrected and logged in corrections.ts. Glossary terms point at the specific new spokes.

  • spoke/watch-apps,/engagement

    watch-apps: workoutkit-customworkout-swift, hkworkoutsession-lifecycle-swift, hkworkoutsession-mirroring-api, wear-os-exerciseclient-kotlin, wear-os-passive-monitoring-measureclient; engagement: activitykit-live-activity-workout, app-intents-start-workout, android-live-updates-workout

    GROWTH-OCT-2026-B #18-21

    Apple and Google developer docs fetched 2026-10-03; hub groups updated; watch-apps entries link /health-connect and /audio-coaching.

  • spoke/fix

    health-connect-securityexception, health-connect-not-available, health-connect-changes-token-expired, health-connect-rate-limit

    GROWTH-OCT-2026-B #6-9

    From Google's read/write exception tables, SDK status values and changes-token guidance fetched 2026-10-03. health-connect-securityexception links /health-connect/permissions; /error-codes links ERROR_SECURITY and ERROR_RATE_LIMIT_EXCEEDED to their fix pages.

  • spoke/compliance

    app-store-guideline-5-1-3-health-research, -5-1-1-data-collection-storage, -5-1-2-data-use-sharing, -1-4-1-physical-harm, -2-5-1-healthkit-software-requirements, -3-1-3-d-person-to-person-fitness, -2-5-4-background-services, -2-5-11-sirikit-shortcuts; google-play-health-connect-publishing-requirements

    GROWTH-OCT-2026-B #16-17 and Wave C #26-28; guideline numbers are exact strings

    Guidelines quoted verbatim from the App Store Review Guidelines page fetched 2026-10-03; /compliance stays the overview. Hub GROUPS updated.

  • spoke/error-codes,/health-connect-releases

    error-codes (hub), error-codes/health-connect, health-connect-releases

    GROWTH-OCT-2026-B Wave C #22-25; HealthConnectException ERROR_* constants and connect-client versions are exact developer strings

    Generated by scripts/fetch-error-codes.mjs (Apple HKError.Code JSON, Android HealthConnectException + Jetpack HealthConnectClient) and scripts/fetch-hc-releases.mjs (androidx release notes), both fetched 2026-10-03 with row guards. /error-codes/healthkit deliberately not shipped (duplicate of /healthkit-errors, which gained fix-guide links). Gates ERROR-CODES-ROWS, HC-RELEASES-ROWS.

  • spoke/healthkit-versions

    (one page per iOS major: /healthkit-versions/ios-N)

    GROWTH-OCT-2026-B Wave C #24; 'healthkit ios N new types' queries

    Computed from the existing identifier dataset (src/lib/hkVersions.ts); no new facts. Sitemap lastmod = HK_VERSION_PAGES_PUBLISHED, the pages' dateModified.

  • spokephone-sensors

    (hub + 10 spokes)

    GROWTH-OCT-2026-B Wave C #11-21; Core Motion classes and Android sensor constants are exact developer strings

    Cluster 24; Apple Core Motion docs and developer.android.com fetched 2026-10-03. Linked from data/step-counting-api and guides/track-workouts-without-wearables; Android pages link /health-connect/permissions (links only).

  • spokehealthkit-queries

    (hub + 9 spokes)

    GROWTH-OCT-2026-B Wave C #1-10; HealthKit query class names are exact developer strings

    Cluster 23; Apple HealthKit docs JSON fetched 2026-10-03; where Apple is silent the pages say so. Linked from integrate/healthkit, fix/healthkit-background-delivery-not-working, cookbook/incremental-sync-anchor and the /healthkit hub (links only).

  • spokeaudio-coaching

    (hub + 12 spokes)

    GROWTH-OCT-2026-B #14; exact-developer-string pattern from GSC

    cluster 22; Apple/Google docs fetched 2026-10-03; no framework-plugin claims. Linked from glossary audio terms, build/hiit-app, build/meditation-app, watch-apps/hkworkoutsession-lifecycle-swift and accessibility/haptics-when-audio-is-busy (links only, no stamps moved). Gate AUDIO-EVIDENCE.

  • spoke/libraries

    (hub + 20 package pages + 5 comparisons)

    GROWTH-OCT-2026-B #10-13; package names are exact developer strings

    Registry facts generated by scripts/fetch-libraries.mjs from npm, pub.dev and PyPI (row guard 20) and refreshed weekly by .github/workflows/libraries.yml with monthly hold-back for stars/issues/activity; GitHub repo signals null until the first CI run. Editorial notes quote READMEs fetched 2026-10-03. Linked from /sdk-releases, integrate/healthkit, integrate/google-health-connect, integrate/garmin-api, google-fit-shutdown, fix/oura-personal-access-token-deprecated and the react-native-health-stale post. Gates LIBS-ROWS, LIBS-FRESH.

  • spoke/health-connect

    (hub + permissions + aggregate-metrics + 42 record pages)

    GROWTH-OCT-2026-B #1-5; exact-developer-string pattern from GSC (record class names, android.permission.health strings, AggregateMetric constants)

    Generated by scripts/fetch-health-connect-records.mjs from Google's data-types page and Jetpack references fetched 2026-10-03 (42 records, 219 framework permissions, 92 aggregate metrics); one Google-internal disagreement (READ_EXERCISE_ROUTE vs READ_EXERCISE_ROUTES) shown, not resolved. /health-connect-records 308s to /health-connect; its calorie FAQ and two traps moved to /matrix verbatim; HealthKit group rows and the /matrix Android column link record pages for verified matrix pairs only. New datasets health-connect-records-2026 and health-connect-permissions-2026 (CSV/JSON, CC BY) bundled into mcp/ and packages/health-data. Gates HC-RECORD-COVERAGE, HC-PERM-ON-PAGE, HC-PERMISSION-ROWS.

  • seo/site-index,/fix,/tools,/healthkit-identifiers,/health-connect-records,/changes

    site-index (noindex,follow); fix hub description; tools sibling nav x6; healthkit-identifiers + health-connect-records tool links; changes: 402 outage entry

    GSC 2026-07-06..08-02 re-read against a position-aware curve: 44 of 234 queries split across our own URLs (450 of 1,220 query-page impressions); 'fitness api' spread over 13 of them at position 40-90. /site-index averaged position 156, 102 impressions, 0 clicks while bidding on four head terms. /fix outranked its own fitbit-401 spoke (282 imp, pos 9.6, 0 clicks).

    Consolidation, not new content. /site-index noindex,follow keeps its crawl role without the bid. /fix description made hub-shaped so the spoke can take the exact-match query back; reversible via npm run gsc -- --compare 2026-10-02. New CANNIBAL-QUERY gate (295 queries, 0 contested) locks the clean state. Bing: bingbot named in robots.txt and now gated in qa + the uptime probe, msvalidate.01 from BING_SITE_VERIFICATION, IndexNow --all on outage recovery; ops/BING.md has the owner steps. Correction: an earlier claim of 44 orphaned pages came from a stale .next; the real number was 3 and the footer already linked /tools, /questions and /healthkit.

  • reverify/fitness-apis,/fix,/integrate,/compliance,/test

    fitness-apis/apple-healthkit-vs-google-health-connect, fix/health-connect-no-data, fix/healthkit-no-data, integrate/google-health-connect, integrate/healthkit, compliance/app-store-health-data-rules, test/health-connect-test-data

    npm run stale: oldest verification stamps (85-86d) approaching the 90-day flag; picked the entries whose primary sources (developer.apple.com, developer.android.com) were reachable

    Every claim re-checked against primary sources fetched 2026-10-02; updated moved to 2026-10-02 only on these 7. Each carries a new sources field (URL, what it backs, date) rendered as 'Sources checked', listed in the .md mirror and emitted as TechArticle citation. Factual fixes include HKQuantityType(_:) iOS 15+ (was 16+), HealthKit capability available to free accounts, Health Connect 42 record types (was 'over 50'), Health Connect on Android 9+, write-then-empty-read is a query bug not a read denial, connect-testing alpha04. Entries blocked on unreachable vendor hosts were left unstamped.

  • correction/healthkit-status,/healthkit,/healthkit-errors,/datasets,/blog

    healthkit-status; healthkit hub; healthkit/environment-and-hearing, healthkit/workout-activities; healthkit-errors; posts healthkit-240-types-ios-8, healthkit-newest-types-roadmap; healthkit-type-identifiers dataset

    Re-check of /healthkit-status for the 241-identifier refresh: Apple's docs JSON records deprecation as a deprecatedAt version on platform entries while its deprecated flag is false on all of them, so the site's 'nothing is deprecated' claim was wrong

    Generator reads deprecatedAt and stores Apple's note and rename target per row; 4 deprecated identifiers (audioExposureEvent iOS 14.0 renamed to environmentalAudioExposureEvent; dance 14.0; danceInspiredTraining 10.0; mixedMetabolicCardioTraining 11.0) plus HKError.noError (iOS 27.2, renamed unknownError). Dataset gains iosDeprecated/deprecationNote/renamedTo, and appleDocs now uses each row's own family path (the 120 non-quantity links were 404s). /healthkit-status rewritten and re-stamped 2026-10-02; group pages and posts not re-stamped, posts got dated correction notes. 5 corrections.ts entries. Package types and README document the new fields. manifest-prev.json re-rotated from the committed manifest so /datasets/diff.json compares against what is live.

  • refresh/healthkit,/healthkit-identifiers,/matrix,/data,/blog,/glossary,/architecture

    HealthKit corpus re-read (240 -> 241: heartRateVariabilityRMSSD, iOS 27.0); HRV claims; derived counts

    Apple's docs JSON listed 241 identifiers on 2026-10-02; the new HKQuantityTypeIdentifier.heartRateVariabilityRMSSD has a declaration only (no abstract, no discussion); the two iOS 27.0 reproductive types lost their beta flags

    Regenerated identifiers, datasets, kit and package data. RMSSD placed on /healthkit/vital-signs by a per-identifier override (Apple files it under a generic 'Type Properties' topic); aggregation and unit stay null. HRV copy now says Apple Watch records SDNN and iOS 27 adds an RMSSD identifier Apple has not described (as of 2026-10-02), with no claim that Apple Watch writes it. Hard-coded 240/120/'four unstated'/'beta pair' in code now derive from the dataset; dated posts got dated notes, not rewrites. updated moved to 2026-10-02 only on pages fully re-checked (vital-signs, reproductive-health, healthkit-versions, healthkit-category-values, healthkit-units); healthkit-status not re-stamped because its deprecation claims fail (the generator reads p.deprecated, Apple records deprecatedAt). Five published errors found while re-checking are logged in corrections.ts.

  • expand/cookbook,/integrate

    cookbook/dedupe-health-samples, cookbook/incremental-sync-anchor; 'strings you will paste' tables on integrate/healthkit and integrate/google-health-connect

    /architecture has the best median position (6.3) but no runnable companion; exact developer strings are the query type that ranks

    Recipes are Node-only (cookbook-ci runs node --test), tests use the architecture page's own worked example (6,000/7,500/2,500); native API names and the 30-day changes-token expiry quoted from developer.apple.com / developer.android.com fetched 2026-10-02. Permission/entitlement/Info.plist strings copied verbatim from Apple and Android docs JSON with URLs.

  • retitle/integrate,/pricing,/guides,/alternatives,/migrate,/apis,/blog

    nutritionix-api, terra-api, strava-api-pricing, garmin-api-pricing, ai-workout-tracking-web, terra-alternatives, adapt-to-strava-api-changes, /apis/* template, 5 post metaTitles

    Only pages with attributed July queries (Nutritionix endpoint, Strava cost/free variants, 'garmin api free', PoseLandmarker constants, Terra/crypto SERP collision, brand+API navigational searches); every other page-one zero-click page left untouched as the control cohort

    Treated paths listed in ops/gsc/retitled.txt; gsc-report --compare splits retitled vs control. No new facts in any title; no stamps bumped. /apis titles avoid cost/approval wording (owned by /pricing and /fix).

  • linkssite-wide

    items 23-32 of ops/GROWTH-OCT-2026.md

    July GSC: 'fitbit error code 401' family (~345 imp at ~9.6) landed on the /fix hub, not the dedicated page; 'fitbit api deprecation' on pricing; 'movenet vs mediapipe' on the roundup; the site's own Oura PAT sentence quoted in search; 09-04 pages (/healthkit groups, /tools, /questions) at 1-2 inbound links

    /fix 'Common fixes' block (neutral label) + unlisted released slugs render under 'Other'; Fitbit 401 / deprecation-status / Oura PAT / MediaPipe-vs-MoveNet / learn->data / data->HealthKit-row links; 240 identifier rows link their group page; prev/next on group pages; homepage + footer surface /healthkit, /tools, /questions, /accessibility; tool CTAs on 41 spokes by slug map; vendor pages link /apis/<id> near the top. New gates HUB-LINK, FRAGMENT-NO-PAGE, FRAGMENT-DEAD.

  • refresh/fix,/integrate,/pricing,/alternatives,/compare,/migrate,/fitness-apis,/compliance,/fitbit-api-shutdown,/google-fit-shutdown,/changes,/blog

    Fitbit turndown + Google Fit end-of-support copy (items 41-42 of ops/GROWTH-OCT-2026.md)

    Copy still presented the reported Sept 2026 Fitbit turndown as upcoming/scheduled and called the Fit sunset 'firm'; the event hubs render elapsed time, so it would show the moment the site returns

    Source fetched 2026-10-02: developer.android.com/health-and-fitness/health-connect/migration/fit (last updated 2026-09-10): Fit supported until end of 2026 (end of support, no switch-off date); Google Health API for cloud integrations, Health Connect for steps/mobile-first, Health Services for Wear OS, no replacement for Goals; Fitbit Web API -> Google Health API 'Available', no turndown date. Fitbit status stays 'reported', outcome-proof past tense. May 1 2024 sign-up closure now attributed to the 2026-07-31 check (guide no longer repeats it). changes.ts Google Fit verifiedOn -> 2026-10-02; /google-fit-shutdown UPDATED -> 2026-10-02 (every claim re-checked or attributed). No other stamps moved.

  • technicalsite-wide

    wave A of ops/GROWTH-OCT-2026.md: items 9-22, 44-46, 49

    402 DEPLOYMENT_DISABLED since 2026-09-27; hosting audit (open image proxy, free-text /api/og, star-only redeploys, 8 GB/month uptime probe); technical audit (homepage canonical inherited by every route, .md.md alternate, 101 undated sitemap rows, 404 robots conflict)

    No copy changed. HealthKit group/standalone pages now carry `updated` = the date of the data they render (HK_FETCHED_ON 2026-08-28 for Apple-derived pages) — provenance, not a bump. datePublished now comes from src/data/published.ts (first commit per entry, from git history). 16 new qa gates (126 total). July GSC baseline snapshotted to data/gsc/snapshots/2026-10-02.json before any new import.

2026-09

  • expand/architecture

    15 hand-drawn mechanism diagrams

    item 42 of ops/GROWTH-50-UPDATES.md — the 15 architecture patterns had no visual; each diagram draws the page's own worked example, no invented figures

    Every numeric value in a diagram transcribed from its page's text and re-verified (dedup 6,000/7,500/2,500; the LAX-LHR midnights; the two-device merge). Gate: all /architecture pages must carry the figure, none outside may.

  • expand/fix,/build,/tools,/paths,/gates

    10 HealthKit fix pages; 6 build guides (cycling, swimming, hiking, hiit, triathlon, kids); 6 tools + hub; 58-title CTR pass; reading paths; command-K palette; hub freshness; bookmarks; gates page (108 refusals, parity-asserted); GSC csv pipeline; stat cards; copy-as-markdown

    items 9-21, 26-28 partial, 33, 36-39, 41, 44, 48-49 of ops/GROWTH-50-UPDATES.md

    Fix pages grounded solely in Apple's error corpus (undocumented cases stated as undocumented). Every widened title carries a differentiator verified against the entry's own body; spot-checked 5/5 including a manual recount of the WHOOP scope table. Tools emit only symbols established in verified on-site content; the query generator refuses to generate for the 3 types Apple leaves unstated.

  • expand/healthkit,/questions

    12 group pages + hub, 5 standalone references (versions, status, category-values, units, health-connect partial), 21 question indexes + hub, /changelog, /corrections

    240 identifiers and 1188 FAQs sat on single URLs; group pages are the middle layer between the flagship table and the thin-page trap, question indexes make existing answers addressable

    Every identifier appears on exactly one group page (gate-asserted, 240/240); 1188 FAQ deep links resolve (gate-asserted). New healthkitWritability.ts derives 14 explicitly read-only types from the same cached Apple corpus, evidence sentences stored. Writers' numbers locked to generated fact packs.

  • blog/blog

    20 posts: healthkit-240-types-ios-8, healthkit-58-silent-types, healthkit-sum-or-average, healthkit-nutrition-is-biggest, healthkit-mobility-types-unused, healthkit-newest-types-roadmap, healthkit-error-that-never-fires, hrv-sdnn-vs-rmssd, ten-metrics-two-platforms, no-data-means-four-things, fitness-api-approval-gates, wearable-api-user-side-cost, free-fitness-apis-are-expensive, fitness-api-talk-to-sales, fitness-api-integration-order, react-native-health-stale, google-fit-timeline, confirmed-vs-reported, how-we-verify, building-the-healthkit-dataset

    the site holds datasets nobody else has (240 HealthKit identifiers, a 24-product directory, a 10-metric verified matrix, an SDK release tracker, 13 graded ecosystem changes) and had never published a finding from any of them

    Every post is anchored on a number computed from the site's own data and checked against a generated FACTS.md; a verifier rejects any numeral not in it. Blog also gained md mirrors, answers.json records, llms-full entries, FAQPage + TechArticle + speakable, and placement on 37 reference pages.

  • expand/build

    weight-loss-app,meal-planning-app,sleep-tracking-app,recovery-app,meditation-app,cycle-tracking-app,step-challenge-app,senior-fitness-app

    the /build cluster already was the B2C app-category cluster but covered ten types; weight loss, sleep, recovery, meditation, cycle tracking, meal planning, step challenges and senior fitness were uncovered search intent with distinct API stacks

    Each carries an AppStack block joined from the generated HealthKit dataset + API directory. No unsourced numbers: directional market claims carry the (reported, verify) hedge. cycle-tracking makes no contraception/fertility/accuracy claim and senior-fitness no frailty or fall-risk claim; both route regulatory questions to /compliance.

2026-08

  • cluster/accessibility

    12 spokes + hub

    gap analysis: no developer-grade fitness accessibility content exists; Apple + Google a11y docs reachable while nutrition/file-format/framework sources are not

    Cluster 21. Cites no WCAG (w3.org unreachable) and makes no legal claims by design.

  • section/datasets,/badges,/embed,/compare-apis,/s

    Open-data program (4 CC BY datasets + DataCatalog), embeddable widgets and badge, compiled cluster downloads, shareable picker results with a dynamic OG card, and the side-by-side API comparison tool.

  • section/alerts,/digest

    Change alerts (watch products, filtered sends) and the monthly digest archive generated from the changes tracker plus page review dates.

  • section/apis

    API directory: 24 product entity pages derived from the provenance-tracked cost model, with computed coverage and change lists.

  • cluster/watch-apps

    watchos-workout-app-anatomy,healthkit-on-apple-watch,apple-watch-background-execution,workoutkit-scheduled-workouts,mirroring-workouts-to-iphone,wear-os-app-anatomy,wear-os-exercise-tracking,wear-os-tiles,wear-os-phone-sync,watch-platform-differences,watch-app-battery,testing-watch-apps

    source-availability research: only Apple and Google developer docs are reachable from this environment, which ruled out nutrition (USDA/OpenFoodFacts), workout file formats (GPX/Garmin FIT) and gym platforms (Mindbody); monetization failed our own cluster boundary rule; watch-app development is fitness-specific, in demand, and fully verifiable

    Cluster 20, 12 spokes + hub. Primary sources fetched this session: HKWorkoutSession, HKLiveWorkoutBuilder, WKExtendedRuntimeSession, WorkoutKit, WidgetKit, Wear OS Health Services, Tiles, Data Layer, standalone-app rules, Glance. Boundary defined against /devices (watch as data source) and /engagement (re-engagement surfaces). No battery/performance/accuracy numbers anywhere, enforced by verifier over entries + rendered prose (0 hits). Bodies by 3 Opus writers; main session audited links, version strings against the fact sheet, quoted-fact survival, review-outcome claims, and FAQ collisions. Also added: empty clusters now publish nothing (hub 404s, omitted from sitemap/nav/homepage).

  • cluster/engagement

    push-notifications-fitness-app,live-activities-workout-tracking,widgets-and-complications,wear-os-ongoing-activity,engagement-sdks-compared,streaks-and-habit-loops,leaderboards-and-challenges,social-features-fitness-app,gamification-in-fitness-apps,camera-coaching-engagement,measuring-retention-fitness-app,ab-testing-engagement-features,engagement-metrics-that-matter,notification-fatigue-and-optout

    user request: which SDKs drive engagement, how to use them, examples; no cluster covered retention, and fitness apps have engagement surfaces (long-running workouts, glanceable progress) most apps do not

    Cluster 19, 14 spokes + hub. Verified primary sources fetched this session: Apple ActivityKit, WidgetKit, GameKit, UNAuthorizationOptions; Google POST_NOTIFICATIONS, Wear OS Ongoing Activity, Play Games leaderboards, Jetpack Glance. Third-party engagement vendor docs (OneSignal/Braze/Airship/CleverTap/Iterable/FCM) and Mindbody all proxy-blocked -> named nowhere and characterized nowhere; the SDK page says so explicitly. Cluster-wide ban on engagement/retention percentages, enforced by a custom verifier over the entries and re-checked against rendered prose (0 hits). camera-coaching-engagement is firstParty with body-markdown disclosure + competitor-wins. Bodies by 3 Opus writers from a fact sheet; main session audited links, bans, meta, FAQ collisions vs all site FAQs.

  • fix/

    responsive-audit

    measured audit: header nav pushed every page 233px wider than every phone viewport; /matrix overflowed via grid/flex min-width:auto on long type identifiers

    Mobile nav disclosure (closes on route change, Escape, outside tap; inline nav from md up), markdown tables get their own scroll container, global overflow-wrap for long API identifiers, min-w-0 on grid/flex items, touch targets >=24px in nav/footer/cards, viewport export with color-scheme + per-scheme theme-color. Verified 377 page/viewport combos across 13 viewports (320px-4K) x light/dark: zero overflow. Added scripts/responsive-audit.mjs + responsive.yml CI so it cannot regress.

  • geo/

    geo-overhaul-15

    llms.txt spec names <page>.md + rel=alternate/describedby as THE discovery mechanism (we used a non-standard /md path and no link relations); Claude-SearchBot and ~45 other citation-producing agents unlisted; no structured answer index; hubs had no CollectionPage

    15 programmatic GEO changes: spec-conventional .md addresses via rewrites (+hub/index mirrors, YAML front matter), rel=alternate+describedby in HTML and HTTP Link headers, robots.txt as a commented route with 58 named agents advertising every machine surface, llms.txt restructured to spec + md links, TechArticle+WebPage graph (lastReviewed on WebPage per its declared domain), glossary DefinedTerm entity graph (30 pages emit about), honest citation-vs-mentions split, answers.json structured index (214 records + FAQ deep links + first_party flags), changes.xml RSS, CollectionPage+ItemList on all 18 hubs, Organization knowsAbout+publishingPrinciples, sitemap lastmod on hubs/indexes, per-answer #faq-N anchors, 13 new GEO gates. Sources fetched this session: llms.txt spec (AnswerDotAI repo), schema.org vocabulary 29.1 (all 49 terms + domains verified), ai.robots.txt registry, Anthropic crawler docs via search, GEO survey. 14 live server checks + 1076 JSON-LD blocks parsed.

  • cluster/devices

    bluetooth-heart-rate-monitor,cycling-sensors-power-cadence,ftms-fitness-machine-service,treadmill-app-integration,indoor-bike-trainer-integration,rowing-machine-data,apple-watch-live-heart-rate,wear-os-health-services,ant-plus-vs-bluetooth,web-bluetooth-fitness,ios-ble-fitness-devices,testing-ble-fitness-devices

    market gap: no coherent developer coverage of live device connectivity (BLE HR, FTMS, watch-as-sensor); existing content is hobbyist repos and forum posts; zero overlap with our 17 clusters

    Cluster 18 Connected Devices: 12 spokes + hub. UUIDs verified against Bluetooth SIG assigned-numbers registry (official bitbucket); Core Bluetooth + HKWorkoutSession via Apple docs JSON API; Health Services via developer.android.com; Web Bluetooth matrix via caniuse dataset; ANT+ wind-down graded reported (official page proxy-blocked) + added to /changes tracker. Bodies by 2 Opus subagents from a session-verified fact sheet; main session audited both batches programmatically (UUID whitelist, link whitelist, hedging checks, cross-batch FAQ dedup) and spot-read prose. Wired: registry, seed 17, sitemap, search-index, llms surfaces, footer, homepage.

  • pillar/

    no-code-fitness-app

    user-requested flagship: no-code + APIs worked example centered on KinesteX; no owning page for the no-code fitness app query family

    Hand-built first-party flagship /no-code-fitness-app: HomeForm worked example, three integration patterns (product-in-an-embed, hosted handshake, key-in-header), KinesteX WebView/iframe embed + Terra Connect widget + Nutritionix natural-language + ExerciseDB + scheduled LLM recap; disclosure above fold, competitor-wins (Sency/QuickPose/MediaPipe), four honest no-code seams named; FlutterFlow REST docs fetched this session (official GitHub docs repo), all KinesteX/Terra/Nutritionix/ExerciseDB claims reused from adversarially-reviewed on-site pages; wired into sitemap, search-index, footer, /ai-fitness-app related

  • enhance/

    motion-system

    static site felt generic next to dev-tool competitors; animation is the standard trust cue for API products

    Zero-dependency motion system: ApiTerminal hero typewriter (3 scenes, SSR renders full scene), Reveal scroll-reveal (server HTML never hidden), StatCounter, ClusterHero packet-flow + hub pulse on every content page, nav underline, gradient pan, upcoming-deadline ping on /changes; prefers-reduced-motion global kill switch; 15 Playwright checks across normal/reduced-motion/no-JS contexts, run twice

  • revamp/

    homepage

    landing page predated the flagship, tools, report, cookbook — sold a site that no longer exists; conversion goal is the Decision Kit signup

    Full homepage rewrite: conversion hero with live-derived stats, start-where-you-are paths, 12 popular API/SDK tiles, 4-tool row, 17-cluster grid with counts, honest trust section with funding disclosure, report+dataset band, deadline band from changes.ts, Decision Kit newsletter block; Header nav → Fitness APIs/Picker/Cookbook/Changes; site.ts title/description/tagline repositioned

  • spoke/cookbook

    refresh-rotation,webhook-receiver,rate-limit-fetcher,day-boundary-rollup,rep-counter,backfill-checkpointer

    zero runnable code on a 230-page developer site

    New cluster 17: 6 dependency-free recipes, 72 node:test tests run by main session (72/72), byte-verbatim page/file check enforced, cookbook-ci.yml runs on every change; llms surfaces + registry + sitemap wired

  • backlogfunnel

    decision-kit

    signups had no incentive and no deliverable

    public/kit bundle (2 new checklists + scorecard + dataset, CC BY) unlocked on signup success screen; works without Resend

  • spokehub

    changes

    the subscribe promise had no public surface; recurring-freshness GEO signal

    Changes & Deadlines tracker seeded with 12 corpus-verified events + 3 watch items; routine appends via DAILY-CONTENT 2d

  • spokewave20-batch

    menstrual-cycle-api,blood-glucose-api,blood-pressure-api,respiratory-rate-api,strava-api-401-unauthorized,healthkit-background-delivery-not-working,polar-api,what-is-rpe,apple-watch-vs-garmin,rook-vs-spike,usda-fooddata-central-vs-open-food-facts,fitness-api-free-tiers-compared,webhooks-vs-polling-for-fitness-data,what-are-oauth-scopes,structured-output-for-workout-plans,caching-fitness-api-responses

    doubling program day 1 (ops/EXPANSION-MAP.md tier 1)

    16 pages, 8 Opus writers, every page fact-verified in main session; global FAQ check 0 collisions across 1001 keys; gates green first run

  • spoke/guides

    evaluate-motion-sdks

    no evaluation protocol exists in the category; funnel play, disclosed

    Bake-off protocol + scorecard CSV; firstParty banner; scored criteria exclude anything shaped like our product; Apple claims verified against live docs this session

  • spokehub

    state-of-fitness-apis-2026

    no citable original research exists in the niche; LLM-citation play

    Annual access-structure report, all numbers computed from dataset (5/5 enumeration diffs exact), CC BY 4.0 JSON+CSV, Dataset JSON-LD, disclosure aside up top

  • spokehub

    fitbit-api-shutdown

    migrate/fitbit-web-api-to-google-health at pos 8 pre-spike; reported ~Sep 2026 deadline

    Event hub, on-site synthesis only, confirmed-vs-reported table, all dates hedged; 8/8 claim traces + 4/4 link checks passed

  • spokehub

    ai-fitness-app

    'ai workout app development'/'build an ai gym app' theme ~40i at pos 40-90, no owning page

    Flagship decision-map hub, 3.9k words, 99 verified internal links, synthesis-only sourcing (7/7 spot-checks passed), 2 KinesteX mentions with verbatim disclosure

  • backlogtool

    cost-planner

    /pricing cluster = highest CTR on site

    Cost-structure planner, zero dollar figures by design, every field provenance-traced to published pages

  • spoke/compare

    apple-watch-vs-whoop

    aggregator/wearable H2H = best CTR pattern; backlog top comparison

    Apple side live-verified; WHOOP side strictly reuses site-verified facts

  • spoke/fix

    healthkit-authorization-denied

    backlog: denied-vs-empty opacity

    All Apple claims fetched this session from developer.apple.com JSON docs; limited-authorization + guest-mode edge cases

  • spoke/fix

    fitbit-error-code-401

    'fitbit error code 401' family 330i pos~9 CTR 0%

    Exact-error-string page; facts reused from integrate/fitbit-api + fix/401 only; generic 401 spoke retitled provider-neutral to stop cannibalization

  • meta-fix/fix

    (pillar)

    'fitbit error code 401' 330i pos~9 CTR 0% on /fix

    Pillar desc now answers the exact query; added unique pillar FAQ; GSC snapshot refreshed 2026-07-06..2026-08-02

  • spoke/compare+/alternatives

    kinestex-vs-sency,kinestex-vs-quickpose,kinestex-vs-mediapipe,kinestex-alternatives

    funnel: picker had zero KinesteX routing

    Interactive: first-party vs. cluster, disclosed + adversarially reviewed; firstParty plumbing + FIRSTPARTY qa gate

  • spoke/fix

    oura-personal-access-token-deprecated

    verbatim PAT-deprecation query 9i pos8

    Interactive: exact-error-string pattern

  • spoke/motion

    mediapipe-vs-movenet

    query 'movenet vs mediapipe' pos~7

    Interactive: 3 pose-model pages (also mediapipe-pose-landmarker-models, apple-vision-body-pose)

  • spokeinteractive

    glossary

    backlog

    Routine died mid-write; interactive session completed the 32-term glossary + DefinedTermSet