Video — entry 030 of 35

TVDB

Verified Jul 2026

TheTVDB is a long-running, community-editable database of TV series metadata — episodes, artwork, air dates — served over a v4 REST/JSON API that exchanges an API key for a short-lived JWT via a login call. Casual, non-commercial use is free with a subscriber PIN, while sustained or commercial use requires a paid ($11.99/year) subscription.

tv-dataepisode-metadatacommunity-maintained
AuthenticationAPI KeySign up with the provider to obtain credentials.
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

Score81out of 100
Authentication15/25API key required
Pricing17/20Freemium tier available
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

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

Auth quickstart

  1. Get a key at the provider
  2. Send it on every request as a headerAuthorization: <key>
  3. The exact header isn't documented — Authorization is a common default; confirm in the provider's docs.
Stored keyNo key stored

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

Endpoints

Servers
https://api4.thetvdb.com/v4
Auth
bearerAuth
Artwork2
GET/artwork/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid artwork id—
401Unauthorized—
404Artwork not found—
GET/artwork/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid artwork id—
401Unauthorized—
404Artwork not found—
Artwork Statuses1
GET/artwork/statuses
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Artwork Types1
GET/artwork/types
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Award Categories2
GET/awards/categories/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid category id—
401Unauthorized—
404Category not found—
GET/awards/categories/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid category id—
401Unauthorized—
404Category not found—
Awards3
GET/awards
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/awards/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid awards id—
401Unauthorized—
404Awards not found—
GET/awards/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid awards id—
401Unauthorized—
404Awards not found—
Characters1
GET/characters/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid character id—
401Unauthorized—
404Character not found—
Companies3
GET/companies
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/companies/types
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/companies/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid company id—
401Unauthorized—
404Company not found—
Content Ratings1
GET/content/ratings
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Countries1
GET/countries
Responses
StatusDescriptionSchema
200response—
Entity Types1
GET/entities
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Episodes4
GET/episodes
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/episodes/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid episode id—
401Unauthorized—
404Episode not found—
GET/episodes/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
metaquerynostring
Responses
StatusDescriptionSchema
200response—
400Invalid episode id—
401Unauthorized—
404Episode not found—
GET/episodes/{id}/translations/{language}
Parameters
NameInRequiredType
idpathyesnumber
languagepathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid episode id. Invalid language.—
401Unauthorized—
404Episode not found—
Favorites1
GET/user/favorites
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Genders1
GET/genders
Responses
StatusDescriptionSchema
200response—
Genres2
GET/genres
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/genres/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid genre id—
401Unauthorized—
404Genre not found—
InspirationTypes1
GET/inspiration/types
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Languages1
GET/languages
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Lists5
GET/lists
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/lists/slug/{slug}
Parameters
NameInRequiredType
slugpathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid list slug—
401Unauthorized—
404List not found—
GET/lists/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid list id—
401Unauthorized—
404List not found—
GET/lists/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid list id—
401Unauthorized—
404Lists not found—
GET/lists/{id}/translations/{language}
Parameters
NameInRequiredType
idpathyesnumber
languagepathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid lists id—
401Unauthorized—
404Lists not found—
Login1
POST/logincreate an auth token. The token has one month validation length.
Request body

application/json (required)

