# Endpoint compatible OMDb

> GET https://api.amodb.dev/omdb/ répond aux requêtes de style OMDb avec les mêmes noms de paramètres et de champs. Cherchez un titre par id IMDb avec i ou par titre avec t, ou recherchez avec s. Les affiches pointent vers img.amodb.dev. Seuls r=json, films et séries sont servis. Changez l'URL de base et la clé : un client typique continue de marcher.

## Point de terminaison

`GET /omdb/`

```bash
curl "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

Réponse:

```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 and relieve his insomniac state.",
  "Language": "English",
  "Country": "United States, Germany",
  "Awards": "Nominated for 1 Oscar. 12 wins & 38 nominations total",
  "Poster": "https://img.amodb.dev/t/p/w300/pfPob0mrC1KiPVP9NXZnqvpks9u.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"
}
```

## Chercher un titre par id IMDb ou par titre

`GET https://api.amodb.dev/omdb/` renvoie un titre sous forme de JSON plat avec les noms de champs d'OMDb. Passez `i` pour un id IMDb comme `tt0137523`, ou `t` pour un titre. L'authentification se fait par le paramètre de requête `apikey`. La réponse a `Response` à `True` en cas de succès et à `False` en cas d'échec.

L'exemple charge Fight Club par id IMDb et s'arrête avec le texte d'erreur d'OMDb quand `Response` vaut `False`.

```bash
curl -sf "https://api.amodb.dev/omdb/?i=tt0137523&plot=short&apikey=$AMODB_KEY"
```

```js
const params = new URLSearchParams({ i: 'tt0137523', plot: 'short', apikey: process.env.AMODB_KEY });
const res = await fetch(`https://api.amodb.dev/omdb/?${params}`);
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const data = await res.json();
if (data.Response === 'False') throw new Error(data.Error);
console.log(data.Title, data.Year, data.imdbRating);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/omdb/",
    params={"i": "tt0137523", "plot": "short", "apikey": os.environ["AMODB_KEY"]},
    timeout=10,
)
r.raise_for_status()
data = r.json()
if data["Response"] == "False":
    raise SystemExit(data["Error"])
print(data["Title"], data["Year"], data["imdbRating"])
```

```php
<?php
$query = http_build_query(['i' => 'tt0137523', 'plot' => 'short', 'apikey' => getenv('AMODB_KEY')]);
$ch = curl_init('https://api.amodb.dev/omdb/?' . $query);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
    throw new RuntimeException("amodb returned $status");
}
$data = json_decode($body, true);
if ($data['Response'] === 'False') {
    throw new RuntimeException($data['Error']);
}
echo $data['Title'], ' ', $data['Year'], ' ', $data['imdbRating'], PHP_EOL;
```

```go
package main

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

type Title struct {
	Title      string `json:"Title"`
	Year       string `json:"Year"`
	ImdbRating string `json:"imdbRating"`
	Response   string `json:"Response"`
	Error      string `json:"Error"`
}

func main() {
	q := url.Values{"i": {"tt0137523"}, "plot": {"short"}, "apikey": {os.Getenv("AMODB_KEY")}}
	client := &http.Client{Timeout: 10 * time.Second}
	res, err := client.Get("https://api.amodb.dev/omdb/?" + q.Encode())
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(res.Status)
	}
	var t Title
	if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
		panic(err)
	}
	if t.Response == "False" {
		panic(t.Error)
	}
	fmt.Println(t.Title, t.Year, t.ImdbRating)
}
```

### Paramètres

| Paramètre | Dans    | Requis                | Description                                                           |
| --------- | ------- | --------------------- | --------------------------------------------------------------------- |
| `apikey`  | requête | oui                   | Votre clé amodb.                                                      |
| `i`       | requête | l'un de `i`, `t`, `s` | Id IMDb du titre : `tt` plus 7 à 9 chiffres, par exemple `tt0137523`. |
| `t`       | requête | l'un de `i`, `t`, `s` | Titre à chercher, renvoie la meilleure correspondance.                |
| `s`       | requête | l'un de `i`, `t`, `s` | Texte de recherche d'au moins 3 lettres, renvoie une liste.           |
| `type`    | requête | non                   | `movie` ou `series`. `episode` ne trouve rien.                        |
| `y`       | requête | non                   | Année de sortie.                                                      |
| `plot`    | requête | non                   | `short` ou `full`. Par défaut `short`.                                |
| `page`    | requête | non                   | Page de résultats de recherche, de 1 à 100. Utilisé avec `s`.         |
| `r`       | requête | non                   | `json` uniquement. Toute autre valeur renvoie HTTP 400.               |

Les paramètres `Season`, `Episode`, `callback` et `v` de l'API OMDb d'origine ne sont pas pris en charge et sont ignorés.

### Champs de la réponse

| Champ                                            | Remarques                                                                                                                     |
| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `Title`, `Year`, `Rated`, `Released`, `Runtime`  | Texte. `Released` ressemble à `15 Oct 1999`.                                                                                  |
| `Genre`, `Director`, `Writer`, `Actors`          | Noms séparés par des virgules.                                                                                                |
| `Plot`, `Language`, `Country`, `Awards`          | Texte.                                                                                                                        |
| `Poster`                                         | Adresse sur `https://img.amodb.dev/t/p/w300/`.                                                                                |
| `Ratings`                                        | Tableau d'objets avec `Source` et `Value`.                                                                                    |
| `Metascore`, `imdbRating`, `imdbVotes`, `imdbID` | Texte, y compris le nombre de votes avec des virgules.                                                                        |
| `Type`                                           | `movie` ou `series`.                                                                                                          |
| `DVD`, `BoxOffice`, `Production`, `Website`      | Films uniquement. `BoxOffice` porte une valeur quand elle est connue. `DVD`, `Production` et `Website` valent toujours `N/A`. |
| `totalSeasons`                                   | Séries uniquement, sous forme de texte. Les réponses de séries n'ont ni `DVD`, ni `BoxOffice`, ni `Production`, ni `Website`. |
| `Response`                                       | `True` ou `False`, toujours une chaîne.                                                                                       |

