IPTV-org API
Free IPTV-org API with no key: 10,000+ TV channels worldwide with countries, languages, categories, logos and stream metadata as static JSON. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-19
What is the IPTV-org API?
IPTV-org publishes a free, key-free API of global television channel metadata — more than 10,000 channels with country, language, category, logo and broadcast information — served as static JSON files.
IPTV-org is a community project cataloguing publicly available television channels worldwide. The API is a set of static JSON files on GitHub Pages, which means it is extremely fast, has no rate limit, and never goes down under load.
Because the files are static and complete, the usual pattern is to fetch once and filter locally rather than making repeated requests. There are separate files for channels, countries, languages, categories and streams, designed to be joined client-side.
Quick facts
- Base URL
https://iptv-org.github.io/api- Authentication
- No API key required — these are static JSON files.
- Rate limit
- None; served as static files from a CDN.
- Pricing
- Free and open source.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the IPTV-org API
Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.
1. Fetch the list of countries
GET https://iptv-org.github.io/api/countries.json
curl 'https://iptv-org.github.io/api/countries.json'const res = await fetch("https://iptv-org.github.io/api/countries.json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://iptv-org.github.io/api/countries.json", timeout=20)
res.raise_for_status()
print(res.json())[
{
"name": "Afghanistan",
"code": "AF",
"languages": [
"pus",
"prd",
"tuk"
],
"flag": "🇦🇫"
},
{
"name": "Aland",
"code": "AX",
"languages": [
"swe"
],
"flag": "🇦🇽"
},
{
"name": "Albania",
"code": "AL",
"languages": [
"sqi"
],
"flag": "🇦🇱"
},
{
"name": "Algeria",
"code": "DZ",
"languages": [
"ara"
],
"flag": "🇩🇿"
},
{
"name": "American Samoa",
"code": "AS",
"languages": [
"eng",
"smo"
],
"flag": "🇦🇸"
},
{
"name": "Andorra",
"code": "AD",
"languages": [
"cat"
],
"flag": "🇦🇩"
},
{
"name": "Angola",
"code": "AO",
"languages": [
"por"
],
"flag": "🇦🇴"
},
{
"name": "Anguilla",
"code": "AI",
"languages": [
"eng"
],
"flag": "🇦🇮"
},
{
"name": "Antarctica",
"code": "AQ",
"languages": [
"eng"
],
"flag": "🇦🇶"
},
{
"name": "Antigua and Barbuda",
"code": "AG",
"languages": [
"eng"
],
"flag": "🇦🇬"
},
{
"name": "Argentina",
"code": "AR",
"languages": [
"grn",
"spa"
],
"flag": "🇦🇷"
},
{
"name": "Armenia",
"code": "AM",
"languages": [
"hye"
],
"flag": "🇦🇲"
},
{
"name": "Aruba",
"code": "AW",
"languages": [
"nld",
"pap"
],
"flag": "🇦🇼"
},
{
"name": "Australia",
"code": "AU",
"languages": [
"eng"
],
"flag": "🇦🇺"
},
{
"name": "Austria",
"code"Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
countries.json | path | Optional | All countries with codes, languages and flags. countries.json |
channels.json | path | Optional | Every catalogued channel with metadata. channels.json |
categories.json | path | Optional | Channel categories such as news or sports. categories.json |
streams.json | path | Optional | Stream URLs mapped to channel ids. streams.json |
Response fields
namestring- Country or channel name.
codestring- ISO country code.
languagesarray- ISO 639-3 language codes.
flagstring- Flag emoji for the country.
(channels.json) idstring- Channel identifier used to join with streams.
(channels.json) categoriesarray- Category slugs for the channel.
(channels.json) logostring- Channel logo image URL.
What you can build with the IPTV-org API
- Build a TV channel directory filtered by country or language
- Create an IPTV player interface with channel logos
- Analyse global broadcast media by category and region
- Join channel metadata with stream URLs for a media app
Common errors and how to fix them
Large file downloads
channels.json contains every channel worldwide.
Fix: Fetch once and cache; filter locally rather than re-requesting.
Streams not matching channels
Streams and channels are separate files joined by id.
Fix: Join streams.json to channels.json on the channel id field.
Dead stream URLs
Streams are community-contributed and go offline.
Fix: Validate before playing, and handle failure gracefully.
IPTV-org API — frequently asked questions
Is the IPTV-org API free?
Yes, completely free and open source. It is served as static JSON files with no key and no rate limit.
How many channels are catalogued?
Over 10,000 from around the world, each with country, language, category and logo metadata.
How do I get stream URLs for a channel?
Streams live in a separate streams.json file, joined to channels by the channel id. Note that stream availability is community-maintained and varies.
Is it legal to use the streams?
IPTV-org catalogues publicly available streams, but legality depends on the broadcaster and your jurisdiction. The metadata API itself is uncontroversial; verify rights before redistributing any stream.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
IPTV-org is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.