Files
changedetection.io/docs
dgtlmoonandClaude Opus 5 fbd9472218
Build and push containers / metadata (push) Canceled after 0s
Build and push containers / build-push-containers (push) Canceled after 0s
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Build distribution 📦 (push) Canceled after 0s
ChangeDetection.io App Test / lint-code (push) Canceled after 0s
ChangeDetection.io App Test / lint-translations (push) Canceled after 0s
ChangeDetection.io App Test / lint-template-i18n (push) Canceled after 0s
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Test the built package works basically. (push) Canceled after 0s
Publish Python 🐍distribution 📦 to PyPI and TestPyPI / Publish Python 🐍 distribution 📦 to PyPI (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-11 (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-12 (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-13 (push) Canceled after 0s
ChangeDetection.io App Test / test-application-3-14 (push) Canceled after 0s
fix(api): accept an existing tag UUID in the watch tag field, and deprecate it (#4361)
`tag` on POST /watch was documented as taking a tag UUID, but the value went to
add_tag(title): a UUID silently created a junk tag *titled* with that UUID and never
applied the tag the caller asked for. `tags` (UUIDs) was the only thing that worked.

- `tag=` now resolves an existing tag UUID to that tag, still falling back to title
  matching/creation for names. A UUID-shaped value matching nothing is skipped with a
  warning rather than becoming a group named after a UUID.
- Blank tokens ("One,,Two,") no longer store False in watch['tags'] - add_tag() returns
  False for an empty title and it was appended unguarded. Consumers tolerate it
  (get_all_tags_for_watch() dictfilt()s over known tags) but it is not valid data.
- add_tag()'s title search is extracted to tag_uuid_for_title(), so existence can be
  tested without creating as a side effect. add_tag()'s contract is unchanged.
- api-spec: `tag` is marked `deprecated: true` (so Redoc renders the badge) and states
  plainly that it takes names, not UUIDs. `tags` now says what it really does - applied
  verbatim, never creates, unknown UUIDs stored as dangling refs. Rendered docs rebuilt.

Every claim in the new field docs is asserted in test_api_tags.py against the real API.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 16:46:27 +02:00
..
2025-08-24 00:48:17 +02:00
2025-08-24 00:48:17 +02:00

Directory of docs

Regenerating API Documentation

To regenerate the modern API documentation, run from the docs/ directory:

# Install dependencies (first time only)
npm install

# Generate the HTML documentation from OpenAPI spec using Redoc
npm run build-docs

OpenAPI Specification

The OpenAPI specification (docs/api-spec.yaml) is the source of truth for API documentation. This industry-standard format enables:

  • Interactive documentation - Test endpoints directly in the browser
  • SDK generation - Auto-generate client libraries for any programming language
  • API validation - Ensure code matches documentation
  • Integration tools - Import into Postman, Insomnia, API gateways, etc.

Important: When adding or modifying API endpoints, you must update docs/api-spec.yaml to keep documentation in sync:

  1. Edit docs/api-spec.yaml with new endpoints, parameters, or response schemas
  2. Run npm run build-docs to regenerate the HTML documentation
  3. Commit both the YAML spec and generated HTML files