BYTETOOLS

TVmaze API

Free TV show API with no key: series info, full episode guides, cast, air dates and daily schedules with images. Genuinely open, no signup. Tested example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-19

What is the TVmaze API?

TVmaze is a free, key-free TV database API providing show information, complete episode guides, cast and crew, air dates, images and daily broadcast schedules across international networks.

TVmaze is the most practical free TV metadata API, chiefly because it needs no key at all — unlike TMDB and OMDb, which both require registration. Show search, episode lists, cast and schedules are all immediately available.

The schedule endpoints are its standout feature: request what is airing on a given date in a given country and you get every episode with its network and time. That is awkward to assemble from other TV APIs and trivial here.

Quick facts

Base URL
https://api.tvmaze.com
Authentication
No API key required for public endpoints. A premium subscription exists for extra features.
Rate limit
About 20 requests per 10 seconds per IP.
Pricing
Free. Data is CC BY-SA licensed and attribution is required.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the TVmaze 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. Search for a TV show by name

GET https://api.tvmaze.com/singlesearch/shows?q=breaking%20bad

curl
curl 'https://api.tvmaze.com/singlesearch/shows?q=breaking%20bad'
JavaScript (fetch)
const res = await fetch("https://api.tvmaze.com/singlesearch/shows?q=breaking%20bad");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.tvmaze.com/singlesearch/shows?q=breaking%20bad", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "id": 169,
  "url": "https://www.tvmaze.com/shows/169/breaking-bad",
  "name": "Breaking Bad",
  "type": "Scripted",
  "language": "English",
  "genres": [
    "Drama",
    "Crime",
    "Thriller"
  ],
  "status": "Ended",
  "runtime": 60,
  "averageRuntime": 60,
  "premiered": "2008-01-20",
  "ended": "2019-10-11",
  "officialSite": "http://www.amc.com/shows/breaking-bad",
  "schedule": {
    "time": "22:00",
    "days": [
      "Sunday"
    ]
  },
  "rating": {
    "average": 9.2
  },
  "weight": 100,
  "network": {
    "id": 20,
    "name": "AMC",
    "country": {
      "name": "United States",
      "code": "US",
      "timezone": "America/New_York"
    },
    "officialSite": null
  },
  "webChannel": null,
  "dvdCountry": null,
  "externals": {
    "tvrage": 18164,
    "thetvdb": 81189,
    "imdb": "tt0903747"
  },
  "image": {
    "medium": "https://static.tvmaze.com/uploads/images/medium_portrait/501/1253519.jpg",
    "original": "https://static.tvmaze.com/uploads/images/original_untouched/501/1253519.jpg"
  },
  "summary": "<p><b>Breaking Bad</b> follows protagonist Walter White, a chemistry teacher who lives in New Mexico with his wife and teenage son who has cerebral palsy. White is diagnosed with Stage III cancer and given a prognosis of two years left to live. With a new sense of fearlessness based on his medical prognosis, and a desire to secure his family's financial security, White chooses to enter a dangerous world of drugs and crime and ascends to power in this world. The series explores how a fatal diagnosis such as White's releases a typical man from

2. Fetch today's TV schedule for a country

GET https://api.tvmaze.com/schedule?country=US

curl
curl 'https://api.tvmaze.com/schedule?country=US'
JavaScript (fetch)
const res = await fetch("https://api.tvmaze.com/schedule?country=US");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.tvmaze.com/schedule?country=US", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "id": 3698770,
    "url": "https://www.tvmaze.com/episodes/3698770/the-pulse-2026-08-18-episode-163",
    "name": "Episode 163",
    "season": 2026,
    "number": 163,
    "type": "regular",
    "airdate": "2026-08-18",
    "airtime": "04:00",
    "airstamp": "2026-08-19T08:00:00+00:00",
    "runtime": 60,
    "rating": {
      "average": null
    },
    "image": null,
    "summary": null,
    "show": {
      "id": 15680,
      "url": "https://www.tvmaze.com/shows/15680/the-pulse",
      "name": "The Pulse",
      "type": "News",
      "language": "English",
      "genres": [],
      "status": "Running",
      "runtime": 60,
      "averageRuntime": 60,
      "premiered": "2015-08-13",
      "ended": null,
      "officialSite": "https://www.bloomberg.com/btv/series/the-pulse-francine-lacqua",
      "schedule": {
        "time": "04:00",
        "days": [
          "Monday",
          "Tuesday",
          "Wednesday",
          "Thursday",
          "Friday"
        ]
      },
      "rating": {
        "average": null
      },
      "weight": 71,
      "network": {
        "id": 172,
        "name": "Bloomberg TV",
        "country": {
          "name": "United States",
          "code": "US",
          "timezone": "America/New_York"
        },
        "officialSite": null
      },
      "webChannel": null,
      "dvdCountry": null,
      "externals": {
        "tvrage": 51924,
        "thetvdb": null,
        "imdb": "tt4507312"
      },
      "image": {
        "medium": "https://static.tvmaze.com/uploads/images/medium_portrait/53/132577.jpg",
        "original":

Parameters

ParameterTypeRequiredDescription
singlesearch/shows?q=stringOptionalBest single match for a show name. breaking bad
search/shows?q=stringOptionalAll matching shows with relevance scores. girls
shows/<id>/episodespathOptionalFull episode list for a show. 169
schedule?country=&date=stringOptionalWhat is airing on a date in a country. US
embedstringOptionalEmbed related resources such as cast or episodes. cast

Response fields

idinteger
TVmaze show identifier.
namestring
Show title.
genresarray
Genre tags.
statusstring
Running, Ended or To Be Determined.
premiered / endedstring
First and last air dates.
rating.averagenumber
Community rating out of 10, or null.
imageobject
Medium and original poster image URLs.
summarystring
Synopsis as HTML — sanitise before rendering.

What you can build with the TVmaze API

  • Build a TV show tracker with full episode guides
  • Show what is airing tonight using the schedule endpoints
  • Add show metadata and posters to a media library
  • Create a watchlist app with air date notifications

Common errors and how to fix them

404 on singlesearch

No show matched closely enough.

Fix: Use /search/shows for fuzzy matching with scores; singlesearch returns 404 rather than an empty result.

Summary contains HTML tags

The summary field is HTML.

Fix: Sanitise before rendering; it typically contains <p> and <b> tags.

429

Rate limit exceeded.

Fix: Stay under roughly 20 requests per 10 seconds; use `embed` to fetch related data in one request instead of several.

TVmaze API — frequently asked questions

Is the TVmaze API free?

Yes, completely free with no API key or registration — which sets it apart from TMDB and OMDb, both of which require signup.

How do I get a show's full episode list?

Request /shows/{id}/episodes, or use ?embed=episodes on the show endpoint to fetch both in a single request.

Can I find out what is on TV tonight?

Yes. The /schedule endpoint takes a country and date and returns every episode airing, with network and time — one of its most useful features.

Do I need to attribute TVmaze?

Yes. The data is CC BY-SA licensed, so attribution and a link back are required when you display it.

Tools that pair with this API

TVmaze 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.