# API colecții

> O colecție grupează filmele unei francize, precum o trilogie sau o serie lungă de filme. GET /3/collection/{collection_id} întoarce numele, descrierea, imaginile și un array parts cu filmele în ordinea lansării. Filmele trimit înapoi la colecția lor prin belongs_to_collection, deci poți merge în ambele direcții.

## Endpoint

`GET /3/collection/{collection_id}`

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

Răspuns:

```json
{
  "id": 10,
  "name": "Star Wars - Saga",
  "overview": "An epic space-opera theatrical film series, which depicts the adventures of various characters \"a long time ago in a galaxy far, far away….\"",
  "poster_path": "/6mHkagjziBPth2Mx0VpEercocm4.jpg",
  "backdrop_path": "/iY2ujEY2m68OTTlPFTiHub9joHS.jpg",
  "parts": [
    {
      "adult": false,
      "backdrop_path": "/jKquaxnCRelAbibZVMdTsUEnkKm.jpg",
      "genre_ids": [
        12,
        28,
        878
      ],
      "id": 11,
      "original_language": "en",
      "original_title": "Star Wars",
      "overview": "Princess Leia is captured and held hostage by the evil Imperial forces in their effort to take over the galactic Empire. Venturesome Luke Skywalker and dashing captain Han Solo team together with the loveable robot duo R2-D2 and C-3PO to re...",
      "popularity": 70.481,
      "poster_path": "/fai0rspsNeJCS69wHNjOdWxcI7P.jpg",
      "release_date": "1977-05-25",
      "title": "Star Wars",
      "video": false,
      "vote_average": 8.207,
      "vote_count": 23028,
      "media_type": "movie"
    },
    {
      "adult": false,
      "backdrop_path": "/k9pshruhCpJAdH9RaGJO6jaWQ4X.jpg",
      "genre_ids": [
        12,
        28,
        878
      ],
      "id": 1891,
      "original_language": "en",
      "original_title": "The Empire Strikes Back",
      "overview": "The epic saga continues as Luke Skywalker, in hopes of defeating the evil Galactic Empire, learns the ways of the Jedi from aging master Yoda. But Darth Vader is more determined than ever to capture Luke. Meanwhile, rebel leader Princess Le...",
      "popularity": 29.9034,
      "poster_path": "/nNAeTmF4CtdSgMDplXTDPOpYzsX.jpg",
      "release_date": "1980-05-20",
      "title": "The Empire Strikes Back",
      "video": false,
      "vote_average": 8.393,
      "vote_count": 18993,
      "media_type": "movie"
    },
    {
      "adult": false,
      "backdrop_path": "/ziECpBRIyclmBNaFSWlvCfsKbMD.jpg",
      "genre_ids": [
        12,
        28,
        878
      ],
      "id": 1892,
      "original_language": "en",
      "original_title": "Return of the Jedi",
      "overview": "Luke Skywalker leads a mission to rescue his friend Han Solo from the clutches of Jabba the Hutt, the Emperor prepares to crush the Rebellion with a more powerful Death Star, and the Rebel fleet mounts a massive attack on the space station....",
      "popularity": 26.3255,
      "poster_path": "/jQYlydvHm3kUix1f8prMucrplhm.jpg",
      "release_date": "1983-05-25",
      "title": "Return of the Jedi",
      "video": false,
      "vote_average": 7.911,
      "vote_count": 17442,
      "media_type": "movie"
    }
  ]
}
```

## Obține o colecție

`GET /3/collection/{collection_id}` întoarce o franciză: numele, o descriere, un poster, o imagine de fundal și array-ul `parts`. Fiecare parte este un rezumat de film cu câmpurile de care ai nevoie pentru un card, deci un singur apel poate desena un raft întreg de franciză.

Exemplul încarcă colecția 10, filmele Star Wars, și își afișează filmele în ordinea lansării.

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

```js
const url = 'https://api.amodb.dev/3/collection/10?language=en-US';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const collection = await res.json();
console.log(collection.name);
for (const p of collection.parts) console.log(p.release_date || 'not dated', p.title);
```

