YouTube Public API
Documentation for public YouTube intelligence discovery, channels, categories, item metadata and concrete source JSON access.
Public-source intelligence organized for discovery
YouTube Public lets an integration first discover topics, channels and materials without paying for source content.
A concrete source JSON is requested only after the integration has selected a specific item_id.
Available public categories
The following categories are present in the public data map. The documentation intentionally avoids publishing material totals because the dataset grows continuously.
| Category | What it covers |
|---|---|
intel | OSINT, security and strategic intelligence |
geopolitic | Geopolitics and international affairs |
politics | Politics, policy and institutions |
society | Society and public-interest developments |
newtech | AI, technology and emerging systems |
startup | Startups, venture and entrepreneurship |
energy | Energy markets, infrastructure and policy |
estate | Real estate, construction and financing |
business | Companies, economy and business strategy |
The category catalog is intentionally documented without material counts because the dataset grows continuously.
Use GET /api/v1/public/categories/ whenever your integration needs current discovery metadata.
Endpoint reference
/api/v1/public/categories/FREE/api/v1/public/categories/<category>/FREE/api/v1/public/categories/<category>/channels/FREE/api/v1/public/categories/<category>/slugs/<slug_token>/FREE/api/v1/public/channels/FREE/api/v1/public/items/<item_id>/$0.01List categories
cURL
curl \ -H "Authorization: Bearer aa_live_..." \ https://art-argentum.com/api/v1/public/categories/
PowerShell
$key = "aa_live_..."
$base = "https://art-argentum.com"
$headers = @{ Authorization = "Bearer $key" }
$categories = Invoke-RestMethod `
-Uri "$base/api/v1/public/categories/" `
-Headers $headers `
-Method GET
$categories.items |
Select-Object category, slugs_count, channels_count |
Format-Table -AutoSize
Python
import requests
base = "https://art-argentum.com"
headers = {
"Authorization": "Bearer aa_live_..."
}
r = requests.get(
f"{base}/api/v1/public/categories/",
headers=headers,
timeout=30,
)
r.raise_for_status()
for row in r.json()["items"]:
print(
row["category"],
row.get("slugs_count"),
row.get("channels_count"),
)
JavaScript
const base = "https://art-argentum.com";
const headers = {
Authorization: "Bearer aa_live_..."
};
const r = await fetch(
`${base}/api/v1/public/categories/`,
{ headers }
);
if (!r.ok) {
throw new Error(`HTTP ${r.status}`);
}
const data = await r.json();
for (const row of data.items) {
console.log(
row.category,
row.slugs_count,
row.channels_count
);
}
{
"ok": true,
"charged": false,
"items": [
{
"category": "intel",
"slugs_count": 12,
"channels_count": 100
},
{
"category": "geopolitic",
"slugs_count": 8,
"channels_count": 66
},
{
"category": "politics",
"slugs_count": 69,
"channels_count": 140
}
]
}
Inspect one category and its channels
GET /api/v1/public/categories/intel/ GET /api/v1/public/categories/intel/channels/
The category endpoint is used to discover its thematic structure and material metadata. The channels endpoint is useful when an integration wants to filter or group intelligence by publisher/source.
# Python
import requests
base = "https://art-argentum.com"
headers = {
"Authorization": "Bearer aa_live_..."
}
intel_response = requests.get(
f"{base}/api/v1/public/categories/intel/",
headers=headers,
timeout=30,
)
intel_response.raise_for_status()
intel = intel_response.json()
channels_response = requests.get(
f"{base}/api/v1/public/categories/intel/channels/",
headers=headers,
timeout=30,
)
channels_response.raise_for_status()
channels = channels_response.json()
Select an item, then fetch its source JSON
Discovery responses expose lightweight metadata such as title, channel, publication date,
source URL and an opaque item_id. They do not need to expose the complete source payload.
idOpaque item identifier used in the paid source request.channelHuman-readable source/channel name.channel_idStable channel identifier when present.titleMaterial title.published_atPublication timestamp.source_urlOriginal source URL.content_urlAPI route for the concrete source JSON.content_price_centsCurrent source-file price.has_source_fileWhether the concrete source JSON can be returned.GET /api/v1/public/items/<item_id>/ GET /api/v1/public/items/<item_id>/?download=1
# Python
import requests
base = "https://art-argentum.com"
headers = {
"Authorization": "Bearer aa_live_..."
}
item_id = "itm_0123456789abcdef"
r = requests.get(
f"{base}/api/v1/public/items/{item_id}/",
headers=headers,
timeout=30,
)
r.raise_for_status()
print("charged:", r.headers.get("X-AA-Charged"))
print("price:", r.headers.get("X-AA-Price-Cents"))
print("balance:", r.headers.get("X-AA-Balance-Cents"))
print(r.json())
?download=1 both deliver the same concrete source file
and therefore use the same $0.01 billing rule.
Authentication, billing and errors
Send Authorization: Bearer aa_live_... on every request.
For YouTube source files, successful concrete-file access costs $0.01; discovery is free.
Common responses: 200 success · 401 invalid key ·
402 insufficient balance · 404 missing or unauthorized resource ·
405 method not allowed.
See API overview, billing headers and common response semantics →