# OMDb API alternative

> OMDb is a small single record API with a free key and a daily cap of 1,000 (check their site). amodb answers i, t, s, type, y, plot and page at /omdb/ with the same body fields, limits you per minute and adds TMDB v3 endpoints on one key. JSON only, no XML, no episodes.

## Pick by the shape of your calls

Choose OMDb when you want one small record per title and its free key covers your volume. Choose amodb when you outgrow that, or when you want the same OMDb request style next to credits, images and translations on one key. OMDb returns JSON or XML, uses an `apikey` parameter and offers a free key with a daily request cap of 1,000 (check their site) plus a paid supporter tier. amodb is paid only and answers the main OMDb parameters as well as TMDB v3.

## What stays the same

The OMDb endpoint is at `https://api.amodb.dev/omdb/`, and the trailing slash is optional. Your existing parsing code should not need edits for these elements.

| OMDb element   | On amodb                                                                                                         |
| -------------- | ---------------------------------------------------------------------------------------------------------------- |
| `apikey`       | Same parameter, filled with your amodb key                                                                       |
| `i` and `t`    | Look up by IMDb id or by title                                                                                   |
| `s` and `page` | Search with 10 results per page and a `totalResults` count, `page` up to 100                                     |
| `type` and `y` | Filter by `movie` or `series` and by year                                                                        |
| `plot`         | `short` or `full`                                                                                                |
| `r`            | Only `json` is accepted                                                                                          |
| Body fields    | Named as in OMDb, from `Title` to `Response`                                                                     |
| `Ratings`      | An array of `Source` and `Value` pairs for Internet Movie Database, Rotten Tomatoes and Metacritic, when present |
| Errors         | `{"Response":"False","Error":"..."}` with OMDb wording, in an HTTP 200 reply                                     |

## What does not carry over

- **XML.** A request with `r=xml` returns 400 with `{"Response":"False","Error":"Only r=json is supported."}`.
- **Seasons and episodes.** `Season` and `Episode` are ignored, and `type=episode` finds nothing. A request with `i=tt0903747&Season=1` returns the series record, not a season. Use `/3/tv/{id}/season/{n}` for episodes.
- **Other parameters.** `callback` is ignored.
- **Fields without data.** `DVD`, `Production` and `Website` are always `"N/A"`. Series records have `totalSeasons` and leave out `DVD`, `BoxOffice`, `Production` and `Website`.
- **Posters.** The `Poster` field points to `https://img.amodb.dev/t/p/w300/...` instead of another host. Swap `w300` for `w780` to get a larger image from the same path, and no key is needed for images.