Responses
StatusDescriptionSchema
200response—
401invalid credentials—
Movie Statuses1
GET/movies/statuses
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Movies6
GET/movies
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/movies/filter
Parameters
NameInRequiredType
companyquerynonumber
contentRatingquerynonumber
countryqueryyesstring
genrequerynonumber
langqueryyesstring
sortquerynostring
statusquerynonumber
yearquerynonumber
Responses
StatusDescriptionSchema
200response—
400Invalid format parameter.—
401Unauthorized—
GET/movies/slug/{slug}
Parameters
NameInRequiredType
slugpathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid movie slug—
401Unauthorized—
404Movie not found—
GET/movies/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid movie id—
401Unauthorized—
404Movie not found—
GET/movies/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
metaquerynostring
shortquerynoboolean
Responses
StatusDescriptionSchema
200response—
400Invalid movie id—
401Unauthorized—
404Movie not found—
GET/movies/{id}/translations/{language}
Parameters
NameInRequiredType
idpathyesnumber
languagepathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid movie id, invalid language.—
401Unauthorized—
404Movie not found—
People4
GET/people
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/people/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid people id—
401Unauthorized—
404People not found—
GET/people/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
metaquerynostring
Responses
StatusDescriptionSchema
200response—
400Invalid people id—
401Unauthorized—
404People not found—
GET/people/{id}/translations/{language}
Parameters
NameInRequiredType
idpathyesnumber
languagepathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid people id, invalid language.—
401Unauthorized—
404People not found—
People Types1
GET/people/types
Responses
StatusDescriptionSchema
200response—
Search2
GET/search
Parameters
NameInRequiredType
queryquerynostring
qquerynostring
typequerynostring
yearquerynonumber
companyquerynostring
countryquerynostring
directorquerynostring
languagequerynostring
primaryTypequerynostring
networkquerynostring
remote_idquerynostring
offsetquerynonumber
limitquerynonumber
Responses
StatusDescriptionSchema
200response—
400Max results overflow—
401Unauthorized—
GET/search/remoteid/{remoteId}
Parameters
NameInRequiredType
remoteIdpathyesstring
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Seasons5
GET/seasons
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/seasons/types
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/seasons/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid season id—
401Unauthorized—
404Season not found—
GET/seasons/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid seasons id—
401Unauthorized—
404Season not found—
GET/seasons/{id}/translations/{language}
Parameters
NameInRequiredType
idpathyesnumber
languagepathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid season id, language not found.—
401Unauthorized—
404Season not found—
Series10
GET/series
Parameters
NameInRequiredType
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/series/filter
Parameters
NameInRequiredType
companyquerynonumber
contentRatingquerynonumber
countryqueryyesstring
genrequerynonumber
langqueryyesstring
sortquerynostring
sortTypequerynostring
statusquerynonumber
yearquerynonumber
Responses
StatusDescriptionSchema
200response—
400Invalid format parameter.—
401Unauthorized—
GET/series/slug/{slug}
Parameters
NameInRequiredType
slugpathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid series slug—
401Unauthorized—
404Series not found—
GET/series/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid series id—
401Unauthorized—
404Series not found—
GET/series/{id}/artworks
Parameters
NameInRequiredType
idpathyesnumber
langquerynostring
typequerynointeger
Responses
StatusDescriptionSchema
200response—
400Invalid series id—
401Unauthorized—
404Series not found—
GET/series/{id}/episodes/{season-type}
Parameters
NameInRequiredType
pagequeryyesinteger
idpathyesnumber
season-typepathyesstring
seasonquerynointeger
episodeNumberquerynointeger
airDatequerynostring
Responses
StatusDescriptionSchema
200response—
400Invalid series id, episodeNumber is not null then season must be present—
401Unauthorized—
404Series not found—
GET/series/{id}/episodes/{season-type}/{lang}
Parameters
NameInRequiredType
pagequeryyesinteger
idpathyesnumber
season-typepathyesstring
langpathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid series id, invalid language.—
401Unauthorized—
404Series not found—
GET/series/{id}/extended
Parameters
NameInRequiredType
idpathyesnumber
metaquerynostring
shortquerynoboolean
Responses
StatusDescriptionSchema
200response—
400Invalid series id—
401Unauthorized—
404Series not found—
GET/series/{id}/nextAired
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
400Invalid series id—
401Unauthorized—
404Series not found—
GET/series/{id}/translations/{language}
Parameters
NameInRequiredType
idpathyesnumber
languagepathyesstring
Responses
StatusDescriptionSchema
200response—
400Invalid series id, invalid language.—
401Unauthorized—
404Series not found—
Series Statuses1
GET/series/statuses
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Source Types1
GET/sources/types
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
Updates1
GET/updates
Parameters
NameInRequiredType
sincequeryyesnumber
typequerynostring
actionquerynostring
pagequerynonumber
Responses
StatusDescriptionSchema
200response—
400Invalid since, type param.—
401Unauthorized—
User info2
GET/user
Responses
StatusDescriptionSchema
200response—
401Unauthorized—
GET/user/{id}
Parameters
NameInRequiredType
idpathyesnumber
Responses
StatusDescriptionSchema
200response—
401Unauthorized—

Try it

Developer reference

Base URLhttps://api4.thetvdb.com/v4/
Key endpoints
  • POST/login
  • GET/series/{id}/extended
  • GET/search

Changelog

Spec version4.7.10
Tracked paths66
  • Sep 2026gained an OpenAPI spec

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