```python
import os
import requests

r = requests.get(
    "https://api.amodb.dev/3/collection/10",
    params={"language": "en-US"},
    headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
    timeout=10,
)
r.raise_for_status()
collection = r.json()
print(collection["name"])
for p in collection["parts"]:
    print(p.get("release_date") or "not dated", p["title"])
```

```php
<?php
$url = 'https://api.amodb.dev/3/collection/10?language=en-US';
$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");
}
$collection = json_decode($body, true);
echo $collection['name'], PHP_EOL;
foreach ($collection['parts'] as $p) {
    echo $p['release_date'] ?: 'not dated', ' ', $p['title'], PHP_EOL;
}
```

```go
package main

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

type Collection struct {
	Name  string `json:"name"`
	Parts []struct {
		Title       string `json:"title"`
		ReleaseDate string `json:"release_date"`
	} `json:"parts"`
}

func main() {
	url := "https://api.amodb.dev/3/collection/10?language=en-US"
	req, _ := http.NewRequest("GET", url, 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 c Collection
	if err := json.NewDecoder(res.Body).Decode(&c); err != nil {
		panic(err)
	}
	fmt.Println(c.Name)
	for _, p := range c.Parts {
		date := p.ReleaseDate
		if date == "" {
			date = "not dated"
		}
		fmt.Println(date, p.Title)
	}
}
```

### Parametri

| Parametru       | Loc        | Obligatoriu          | Descriere                                                                                                                                  |
| --------------- | ---------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `collection_id` | cale       | da                   | ID numeric de colecție, de exemplu `10`.                                                                                                   |
| `api_key`       | interogare | una dintre cele două | Cheia ta. Folosește-o pe aceasta sau antetul `Authorization: Bearer`.                                                                      |
| `language`      | interogare | nu                   | Una dintre cele 14 limbi servite, de exemplu `en-US` sau `fr-FR`. Setează limba titlului și a descrierii fiecărei părți. Implicit `en-US`. |

`name` și `overview` ale colecției vin așa cum sunt stocate și nu se schimbă cu `language`. La unele colecții nu sunt în engleză.

### Câmpurile răspunsului

