# API ghid de episoade

> API-ul ghid de episoade listează fiecare episod al unui serial prin GET /3/tv/{tv_id}/season/{season_number}. Fiecare episod are nume, descriere, dată de difuzare, durată și imagine de cadru. Lista episode_groups numește ordini alternative, precum DVD sau absolută. Căile și JSON-ul sunt identice cu TMDB v3, deci clienții existenți au nevoie doar de un nou URL de bază.

## Obține toate episoadele unui sezon

`GET /3/tv/{tv_id}/season/{season_number}` întoarce un sezon cu array-ul complet `episodes`. Fiecare episod are `episode_number`, `name`, `overview`, `air_date`, `runtime` și `still_path`. ID-urile sunt ID-urile numerice folosite de TMDB, de exemplu `1396` pentru Breaking Bad.

Primești sezoane, episoade cu date și durate, cadre, ultimul episod difuzat și următorul pentru un serial, plus lista ordinilor alternative de episoade. Câmpurile de text urmează parametrul `language`, iar o descriere rămâne goală când nu există traducere.

## Ce date primești

| Endpoint                                                            | Întoarce                                                                                         |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `GET /3/tv/{tv_id}`                                                 | Rezumatul `seasons`, `number_of_seasons`, `status`, `next_episode_to_air`, `last_episode_to_air` |
| `GET /3/tv/{tv_id}/season/{season_number}`                          | Un sezon cu toate `episodes`                                                                     |
| `GET /3/tv/{tv_id}/season/{season_number}/episode/{episode_number}` | Un episod cu `crew` și `guest_stars`                                                             |
| `GET /3/tv/{tv_id}/episode_groups`                                  | Numele, `type` și numărul de episoade ale fiecărei ordini alternative definite pentru serial     |

Câmpurile unui episod:

| Câmp                              | Tip                   | Observații                                                                                                                              |
| --------------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `id`, `show_id`                   | număr întreg          | ID-ul episodului și ID-ul serialului. `show_id` apare în listele de sezoane și în `next_episode_to_air`, nu pe calea unui singur episod |
| `episode_number`, `season_number` | număr întreg          | Poziția în sezon                                                                                                                        |
| `episode_type`                    | șir                   | De exemplu `standard`                                                                                                                   |
| `name`, `overview`                | șir                   | Localizate prin `language`                                                                                                              |
| `air_date`                        | șir sau null          | `YYYY-MM-DD`, gol sau null când nu este anunțat                                                                                         |
| `runtime`                         | număr întreg sau null | Minute                                                                                                                                  |
| `still_path`                      | șir sau null          | Se adaugă la `https://img.amodb.dev/t/p/{size}`                                                                                         |
| `vote_average`, `vote_count`      | număr, număr întreg   | Momentan `0` la episoade                                                                                                                |
| `production_code`                 | șir                   | Cod de studio, adesea gol                                                                                                               |
| `crew`, `guest_stars`             | array                 | Persoanele creditate pe episod, cu aceleași câmpuri ca un membru al distribuției                                                        |

## Începe în 3 pași

