for builders 🔌

Monitor YT API

Everything Monitor YT records about the channels you track, as JSON. Pipe your feed into dashboards, alerts, spreadsheets, or your own tools.

Getting started

The API is read-only and serves the same feed you see in the app: new uploads, title rewrites, thumbnail swaps, A/B tests, and channel-level moves across every channel you track. All requests go to https://monitoryt.com and return JSON.

You need a Monitor YT account with at least one tracked channel, and a personal API key.

Authentication

Generate your API key in Settings inside the app. Keys start with myt_ and are sent as a Bearer token:

Authorization: Bearer myt_your_api_key

Each account has one key. Regenerating it in Settings revokes the old key immediately, so rotate it if it ever leaks. Treat it like a password: it grants read access to your whole feed.

Fetch your feed

GET /api/public-feed

Returns your feed events, newest first, with cursor pagination.

Query parameters

Parameter Type Description
limit integer, optional Events per page. Defaults to 50, capped at 200.
cursor string, optional The nextCursor value from the previous page. Omit it for the first page.

Example request

curl -H "Authorization: Bearer myt_your_api_key" \
  "https://monitoryt.com/api/public-feed?limit=50"

Example response

{
  "events": [
    {
      "id": "665f21c09b1d8a4f30aa1234",
      "type": "video_published",
      "createdAt": 1783100000000,
      "channel": {
        "id": "665f21c09b1d8a4f30aa5678",
        "youtubeChannelId": "UCBJycsmduvYEL83R_U4JriQ",
        "title": "Example Channel",
        "thumbnailUrl": "https://yt3.ggpht.com/..."
      },
      "video": {
        "youtubeVideoId": "dQw4w9WgXcQ",
        "currentTitle": "Our biggest video yet",
        "currentThumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
        "publishedAt": 1783099000000,
        "isMembersOnly": false,
        "viewCount": 12345,
        "likeCount": 678,
        "commentCount": 90
      }
    }
  ],
  "nextCursor": "665f21c09b1d8a4f30aa1234"
}

Timestamps (createdAt, publishedAt) are Unix epoch milliseconds. To page through older events, pass nextCursor back as ?cursor=… and repeat until nextCursor is null.

Event types

Every event carries id, type, createdAt, and channel. Video events also carry a video object; the remaining fields depend on type:

Type Extra fields Meaning
video_published video (with stats) A new upload was discovered.
title_changed oldTitle, newTitle A video's title was rewritten.
thumbnail_changed oldThumbnailUrl, newThumbnailUrl A video's thumbnail was swapped.
title_ab_test titles A title is rotating between several variants.
title_ab_test_concluded titles, finalTitle The title rotation settled on a winner.
thumbnail_ab_test thumbnailUrls A thumbnail is rotating between several variants.
thumbnail_ab_test_concluded thumbnailUrls, finalThumbnailUrl The thumbnail rotation settled on a winner.
members_only_changed isMembersOnly A video switched between public and members-only.
subscriber_change oldSubscriberCount, newSubscriberCount The channel crossed a subscriber milestone.
channel_renamed oldChannelTitle, newChannelTitle The channel changed its display name.
channel_avatar_changed oldAvatarUrl, newAvatarUrl The channel changed its avatar.

Channels are polled on a rolling schedule (as often as every 15 minutes for fresh videos), so events land in the feed shortly after they happen on YouTube.

Rate limits and errors

The API allows 20 requests per minute per key. Responses use standard status codes:

Status Meaning
200 Success. Body is { events, nextCursor }.
400 Invalid query parameters. The body's details field says which.
401 Missing, malformed, or revoked API key.
429 Rate limit exceeded. Honor the Retry-After header before retrying.

Questions or need a higher limit? Get in touch.

not tracking anyone yet? 👀
Start tracking channels →

Add the channels in your niche and Monitor YT records every upload, title rewrite, thumbnail swap, and A/B test, ready for the app and the API.