Video — entry 030 of 35
TVDB
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.
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
Score81
Authentication15/25API key required
Pricing17/20Freemium tier available
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months
Auth quickstart
- Get a key at the provider
- Send it on every request as a header
Authorization: <key> - 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
Artwork2
GET/artwork/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid artwork id | — |
401 | Unauthorized | — |
404 | Artwork not found | — |
GET/artwork/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid artwork id | — |
401 | Unauthorized | — |
404 | Artwork not found | — |
Artwork Statuses1
GET/artwork/statuses
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Artwork Types1
GET/artwork/types
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Award Categories2
GET/awards/categories/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid category id | — |
401 | Unauthorized | — |
404 | Category not found | — |
GET/awards/categories/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid category id | — |
401 | Unauthorized | — |
404 | Category not found | — |
Awards3
GET/awards
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/awards/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid awards id | — |
401 | Unauthorized | — |
404 | Awards not found | — |
GET/awards/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid awards id | — |
401 | Unauthorized | — |
404 | Awards not found | — |
Characters1
GET/characters/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid character id | — |
401 | Unauthorized | — |
404 | Character not found | — |
Companies3
GET/companies
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/companies/types
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/companies/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid company id | — |
401 | Unauthorized | — |
404 | Company not found | — |
Content Ratings1
GET/content/ratings
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Countries1
GET/countries
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
Entity Types1
GET/entities
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Episodes4
GET/episodes
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/episodes/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid episode id | — |
401 | Unauthorized | — |
404 | Episode not found | — |
GET/episodes/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
meta | query | no | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid episode id | — |
401 | Unauthorized | — |
404 | Episode not found | — |
GET/episodes/{id}/translations/{language}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
language | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid episode id. Invalid language. | — |
401 | Unauthorized | — |
404 | Episode not found | — |
Favorites1
GET/user/favorites
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Genders1
GET/genders
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
Genres2
GET/genres
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/genres/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid genre id | — |
401 | Unauthorized | — |
404 | Genre not found | — |
InspirationTypes1
GET/inspiration/types
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Languages1
GET/languages
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Lists5
GET/lists
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/lists/slug/{slug}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
slug | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid list slug | — |
401 | Unauthorized | — |
404 | List not found | — |
GET/lists/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid list id | — |
401 | Unauthorized | — |
404 | List not found | — |
GET/lists/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid list id | — |
401 | Unauthorized | — |
404 | Lists not found | — |
GET/lists/{id}/translations/{language}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
language | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid lists id | — |
401 | Unauthorized | — |
404 | Lists not found | — |
Login1
POST/logincreate an auth token. The token has one month validation length.
Request body
application/json (required)
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | invalid credentials | — |
Movie Statuses1
GET/movies/statuses
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Movies6
GET/movies
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/movies/filter
Parameters
| Name | In | Required | Type |
|---|---|---|---|
company | query | no | number |
contentRating | query | no | number |
country | query | yes | string |
genre | query | no | number |
lang | query | yes | string |
sort | query | no | string |
status | query | no | number |
year | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid format parameter. | — |
401 | Unauthorized | — |
GET/movies/slug/{slug}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
slug | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid movie slug | — |
401 | Unauthorized | — |
404 | Movie not found | — |
GET/movies/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid movie id | — |
401 | Unauthorized | — |
404 | Movie not found | — |
GET/movies/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
meta | query | no | string |
short | query | no | boolean |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid movie id | — |
401 | Unauthorized | — |
404 | Movie not found | — |
GET/movies/{id}/translations/{language}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
language | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid movie id, invalid language. | — |
401 | Unauthorized | — |
404 | Movie not found | — |
People4
GET/people
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/people/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid people id | — |
401 | Unauthorized | — |
404 | People not found | — |
GET/people/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
meta | query | no | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid people id | — |
401 | Unauthorized | — |
404 | People not found | — |
GET/people/{id}/translations/{language}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
language | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid people id, invalid language. | — |
401 | Unauthorized | — |
404 | People not found | — |
People Types1
GET/people/types
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
Search2
GET/search
Parameters
| Name | In | Required | Type |
|---|---|---|---|
query | query | no | string |
q | query | no | string |
type | query | no | string |
year | query | no | number |
company | query | no | string |
country | query | no | string |
director | query | no | string |
language | query | no | string |
primaryType | query | no | string |
network | query | no | string |
remote_id | query | no | string |
offset | query | no | number |
limit | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Max results overflow | — |
401 | Unauthorized | — |
GET/search/remoteid/{remoteId}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
remoteId | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Seasons5
GET/seasons
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/seasons/types
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/seasons/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid season id | — |
401 | Unauthorized | — |
404 | Season not found | — |
GET/seasons/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid seasons id | — |
401 | Unauthorized | — |
404 | Season not found | — |
GET/seasons/{id}/translations/{language}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
language | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid season id, language not found. | — |
401 | Unauthorized | — |
404 | Season not found | — |
Series10
GET/series
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/series/filter
Parameters
| Name | In | Required | Type |
|---|---|---|---|
company | query | no | number |
contentRating | query | no | number |
country | query | yes | string |
genre | query | no | number |
lang | query | yes | string |
sort | query | no | string |
sortType | query | no | string |
status | query | no | number |
year | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid format parameter. | — |
401 | Unauthorized | — |
GET/series/slug/{slug}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
slug | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series slug | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}/artworks
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
lang | query | no | string |
type | query | no | integer |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}/episodes/{season-type}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | yes | integer |
id | path | yes | number |
season-type | path | yes | string |
season | query | no | integer |
episodeNumber | query | no | integer |
airDate | query | no | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id, episodeNumber is not null then season must be present | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}/episodes/{season-type}/{lang}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
page | query | yes | integer |
id | path | yes | number |
season-type | path | yes | string |
lang | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id, invalid language. | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}/extended
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
meta | query | no | string |
short | query | no | boolean |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}/nextAired
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id | — |
401 | Unauthorized | — |
404 | Series not found | — |
GET/series/{id}/translations/{language}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
language | path | yes | string |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid series id, invalid language. | — |
401 | Unauthorized | — |
404 | Series not found | — |
Series Statuses1
GET/series/statuses
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Source Types1
GET/sources/types
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Updates1
GET/updates
Parameters
| Name | In | Required | Type |
|---|---|---|---|
since | query | yes | number |
type | query | no | string |
action | query | no | string |
page | query | no | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
400 | Invalid since, type param. | — |
401 | Unauthorized | — |
User info2
GET/user
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
GET/user/{id}
Parameters
| Name | In | Required | Type |
|---|---|---|---|
id | path | yes | number |
Responses
| Status | Description | Schema |
|---|---|---|
200 | response | — |
401 | Unauthorized | — |
Try it
Developer reference
Base URL
https://api4.thetvdb.com/v4/Key endpoints
- POST/login
- GET/series/{id}/extended
- GET/search
SDKs
Changelog
Spec version4.7.10
Tracked paths66
- gained an OpenAPI spec