Highlights
Garmin webhooks & historical sync
Garmin has been updated to work with the incoming webhook streaming architecture introduced in v0.4.1. Live sync now uses webhooks as the priority path, and there's a new historical sync option in the UI - backfill up to 365 days of data. Connection cards in the portal now show provider-specific historical limits and a history sync action. Thanks to @KaliszS for driving this one 🎉
Breaking change: Historical data no longer syncs automatically on provider connection. Users now trigger historical sync explicitly through the UI.
More: Webhook Handler
Health Scores API
New GET /users/{user_id}/health-scores endpoint by @czajkub. Supports filtering by category, provider, data source, and date range, plus pagination and timeseries metadata. There's also a bulk-create path for ingesting scores from providers. This lays the groundwork for surfacing composite health metrics in the app.
Cleaner API Reference
The Mintlify API docs got a major cleanup - endpoints are now tagged as External, Internal, or System, and the API Reference tab only shows the public-facing ones. No more scrolling past webhook receivers and debug routes to find the endpoints you actually need.
Redis memory leak fix
Celery's pidbox reply keys were accumulating in Redis indefinitely. Added TTL and expiration (300s) to control queues so Redis cleans them up automatically. If you've noticed Redis memory creeping up over time, this should take care of it.
What's Changed
Integrations
- feat: Garmin incoming webhooks & UI portal changes by @KaliszS in #764
- fix: handle lowercase pulseox webhook payloads by @saschabuehrle in #766
- fix(backend): skip push-only providers in sync_vendor_data task by @haoyu-haoyu in #774
- refactor(backend): remove Auto Health Export connector endpoint and all related logic by @bartmichalak in #779
- chore: add read:body_measurement scope to Whoop config in .env.example by @bartmichalak in #811
API & Backend
- feat: add health score model by @czajkub in #793
- feat(backend): add service and endpoint for health scores by @czajkub in #804
- refactor(backend): categorize API endpoints and curate docs API reference by @bartmichalak in #778
- fix: set TTL on Celery pidbox reply keys to prevent Redis memory leak by @bartmichalak in #559
- refactor(backend): sync data router by @KaliszS in #812
Docs
Frontend
- chore: bump the npm-minor-patch group in /frontend with 10 updates by @dependabot[bot] in #809
New Contributors
- @saschabuehrle made their first contribution in #766
- @haoyu-haoyu made their first contribution in #774
Full Changelog: 0.4.1...0.4.2