feat(sync): let a client start the delta feed at the present

GET /api/sync/changes?start=now answers an empty page whose cursor sits at
serverNow in every domain, in the same opaque format the feed hands out.
A client that only needs what changes from now on, such as the Apple
Health write-back, pages forward from it instead of draining the whole
history first. start and cursor together are refused with 422.

Refs #1339
This commit is contained in:
Marc-André Bombeck committed 2026-11-04 21:24:12 +01:00
1 parent 59434cd463
commit a79fc4168a
9 files changed
+351 -5

No files matched your search

+13
View File
@@ -4323,6 +4323,19 @@ paths:
maxLength: 2048
description: Opaque multi-domain keyset cursor from the previous page. Treat as fully opaque — echo, never parse. Omit
for the initial sync.
- in: query
name: start
schema:
description: "`now` answers an empty page (every domain empty, `hasMore: false`) whose `cursor` sits at `serverNow` in
every domain, in the same opaque format as any other page. Paging forward from it yields only what changes
from then on, including `measurementMirror`, without walking the history first. Mutually exclusive with
`cursor` (422). A server without it ignores the parameter and starts from the oldest row."
type: string
const: now
description: "`now` answers an empty page (every domain empty, `hasMore: false`) whose `cursor` sits at `serverNow` in
every domain, in the same opaque format as any other page. Paging forward from it yields only what changes
from then on, including `measurementMirror`, without walking the history first. Mutually exclusive with
`cursor` (422). A server without it ignores the parameter and starts from the oldest row."
- in: query
name: limit
schema: