API Reference
Welcome to Watchmode's API! Watchmode is the most complete API for finding out what movies & shows are available on each streaming service, as well as many other useful features built for creating applications built around movies & shows. You can use this API to access all our API endpoints, such as the Title API to get details on a specific title, or the List Titles API to get a listing of movies & shows that match a certain criteria.
The API is organized around REST. All requests should be made over SSL. All request and response bodies, including errors, are encoded in JSON.
Simply pass your apiKey as a GET or POST parameter to the API to authenticate. You can use the test key provided in the examples to test, however be advised the testing apiKey is limited to certain queries and will only return responses to the example requests shown below.
ID Mapping
Watchmode IDs for movies, tv shows and for people (actors, directors, etc) are universally unique and cannot collide with each other. So you don't have to worry that the ID for an actor can collide with the ID for a movie, or that an ID for a TV show can collide with a movie ID and so forth.
When you first integrate your application with the Watchmode API, you may want to import all of the Watchmode IDs for titles and people. To get a list of all Watchmode IDs, and their corresponding IMDB/TMDB ids, you can download the following files (updated daily):
https://api.watchmode.com/datasets/title_id_map.csv
https://api.watchmode.com/datasets/person_id_map.csv
Errors
HTTP Status codes
Code | Title | Description |
---|---|---|
200 | OK | The request was successful. |
400 | Bad request | Bad request |
401 | Unauthorized | Your API key is invalid. |
402 | Over quota | Over plan quota on this API Key. |
404 | Not found | The resource does not exist. |
429 | Too Many Requests | The rate limit was exceeded. |
50X | Internal Server Error | An error occurred with our API. |
Error Response
Example error response.
{"success":false,"statusCode":400,"statusMessage":"Please set a valid change type method."}
All errors are returned in the form of JSON with a type and optional message.
Rate Limiting
Check to see how many requests you have left:
$ curl -i 'https://api.watchmode.com/v1/status/?apiKey=YOUR_API_KEY'
HTTP/1.1 200 OK
Date: Mon, 01 Jul 2014 21:20:00 GMT
Status: 200 OK
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 111
X-Account-Quota: 999999
X-Account-Quota-Used: 93
Retry-After: 19
You can make up to 120 requests per minute using your API key. How many requests you have remaining (X-RateLimit-Remaining), and how many seconds until your rate limit has reset (Retry-After) are returned in the HTTP headers. Higher rate limits available for enterprise customers.
Example rate limit error response.
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-Account-Quota: 999999
X-Account-Quota-Used: 93
Retry-After: 19
Content-Type: application/json
{
"success": false,
"statusCode": 429,
"statusMessage": "The rate limit was exceeded."
}
Configuration APIs
The following endpoints (sources, networks, genres, regions) are helpful for initially setting up your application with Watchmode and contain ID mappings of Watchmode values. Typically developers query these once to import the Watchmode numerical values for streaming sources, TV networks, and genres.
Sources
Example Request
/v1/sources/
curl -i 'https://api.watchmode.com/v1/sources/?apiKey=YOUR_API_KEY'
Example response
[ { "id": 203, "name": "Netflix", "type": "sub", "logo_100px": "https://cdn.watchmode.com/provider_logos/netflix_100px.png", "ios_appstore_url": "http://itunes.apple.com/app/netflix/id363590051", "android_playstore_url": "https://play.google.com/store/apps/details?id=com.netflix.mediaclient&hl=en", "android_scheme": "nflx", "ios_scheme": "nflx", "regions": ["US", "CA", "GB", "AU"] }, { "id": 157, "name": "Hulu", "type": "sub", "logo_100px": "https://cdn.watchmode.com/provider_logos/hulu_100px.png", "ios_appstore_url": "http://itunes.apple.com/app/hulu-plus/id376510438", "android_playstore_url": "https://play.google.com/store/apps/details?id=com.hulu.plus", "android_scheme": "hulu", "ios_scheme": "hulu", "regions": ["US"] } ]
Return a listing of all streaming sources that Watchmode supports. Optionally filter by type of source (subscription, free, etc).
Parameter | Required | Description |
---|---|---|
types | optional |
string
Pass one of the following values, or multiple comma separated values to only return certain
types: sub, free, purchase, tve. "sub" means the service is a subscription service, "tve" means the service is a TV channel app. |
regions | optional | string Pass one of the region values (eg. US), or multiple regions comma delimited to only return sources active in those regions. For a full list of supported regions see the Regions Endpoint |
Regions
Example Request
/v1/regions/
curl -i 'https://api.watchmode.com/v1/regions/?apiKey=YOUR_API_KEY'
Example response
[ { "country": "US", "name": "USA", "flag": "https://cdn.watchmode.com/misc_images/icons/usFlag2.png", "data_tier": 1, "plan_enabled": true }, { "country": "CA", "name": "Canada", "flag": "https://cdn.watchmode.com/misc_images/icons/flagCA.png", "data_tier": 1, "plan_enabled": true }, { "country": "GB", "name": "Great Britain", "flag": "https://cdn.watchmode.com/misc_images/icons/flagGB.png", "data_tier": 1, "plan_enabled": true }, { "country": "AU", "name": "Australia", "flag": "https://cdn.watchmode.com/misc_images/icons/flagAU.png", "data_tier": 1, "plan_enabled": true }, { "country": "AR", "name": "Argentina", "flag": "https://cdn.watchmode.com/misc_images/icons/flagAR.png", "data_tier": 2, "plan_enabled": false }, { "country": "BE", "name": "Belgium", "flag": "https://cdn.watchmode.com/misc_images/icons/flagBE.png", "data_tier": 2, "plan_enabled": false } ]
Return a listing of all regions (countries) that Watchmode currently supports.
Networks
Example Request
/v1/networks/
curl -i 'https://api.watchmode.com/v1/networks/?apiKey=YOUR_API_KEY'
Example response
[ { "id": 1, "name": "HBO", "origin_country": "US", "tmdb_id": 49 }, { "id": 2, "name": "National Geographic", "origin_country": "US", "tmdb_id": 43 }, { "id": 3, "name": "YouTube", "origin_country": null, "tmdb_id": 247 }, { "id": 4, "name": "SBS", "origin_country": "KR", "tmdb_id": 156 }, { "id": 5, "name": "DC Universe", "origin_country": "US", "tmdb_id": 2243 }, { "id": 6, "name": "Viceland", "origin_country": "US", "tmdb_id": 1339 }, { "id": 7, "name": "ABC", "origin_country": "US", "tmdb_id": 2 }, { "id": 8, "name": "AMC", "origin_country": "US", "tmdb_id": 174 }, { "id": 9, "name": "PBS", "origin_country": "US", "tmdb_id": 14 } ]
Return a listing of all TV networks that may be returned for a title in the /title endpoint.
Genres
Example Request
/v1/genres/
curl -i 'https://api.watchmode.com/v1/genres/?apiKey=YOUR_API_KEY'
Example response
[ { "id": 4, "name": "Comedy", "tmdb_id": 35 }, { "id": 6, "name": "Documentary", "tmdb_id": 99 }, { "id": 33, "name": "Anime", "tmdb_id": null } ]
Return a mapping of genre names and IDs. Some genres have a tmdb_id, which is the corresponding genre ID on TheMovieDB.org API.
Search API
Example Request
/v1/search/
curl -i 'https://api.watchmode.com/v1/search/?apiKey=YOUR_API_KEY&search_field=name&search_value=Ed%20Wood'
Example response
{ "title_results": [ { "id": 1114888, "name": "Ed Wood", "type": "movie", "year": 1994, "imdb_id": "tt0109707", "tmdb_id": 522, "tmdb_type": "movie" } ], "people_results": [ { "id": 710125611, "name": "Ed Wood", "main_profession": "cinematographer", "imdb_id": "nm7903892", "tmdb_id": 2901757 } ] }
Search for titles or people using an external ID (IMDB, TheMovieDB.org), or by name. Returns an array of results objects, that can either be a title or a person. Useful for getting the Watchmode IDs for titles and people. For example, you can set the parameters to search_value=Breaking%20Bad and search_field=name to get all of the titles named "Breaking bad", and then use the IDs returned in other endpoints such as /v1/title/
Parameter | Required | Description |
---|---|---|
search_field | required |
string
The field for us to search in, either a 3rd party ID or "name" which will search for a movie/show
title or a person's name depending on the type(s) set. Must be one of the following
options: imdb_id, tmdb_person_id, tmdb_movie_id, tmdb_tv_id, name. |
search_value | required | string The value we should search for. For example, if you set search_field to imdb_id, this would be the IMDB title/person ID, eg. tt0944947. |
types | optional |
string
Pass one of the following values, or multiple comma separated values to only return certain
types: tv, movie, person. |
Autocomplete Search API
Example Request
/v1/autocomplete-search/
curl -i 'https://api.watchmode.com/v1/autocomplete-search/?apiKey=YOUR_API_KEY&search_value=Breaking%20bad&search_type=1'
Example response
{ "results": [ { "name": "Breaking Bad", "relevance": 445.23, "type": "tv_series", "id": 3173903, "year": 2008, "result_type": "title", "tmdb_id": 1396, "tmdb_type": "tv", "image_url": "https://cdn.watchmode.com/posters/03173903_poster_w185.jpg" }, { "name": "El Camino: A Breaking Bad Movie", "relevance": 169.83, "type": "movie", "id": 1586594, "year": 2019, "result_type": "title", "tmdb_id": 559969, "tmdb_type": "movie", "image_url": "https://cdn.watchmode.com/posters/01586594_poster_w185.jpg" }, { "name": "No Half Measures: Creating the Final Season of Breaking Bad", "relevance": 162.66, "type": "movie", "id": 1672293, "year": 2013, "result_type": "title", "tmdb_id": 239459, "tmdb_type": "movie", "image_url": "https://cdn.watchmode.com/posters/01672293_poster_w185.jpg" }, { "name": "The Road to El Camino: Behind the Scenes of El Camino: A Breaking Bad Movie", "relevance": 125.46, "type": "movie", "id": 539605, "year": 2019, "result_type": "title", "tmdb_id": 934809, "tmdb_type": "movie", "image_url": "https://cdn.watchmode.com/posters/0539605_poster_w185.jpg" }, { "name": "Breaking Bad Wolf", "relevance": 82.63, "type": "tv_movie", "id": 4146033, "year": 2018, "result_type": "title", "tmdb_id": 635602, "tmdb_type": "movie", "image_url": "https://cdn.watchmode.com/posters/04146033_poster_w185.jpg" } ] }
Search for titles/and or people by name or a partial name. Useful for building an autocomplete search of titles and/or people. The results include the field result_type to indicate which type of result it is (title or person). For titles, the movie poster will be returned in image_url, for a person a headshot will be returned in image_url.
Parameter | Required | Description |
---|---|---|
search_value | required | string The phrase to search for, can be a full title or person name, or a partial phrase. For example searching for "The sha" will find the movie "The Shawshank Redemption". |
search_type | optional | int Set this to 1 to include titles and people in results. Set this to 2 to include titles only. Set this to 3 to include movies only. Set this to 4 to include TV only. Set this to 5 to include people only. By default this is set to 1. |
Title Details API
Example Request
curl -i 'https://api.watchmode.com/v1/title/345534/details/?apiKey=YOUR_API_KEY&append_to_response=sources'
Example response (truncated)
{ "id": 3173903, "title": "Breaking Bad", "original_title": "Breaking Bad", "plot_overview": "When Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of only two years left to live. He becomes filled with a sense of fearlessness and an unrelenting desire to secure his family's financial future at any cost as he enters the dangerous world of drugs and crime.", "type": "tv_series", "runtime_minutes": 45, "year": 2008, "end_year": 2013, "release_date": "2008-01-20", "imdb_id": "tt0903747", "tmdb_id": 1396, "tmdb_type": "tv", "genres": [7], "genre_names": ["Drama"], "user_rating": 9.2, "critic_score": 85, "us_rating": "TV-MA", "poster": "https://cdn.watchmode.com/posters/03173903_poster_w185.jpg", "backdrop": "https://cdn.watchmode.com/backdrops/03173903_bd_w780.jpg", "original_language": "en", "similar_titles": [ 316213, 3109684, 335115, 3108093, 350168, 373995, 52048, 312149, 3131957, 3131293, 398260, 3110052 ], "networks": [8], "network_names": ["AMC"], "trailer": "https://www.youtube.com/watch?v=XZ8daibM3AE", "trailer_thumbnail": "https://cdn.watchmode.com/video_thumbnails/536008_pthumbnail_320.jpg", "relevance_percentile": 98.92, "sources": [ { "source_id": 203, "name": "Netflix", "type": "sub", "region": "US", "ios_url": "nflx://www.netflix.com/title/70143836", "android_url": "nflx://www.netflix.com/Browse?q=action%3Dplay%26source%3Dmerchweb%26target_url%3Dhttp%3A%2F%2Fmovi.es%2FVoft6", "web_url": "http://www.netflix.com/title/70143836", "format": "4K", "price": null, "seasons": 5, "episodes": 62 }, { "source_id": 349, "name": "iTunes", "type": "buy", "region": "US", "ios_url": "com.apple.TVShows://product/Pilot,%20Season%201/271382034/tvSeason", "android_url": null, "web_url": "https://itunes.apple.com/us/tv-season/pilot/id271383858?i=271866344&uo=4&at=1000l3V2", "format": "HD", "price": 1.99, "seasons": 5, "episodes": 62 }, { "source_id": 307, "name": "VUDU", "type": "buy", "region": "US", "ios_url": "vuduapp://play?contentId=207577", "android_url": "vuduapp://207577", "web_url": "https://www.vudu.com/content/movies/details/Breaking-Bad-Pilot/207577", "format": "HD", "price": 1.99, "seasons": 5, "episodes": 62 } ] }
/v1/title/{title_id}/details/
Get the details for a specific title, using the Watchmode universal ID, TMDB ID, or IMDB ID. You can optionally append other title APIs to this response, using the append_to_response parameter.
Parameter | Required | Description |
---|---|---|
{title_id} | required | string Replace {title_id} in the URL with the title ID you want details for. This can be a numerical Watchmode title ID, or an IMDB ID, or you can use the TMDB type and id combination. For example, the TMDB combination for The Shawshank Redemption is movie-278 and for Breaking Bad is tv-1396. Using the Watchmode ID costs 1 against your quota, using IMDB or TMDB costs 2. |
append_to_response | optional | string To add the results from one of the other /title/ endpoints to this request, pass one (or multiple comma separated) of the following values: sources, seasons, episodes, cast-crew. Each value you add will cost 1 additional credit. |
language | optional | string Two letter iso_639_1 language code. Return the title and plot overview in the language of your choosing (default is EN). If this is set, and not to EN, then an additional field called english_title will be returned with the title in English if available. |