Video — entry 033 of 37

TVMaze

Verified Jul 2026

TVmaze is a free, keyless JSON API for TV show/episode metadata and broadcast schedules, popular for hobby projects thanks to its zero-friction access. It also offers an optional authenticated Premium tier with extra personal-list features for paying TVmaze website members.

TVmaze is a free, keyless JSON API for TV show and episode metadata, cast, and broadcast schedules. A live GET against api.tvmaze.com needs no key, header, or signup for any of its documented endpoints, and every response observed this run carried an unconditional access-control-allow-origin: * header regardless of whether the request itself sent an Origin header.

tv-datafree-apino-authschedule-data
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score85out of 100
Authentication25/25No authentication required
Pricing17/20Freemium tier available
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 85 on greatapis.com
<a href="https://greatapis.com/api/tvmaze/"><img src="https://greatapis.com/badge/tvmaze.svg" alt="Scored 85 on greatapis.com"></a>

Auth quickstart

  1. No API key required. Live GETs against /shows/{id}, /search/shows, and /schedule this run all returned data with no headers or query params beyond the documented path/query values. TVmaze's own docs (tvmaze.com/api) state calls are rate limited to "at least 20 calls every 10 seconds" per IP and that exceeding it "might" return an HTTP 429 -- not measured this run: five rapid sequential GETs to /shows/1..5 all returned 200 with no rate-limit header of any kind, so the limit (if enforced) sits above that burst size.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Look up a show by ID

GEThttps://api.tvmaze.com/shows/1

200 application/json; charset=UTF-8

{"id":1,"url":"https://www.tvmaze.com/shows/1/under-the-dome","name":"Under the Dome","type":"Scripted","language":"English","genres":["Drama","Science-Fiction","Thriller"],"status":"Ended","runtime":60,"averageRuntime":60,"premiered":"2013-06-24","ended":"2015-09-10","officialSite":"http://www.cbs.com/shows/under-the-dome/","schedule":{"time":"22:00","days":["Thursday"]},"rating":{"average":6.6},"weight":98,"network":{"id":2,"name":"CBS","country":{"name":"United States","code":"US","timezone":"America/New_York"},"officialSite":"https://www.cbs.com/"},"webChannel":null,"dvdCountry":null,"externals":{"tvrage":25988,"thetvdb":264492,"imdb":"tt1553656"},"image":{"medium":"https://static.tvmaze.com/uploads/images/medium_portrait/610/1525272.jpg","original":"https://static.tvmaze.com/uploads/images/original_untouched/610/1525272.jpg"},"summary":"<p><b>Under the Dome</b> is the story of a small town that is suddenly and inexplicably sealed off from the rest of the world by an enormous transparent dome. The town's inhabitants must deal with surviving the post-apocalyptic conditions while searching for answers about the dome, where it came from and if and when it will go away.</p>","updated":1769177765,"_links":{"self":{"href":"https://api.tvmaze.com/shows/1"},"previousepisode":{"href":"https://api.tvmaze.com/episodes/185054","name":"The Enemy Within"}}}

Try it

Developer reference

Base URLhttps://api.tvmaze.com/
Rate limit

20 requests per 10 seconds per IP

Key endpoints
  • GET/shows/{id}
  • GET/search/shows?q={query}
  • GET/schedule

Gotchas & limits

  • access-control-allow-origin: * is sent on every response this run, with or without an Origin request header -- unlike several other keyless APIs in this catalogue, TVmaze's CORS header is unconditional (confirmed live on both the /shows/1 success and the /shows/999999999 404 above).
  • A live OPTIONS preflight to /shows/1 (with Origin + Access-Control-Request-Method headers set) returned HTTP 405 with only `allow: GET, HEAD` and no CORS headers at all -- TVmaze never answers a real CORS preflight. In practice this doesn't block browser calls because a plain GET with no custom headers is a CORS "simple request" and never triggers a preflight in the first place, but any GET that needs a preflight (e.g. a custom header) will fail here.
  • Plain `http://` is not blocked or redirected: a live `GET http://api.tvmaze.com/shows/1` returned the same HTTP 200 body as the https:// version, so both schemes currently work -- but the docs and every code sample on tvmaze.com/api use https://, so treat http:// as unsupported and don't rely on it staying open.
  • A nonexistent-but-well-formed numeric ID and a non-numeric path segment are both HTTP 404, but the body differs: `GET /shows/999999999` (a live probe this run) returns the plain `{"name":"Not Found","message":"","code":0,"status":404}`, while `GET /shows/abc` returns a richer body with a nested `previous` object naming the failed route -- `{"name":"Not Found","message":"Page not found.","code":0,"status":404,"previous":{"name":"Invalid Route","message":"Unable to resolve the request \"shows/abc\".","code":0}}`. Branch on `status`/`code` in the body, not on the message shape.
  • TVmaze's own docs (tvmaze.com/api, not measured live -- this sandbox never triggered the limit) warn that "Leaving more than 1 connection to our servers idle may result in your IP getting blocked," and recommend reusing connections or HTTP/2 multiplexing instead of opening one per request.