> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.usegrade.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tracked media

> Incrementally sync tracked media with complete records, removals, and durable cursors.

## GET /sdk/v1/analytics/tracked-media/sync

Sync the agency analytics tracking workspace: accounts, standalone posts, and posts discovered from tracked accounts. Replace by `id`, which equals `trackedMediaId`.

Requires `X-Application-Id`, `X-Api-Key`, and `analytics:read`.
Follow the [shared syncing workflow](https://api-docs.usegrade.com/syncing/overview.md) for pagination, cursor
storage, retries and removals. Only `cursor` and `limit` are accepted.

```bash theme={null}
curl --get "$BASE_URL/sdk/v1/analytics/tracked-media/sync" \
  -H "X-Application-Id: $APP_ID" \
  -H "X-Api-Key: $API_KEY" \
  --data-urlencode "limit=100"
```

On subsequent requests, add `--data-urlencode "cursor=$SAVED_CURSOR"`.

## Record format

Each item in `data` is a complete replacement with these fields:

```json theme={null}
{
  "id": "TRACKED_123",
  "trackedMediaId": "TRACKED_123",
  "sourceTrackedMediaId": "TRACKED_ACCOUNT_123",
  "platform": "TIKTOK",
  "mediaUrl": "https://www.tiktok.com/@jordan/video/7350000000000000000",
  "postId": "7350000000000000000",
  "isAccount": false,
  "authorUsername": "jordan",
  "authorDisplayName": "Jordan",
  "title": "Launch day",
  "captionText": "Our new campaign",
  "hashtags": [
    "launch"
  ],
  "thumbnail": null,
  "uploadDate": "2026-10-25T10:00:00.000Z",
  "trackStartAt": "2026-10-25T00:00:00.000Z",
  "trackEndAt": "2027-10-25T00:00:00.000Z",
  "trackingTier": 1,
  "metricsCollectedAt": "2026-10-26T10:00:00.000Z",
  "views": "12500",
  "likes": "420",
  "comments": "38",
  "shares": "21",
  "bookmarks": "9"
}
```

Counters are the latest stored observation for an individual post, serialized
as **decimal integer strings** to preserve large values. Unavailable counters
are null, including platform-unsupported metrics and posts without observations.
`metricsCollectedAt` identifies that observation. Corrections and deletion of
observations also produce replacements.

Accounts have `isAccount: true` and null counters; their child posts carry
`sourceTrackedMediaId`. Sum child post counters locally if you need account
totals. Updates to a child emit that child's record. The feed does not duplicate
post totals onto an account row or apply date-range calculations.

This feed covers tracked workspace media only. [Campaign media](https://api-docs.usegrade.com/campaign-media/sync.md)
has its own feed. If you combine the two datasets, a social post may be present in
both; deduplicate by canonical platform/post identity before calculating totals.
Collections and combined analytics charts remain on the [analytics API](https://api-docs.usegrade.com/analytics.md).

Tracking-window boundaries are returned as stored dates. Merely crossing a
boundary does not delete a record. Metadata, metrics, source-account rebinding,
ownership changes and deletion produce replacements or removals. Routine scraper
bookkeeping does not create a sync update.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.