# Person details API

> The person endpoint returns one actor, director or crew member by id at GET /3/person/{person_id}. The JSON matches TMDB v3: biography, birthday, place of birth, profile image and department. Companion endpoints return movie, TV and combined credits, external ids, profile images and the popular list.

## Endpoint

`GET /3/person/{person_id}`

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

Response:

```json
{
  "adult": false,
  "also_known_as": [
    "Thomas Jeffrey Hanks"
  ],
  "biography": "Thomas Jeffrey Hanks (born July 9, 1956) is an American actor and filmmaker. Known for both his comedic and dramatic roles, Hanks is one of the most popular and recognizable film stars worldwide, and is widely regarded as an American cultur...",
  "birthday": "1956-07-09",
  "deathday": null,
  "gender": 2,
  "homepage": null,
  "id": 31,
  "imdb_id": "nm0000158",
  "known_for_department": "Acting",
  "name": "Tom Hanks",
  "place_of_birth": "Concord, California, USA",
  "popularity": 12.98,
  "profile_path": "/oFvZoKI6lvU03n4YoNGAll9rkas.jpg"
}
```

## Get person details

`GET /3/person/{person_id}` returns the core record for one person: name, biography, birthday, place of birth, department, profile image and IMDb id. The id is the numeric TMDB person id, so Tom Hanks stays `31` and Leonardo DiCaprio stays `6193`. People who work in front of and behind the camera share one id space.

The example reads Tom Hanks and appends his combined credits, then prints the name, birthday, main department and how many acting credits he has.