Les champs suivent OMDb : un analyseur OMDb existant n'a donc besoin d'aucun changement au-delà de l'URL de base.

### Exemple de réponse

```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 and relieve his insomniac state.",
  "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"
}
```

Pour une série comme The Wire (`i=tt0306414`), la réponse se termine par `"Type": "series"`, `"totalSeasons": "5"` et `"Response": "True"`.

## Rechercher avec s

Envoyez `s` pour obtenir une liste au lieu d'un seul titre. Chaque page contient 10 éléments, et `totalResults` donne le total sous forme de chaîne. Demandez `page=2` pour les éléments 11 à 20, et continuez jusqu'à avoir lu `totalResults` éléments. Une page au-delà de la dernière répond `Movie not found!`.

```bash
curl -sf "https://api.amodb.dev/omdb/?s=Matrix&type=movie&page=1&apikey=$AMODB_KEY"
```

| Champ          | Remarques                                                                       |
| -------------- | ------------------------------------------------------------------------------- |
| `Search`       | Tableau d'au plus 10 éléments avec `Title`, `Year`, `imdbID`, `Type`, `Poster`. |
| `totalResults` | Nombre de toutes les correspondances, sous forme de chaîne.                     |
| `Response`     | `True` ou `False`.                                                              |

```json
{
  "Search": [
    {
      "Title": "The Matrix",
      "Year": "1999",
      "imdbID": "tt0133093",
      "Type": "movie",
      "Poster": "https://img.amodb.dev/t/p/w300/kEDbym5htJgDQNenjUtSJxAHysB.jpg"
    },
    {
      "Title": "The Matrix Reloaded",
      "Year": "2003",
      "imdbID": "tt0234215",
      "Type": "movie",
      "Poster": "https://img.amodb.dev/t/p/w300/d0xVNNxIYxId2qHkqpgE39soOvD.jpg"
    }
  ],
  "totalResults": "20",
  "Response": "True"
}
```

La liste est réduite à 2 des 10 éléments.

## Lire le tableau Ratings

`Ratings` contient un objet par source, chacun avec `Source` et `Value`, et `Value` est un texte comme `8.8/10`. Les sources sont `Internet Movie Database`, `Rotten Tomatoes` et `Metacritic`, et seules celles connues pour le titre sont listées. Les champs plats `imdbRating`, `imdbVotes` et `Metascore` reprennent une partie des mêmes données. Découpez `Value` sur la barre oblique si vous avez besoin d'un nombre. Pour des nombres typés et une note Kinopoisk et TMDB, utilisez plutôt le point de terminaison des [notes](https://amodb.dev/fr/ratings/).

## Erreurs

Les échecs de recherche renvoient `{"Response":"False","Error":"..."}`. La plupart viennent avec HTTP 200 : lisez donc `Error` et décidez d'après le texte, pas seulement d'après le statut HTTP.

| Texte de `Error`                             | HTTP | Quand                                                                                                                            |
| -------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------- |
| `Movie not found!`                           | 200  | Aucun titre ne correspond à `t`, la valeur de `i` est valide mais inconnue, ou une page de recherche est au-delà de la dernière. |
| `Incorrect IMDb ID.`                         | 200  | La valeur de `i` n'a pas la forme d'un id IMDb.                                                                                  |
| `Too many results.`                          | 200  | Le texte de recherche fait moins de 3 lettres ou correspond à trop de titres. Allongez le texte ou ajoutez `type` ou `y`.        |
| `Something went wrong.`                      | 200  | Aucun de `i`, `t` et `s` n'a été envoyé.                                                                                         |
| `Only r=json is supported.`                  | 400  | `r` est réglé sur autre chose que `json`.                                                                                        |
| `No API key provided.` ou `Invalid API key!` | 401  | L'`apikey` est absente ou fausse.                                                                                                |
| `Request limit reached!`                     | 429  | Au-dessus de vos requêtes par minute. Attendez les secondes de `Retry-After`.                                                    |

