# analytics.synced

One connected account's analytics sync cycle completed successfully.

### Payload notes

It is a trigger: no metrics and no cursor. On receipt, call `GET /v1/analytics/delta` with your own last `nextCursor` to read what changed across every account.

### When it fires

Per account, per successful sync cycle, roughly hourly. It does not fire for a failed or skipped cycle, an inactive or disconnected account, or a platform without analytics sync.

### Empty page

The feed is a materialized view, so an immediate read can return an empty `data` array. Re-poll with the same cursor. Advancing on an empty page can lose changes permanently.

### Use a dedicated endpoint

Volume is about one event per account per hour. The consecutive-failure count is shared by every event on an endpoint, so an outage here can disable it and silence events like `post.published`.




**Payload for `analytics.synced`:**

- **id** (required) `string`: Stable webhook event ID: the dedupe key, also sent as the X-Zernio-Event-Id header and identical on every retry and redelivery. It identifies the event only, never an account or other resource.
- **profiles**: `WebhookProfiles` - See schema definition
- **test** `boolean`: Always true when present: only a sample sent by POST /v1/webhooks/test with an event carries it. Real deliveries never do.
- **event** (required) `string`: No description - one of: analytics.synced
- **account** (required) `object`: 
  - **accountId** (required) `string`: The account's unique identifier (same as used in /v1/accounts/{accountId})
  - **profileId** (required) `string`: The profile this account belongs to
  - **platform** (required) `string`: No description (example: "youtube")
  - **username** (required) `string`: No description
- **sync** (required) `object`: Summary of the analytics sync cycle that completed.
  - **syncedAt** (required) `string` (date-time): When the cycle COMPLETED. Not a join key for the delta feed: the rows a
cycle produces carry a `syncedAt` stamped when the cycle STARTED, which
is measured at around one second earlier at the median and up to a
couple of minutes earlier in the tail. Correlate on `account.accountId`.

  - **postsUpdated** (required) `integer`: Post records created or modified by this cycle. Not the number of delta
feed rows the cycle produced, which the syncer does not report, so a
cycle with a non-zero `postsUpdated` can still yield an empty delta page.
 (example: 42)
- **timestamp** (required) `string` (date-time): UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued).