---
title: "Stream User Sync Status"
method: GET
path: "/api/v1/users/{user_id}/sync/stream"
tags: ["External: Sync Status"]
---

# Stream User Sync Status

`GET /api/v1/users/{user_id}/sync/stream`

Open a Server-Sent Events stream of sync status for a user.

The stream emits ``event: sync.status`` messages whose ``data``
payload is a JSON-encoded ``SyncStatusEvent``. Heartbeats are sent
every ~15 s as SSE comments (lines starting with ``:``) to keep the
connection alive across proxies.

Covers events from:

- REST pull syncs (e.g. Whoop, Oura, Polar, Suunto)
- Garmin webhook live + 30-day backfill
- Mobile SDK uploads (Apple HealthKit, Samsung Health, Google)
- Apple Health XML imports

The stream remains open until the client disconnects. ``EventSource``
in browsers reconnects automatically.

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `replay` integer — Replay last N events on connect.

## Headers

- `X-Open-Wearables-API-Key` string, nullable

## Response `200`

Server-Sent Events stream of sync status updates.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/openwearables/apis/open-wearables-api.md) · [All operations](https://skmtc.net/openwearables/apis/open-wearables-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openwearables/open-wearables-api/versions/37c1c527cd8f/schema)