| Câmp                                           | Tip                 | Observații                                                                                         |
| ---------------------------------------------- | ------------------- | -------------------------------------------------------------------------------------------------- |
| `id`                                           | număr întreg        | ID-ul colecției.                                                                                   |
| `name`                                         | șir                 | Numele francizei.                                                                                  |
| `overview`                                     | șir                 | Descriere scurtă. Goală la unele colecții.                                                         |
| `poster_path`, `backdrop_path`                 | șir sau null        | Se adaugă la `https://img.amodb.dev/t/p/{size}`. Vezi [imagini](https://amodb.dev/ro/images-api/). |
| `parts`                                        | array               | Rezumate de filme, cu cel mai vechi `release_date` primul.                                         |
| `parts[].id`                                   | număr întreg        | ID-ul filmului. Transmite-l la [detalii film](https://amodb.dev/ro/movies/).                       |
| `parts[].title`, `parts[].original_title`      | șir                 | Titlul localizat și cel original.                                                                  |
| `parts[].overview`                             | șir                 | Sinopsis localizat.                                                                                |
| `parts[].release_date`                         | șir                 | `YYYY-MM-DD` sau un șir gol pentru un film fără dată. Acele părți vin la sfârșit.                  |
| `parts[].media_type`                           | șir                 | Mereu `movie` într-o colecție.                                                                     |
| `parts[].genre_ids`                            | array               | ID-uri numerice. Numele vin de la [genuri](https://amodb.dev/ro/genres/).                          |
| `parts[].adult`, `parts[].video`               | boolean             | `adult` este mereu `false`, pentru că titlurile pentru adulți nu sunt servite.                     |
| `parts[].original_language`                    | șir                 | Cod de limbă din două litere.                                                                      |
| `parts[].popularity`                           | număr               | Scor de popularitate.                                                                              |
| `parts[].poster_path`, `parts[].backdrop_path` | șir sau null        | Imaginile filmului.                                                                                |
| `parts[].vote_average`, `parts[].vote_count`   | număr, număr întreg | Scor agregat al utilizatorilor.                                                                    |

### Exemplu de răspuns

Sunt arătate două dintre cele nouă părți.

```json
{
  "id": 10,
  "name": "Star Wars Collection",
  "overview": "An epic space-opera theatrical film series, which depicts the adventures of various cha...",
  "poster_path": "/pWVLFh4OuejTpUaDQbB1C4zoS2p.jpg",
  "backdrop_path": "/iY2ujEY2m68OTTlPFTiHub9joHS.jpg",
  "parts": [
    {
      "adult": false,
      "backdrop_path": "/zqkmTXzjkAgXmEWLRsY4UpTWCeo.jpg",
      "genre_ids": [12, 28, 878],
      "id": 11,
      "original_language": "en",
      "original_title": "Star Wars",
      "overview": "Princess Leia is captured and held hostage by the evil Imperial forces in their effort...",
      "popularity": 70.481,
      "poster_path": "/fai0rspsNeJCS69wHNjOdWxcI7P.jpg",
      "release_date": "1977-05-25",
      "title": "Star Wars",
      "video": false,
      "vote_average": 8.207,
      "vote_count": 23025,
      "media_type": "movie"
    },
    {
      "adult": false,
      "backdrop_path": "/k9pshruhCpJAdH9RaGJO6jaWQ4X.jpg",
      "genre_ids": [12, 28, 878],
      "id": 1891,
      "original_language": "en",
      "original_title": "The Empire Strikes Back",
      "overview": "The epic saga continues as Luke Skywalker, in hopes of defeating the evil Galactic Empi...",
      "popularity": 29.9034,
      "poster_path": "/nNAeTmF4CtdSgMDplXTDPOpYzsX.jpg",
      "release_date": "1980-05-20",
      "title": "The Empire Strikes Back",
      "video": false,
      "vote_average": 8.393,
      "vote_count": 18990,
      "media_type": "movie"
    }
  ]
}
```

Șirurile lungi sunt tăiate cu `...` pe această pagină. Răspunsul real conține textul complet.

## Găsește colecția unui film

Rareori pornești de la un ID de colecție. Pornești de la un film, iar fișa de [detalii film](https://amodb.dev/ro/movies/) îți spune cărei colecții aparține. Câmpul `belongs_to_collection` este un obiect cu `id`, `name`, `poster_path` și `backdrop_path`. Este `null` pentru un film care nu face parte dintr-o franciză, precum filmul 550.

```json
{
  "id": 11,
  "title": "Star Wars",
  "belongs_to_collection": {
    "id": 10,
    "name": "Star Wars Collection",
    "poster_path": "/pWVLFh4OuejTpUaDQbB1C4zoS2p.jpg",
    "backdrop_path": "/iY2ujEY2m68OTTlPFTiHub9joHS.jpg"
  }
}
```

Exemplul de mai jos urmează acea legătură de la un film la franciza lui în două cereri.

```js
const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };

async function getJson(path) {
  const res = await fetch(`${base}${path}`, { headers });
  if (!res.ok) throw new Error(`${path} returned ${res.status}`);
  return res.json();
}

const movie = await getJson('/movie/11');
if (movie.belongs_to_collection) {
  const collection = await getJson(`/collection/${movie.belongs_to_collection.id}`);
  console.log(movie.title, 'is one of', collection.parts.length, 'films in', collection.name);
}
```

## Imagini și căutare

Posterul și imaginea de fundal ale unei francize sunt câmpurile `poster_path` și `backdrop_path` din fișa colecției. Construiește adresa fișierului din ele, după cum este descris la [imagini](https://amodb.dev/ro/images-api/). amodb nu oferă căile `/collection/{collection_id}/images` și `/collection/{collection_id}/translations`, deci o colecție nu are listă de postere alternative și nici rânduri pe limbi. Titlurile părților urmează în schimb parametrul `language`, iar [traduceri](https://amodb.dev/ro/translations/) acoperă căile care întorc rânduri pe limbi.

Ca să găsești o colecție după nume, folosește `GET /3/search/collection?query=matrix`, descris la [căutare](https://amodb.dev/ro/search/). Fiecare rezultat are `id`, `name`, `overview`, `poster_path`, `backdrop_path`, `original_language`, `original_name` și `adult`.

## Erori

| HTTP | status_code | Când                                                                         |
| ---- | ----------- | ---------------------------------------------------------------------------- |
| 401  | 7           | Cheia lipsește sau este greșită.                                             |
| 402  | 36          | Perioada planului s-a încheiat.                                              |
| 404  | 34          | Nu există o colecție cu acel ID sau ID-ul nu este un număr.                  |
| 405  | 37          | Ai folosit o metodă de scriere pe o cale de colecție.                        |
| 429  | 25          | Ai depășit cererile pe minut. Așteaptă numărul de secunde din `Retry-After`. |

Vezi [erori](https://amodb.dev/ro/errors/) pentru lista completă și [limite de cereri](https://amodb.dev/ro/rate-limits/) pentru limitele planurilor.

## Note practice

- Colecțiile grupează doar filme. Un film are cel mult un obiect `belongs_to_collection`, deci un film corespunde unei singure francize.
- Părțile sosesc în ordinea lansării. Filmele cu dată goală vin la sfârșit, deci etichetează-le ca încă nedatate.
- Fișa colecției este ținută în cache la margine 6 ore, ca alte detalii, deci o pagină de franciză poate reutiliza un singur răspuns atât timp.
- O parte poartă doar câmpuri de rezumat. Preia durata, creditele și evaluările fiecărui film prin [detalii film](https://amodb.dev/ro/movies/) când utilizatorul îl deschide.
- Folosește `parts[].id` drept cheie pentru un film, nu poziția lui în franciză. Ordinile și datele se corectează în timp.
- Verifică dacă `name` este în limba ta de afișare înainte să-l arăți. Unele colecții au un nume în altă limbă, iar `language` nu îl schimbă.

## Întrebări și răspunsuri

### Cum aflu dacă un film aparține unei colecții?

Citește belongs_to_collection din fișa de detalii a filmului. Este un obiect cu id, name, poster_path și backdrop_path, sau null când filmul stă singur. Folosește acel ID în calea colecției.

### Sunt părțile întoarse în ordinea lansării?

Da. Array-ul parts vine de la cel mai vechi după release_date. Un film fără dată are release_date gol și este pus la sfârșit, deci etichetează-l ca încă nedatat.

### Au colecții serialele TV?

Nu. Colecțiile grupează filme. Un serial este descris prin sezoanele și episoadele lui, documentate pe paginile despre seriale TV și despre sezoane și episoade.

### Cum caut o colecție după nume?

Folosește calea de căutare a colecțiilor, de exemplu /3/search/collection?query=matrix. Întoarce o listă paginată cu id, name și imagini. Ia ID-ul și apelează endpoint-ul colecției pentru părți.

## Pagini conexe

- [API detalii film](https://amodb.dev/ro/movies/): API detalii film cu aceleași căi și același JSON ca TMDB v3. Preia un film după ID, adaugă credite, evaluări și atmosferă cu append_to_response, în 14 limbi.
- [API căutare](https://amodb.dev/ro/search/): API căutare cu căile și JSON-ul TMDB v3. Găsește filme, seriale, persoane, colecții, companii și cuvinte-cheie după text, cu filtre de an și paginare.
- [API imagini și gazdă de imagini](https://amodb.dev/ro/images-api/): API imagini filme cu căi TMDB v3: listează postere, imagini de fundal, logouri și cadre, apoi încarcă-le de la img.amodb.dev în 10 dimensiuni, fără cheie.
- [API traduceri](https://amodb.dev/ro/translations/): API traduceri filme cu căi TMDB v3: citește fiecare titlu, descriere și slogan stocat al unui film, serial sau episod în toate limbile deodată.
- [API discover](https://amodb.dev/ro/discover/): API discover cu filtrele TMDB v3. Listează filme și seriale după gen, distribuție, companie, cuvânt-cheie, an, evaluare, durată și furnizor, cu sortare.
- [Ghid rapid](https://amodb.dev/ro/quickstart/): Fă primul apel amodb: ia o cheie, cere detaliile unui film în curl, JavaScript, Python, PHP sau Go, apoi încarcă posterul de pe img.amodb.dev. Sub 2 minute.

Actualizat: 2026-10-18. Source: https://amodb.dev/ro/collections/
