# YouTube API

Read public YouTube data through 29 typed endpoints with the same key, caching, and usage tracking as every other platform.

Status: Available in Test and Live environments. Last reviewed October 26, 2026.
Example: GET https://api.openhandle.dev/v1/youtube/profiles/@{handle}
Every call is one request at the same price. All endpoints accept the freshness parameter.

## Example: GET /v1/youtube/profiles/{identifier}

The real answer to this request with a free Test key. Test keys read a synthetic dataset, so your first call returns the same answer. Only the capture time and the signed media links differ.

```bash
curl "https://api.openhandle.dev/v1/youtube/profiles/@synthetic_youtube" \
  -H "Authorization: Bearer $OPENHANDLE_TEST_KEY"
```

```json
{
  "platform": "youtube",
  "resource": "profile",
  "capturedAt": "2026-10-26T14:19:24.23027Z",
  "source": "live",
  "data": {
    "id": "UCsyntheticyoutube000001",
    "handle": "synthetic_youtube",
    "displayName": "Synthetic YouTube",
    "bio": "A fictional public YouTube channel for deterministic API testing. Business: synthetic [at] example.openhandle.dev",
    "extracted": {
      "emails": [
        "synthetic@example.openhandle.dev"
      ],
      "phones": [],
      "links": [],
      "handles": []
    },
    "url": "https://www.youtube.com/@synthetic_youtube",
    "country": "Netherlands",
    "joinedAt": "2014-03-02",
    "keywords": [
      "synthetic",
      "testing"
    ],
    "links": [
      {
        "title": "Website",
        "url": "https://example.openhandle.dev"
      }
    ],
    "avatar": {
      "url": "https://media.openhandle.dev/A9AZ9IF6ex7wg45xTXbWI-82l4PKXWp1ABRX3mavBJ_qSFD_L7h4WDjaSgLG5tTxfvoD7sr86cCCVlsupO31UHgH6v8SujLI2VLda1cxOmLXPCEgibDxGE4GQB4anwTAfabJ2-OYdSrQ9-nDo9ssasBGYwi7XjIhxO4j89c",
      "width": 176,
      "height": 176,
      "renditions": null
    },
    "banner": {
      "url": "https://media.openhandle.dev/A64NvHy5j3VoENGeO72Hs1oCx-9_NcnBq33BjfT04KK6Bpv3fh_MhtZf2XP1_Qp_E2gTP9FrPYyaHk-WE5BStrP3VbyjtBuaYiBn7agdeYg83_yhdtwnZoSePycZvBldg2kVTCy5wsuKZBJY-M1S_1vreYmklNFFdwKuF1I",
      "width": 2560,
      "height": 424,
      "renditions": null
    },
    "isFamilySafe": true,
    "hasBusinessEmail": true,
    "metrics": {
      "subscribers": 1280000,
      "videos": 12,
      "views": 98765432,
      "isApproximate": false
    }
  }
}
```

## Endpoints (29 operations)

| Operation | Endpoint |
|---|---|
| Get a profile | GET /v1/youtube/profiles/{identifier} |
| List profile videos | GET /v1/youtube/profiles/{identifier}/videos |
| List profile Shorts | GET /v1/youtube/profiles/{identifier}/shorts |
| List profile livestreams | GET /v1/youtube/profiles/{identifier}/livestreams |
| List profile playlists | GET /v1/youtube/profiles/{identifier}/playlists |
| List profile community posts | GET /v1/youtube/profiles/{identifier}/community-posts |
| Search profile videos | GET /v1/youtube/profiles/{identifier}/search |
| List profile products | GET /v1/youtube/profiles/{identifier}/products |
| Get a post | GET /v1/youtube/posts/{identifier} |
| List post comments | GET /v1/youtube/posts/{identifier}/comments |
| List comment replies | GET /v1/youtube/posts/{identifier}/comments/{comment_id}/replies |
| Get a transcript | GET /v1/youtube/posts/{identifier}/transcript |
| Get post files | GET /v1/youtube/posts/{identifier}/files |
| Get post storyboard | GET /v1/youtube/posts/{identifier}/storyboard |
| Get post frame | GET /v1/youtube/posts/{identifier}/frame |
| List related posts | GET /v1/youtube/posts/{identifier}/related |
| List posts using the same sound | GET /v1/youtube/posts/{identifier}/sound-posts |
| Get a community post | GET /v1/youtube/community-posts/{identifier} |
| List community post comments | GET /v1/youtube/community-posts/{identifier}/comments |
| List playlist posts | GET /v1/youtube/playlists/{identifier}/posts |
| List hashtag posts | GET /v1/youtube/hashtags/{identifier}/posts |
| Search posts | GET /v1/youtube/search/posts |
| Search profiles | GET /v1/youtube/search/profiles |
| Search playlists | GET /v1/youtube/search/playlists |
| Search suggestions | GET /v1/youtube/search/suggestions |
| List trending posts | GET /v1/youtube/trending/posts |
| List top music videos | GET /v1/youtube/charts/videos |
| List top songs | GET /v1/youtube/charts/tracks |
| List top artists | GET /v1/youtube/charts/artists |

Lists carry rounded counts and estimated days. The single post endpoint returns exact values.

Field reference: https://openhandle.dev/docs/platforms/youtube.md (generated from the API, the source of truth for fields and types).

## Limitations

- Public content only.
- Lists show the rounded counts and relative dates YouTube shows. The single video endpoint returns exact values.
- YouTube rounds subscriber counts everywhere.

## FAQ

### Do I need a YouTube Data API key or quota?

No. Your application uses an Openhandle API key. There is no daily quota to manage.

### Can I get the transcript of a video?

Yes. The transcript endpoint returns timed caption text in any caption language the video offers.

### Why are some counts marked approximate?

YouTube shows labels like "152M views" in lists. Openhandle keeps that number and sets isApproximate to true. Read the video for the exact count.

Docs: https://openhandle.dev/docs/platforms/youtube · Pricing: https://openhandle.dev/pricing.md