Une offre terminée répond HTTP 402. Voir [erreurs](https://amodb.dev/fr/errors/) et [limites de débit](https://amodb.dev/fr/rate-limits/).

## Migrer un client OMDb

La migration tient en deux modifications : l'URL de base et la clé. Rien d'autre ne change dans la requête.

```js
// Before: the base URL and key of your current OMDb setup.
// After:
const OMDB_BASE = 'https://api.amodb.dev/omdb/';
const OMDB_KEY = process.env.AMODB_KEY;
```

Supprimez `r=xml` si vous l'envoyez. Un client qui lit des épisodes, `Season` ou `callback` a besoin d'une autre source pour ces parties. La limite de débit est par clé : les appels de style OMDb et les [appels de style TMDB](https://amodb.dev/fr/movies/) partagent donc un même budget de 20, 40 ou 120 requêtes par minute.

## Remarques pratiques

- Traitez chaque valeur comme du texte. Convertissez vous-même `Year`, `imdbRating` et `totalResults`, et traitez `N/A` comme une valeur manquante.
- N'utilisez `plot=full` que lorsque vous affichez le long résumé. `short` garde des réponses plus petites.
- Les recherches par `i` ou `t` sont mises en cache plus longtemps que les recherches avec `s` : une recherche répétée renvoie donc la réponse stockée.
- Pour obtenir un id TMDB à partir d'un id IMDb, appelez la [recherche par identifiant externe](https://amodb.dev/fr/find-by-external-id/).
- Les affiches sont en `w300`. Pour d'autres tailles, construisez l'adresse à partir du `poster_path` de style TMDB et de la liste des tailles de [images](https://amodb.dev/fr/images-api/).
- Gardez la clé sur un serveur. Une `apikey` dans l'URL d'une page est visible de tous les visiteurs.

## Questions et réponses

### Ai-je besoin d'une autre clé pour l'endpoint OMDb ?

Non. La même clé de 32 caractères fonctionne sur les chemins de style TMDB et sur l'endpoint OMDb. Envoyez-la dans le paramètre de requête apikey, exactement comme le fait un client OMDb aujourd'hui.

### Puis-je demander du XML ?

Non. Seul r=json est servi. Une requête avec r=xml renvoie HTTP 400 avec le texte Only r=json is supported. : supprimez ce paramètre ou réglez-le sur json avant de changer l'URL de base.

### Pourquoi toutes les valeurs sont-elles des chaînes ?

Le corps suit OMDb champ par champ, et ce format envoie des nombres comme Year, imdbRating et totalResults sous forme de chaînes. Convertissez-les dans votre propre code. Les valeurs inconnues valent N/A.

### Les saisons et les épisodes sont-ils pris en charge ?

Non. Les paramètres Season, Episode, callback et v sont ignorés, et type=episode ne trouve rien. Une réponse de série a totalSeasons mais aucune donnée d'épisode. Utilisez les points de terminaison tv de style TMDB pour les saisons.

### D'où viennent les affiches ?

Le champ Poster contient une adresse sur img.amodb.dev à la taille w300. Les images n'exigent aucune clé : vous pouvez donc placer l'adresse directement dans une balise img.

## Pages liées

- [Alternative à l'API OMDb](https://amodb.dev/fr/omdb-api-alternative/): Plafond quotidien OMDb atteint ? amodb répond aux requêtes de style OMDb et sert aussi les points de terminaison TMDB v3, avec la même clé d'API.
- [Recherche par identifiant externe](https://amodb.dev/fr/find-by-external-id/): Retrouvez un film, une série ou une personne par id IMDb, TVDB, Wikidata ou Kinopoisk avec find de TMDB, puis lisez ids externes et faits Wikidata.
- [API de détails de film](https://amodb.dev/fr/movies/): API de détails de film aux chemins et au JSON de TMDB v3. Obtenez un film par id, ajoutez crédits, notes et ambiances avec append_to_response, en 14 langues.
- [API d'images et hôte d'images](https://amodb.dev/fr/images-api/): API d'images de films aux chemins TMDB v3 : listez affiches, fonds, logos et images par titre, puis chargez-les depuis img.amodb.dev en 10 tailles sans clé.
- [Authentification](https://amodb.dev/fr/authentication/): Comment envoyer votre clé amodb : api_key dans la requête, en-tête Authorization Bearer, ou apikey pour OMDb. Format, stockage, rotation et erreurs 401.
- [Démarrage rapide](https://amodb.dev/fr/quickstart/): Faites votre premier appel amodb : obtenez une clé, demandez un film en curl, JavaScript, Python, PHP ou Go, puis chargez l'affiche. En moins de 2 minutes.

Mis à jour: 2026-10-18. Source: https://amodb.dev/fr/omdb-endpoint/
