Skip to content
GitHubLog in
YouTube Channel Monitor API

YouTube Channel Monitor API

Creates a monitor that checks a YouTube channel on a schedule and reports each new video, by a signed webhook POST or through the events endpoint. tab chooses uploads, Shorts or live streams, interval_minutes sets how often the channel is checked, and transcripts set to true attaches each new video's transcript. The same endpoint watches TikTok and Instagram profiles.

Monitors & webhooks guide

Supported URLs

All URL formats
  • Handle@veritasium
  • Handle URLhttps://www.youtube.com/@veritasium
  • Channel IDUCHnyfMqiRRG1u-2MsSQLbXA
  • Channel ID URLhttps://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA
  • Custom channel URLhttps://www.youtube.com/c/veritasium
  • Legacy user URLhttps://www.youtube.com/user/veritasium

Body parameters

POST/api/v2/monitorsidempotent
curl https://transcriptfetch.com/api/v2/monitors \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target":"@lexfridman","webhook_url":"https://example.com/hooks/transcriptfetch","interval_minutes":60,"transcripts":true,"name":"Lex Fridman uploads"}'
Created
{
  "ok": true,
  "request_id": "req_…",
  "data": {
    "kind": "monitor",
    "id": "mon_m3k1x9qz4vb2p7",
    "type": "channel",
    "platform": "youtube",
    "target": "@lexfridman",
    "options": {
      "tab": "videos"
    },
    "name": "Lex Fridman uploads",
    "status": "active",
    "has_new": true,
    "last_event_id": "mev_m3k1xa0b7c8d9e",
    "interval_minutes": 60,
    "transcripts": true,
    "webhook_url": "https://example.com/hooks/transcriptfetch",
    "next_check_at": "2026-09-25T15:00:12.000Z",
    "last_checked_at": null,
    "last_error": null,
    "created_at": "2026-09-24T09:12:40.000Z",
    "updated_at": "2026-09-24T09:12:40.000Z",
    "webhook_secret": "whsec_…",
    "baseline_count": 30
  },
  "usage": {
    "credits_spent": 0,
    "balance": 250
  }
}

Every YouTube endpoint

Same call, other platforms:TikTok Profile Monitor APIInstagram Profile Monitor API

Frequently asked questions

How is this different from polling the channel endpoint with since_video_id?

Polling is a call you schedule and pay a credit for whenever something is new. A monitor runs the schedule for you, pushes each new video to your webhook or the events list, and can fetch the transcript on your behalf. Use polling for one script, a monitor for a product.

What does a monitor cost?

Every check costs 1 credit, the price of one listing page, whether or not it finds new videos, plus 1 credit per caption transcript when transcripts is true; AI Fallback Transcription is billed at its rate on delivery. Monitor and interval limits depend on the plan and are stated on the endpoint.

Can a monitor watch a channel's Shorts or live streams?

Yes. Create it with tab shorts or tab live. A creator who posts only Shorts has an empty Videos tab, so a monitor on their uploads never fires; watch their shorts instead. The tab is fixed once the monitor exists.

How do I verify a webhook came from TranscriptFetch?

Compute HMAC-SHA256 of the exact request bytes with the monitor's webhook_secret and compare it, in constant time, with the X-TranscriptFetch-Signature header (sha256= followed by the hex digest). X-TranscriptFetch-Delivery identifies the delivery across retries.

Why does a brand-new upload take a while to get a transcript?

YouTube's automatic captions usually appear some minutes after publishing. The monitor retries captions for a grace period before falling back to AI Fallback Transcription, because a caption transcript costs 1 credit where a long video through AI Fallback Transcription costs more.