API Reference
Plain HTTP. No authentication. No API key. All responses are either an image or JSON. Rate limit is 10 requests per 30 seconds per IP.
Free to useNo auth required10 req/30s
Base URL
https://banner.ytGET
/api/banner/{channelId}Returns a banner or avatar image. Defaults to WebP at 2560x1440. If the channel has no banner, returns a placeholder.
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
| format | string | webp | Output format: webp, avif, jpeg, png |
| type | string | default | Preset crop: default, tv, desktop, tablet, mobile, avatar |
| width | number | preset | Custom output width in pixels |
| height | number | preset | Custom output height in pixels |
| quality | number | 80 | Compression quality 1-100 (for webp, avif, jpeg) |
Examples
URLs
/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA
/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?format=avif
/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=mobile&format=webp
/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=avatar
/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?width=800&height=200&quality=90Size presets
| type= | Output size | Notes |
|---|---|---|
| default | 2560x1440 | Full banner |
| tv | 2560x1440 | Full image, TV crop |
| desktop | 2560x423 | Desktop strip |
| tablet | 1855x423 | Tablet crop |
| mobile | 1546x423 | Safe zone |
| avatar | 500x500 | Channel profile picture |
GET
/api/channel/{identifier}Returns JSON channel metadata: title, subscriber count, view count, description, all banner URLs, and links.
Parameters
| Param | Type | Values |
|---|---|---|
| type | string | id (default), username, handle |
Examples
URLs
// by channel ID (default)
/api/channel/UCX6OQ3DkcsbYNE6H8uQQuVA
// by @handle
/api/channel/mrbeast?type=handle
// by username
/api/channel/mrbeast?type=usernameResponse
JSON
{
"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"title": "MrBeast",
"description": "SUBSCRIBE FOR A COOKIE",
"customUrl": "@MrBeast",
"publishedAt": "2012-02-19T23:29:16Z",
"country": "US",
"subscriberCount": "340000000",
"viewCount": "60000000000",
"videoCount": "800",
"bannerUrl": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA",
"avatarUrl": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=avatar",
"bannerUrls": {
"default": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA",
"tv": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=tv",
"desktop": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=desktop",
"tablet": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=tablet",
"mobile": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=mobile",
"avatar": "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=avatar"
},
"links": [
{ "title": "Instagram", "url": "https://www.instagram.com/mrbeast/" }
]
}GET
/api/searchSearch YouTube channels by name. Returns a list of matching channels.
Parameters
| Param | Required | Description |
|---|---|---|
| q | yes | Channel name to search for |
URLs
/api/search?q=MrBeast
/api/search?q=Linus+Tech+TipsResponse
JSON
{
"results": [
{
"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"title": "MrBeast",
"avatar": "https://yt3.googleusercontent.com/...",
"description": "SUBSCRIBE FOR A COOKIE"
}
]
}Code examples
HTML
HTML
<!-- Banner image -->
<img src="https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA" alt="Channel banner" />
<!-- Avatar -->
<img src="https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=avatar" />
<!-- AVIF mobile crop -->
<img src="https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA?type=mobile&format=avif" />JavaScript / fetch
JavaScript
// Fetch and display a banner
const img = document.createElement('img');
img.src = 'https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA';
document.body.appendChild(img);
// Get channel data
const res = await fetch('https://banner.yt/api/channel/UCX6OQ3DkcsbYNE6H8uQQuVA');
const channel = await res.json();
console.log(channel.title, channel.subscriberCount);Python
Python
import requests
channel_id = 'UCX6OQ3DkcsbYNE6H8uQQuVA'
# Download banner
r = requests.get(f'https://banner.yt/api/banner/{channel_id}')
with open('banner.webp', 'wb') as f:
f.write(r.content)
# Channel data
data = requests.get(f'https://banner.yt/api/channel/{channel_id}').json()
print(data['title'], data['subscriberCount'])curl
bash
# Download banner
curl -o banner.webp "https://banner.yt/api/banner/UCX6OQ3DkcsbYNE6H8uQQuVA"
# Channel data
curl "https://banner.yt/api/channel/UCX6OQ3DkcsbYNE6H8uQQuVA"
# Search
curl "https://banner.yt/api/search?q=MrBeast"Rate limits and caching
Rate limit: 10 requests per 30 seconds per IP. Returns HTTP 429 if exceeded.
Image cache: 24 hours. Cache-Control: public, max-age=86400
Channel data cache: 1 hour per channel ID.
Higher limits: Contact us at [email protected]