Back to Skills
    šŸ¦ž

    youtube-channels

    Work with YouTube channels — resolve handles to IDs

    By @therohitdas
    View on GitHub
    SKILL.md
    ---
    name: youtube-channels
    description: Work with YouTube channels — resolve handles to IDs, browse uploads, get latest videos, search within channels. Use when the user asks about a specific channel, wants to see recent uploads, or says "what has X posted lately", "latest from MKBHD", "show me their channel", "list channel videos", "browse channel uploads".
    homepage: https://transcriptapi.com
    metadata:
      {
        "moltbot":
          {
            "emoji": "šŸ“”",
            "requires": { "env": ["TRANSCRIPT_API_KEY"] },
            "primaryEnv": "TRANSCRIPT_API_KEY",
          },
      }
    ---
    
    # YouTube Channels
    
    YouTube channel tools via [TranscriptAPI.com](https://transcriptapi.com).
    
    ## Setup
    
    If `$TRANSCRIPT_API_KEY` is not set, help the user create an account (100 free credits, no card):
    
    **Step 1 — Register:** Ask user for their email, generate a secure password.
    
    ```bash
    node ./scripts/tapi-auth.js register --email USER_EMAIL --password SECURE_PASS --json
    ```
    
    → OTP sent to email. Ask user: _"Check your email for a 6-digit verification code."_
    āš ļø **SAVE THE PASSWORD** — you need it again in Step 2!
    
    **Step 2 — Verify:** Once user provides the OTP (use SAME password from Step 1):
    
    ```bash
    node ./scripts/tapi-auth.js verify --email USER_EMAIL --password SECURE_PASS --otp CODE --json
    ```
    
    → Returns `api_key` (starts with `sk_`).
    
    **Step 3 — Save:** Store the key (auto-configures agent + shell):
    
    ```bash
    node ./scripts/tapi-auth.js save-key --key API_KEY --json
    ```
    
    → Ready to use. Agent runtime picks up the key automatically.
    
    Manual option: [transcriptapi.com/signup](https://transcriptapi.com/signup) → Dashboard → API Keys.
    
    ## GET /api/v2/youtube/channel/resolve — FREE
    
    Convert @handle, URL, or UC... ID to canonical channel ID.
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@mkbhd" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    | Param   | Required | Validation                              |
    | ------- | -------- | --------------------------------------- |
    | `input` | yes      | 1-200 chars — @handle, URL, or UC... ID |
    
    **Response:**
    
    ```json
    { "channel_id": "UCBcRF18a7Qf58cCRy5xuWwQ", "resolved_from": "@mkbhd" }
    ```
    
    If input is already `UC[a-zA-Z0-9_-]{22}`, returns immediately.
    
    ## GET /api/v2/youtube/channel/latest — FREE
    
    Latest 15 videos via RSS with exact stats.
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel_id=UC_CHANNEL_ID" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    | Param        | Required | Validation                               |
    | ------------ | -------- | ---------------------------------------- |
    | `channel_id` | yes      | `^UC[a-zA-Z0-9_-]{22}
    
      
        
        
        
        OpenClaw Resources Directory – Skills, Tools, Plugins & Guides | The Claw Guy
        
        
        
        
        
        
        
        
    
        
        
        
        
    
        
        
        
        
        
      
      
    
    
      
         (24 chars total) |
    
    **Response:**
    
    ```json
    {
      "channel": {
        "channelId": "UCBcRF18a7Qf58cCRy5xuWwQ",
        "title": "MKBHD",
        "author": "MKBHD",
        "url": "https://www.youtube.com/channel/UCBcRF18a7Qf58cCRy5xuWwQ",
        "published": "2008-03-21T00:00:00Z"
      },
      "results": [
        {
          "videoId": "abc123xyz00",
          "title": "Latest Video Title",
          "channelId": "UCBcRF18a7Qf58cCRy5xuWwQ",
          "author": "MKBHD",
          "published": "2026-01-30T16:00:00Z",
          "updated": "2026-01-31T02:00:00Z",
          "link": "https://www.youtube.com/watch?v=abc123xyz00",
          "description": "Full video description...",
          "thumbnail": { "url": "https://i1.ytimg.com/vi/.../hqdefault.jpg" },
          "viewCount": "2287630",
          "starRating": {
            "average": "4.92",
            "count": "15000",
            "min": "1",
            "max": "5"
          }
        }
      ],
      "result_count": 15
    }
    ```
    
    Great for monitoring channels — free and gives exact view counts + ISO timestamps.
    
    ## GET /api/v2/youtube/channel/videos — 1 credit/page
    
    Paginated list of ALL channel uploads (100 per page).
    
    ```bash
    # First page
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel_id=UC_CHANNEL_ID" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    
    # Next pages
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    | Param          | Required    | Validation                           |
    | -------------- | ----------- | ------------------------------------ |
    | `channel_id`   | conditional | `^UC[a-zA-Z0-9_-]{22}
    
      
        
        
        
        OpenClaw Resources Directory – Skills, Tools, Plugins & Guides | The Claw Guy
        
        
        
        
        
        
        
        
    
        
        
        
        
    
        
        
        
        
        
      
      
    
    
      
         (first page) |
    | `continuation` | conditional | non-empty (next pages)               |
    
    Provide exactly one of `channel_id` or `continuation`, not both.
    
    **Response:**
    
    ```json
    {
      "results": [{
        "videoId": "abc123xyz00",
        "title": "Video Title",
        "channelId": "UCBcRF18a7Qf58cCRy5xuWwQ",
        "channelTitle": "MKBHD",
        "channelHandle": "@mkbhd",
        "lengthText": "15:22",
        "viewCountText": "3.2M views",
        "thumbnails": [...],
        "index": "0"
      }],
      "playlist_info": {"title": "Uploads from MKBHD", "numVideos": "1893", "ownerName": "MKBHD"},
      "continuation_token": "4qmFsgKlARIYVVV1...",
      "has_more": true
    }
    ```
    
    Keep calling with `continuation` until `has_more: false`.
    
    ## GET /api/v2/youtube/channel/search — 1 credit
    
    Search within a specific channel.
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
    ?channel_id=UC_CHANNEL_ID&q=iphone+review&limit=30" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    | Param        | Required | Validation              |
    | ------------ | -------- | ----------------------- |
    | `channel_id` | yes      | `^UC[a-zA-Z0-9_-]{22}
    
      
        
        
        
        OpenClaw Resources Directory – Skills, Tools, Plugins & Guides | The Claw Guy
        
        
        
        
        
        
        
        
    
        
        
        
        
    
        
        
        
        
        
      
      
    
    
      
         |
    | `q`          | yes      | 1-200 chars             |
    | `limit`      | no       | 1-50 (default 30)       |
    
    ## Typical workflow
    
    ```bash
    # 1. Resolve handle to ID (free)
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@mkbhd" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    
    # 2. Check latest uploads (free)
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel_id=UC_CHANNEL_ID" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    
    # 3. Get transcript of recent video
    curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
    ?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    ## Errors
    
    | Code | Action                                                              |
    | ---- | ------------------------------------------------------------------- |
    | 400  | Invalid param combination (both or neither channel_id/continuation) |
    | 402  | No credits — transcriptapi.com/billing                              |
    | 404  | Channel not found                                                   |
    | 408  | Timeout — retry once                                                |
    | 422  | Invalid channel_id format                                           |
    
    Free tier: 100 credits, 300 req/min. Free endpoints (resolve, latest) require auth but don't consume credits.
    (24 chars total) |\n\n**Response:**\n\n```json\n{\n \"channel\": {\n \"channelId\": \"UCBcRF18a7Qf58cCRy5xuWwQ\",\n \"title\": \"MKBHD\",\n \"author\": \"MKBHD\",\n \"url\": \"https://www.youtube.com/channel/UCBcRF18a7Qf58cCRy5xuWwQ\",\n \"published\": \"2008-03-21T00:00:00Z\"\n },\n \"results\": [\n {\n \"videoId\": \"abc123xyz00\",\n \"title\": \"Latest Video Title\",\n \"channelId\": \"UCBcRF18a7Qf58cCRy5xuWwQ\",\n \"author\": \"MKBHD\",\n \"published\": \"2026-01-30T16:00:00Z\",\n \"updated\": \"2026-01-31T02:00:00Z\",\n \"link\": \"https://www.youtube.com/watch?v=abc123xyz00\",\n \"description\": \"Full video description...\",\n \"thumbnail\": { \"url\": \"https://i1.ytimg.com/vi/.../hqdefault.jpg\" },\n \"viewCount\": \"2287630\",\n \"starRating\": {\n \"average\": \"4.92\",\n \"count\": \"15000\",\n \"min\": \"1\",\n \"max\": \"5\"\n }\n }\n ],\n \"result_count\": 15\n}\n```\n\nGreat for monitoring channels — free and gives exact view counts + ISO timestamps.\n\n## GET /api/v2/youtube/channel/videos — 1 credit/page\n\nPaginated list of ALL channel uploads (100 per page).\n\n```bash\n# First page\ncurl -s \"https://transcriptapi.com/api/v2/youtube/channel/videos?channel_id=UC_CHANNEL_ID\" \\\n -H \"Authorization: Bearer $TRANSCRIPT_API_KEY\"\n\n# Next pages\ncurl -s \"https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN\" \\\n -H \"Authorization: Bearer $TRANSCRIPT_API_KEY\"\n```\n\n| Param | Required | Validation |\n| -------------- | ----------- | ------------------------------------ |\n| `channel_id` | conditional | `^UC[a-zA-Z0-9_-]{22} OpenClaw Resources Directory – Skills, Tools, Plugins & Guides | The Claw Guy (first page) |\n| `continuation` | conditional | non-empty (next pages) |\n\nProvide exactly one of `channel_id` or `continuation`, not both.\n\n**Response:**\n\n```json\n{\n \"results\": [{\n \"videoId\": \"abc123xyz00\",\n \"title\": \"Video Title\",\n \"channelId\": \"UCBcRF18a7Qf58cCRy5xuWwQ\",\n \"channelTitle\": \"MKBHD\",\n \"channelHandle\": \"@mkbhd\",\n \"lengthText\": \"15:22\",\n \"viewCountText\": \"3.2M views\",\n \"thumbnails\": [...],\n \"index\": \"0\"\n }],\n \"playlist_info\": {\"title\": \"Uploads from MKBHD\", \"numVideos\": \"1893\", \"ownerName\": \"MKBHD\"},\n \"continuation_token\": \"4qmFsgKlARIYVVV1...\",\n \"has_more\": true\n}\n```\n\nKeep calling with `continuation` until `has_more: false`.\n\n## GET /api/v2/youtube/channel/search — 1 credit\n\nSearch within a specific channel.\n\n```bash\ncurl -s \"https://transcriptapi.com/api/v2/youtube/channel/search\\\n?channel_id=UC_CHANNEL_ID&q=iphone+review&limit=30\" \\\n -H \"Authorization: Bearer $TRANSCRIPT_API_KEY\"\n```\n\n| Param | Required | Validation |\n| ------------ | -------- | ----------------------- |\n| `channel_id` | yes | `^UC[a-zA-Z0-9_-]{22} OpenClaw Resources Directory – Skills, Tools, Plugins & Guides | The Claw Guy |\n| `q` | yes | 1-200 chars |\n| `limit` | no | 1-50 (default 30) |\n\n## Typical workflow\n\n```bash\n# 1. Resolve handle to ID (free)\ncurl -s \"https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@mkbhd\" \\\n -H \"Authorization: Bearer $TRANSCRIPT_API_KEY\"\n\n# 2. Check latest uploads (free)\ncurl -s \"https://transcriptapi.com/api/v2/youtube/channel/latest?channel_id=UC_CHANNEL_ID\" \\\n -H \"Authorization: Bearer $TRANSCRIPT_API_KEY\"\n\n# 3. Get transcript of recent video\ncurl -s \"https://transcriptapi.com/api/v2/youtube/transcript\\\n?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true\" \\\n -H \"Authorization: Bearer $TRANSCRIPT_API_KEY\"\n```\n\n## Errors\n\n| Code | Action |\n| ---- | ------------------------------------------------------------------- |\n| 400 | Invalid param combination (both or neither channel_id/continuation) |\n| 402 | No credits — transcriptapi.com/billing |\n| 404 | Channel not found |\n| 408 | Timeout — retry once |\n| 422 | Invalid channel_id format |\n\nFree tier: 100 credits, 300 req/min. Free endpoints (resolve, latest) require auth but don't consume credits.","Plugin_Install_Column":"","Plugin_Config_Column":"","Plugin_Readme_Column":""},"similar":[{"slug":"catholic-grounding-p26e7i","category":"General","URL":"https://openclawdir.com/skills/catholic-grounding-p26e7i","Type":"Skill","Title":"catholic-grounding","Description":"Help answer questions about Catholicism accurately","GitHub_Link":"https://github.com/trevortomesh"},{"slug":"budget-variance-analyzer-mhjee5","category":"General","URL":"https://openclawdir.com/skills/budget-variance-analyzer-mhjee5","Type":"Skill","Title":"budget-variance-analyzer","Description":"Analyze budget vs actual","GitHub_Link":"https://github.com/datadrivenconstruction"},{"slug":"arbiter-ccv7p2","category":"General","URL":"https://openclawdir.com/skills/arbiter-ccv7p2","Type":"Skill","Title":"arbiter","Description":"Push decisions to Arbiter Zebu for async human review.","GitHub_Link":"https://github.com/5hanth"},{"slug":"agentskills-io-rbgb0x","category":"General","URL":"https://openclawdir.com/skills/agentskills-io-rbgb0x","Type":"Skill","Title":"agentskills-io","Description":"Create, validate, and publish Agent Skills following","GitHub_Link":"https://github.com/killerapp"}]}