Skip to content

API referenceTrackers

List change reports

GET/v1/trackers/{id}/changes

This Tracker's Change Reports, newest first, readable after the Tracker is deleted. Each item is { id, tracker_id, run_id, cycle_key, triggers, changes, summary, created_at }. changes holds one key per tripped trigger, each with before/after numbers: followers { before, after, change, change_pct }; new_videos { since, count, videos }; outliers and velocity lists whose entries carry before (null for a video new to the Tracker) and after. Advertiser Trackers: new_ads { since, count, ads }; stopped_ads { count, ads } (an Ad that left Meta's library counts as stopped, with removed_from_library: true); variant_growth entries { before, after, added }; new_countries_or_placements entries { countries, placements } listing only what is new; every Ad entry carries id, library_id and its Ad Library url; truncated: true when the cycle stopped at its page cap with Ads left unread, incomplete: true when the library failed part-way through the read (the Run's result says so too). Hashtag Trackers: median_views { before, after, change, change_pct, sample_based: true }; new_top_videos { since, count, videos }, each video { id, url, views }. Sound Trackers: video_count { before, after, change, change_pct } (rises only); new_top_video { since, before, after }, each side { id, url, views }. Quiet cycles are absent by design: if a day produced no report, nothing tripped that day.

Price

Free.

Parameters

NameInTypeRequiredDefaultDescription
idpathstringRequired—Tracker id.
limitqueryintegermin 1; max 100Optional25Items per page.
cursorquerystringOptional—Opaque next_cursor from the previous page.

Responses

200 OK

{ items, next_cursor }.

object

  • itemsarray of objectrequired
    • idstringrequired
    • tracker_idstringrequired
    • run_idstringrequirednullable
    • cycle_keystringrequiredOne report per Tracker per cycle.
    • triggersarray of stringrequiredCreator: new_videos, followers, outlier, velocity. Advertiser: new_ads, stopped_ads, variant_growth, new_countries_or_placements.
    • changesanyThe before/after numbers behind the triggers.
    • summarystringrequirednullable
    • created_atstringrequired
  • next_cursorstringrequirednullablePass back as cursor. Null on the last page.

200 · `{ items, next_cursor }`.

{
  "items": [
    {
      "id": "chg_2ac910f4d8",
      "tracker_id": "trk_4b1e90c7aa",
      "run_id": "run_c07a41bb92",
      "cycle_key": "tiktok:creator:someone:2026-09-08",
      "triggers": [
        "new_videos",
        "outlier"
      ],
      "changes": {
        "new_videos": {
          "before": 61,
          "after": 62,
          "count": 1,
          "videos": [
            {
              "id": "7300000000000000000",
              "url": "https://www.tiktok.com/@someone/video/7300000000000000000",
              "posted_at": "2026-09-05T06:32:11.000Z",
              "views": 1284000
            }
          ]
        },
        "outliers": [
          {
            "id": "7300000000000000000",
            "url": "https://www.tiktok.com/@someone/video/7300000000000000000",
            "views": 1284000,
            "outlier": 4.21,
            "threshold": 3
          }
        ]
      },
      "summary": "1 new video, 1 outlier at 4.2x median",
      "created_at": "2026-09-08T04:00:11.402Z"
    }
  ],
  "next_cursor": null
}

400 Bad Request

invalid_request for a cursor that is not a next_cursor this API issued. Nothing is charged.

object

RFC 9457 problem document, served as application/problem+json. Branch on code, never on the prose.

  • typestringrequired
  • titlestringrequired
  • statusintegerrequired
  • codestringrequiredone of missing_authorization, invalid_key, key_revoked, invalid_token, organization_not_selected, organization_access_revoked, connection_revoked, forbidden, invalid_request, unsupported_platform, unsupported_kind, kind_deprecated, not_found, video_too_long, idempotency_conflict, run_not_ready, advertiser_ambiguous, insufficient_balance, rate_limit_exceeded, concurrency_limit_exceeded, tracker_limit_exceeded, webhook_limit_exceeded, webhook_rotation_in_progress, collection_limit_exceeded, collection_name_taken, collection_kind_mismatch, media_unavailable, vendor_error, source_unavailable, service_unavailable, internal_errorStable machine-readable code.
  • detailstring

400 · Example

{
  "type": "https://www.shortsintel.com/docs/reference/errors/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "code": "invalid_request",
  "detail": "`cursor` is not a cursor this API issued. Pass back the `next_cursor` from the previous page."
}

401 Unauthorized

missing_authorization, invalid_key, key_revoked or invalid_token.

object

RFC 9457 problem document, served as application/problem+json. Branch on code, never on the prose.

  • typestringrequired
  • titlestringrequired
  • statusintegerrequired
  • codestringrequiredone of missing_authorization, invalid_key, key_revoked, invalid_token, organization_not_selected, organization_access_revoked, connection_revoked, forbidden, invalid_request, unsupported_platform, unsupported_kind, kind_deprecated, not_found, video_too_long, idempotency_conflict, run_not_ready, advertiser_ambiguous, insufficient_balance, rate_limit_exceeded, concurrency_limit_exceeded, tracker_limit_exceeded, webhook_limit_exceeded, webhook_rotation_in_progress, collection_limit_exceeded, collection_name_taken, collection_kind_mismatch, media_unavailable, vendor_error, source_unavailable, service_unavailable, internal_errorStable machine-readable code.
  • detailstring

401 · Example

{
  "type": "https://www.shortsintel.com/docs/reference/errors/invalid_key",
  "title": "Invalid key",
  "status": 401,
  "code": "invalid_key",
  "detail": "That API key does not exist. Keys look like `sk_live_...` and are created in the console."
}

404 Not Found

not_found — including anything belonging to another Customer.

object

RFC 9457 problem document, served as application/problem+json. Branch on code, never on the prose.

  • typestringrequired
  • titlestringrequired
  • statusintegerrequired
  • codestringrequiredone of missing_authorization, invalid_key, key_revoked, invalid_token, organization_not_selected, organization_access_revoked, connection_revoked, forbidden, invalid_request, unsupported_platform, unsupported_kind, kind_deprecated, not_found, video_too_long, idempotency_conflict, run_not_ready, advertiser_ambiguous, insufficient_balance, rate_limit_exceeded, concurrency_limit_exceeded, tracker_limit_exceeded, webhook_limit_exceeded, webhook_rotation_in_progress, collection_limit_exceeded, collection_name_taken, collection_kind_mismatch, media_unavailable, vendor_error, source_unavailable, service_unavailable, internal_errorStable machine-readable code.
  • detailstring

404 · Example

{
  "type": "https://www.shortsintel.com/docs/reference/errors/not_found",
  "title": "Not found",
  "status": 404,
  "code": "not_found",
  "detail": "No such resource for this Customer."
}

Request samples

curl "https://www.shortsintel.com/v1/trackers/trk_4b1e90c7aa/changes?limit=25" \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
  • Pagination: Following next_cursor through a list.
  • Trackers: Standing watches on a creator or a Meta Advertiser: how a cycle runs, when it reports a change, and how to pause one.