The full parameter and error list is on the [OMDb endpoint](https://amodb.dev/omdb-endpoint/) page.

## Example response

A request with `t=Fight Club` returns a flat object. The reply below is real, with only the `Plot` text shortened.

```json
{
  "Title": "Fight Club",
  "Year": "1999",
  "Rated": "R",
  "Released": "15 Oct 1999",
  "Runtime": "139 min",
  "Genre": "Crime, Drama, Thriller",
  "Director": "David Fincher",
  "Writer": "Chuck Palahniuk, Jim Uhls",
  "Actors": "Brad Pitt, Edward Norton, Meat Loaf",
  "Plot": "A nameless first-person narrator attends support groups in an attempt to subdue his emotional state an...",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/qkrH7rjYKU4KOwwIl6wF6H3ISvm.jpg",
  "Ratings": [
    {
      "Source": "Internet Movie Database",
      "Value": "8.8/10"
    },
    {
      "Source": "Rotten Tomatoes",
      "Value": "81%"
    },
    {
      "Source": "Metacritic",
      "Value": "67/100"
    }
  ],
  "Metascore": "67",
  "imdbRating": "8.8",
  "imdbVotes": "2,669,989",
  "imdbID": "tt0137523",
  "Type": "movie",
  "DVD": "N/A",
  "BoxOffice": "$38,003,039",
  "Production": "N/A",
  "Website": "N/A",
  "Response": "True"
}
```

Values are strings, as in OMDb, so parse `imdbRating`, `imdbVotes` and `Runtime` yourself. Each call counts as one request against your per minute limit, however many fields you read.

## Feature comparison

| Feature         | OMDb                                                  | amodb                                                          |
| --------------- | ----------------------------------------------------- | -------------------------------------------------------------- |
| Pricing model   | Free key plus a paid supporter tier, check their site | Prepaid periods, 1 to 24 months                                |
| Free tier       | Free key with a daily cap of 1,000, check their site  | None, and no trial                                             |
| Authentication  | `apikey` parameter                                    | `apikey` on `/omdb/`, `api_key` or Bearer on `/3`              |
| Response format | JSON or XML                                           | JSON                                                           |
| Languages       | Check their docs                                      | 14 interface languages on `/3` paths                           |
| Movies          | Yes                                                   | Yes                                                            |
| TV              | Series and episodes, check their docs for fields      | Series records on `/omdb/`, seasons and episodes on `/3` paths |
| People          | Names as text in each record                          | Profiles, filmography and images on `/3` paths                 |
| Images          | Poster link in each record                            | Poster link plus image lists, `img.amodb.dev`                  |
| Ratings         | `Ratings`, `Metascore` and `imdbRating` fields        | The same fields, plus a `ratings` object on `/3` paths         |
| Rate limit      | Daily cap on the free key, check their site           | 20, 40 or 120 per minute per key                               |
| Commercial use  | Check their site                                      | Sold as a paid API, see [pricing](https://amodb.dev/pricing/)  |
| Compatibility   | Defines the OMDb protocol                             | OMDb parameters above, and TMDB v3 reads                       |

## Where amodb differs

- **Per minute limits.** Plans allow 20, 40 or 120 requests per minute in a sliding 60 second window. Each keyed reply has `X-RateLimit-Remaining`, so a batch job can slow itself down before it sees a 429.
- **A way up from single records.** An OMDb record has a cast list as text. With the `/3` paths you can ask for the same title with credits, videos and translations in one call, and the `imdbID` finds the record through `/3/find`.
- **Larger images.** OMDb style records give one poster link. The image host serves ten size tokens, from `w92` to `original`.
- **More rating sources.** The `/3/movie/{id}/ratings` extension adds Kinopoisk, Metacritic, Rotten Tomatoes and TMDB values where known.

## Where OMDb is a better fit

- **Small or free projects.** A free key with a daily cap of 1,000 is enough for a prototype or a hobby site, and amodb has no free tier.
- **XML consumers.** If a legacy system parses XML, OMDb offers it and amodb does not.
- **Season and episode lookups.** The amodb `/omdb/` route has no season or episode mode, so a client built on it needs the `/3` paths instead.
- **Simplicity.** One endpoint and a handful of parameters is easy to learn. If that is all you need, you gain little by moving.

## Migrate to amodb

Only the base URL and the key change. Keep the rest of the request as it is, after you search your code for `r=xml`, `Season`, `Episode` and `type=episode`.

```js
const OMDB_BASE = process.env.OMDB_BASE_URL; // before: your current OMDb base URL
const AMODB_BASE = 'https://api.amodb.dev/omdb/'; // after

async function lookup(title) {
  const url = new URL(AMODB_BASE);
  url.searchParams.set('apikey', process.env.AMODB_KEY);
  url.searchParams.set('t', title);
  url.searchParams.set('plot', 'short');
  const res = await fetch(url);
  const data = await res.json();
  if (data.Response === 'False') throw new Error(data.Error);
  return data;
}

const movie = await lookup('Fight Club');
console.log(movie.Title, movie.Year, movie.imdbRating, movie.Poster);
```

Keep checking the `Response` field, as you did with OMDb. When the value is the string `"False"`, the `Error` field carries the message. For episodes, map the `imdbID` once with `/3/find` and read seasons from the `/3` side:

```bash
curl -s "https://api.amodb.dev/3/find/tt0903747?external_source=imdb_id&api_key=$AMODB_KEY"
curl -s "https://api.amodb.dev/3/tv/1396/season/1?api_key=$AMODB_KEY"
```

For the TMDB style side, see [authentication](https://amodb.dev/authentication/) and the [quickstart](https://amodb.dev/quickstart/).

## Pricing

amodb is paid, and it renews only when you buy another period. The three plans differ in rate alone, at 20, 40 or 120 requests per minute, and each returns all data. Periods run 1, 3, 6, 12 or 24 months, and the longer ones take 10 to 40 percent off. Check [pricing](https://amodb.dev/pricing/) for current amounts.

## Questions and answers

### Do I have to rewrite my OMDb client?

Not if it uses i, t, s, type, y, plot and page. Change the base URL to https://api.amodb.dev/omdb/ and put your amodb key in the apikey parameter. The body keeps OMDb field names such as imdbRating. Season and Episode parameters and r=xml are not supported.

### Does the amodb OMDb endpoint return XML?

No. It returns JSON only. A request with r=xml gets a 400 reply with the error Only r=json is supported, so remove the r parameter or set r=json before you switch.

### Can I look up seasons and episodes on the OMDb endpoint?

No. The Season and Episode parameters are ignored, so a request with i and Season=1 returns the series record, and type=episode finds nothing. Read episodes from /3/tv/{id}/season/{n} with the same key.

### How is the limit different from the OMDb free key?

OMDb documents a daily cap of 1,000 for its free key, so check their site for current terms. amodb limits requests per minute per key, at 20, 40 or 120 depending on the plan.

### Where do the poster images load from?

The Poster field points to img.amodb.dev at the w300 size. Replace w300 with another size such as w780 in the same URL for a larger image. Images need no key.

### Can I use the same key for TMDB style calls?

Yes. One key works for /omdb/ and for /3 paths. That lets you fetch credits, trailers or translations for an imdbID without a second subscription.

## Related pages

- [OMDb compatible endpoint](https://amodb.dev/omdb-endpoint/): OMDb API compatible endpoint at api.amodb.dev/omdb/. Look up by i or t, search with s, read the Ratings array and keep your client by changing the base URL.
- [IMDb API alternative](https://amodb.dev/imdb-api-alternative/): IMDb has no free general purpose REST API. Look up titles by IMDb id, read the IMDb rating where known and fetch cast, images and trailers from a paid JSON API.
- [TMDB API alternative](https://amodb.dev/tmdb-api-alternative/): Need a TMDB API alternative? Check terms, limits, languages and ratings, then move to a paid API that keeps most TMDB v3 read paths and JSON. See the gaps.
- [Authentication](https://amodb.dev/authentication/): How to send your amodb key: api_key in the query, an Authorization Bearer header, or apikey for OMDb calls. Key format, storage, rotation and the 401 errors.
- [Pricing](https://amodb.dev/pricing/): amodb plans differ only in requests per minute: 20, 40 or 120. Every plan includes all TMDB v3 and OMDb compatible data. Prepaid, no renewal, no trial.

Updated: 2026-10-18. Source: https://amodb.dev/omdb-api-alternative/
