# Fitness API Shutdown Notice 2026 (announcement to end date, per graveyard entry)

<!-- Generated by scripts/build-datasets.mjs with fitness-api-shutdown-notice-2026.json and fitness-api-shutdown-notice-2026.csv. Do not edit by hand: the next `npm run datasets` rewrites it. -->

| | |
|---|---|
| Version | 2026.1 |
| Rows | 15 |
| Columns | 18 |
| Publisher | AIFitnessAPI (aifitnessapi.com) |
| License | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) |
| Files | [fitness-api-shutdown-notice-2026.json](https://aifitnessapi.com/datasets/fitness-api-shutdown-notice-2026.json), [fitness-api-shutdown-notice-2026.csv](https://aifitnessapi.com/datasets/fitness-api-shutdown-notice-2026.csv) |
| Generated from | `src/data/researchStudies.ts NOTICE_ROWS (generated by scripts/build-research.mjs from src/data/graveyard.ts, src/data/changes.ts and ops/research/shutdown-announcements.json, then by scripts/build-datasets.mjs)` |
| Sources read on | 2026-11-06 |

## License

CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/): reuse and redistribute, including commercially, with attribution to aifitnessapi.com.

## Source and method

- https://developers.google.com/health/about
- https://docs.tryterra.co/unified-api/user-authentication/implementation-terra-widget
- https://developer.android.com/health-and-fitness/health-connect/migration/fit
- https://developers.strava.com/docs/changelog/
- https://developer.samsung.com/health/android/overview.html
- https://cloud.ouraring.com/docs/
- https://cloud.ouraring.com/v2/static/json/openapi-1.43.json
- https://developer.whoop.com/docs/developing/v1-v2-migration/
- https://raw.githubusercontent.com/google-ai-edge/mediapipe/master/docs/solutions/pose.md
- https://raw.githubusercontent.com/tensorflow/tfjs-models/master/posenet/README.md
- https://web.archive.org/web/20181231164810/https://dev.moves-app.com/
- https://web.archive.org/web/20120107124413/http://googleblog.blogspot.com/2011/06/update-on-google-health-and-google.html

One row per entry of the Fitness API Graveyard (src/data/graveyard.ts). end, its precision and the end quote are the graveyard's, copied. announced is the day the vendor published the notice, only where a vendor page read on 2026-11-06 dates it (a changelog entry or a timestamped post), with the quote; changes.ts was searched too and its entries date the events themselves, not their announcement (changesEntries lists the tracked changes on the same day as the end). noticeDays is the whole days from announced to end, and is computed only when both are dates to the day. Every other row carries the exclusion that stops it and a note on what the pages read do say. No date is inferred from press coverage, a capture date or a sign-up cut-off.

## Fields

| Field | Description | JSON types | Null in |
|---|---|---|---|
| `id` | The graveyard entry's id (/graveyard#<id>) | string | 0 of 15 rows |
| `name` | What was shut down or deprecated | string | 0 of 15 rows |
| `vendor` | Who did it | string | 0 of 15 rows |
| `status` | dead, dying or deprecated, as the graveyard records it | string | 0 of 15 rows |
| `end` | The end date at the source's precision; null where the vendor gives none | null, string | 2 of 15 rows |
| `endPrecision` | day, month or year; null with no end date | null, string | 2 of 15 rows |
| `endLabel` | What happens on the end date, in the vendor's terms | string | 0 of 15 rows |
| `announced` | The day the vendor published the notice, where a page read dates it; null otherwise | null, string | 12 of 15 rows |
| `noticeDays` | Whole days from announced to end; null unless both are dates to the day | integer, null | 12 of 15 rows |
| `exclusion` | Why noticeDays is null; null when it is computed | null, string | 3 of 15 rows |
| `note` | What the pages read say instead of an announcement date | null, string | 3 of 15 rows |
| `how` | How the page read dates the announcement | null, string | 12 of 15 rows |
| `announcementUrl` | The page that dates the announcement | null, string | 12 of 15 rows |
| `announcementQuote` | Verbatim from that page | null, string | 12 of 15 rows |
| `endUrl` | The graveyard's source for the end | string | 0 of 15 rows |
| `endQuote` | The graveyard's quote for the end | string | 0 of 15 rows |
| `changesEntries` | Titles of changes-tracker entries on the same page and the same date as the end | null, string | 12 of 15 rows |
| `page` | This site's row | string | 0 of 15 rows |

A null means the source does not state the value or it could not be verified. It never means zero, and it is never a guess. In the CSV a null is an empty unquoted field.

## Update cadence

- `src/data/researchStudies.ts` is maintained by hand alongside the pages it feeds; this dataset is regenerated from it with `npm run datasets` in the change that edits it, so it moves when the site's pages move.
- The files are rebuilt by `npm run datasets` (scripts/build-datasets.mjs); a run with no source change writes byte-identical files. The edition stays 2026.1, and a new edition ships under a new file name rather than overwriting this one.

## Cite as

AIFitnessAPI, "Fitness API Shutdown Notice 2026 (announcement to end date, per graveyard entry)," version 2026.1, aifitnessapi.com, https://aifitnessapi.com/datasets/fitness-api-shutdown-notice-2026.json

```bibtex
@misc{aifitnessapi-fitness-api-shutdown-notice-2026,
  author = {{AIFitnessAPI}},
  title = {Fitness API Shutdown Notice 2026 (announcement to end date, per graveyard entry)},
  version = {2026.1},
  year = {2026},
  publisher = {aifitnessapi.com},
  url = {https://aifitnessapi.com/datasets/fitness-api-shutdown-notice-2026.json},
  note = {Dataset, CC BY 4.0}
}
```

Every dataset this site publishes: https://aifitnessapi.com/datasets
