# Quickstart

> Buy a plan, create a key in your account and send it with your first request to https://api.amodb.dev/3/movie/550. The response is the TMDB v3 JSON you already know. Then build a poster URL on img.amodb.dev from poster_path. If you already use TMDB or OMDb, change only the base URL and the key.

## 1. Get a key

Pick a plan on the [pricing page](https://amodb.dev/pricing/) and pay for a period. Then open **Account**, then **API keys**, and create a key. A key is 32 lowercase hex characters, the same shape as a TMDB v3 key.

The full key is shown once. Store it as an environment variable named `AMODB_KEY` so the samples on this page work as written.

```bash
export AMODB_KEY="0123456789abcdef0123456789abcdef"
```

## 2. Request movie details

Call `GET /3/movie/{movie_id}`. Send the key as a Bearer token or as `api_key` in the query. Both are accepted on every endpoint.

```bash
curl "https://api.amodb.dev/3/movie/550?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const res = await fetch("https://api.amodb.dev/3/movie/550?language=en-US", {
  headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
if (!res.ok) throw new Error(`amodb ${res.status}`);
const movie = await res.json();
console.log(movie.title, movie.runtime);
```

```python
import os
import requests

res = requests.get(
    "https://api.amodb.dev/3/movie/550",
    params={"language": "en-US"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
res.raise_for_status()
movie = res.json()
print(movie["title"], movie["runtime"])
```

```php
<?php
$ch = curl_init("https://api.amodb.dev/3/movie/550?language=en-US");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("AMODB_KEY")],
]);
$movie = json_decode(curl_exec($ch), true);
echo $movie["title"] . " " . $movie["runtime"];
```

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/movie/550?language=en-US", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()

	var movie struct {
		Title   string `json:"title"`
		Runtime int    `json:"runtime"`
	}
	json.NewDecoder(res.Body).Decode(&movie)
	fmt.Println(movie.Title, movie.Runtime)
}
```

A 200 response has the TMDB v3 fields. A short part of it:

```json
{
  "id": 550,
  "imdb_id": "tt0137523",
  "title": "Fight Club",
  "release_date": "1999-10-15",
  "runtime": 139,
  "poster_path": "/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
}
```

## 3. Load the poster

Join the image base URL, a size and `poster_path`. Images need no key and stay cached for 30 days.

```bash
curl -o poster.jpg "https://img.amodb.dev/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
```

```js
const poster = `https://img.amodb.dev/t/p/w500${movie.poster_path}`;
```

```python
poster = f"https://img.amodb.dev/t/p/w500{movie['poster_path']}"
```

See [images](https://amodb.dev/images/) for every size and for building URLs from `/3/configuration`.

## 4. Move an existing client

For a TMDB v3 client, change the base URL from `https://api.themoviedb.org/3` to `https://api.amodb.dev/3` and use your amodb key. For an OMDb client, change it to `https://api.amodb.dev/omdb/` and pass the same key as `apikey`.

Account, session, rating and list write methods of TMDB are not offered. They return HTTP 405 with `status_code` 37, so a read only client needs no other change.

## 5. Handle limits and errors

Each key has a rate per minute set by its plan. Read `X-RateLimit-Remaining` and wait for `Retry-After` seconds after a 429. Errors use the TMDB body with `success`, `status_code` and `status_message`.

Read [rate limits](https://amodb.dev/rate-limits/) and [errors](https://amodb.dev/errors/) before you go to production.

## Questions and answers

### Where do I find my key?

Log in at amodb.dev, open Account and then API keys, and create a key. The full key is shown once, so copy it into your secret store right away.

### Can I use the key in a browser app?

Only behind your own server. A key in client side code is public, and anyone who copies it uses your request rate.

## Related pages

- [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.
- [Images](https://amodb.dev/images/): Load posters, backdrops and profile photos from img.amodb.dev with TMDB paths and sizes from w92 to original. No key, 30 day cache, one URL pattern for all.
- [Errors](https://amodb.dev/errors/): Every amodb error with its HTTP status, TMDB status_code and message, plus the OMDb error shape. What each one means and what your client should do next.
- [Rate limits](https://amodb.dev/rate-limits/): amodb limits each key by requests per minute in a sliding 60 second window: 20, 40 or 120 by plan. Read the rate limit headers and handle 429 with Retry-After.

Updated: 2026-10-18. Source: https://amodb.dev/quickstart/