```bash
curl -sSf "https://api.amodb.dev/3/person/31?language=en-US&append_to_response=combined_credits" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```js
const url = 'https://api.amodb.dev/3/person/31?language=en-US&append_to_response=combined_credits';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const person = await res.json();
console.log(person.name, person.birthday, person.known_for_department, person.combined_credits.cast.length);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/person/31",
    params={"language": "en-US", "append_to_response": "combined_credits"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
person = r.json()
print(person["name"], person["birthday"], person["known_for_department"], len(person["combined_credits"]["cast"]))
```

```php
<?php
$url = 'https://api.amodb.dev/3/person/31?language=en-US&append_to_response=combined_credits';
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$person = json_decode($body, true);
echo $person['name'], ' ', $person['birthday'], ' ', count($person['combined_credits']['cast']), PHP_EOL;
```

```go
package main

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

type Person struct {
	Name         string `json:"name"`
	Birthday     string `json:"birthday"`
	Department   string `json:"known_for_department"`
	PlaceOfBirth string `json:"place_of_birth"`
}

func main() {
	req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/person/31?language=en-US", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var p Person
	if err := json.NewDecoder(res.Body).Decode(&p); err != nil {
		panic(err)
	}
	fmt.Println(p.Name, p.Birthday, p.Department, p.PlaceOfBirth)
}
```

### Parameters

| Parameter            | In    | Required   | Description                                                                                                                   |
| -------------------- | ----- | ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `person_id`          | path  | yes        | Numeric person id, for example `31`.                                                                                          |
| `api_key`            | query | one of two | Your key. Use this or the `Authorization: Bearer` header.                                                                     |
| `language`           | query | no         | TMDB tag such as `en-US` or `ru-RU`. The biography is returned in that language when a translation exists.                    |
| `append_to_response` | query | no         | Comma separated list: `movie_credits`, `tv_credits`, `combined_credits`, `external_ids`, `images`. Unknown names are ignored. |

### Response fields

| Field                  | Type           | Notes                                                                                      |
| ---------------------- | -------------- | ------------------------------------------------------------------------------------------ |
| `id`                   | integer        | Person id.                                                                                 |
| `name`                 | string         | Display name, in the requested `language` when a translation exists.                       |
| `also_known_as`        | array          | Alternative names and spellings.                                                           |
| `biography`            | string         | Localized text, empty when no translation exists.                                          |
| `birthday`, `deathday` | string or null | `YYYY-MM-DD`. `deathday` is null for living people.                                        |
| `place_of_birth`       | string or null | Free text.                                                                                 |
| `gender`               | integer        | 0 not specified, 1 female, 2 male, 3 non-binary.                                           |
| `known_for_department` | string         | Main job, for example `Acting` or `Directing`.                                             |
| `imdb_id`              | string or null | IMDb person id such as `nm0000158`.                                                        |
| `homepage`             | string or null | Official site.                                                                             |
| `profile_path`         | string or null | Append to `https://img.amodb.dev/t/p/{size}`. See [images](https://amodb.dev/images-api/). |
| `popularity`           | number         | Relative score used by the popular list.                                                   |
| `adult`                | boolean        | Always `false`. Adult people are never served.                                             |

### Example response

`GET /3/person/31?language=en-US`, with the biography shortened:

```json
{
  "adult": false,
  "also_known_as": [
    "Thomas Jeffrey Hanks"
  ],
  "biography": "Thomas Jeffrey Hanks (born July 9, 1956) is an American actor and filmmaker. Known for both his comedic and dramatic roles, Hanks is one of the most popular...",
  "birthday": "1956-07-09",
  "deathday": null,
  "gender": 2,
  "homepage": null,
  "id": 31,
  "imdb_id": "nm0000158",
  "known_for_department": "Acting",
  "name": "Tom Hanks",
  "place_of_birth": "Concord, California, USA",
  "popularity": 12.98,
  "profile_path": "/oFvZoKI6lvU03n4YoNGAll9rkas.jpg"
}
```

## Filmography endpoints

Three endpoints list what a person worked on. All take `language` and return the keys `id`, `cast` and `crew`. When you append them with `append_to_response`, the `id` key is left out.

| Method and path                            | Returns                                                                             | Extra parameters |
| ------------------------------------------ | ----------------------------------------------------------------------------------- | ---------------- |
| `GET /person/{person_id}/movie_credits`    | Movies, with `character` and `order` in `cast` and `department` and `job` in `crew` | none             |
| `GET /person/{person_id}/tv_credits`       | Shows, with `character` in `cast` and `department` and `job` in `crew`              | none             |
| `GET /person/{person_id}/combined_credits` | Movies and shows together, each with `media_type` set to `movie` or `tv`            | none             |

Movie entries carry `title` and `release_date`. TV entries carry `name` and `first_air_date`, and TV cast entries also hold an `episode_count` key that is `0` in current data. Entries also carry `credit_id`, `genre_ids`, `poster_path`, `vote_average` and the other list fields. The snippet below sorts combined credits by date and prints the five newest.

```js
const credits = person.combined_credits;
const date = (c) => c.release_date || c.first_air_date || '';
const latest = credits.cast.filter((c) => date(c)).sort((a, b) => date(b).localeCompare(date(a))).slice(0, 5);
for (const c of latest) console.log(date(c), c.media_type, c.title || c.name, 'as', c.character);
```

## Lists and images

| Method and path                        | Returns                                                                                          | Extra parameters   |
| -------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------ |
| `GET /person/popular`                  | Paged list of popular people with `known_for` titles                                             | `language`, `page` |
| `GET /person/{person_id}/images`       | Profile photos in a `profiles` array                                                             | none               |
| `GET /person/{person_id}/external_ids` | `imdb_id`, `wikidata_id`, `facebook_id`, `instagram_id`, `tiktok_id`, `twitter_id`, `youtube_id` | none               |

Popular entries hold `id`, `name`, `original_name`, `known_for_department`, `gender`, `profile_path`, `popularity` and a `known_for` array. Pages run from 1 to 500. Profile photos are covered on [images](https://amodb.dev/images-api/), and external ids are on [find by external id](https://amodb.dev/find-by-external-id/).

amodb does not offer person translations, the newest person record, tagged images or changes. Ask for the biography in the language you need with the `language` parameter instead.

## Errors

| HTTP | status_code | When                                                                    |
| ---- | ----------- | ----------------------------------------------------------------------- |
| 401  | 7           | The key is missing or wrong.                                            |
| 402  | 36          | The plan period has ended.                                              |
| 404  | 34          | No person with that id, an adult person, or a path that is not offered. |
| 405  | 37          | You called a write method.                                              |
| 429  | 25          | Over your requests per minute. Wait for the `Retry-After` seconds.      |

The full list is on [errors](https://amodb.dev/errors/), and the windows per plan are on [rate limits](https://amodb.dev/rate-limits/).

## Practical notes

- Person details and credit lists are cached for 6 hours. The popular list is cached for 30 minutes and pages run from 1 to 500.
- Add `combined_credits` through `append_to_response` instead of making a second call. Both ways return the same data.
- In `movie_credits`, each `cast` entry has an `order` value, the person's billing position in that movie. TV entries have no `order`, so sort them by `first_air_date`.
- Use `known_for_department` to decide which list to show first: `cast` for actors, `crew` for directors and writers.
- Look up a person by name on [search](https://amodb.dev/search/), then use the id here.

## Questions and answers

### How do I get an actor's full filmography?

Call GET /3/person/{person_id}/combined_credits for movies and TV in one reply, or add append_to_response=combined_credits to the person request. Each entry has media_type so you can split movies from shows.

### What do the gender values mean?

0 means not specified, 1 female, 2 male and 3 non-binary. Many records keep 0, so do not treat it as an error and do not build logic that depends on it.

### Which size should I use for profile photos?

Use w185 for lists and h632 for detail pages, both on img.amodb.dev. Profile paths can be null, so keep a placeholder image ready for people without a photo.

### Is there a way to search people by name?

Yes, GET /3/search/person with a query parameter. It lives on the search page, and the id it returns is the person_id used by every endpoint here.

## Related pages

- [Credits API](https://amodb.dev/credits/): Credits API with the same paths and JSON as TMDB v3. Get cast and crew for movies, series, seasons and episodes, with order, department and job fields.
- [Actor API](https://amodb.dev/actor-api/): Actor API on the TMDB v3 people endpoints. Get a biography, a full filmography through combined credits, profile photos and a popular list, in 14 languages.
- [Search API](https://amodb.dev/search/): Search API with the same paths and JSON as TMDB v3. Find movies, TV shows, people, collections, companies and keywords by text, with year filters and paging.
- [Images API and image host](https://amodb.dev/images-api/): Movie images API with TMDB v3 paths: list posters, backdrops, logos and stills per title, then load them from img.amodb.dev in 10 sizes with no key.
- [Find by external id](https://amodb.dev/find-by-external-id/): Look up a movie, series or person by IMDb, TVDB, Wikidata or Kinopoisk id with the TMDB find endpoint, and read external ids and Wikidata facts for a title.
- [Quickstart](https://amodb.dev/quickstart/): Make your first amodb call: get a key, request movie details in curl, JavaScript, Python, PHP or Go, then load the poster from img.amodb.dev. Under 2 minutes.

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