1. Alege un plan la [prețuri](https://amodb.dev/ro/pricing/). Toate planurile întorc aceleași date despre episoade, iar diferă doar ritmul cererilor.
2. Creează o cheie în panoul contului tău și păstrează-o într-o variabilă de mediu.
3. Cere `/3/tv/{tv_id}/season/1` cu cheia într-un antet Bearer sau în `api_key`.

## Exemplu de cerere

Exemplul aduce sezonul 1 din Breaking Bad (ID de serial `1396`) în engleză. Programul Go îl decodează în structuri tipizate și afișează câte o linie pentru fiecare episod, cu data difuzării, durata și URL-ul cadrului.

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

```go
package main

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

type Episode struct {
	EpisodeNumber int     `json:"episode_number"`
	Name          string  `json:"name"`
	AirDate       string  `json:"air_date"`
	Runtime       int     `json:"runtime"`
	StillPath     *string `json:"still_path"`
}

type Season struct {
	Name         string    `json:"name"`
	SeasonNumber int       `json:"season_number"`
	Episodes     []Episode `json:"episodes"`
}

func main() {
	client := &http.Client{Timeout: 10 * time.Second}
	url := "https://api.amodb.dev/3/tv/1396/season/1?language=en-US"
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		panic(fmt.Sprintf("amodb returned %s", res.Status))
	}
	var season Season
	if err := json.NewDecoder(res.Body).Decode(&season); err != nil {
		panic(err)
	}
	fmt.Println(season.Name)
	for _, e := range season.Episodes {
		still := "no still"
		if e.StillPath != nil {
			still = "https://img.amodb.dev/t/p/w300" + *e.StillPath
		}
		fmt.Printf("S%02dE%02d  %s  %3d min  %s  %s\n",
			season.SeasonNumber, e.EpisodeNumber, e.AirDate, e.Runtime, e.Name, still)
	}
}
```

Răspuns scurtat: 2 dintre cele 7 episoade, fiecare cu un membru al echipei și un invitat.

```json
{
  "air_date": "2008-01-20",
  "episodes": [
    {
      "air_date": "2008-01-20",
      "episode_number": 1,
      "episode_type": "standard",
      "id": 62085,
      "name": "Pilot",
      "overview": "When an unassuming high school chemistry teacher discovers he has a rare form...",
      "production_code": "",
      "runtime": 59,
      "season_number": 1,
      "show_id": 1396,
      "still_path": "/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg",
      "vote_average": 0,
      "vote_count": 0,
      "crew": [
        {
          "department": "Camera",
          "job": "Director of Photography",
          "credit_id": "52b7029219c29533d00dd2c1",
          "adult": false,
          "gender": 2,
          "id": 2483,
          "known_for_department": "Camera",
          "name": "约翰·托尔",
          "original_name": "约翰·托尔",
          "popularity": 1.1957,
          "profile_path": "/cfL9A6tC7L5Ps5fq1o3WpVKGMb1.jpg"
        }
      ],
      "guest_stars": [
        {
          "character": "Steven Gomez",
          "credit_id": "5271b489760ee35b3e0881a7",
          "order": 8,
          "adult": false,
          "gender": 2,
          "id": 61535,
          "known_for_department": "Acting",
          "name": "史蒂文·迈克尔·奎扎达",
          "original_name": "史蒂文·迈克尔·奎扎达",
          "popularity": 1.7511,
          "profile_path": "/pVYrDkwI6GWvCNL2kJhpDJfBFyd.jpg"
        }
      ]
    },
    {
      "air_date": "2008-01-27",
      "episode_number": 2,
      "episode_type": "standard",
      "id": 62086,
      "name": "Cat's in the Bag...",
      "overview": "Walt and Jesse attempt to tie up loose ends. The desperate situation gets mor...",
      "production_code": "",
      "runtime": 49,
      "season_number": 1,
      "show_id": 1396,
      "still_path": "/AbMoecO0ZZio0LcgeLxlzdyGs6X.jpg",
      "vote_average": 0,
      "vote_count": 0,
      "crew": [
        {
          "department": "Camera",
          "job": "Director of Photography",
          "credit_id": "52b7049c19c2953b63015013",
          "adult": false,
          "gender": 2,
          "id": 17948,
          "known_for_department": "Camera",
          "name": "Reynaldo Villalobos",
          "original_name": "Reynaldo Villalobos",
          "popularity": 0.904,
          "profile_path": "/4YlfhHDRZWhbRgeqT2Bwl1u5p9j.jpg"
        }
      ],
      "guest_stars": [
        {
          "character": "Krazy-8",
          "credit_id": "52725845760ee3046b09426e",
          "order": 504,
          "adult": false,
          "gender": 2,
          "id": 1046460,
          "known_for_department": "Acting",
          "name": "Max Arciniega",
          "original_name": "Max Arciniega",
          "popularity": 1.4399,
          "profile_path": "/eqKAJKPpt41KpsLIkkBnAY4HMAL.jpg"
        }
      ]
    }
  ],
  "name": "Season 1",
  "overview": "High school chemistry teacher Walter White's life is suddenly transformed by...",
  "id": 3572,
  "poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
  "season_number": 1,
  "vote_average": 0
}
```

## Preia un serial întreg

amodb nu acceptă valori de tip `season/1` în `append_to_response`, așa că apelurile pentru sezoane rămân separate. Citește mai întâi `number_of_seasons` și lista `seasons` din detaliile serialului TV, apoi cere fiecare sezon într-o buclă.

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

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

const show = await get('/tv/1396');
for (const { season_number } of show.seasons) {
  const season = await get(`/tv/1396/season/${season_number}`);
  console.log(season.name, season.episodes.length);
}
```

`seasons` include sezonul 0 când serialul are episoade speciale, deci Breaking Bad costă 1 apel de detalii plus 6 apeluri de sezon. Un serial cu 10 sezoane costă 11 cereri. Detaliile sunt ținute în cache la margine 6 ore, așa că stochează rezultatul și reîmprospătează-l după un program.

## Date de difuzare și ce urmează

`GET /3/tv/{tv_id}` conține `next_episode_to_air` și `last_episode_to_air`, obiecte de episod complete cu `name`, `air_date`, `season_number`, `episode_number`, `runtime` și `still_path`. `next_episode_to_air` este `null` când nu s-a anunțat nimic. Combină-l cu `status` (de exemplu `Returning Series`, `Ended` sau `Canceled`) ca să decizi dacă afișezi un cronometru.

`air_date` este o dată calendaristică fără oră. Compară-o cu data de azi pentru a marca episoadele noi. Pentru un program al celor aflate în difuzare, listele `airing_today` și `on_the_air` de la [tendințe și liste](https://amodb.dev/ro/trending-lists/) sunt ținute în cache 30 de minute.

## Cadre și durate

Folosește `w185` sau `w300` pentru rândurile din listă și `original` pentru dimensiunea completă. Dimensiunile cadrelor sunt `w92`, `w185`, `w300` și `original`. Un episod poate să nu aibă cadru, așa că afișează un substituent când `still_path` este `null`. Gazda de imagini nu cere cheie, vezi [imagini](https://amodb.dev/ro/images-api/).

`runtime` este în minute și poate fi `null`. Ca să arăți timpul de vizionare continuă al unui sezon, adună `runtime` din `episodes` și numără `null` ca 0. Adaugă `append_to_response=credits,images` pe calea unui singur episod pentru un obiect `credits` și o listă `stills`. Array-ul `cast` al episodului este gol, iar persoanele se află în `crew` și `guest_stars`. Detaliile sunt la [sezoane și episoade](https://amodb.dev/ro/tv-seasons-episodes/) și [credite](https://amodb.dev/ro/credits/).

## Ordini alternative cu grupurile de episoade

Unele seriale se urmăresc într-o altă ordine decât cea în care au fost difuzate. `GET /3/tv/{tv_id}/episode_groups` listează ordinile definite pentru un serial. Fiecare intrare are `id`, `name`, `description`, `type`, `episode_count`, `group_count` și `network`. Array-ul `results` este gol când nu s-a definit nicio ordine.

| `type` | Ordine                   |
| ------ | ------------------------ |
| 1      | Data difuzării originale |
| 2      | Absolută                 |
| 3      | DVD                      |
| 4      | Digitală                 |
| 5      | Arc narativ              |
| 6      | Producție                |
| 7      | TV                       |

amodb întoarce doar această listă. Nu oferă `GET /3/tv/episode_group/{id}`, deci episoadele din interiorul unui grup nu sunt disponibile. Folosește endpoint-urile de sezon pentru datele episoadelor.

## Cum se compară

| Capacitate              | Extragi date din paginile de episoade | API de metadate cu nivel gratuit | amodb                                                        |
| ----------------------- | ------------------------------------- | -------------------------------- | ------------------------------------------------------------ |
| Sezon complet           | O descărcare de pagină pe sezon       | Vezi documentația lor            | Un apel, cu array-ul `episodes` inclus                       |
| Serial întreg           | Parcurgi fiecare sezon                | Vezi documentația lor            | Un apel pe sezon, listate în `seasons`                       |
| Date de difuzare        | Analizezi textul                      | Vezi documentația lor            | `air_date` plus `next_episode_to_air`                        |
| Cadre                   | Descarci și redimensionezi            | Vezi documentația lor            | Dimensiuni fixe pe `img.amodb.dev`, fără cheie               |
| Alte ordini de episoade | Indisponibil                          | Vezi documentația lor            | Lista `episode_groups`, conținutul grupurilor nu este servit |
| Limbi                   | O singură limbă pe site               | Vezi documentația lor            | 14 limbi prin `language`                                     |

## Prețuri

Planurile sunt plătite în avans pentru 1, 3, 6, 12 sau 24 de luni, cu reduceri de 0, 10, 20, 30 sau 40 la sută pentru perioadele mai lungi, și nu se reînnoiesc singure. Planurile de 20, 40 și 120 de cereri pe minut întorc toate endpoint-urile de pe această pagină. Reîmprospătarea unui serial costă o cerere pentru detalii și una pe sezon. Nu există nivel gratuit. Alege un plan la [prețuri](https://amodb.dev/ro/pricing/).

## Întrebări și răspunsuri

### Cum listez toate episoadele unui serial TV?

Citește number_of_seasons din GET /3/tv/{tv_id}, apoi apelează GET /3/tv/{tv_id}/season/{season_number} pentru fiecare sezon. Fiecare răspuns de sezon conține array-ul complet episodes, deci nu ai nevoie de un apel separat pentru fiecare episod. Câteva sezoane vin cu un array episodes gol când nu există date despre episoade.

### Pot obține mai multe sezoane într-o singură cerere?

Nu. amodb ignoră valorile de tip season/1 din append_to_response, deci fiecare sezon este o cerere separată. Un serial cu 10 sezoane costă 11 cereri, una pentru detalii și una pentru fiecare sezon.

### Ce este un grup de episoade?

Un grup de episoade este o ordine alternativă a acelorași episoade, precum ordinea DVD, absolută sau pe arcuri narative. GET /3/tv/{tv_id}/episode_groups le listează cu nume, tip și număr de episoade. amodb nu servește episoadele din interiorul unui grup.

### Cum aflu când se difuzează următorul episod?

GET /3/tv/{tv_id} întoarce next_episode_to_air cu air_date, season_number și episode_number. Valoarea este null când nu s-a anunțat nimic. last_episode_to_air dă cel mai recent episod.

### De unde vin imaginile episoadelor?

Fiecare episod are un still_path. Adaugă-l la https://img.amodb.dev/t/p/{size}, de exemplu w300 pentru rândurile din listă. Imaginile nu cer cheie. Un still_path poate fi null, așa că ține pregătit un substituent.

## Pagini conexe

- [API sezoane și episoade TV](https://amodb.dev/ro/tv-seasons-episodes/): API sezoane și episoade TV cu aceleași căi și același JSON ca TMDB v3. Citește un sezon cu toate episoadele sau un episod cu data difuzării, durata și cadrul.
- [API seriale TV](https://amodb.dev/ro/tv-series/): API seriale TV cu căile și JSON-ul TMDB v3. Preia un serial după ID cu sezoane, rețele și următorul episod, plus clasificări de conținut și furnizori.
- [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 credite](https://amodb.dev/ro/credits/): API credite cu aceleași căi și același JSON ca TMDB v3. Distribuția și echipa pentru filme, seriale, sezoane și episoade, cu order, department și job.
- [API seriale TV pentru seriale, sezoane și episoade](https://amodb.dev/ro/tv-show-api/): API seriale TV cu starea serialului, rețele, sezoane, episoade și next_episode_to_air. JSON compatibil TMDB v3 în 14 limbi, de la 20 de cereri pe minut.
- [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/episode-guide-api/
