# Productoras y cadenas de TV

> Los endpoints de productoras y cadenas devuelven el nombre, el país de origen y la ruta del logo de un estudio o una cadena de TV por id, en GET /3/company/{company_id} y GET /3/network/{network_id}. Las rutas y el JSON coinciden con TMDB v3. Pasa los ids a with_companies y with_networks en discover para listar sus títulos.

## Endpoint

`GET /3/company/{company_id}`

```bash
curl "https://api.amodb.dev/3/company/25" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Respuesta:

```json
{
  "description": "",
  "headquarters": "",
  "homepage": "",
  "id": 25,
  "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
  "name": "20th Century Fox",
  "origin_country": "US",
  "parent_company": null
}
```

## Obtener los detalles de una productora

`GET /3/company/{company_id}` devuelve una productora: nombre, país de origen y ruta del logo. También incluye `description`, `headquarters`, `homepage` y `parent_company`, pero amodb los deja vacíos. El id es el id de productora de TMDB, así que los ids que guardaste antes siguen funcionando.

El ejemplo lee la primera productora de la película 550 y luego carga esa productora.

```bash
COMPANY_ID=$(curl -sf "https://api.amodb.dev/3/movie/550" \
  -H "Authorization: Bearer $AMODB_KEY" | jq '.production_companies[0].id')
curl -sf "https://api.amodb.dev/3/company/$COMPANY_ID" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```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 movie = await get('/movie/550');
const company = await get(`/company/${movie.production_companies[0].id}`);
console.log(company.name, company.origin_country, company.logo_path);
```

```python
import os
import requests

BASE = "https://api.amodb.dev/3"
HEADERS = {"Authorization": f"Bearer {os.environ['AMODB_KEY']}"}


def get(path):
    r = requests.get(BASE + path, headers=HEADERS, timeout=10)
    r.raise_for_status()
    return r.json()


movie = get("/movie/550")
company = get(f"/company/{movie['production_companies'][0]['id']}")
print(company["name"], company["origin_country"], company["logo_path"])
```

```php
<?php
function amodb_get(string $path): array {
    $ch = curl_init('https://api.amodb.dev/3' . $path);
    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 for $path");
    }
    return json_decode($body, true);
}

$movie = amodb_get('/movie/550');
$company = amodb_get('/company/' . $movie['production_companies'][0]['id']);
echo $company['name'], ' ', $company['origin_country'], PHP_EOL;
```

```go
package main

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

var client = &http.Client{Timeout: 10 * time.Second}

func get(path string, out any) error {
	req, err := http.NewRequest("GET", "https://api.amodb.dev/3"+path, nil)
	if err != nil {
		return err
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
	res, err := client.Do(req)
	if err != nil {
		return err
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		return fmt.Errorf("amodb returned %s for %s", res.Status, path)
	}
	return json.NewDecoder(res.Body).Decode(out)
}

func main() {
	var movie struct {
		Companies []struct {
			ID int `json:"id"`
		} `json:"production_companies"`
	}
	if err := get("/movie/550", &movie); err != nil || len(movie.Companies) == 0 {
		panic("movie has no production companies")
	}
	var company struct {
		Name          string `json:"name"`
		OriginCountry string `json:"origin_country"`
	}
	if err := get(fmt.Sprintf("/company/%d", movie.Companies[0].ID), &company); err != nil {
		panic(err)
	}
	fmt.Println(company.Name, company.OriginCountry)
}
```

### Parámetros

| Parámetro    | En       | Obligatorio    | Descripción                                                 |
| ------------ | -------- | -------------- | ----------------------------------------------------------- |
| `company_id` | ruta     | sí             | Id numérico de la productora, por ejemplo `25`.             |
| `api_key`    | consulta | uno de los dos | Tu clave. Usa esta o el encabezado `Authorization: Bearer`. |

### Campos de la respuesta

| Campo            | Tipo         | Notas                                                            |
| ---------------- | ------------ | ---------------------------------------------------------------- |
| `description`    | texto        | Siempre una cadena vacía.                                        |
| `headquarters`   | texto        | Ciudad o región. Vacío en la mayoría de las productoras.         |
| `homepage`       | texto        | Dirección del sitio web. Vacío en la mayoría de las productoras. |
| `id`             | entero       | Id de la productora.                                             |
| `logo_path`      | texto o null | Añádelo a `https://img.amodb.dev/t/p/{size}`.                    |
| `name`           | texto        | Nombre de la productora.                                         |
| `origin_country` | texto        | Código ISO 3166-1 como `US`. Puede estar vacío.                  |
| `parent_company` | null         | Siempre `null`. amodb no rellena la productora matriz.           |

### Ejemplo de respuesta

```json
{
  "description": "",
  "headquarters": "",
  "homepage": "",
  "id": 25,
  "logo_path": "/nM2MfoMqzJQRiSynsDabOtFKetD.png",
  "name": "20th Century Fox",
  "origin_country": "US",
  "parent_company": null
}
```

La misma estructura llega con cualquier id de productora, por ejemplo `/3/company/1` para Lucasfilm.

## Obtener los detalles de una cadena

`GET /3/network/{network_id}` devuelve una cadena de TV: nombre, país de origen, ruta del logo, `headquarters` y `homepage`. No tiene `description` ni `parent_company`. Lee el id de una cadena en el array `networks` de una serie. La serie `/3/tv/1399` lista a HBO con el id 49.

```json
{
  "headquarters": "",
  "homepage": "",
  "id": 49,
  "logo_path": "/tuomPhY2UtuPTqqFnKMVHvSb724.png",
  "name": "HBO",
  "origin_country": "US"
}
```

| Campo            | Tipo         | Notas                                                                                  |
| ---------------- | ------------ | -------------------------------------------------------------------------------------- |
| `headquarters`   | texto        | Vacío en la mayoría de las cadenas.                                                    |
| `homepage`       | texto        | Vacío en la mayoría de las cadenas.                                                    |
| `id`             | entero       | Id de la cadena.                                                                       |
| `logo_path`      | texto o null | Ruta del archivo del logo.                                                             |
| `name`           | texto        | Nombre de la cadena.                                                                   |
| `origin_country` | texto        | Código ISO 3166-1. Una cadena vacía para servicios de streaming globales como Netflix. |

## Endpoints de este grupo

Todas las rutas comparten la base `https://api.amodb.dev/3` y la misma autenticación que los demás endpoints.

| Método y ruta               | Devuelve                                                                      | Parámetros      |
| --------------------------- | ----------------------------------------------------------------------------- | --------------- |
| `GET /company/{company_id}` | Registro de productora                                                        | `company_id`    |
| `GET /network/{network_id}` | Registro de cadena                                                            | `network_id`    |
| `GET /search/company`       | Lista paginada de productoras con `id`, `name`, `logo_path`, `origin_country` | `query`, `page` |

amodb no ofrece las rutas `alternative_names` ni `images` para productoras y cadenas. El logo es el `logo_path` del propio registro.

### Logos

Construye la dirección del logo como `https://img.amodb.dev/t/p/w185` más `logo_path`. `GET /3/configuration` lista los tamaños de logo: `w92`, `w154`, `w185`, `w300`, `w500` y `original`. La página de [imágenes](https://amodb.dev/es/images-api/) tiene la tabla completa de tamaños. Los archivos de logo son sobre todo PNG, y los archivos de imagen no necesitan clave. Una productora sin logo tiene `logo_path` en `null`.

## Filtrar discover por productora o cadena

Los ids de productora y de cadena resultan más útiles como filtros. Discover convierte un id en una lista de títulos.

| Filtro           | Funciona en                        | Significado                                                         |
| ---------------- | ---------------------------------- | ------------------------------------------------------------------- |
| `with_companies` | `/discover/movie` y `/discover/tv` | Títulos hechos por estas productoras.                               |
| `with_networks`  | `/discover/tv`                     | Series emitidas por estas cadenas. Discover de películas lo ignora. |

Separa varios ids con una coma para exigirlos todos, o con una barra vertical (codificada como `%7C`) para aceptar cualquiera de ellos. La llamada de abajo lista las películas de una productora, ordenadas por popularidad. La segunda llamada lista las series que emitió HBO.

```bash
curl -sf "https://api.amodb.dev/3/discover/movie?with_companies=$COMPANY_ID&sort_by=popularity.desc&page=1" \
  -H "Authorization: Bearer $AMODB_KEY"

curl -sf "https://api.amodb.dev/3/discover/tv?with_networks=49&sort_by=popularity.desc" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Los resultados de discover se guardan en la caché perimetral 30 minutos y llegan 20 por página. La lista completa de filtros está en la página de [discover](https://amodb.dev/es/discover/).

## Encontrar una productora por nombre

`GET /3/search/company?query=lucasfilm` devuelve una lista paginada. Cada fila tiene `id`, `logo_path`, `name` y `origin_country`. Las filas no se ordenan por coincidencia exacta: el estudio llamado `Lucasfilm Ltd.` tiene el id 1 y es la tercera fila, después de dos nombres parecidos. Compara `name` y `origin_country` antes de tomar un id. Las reglas de consulta están en la página de [búsqueda](https://amodb.dev/es/search/). No existe una ruta de búsqueda de cadenas.

## Errores

Una productora o una cadena que no existe devuelve el cuerpo de error de TMDB con `status_code` 34. Los demás fallos usan el mismo cuerpo.

| HTTP | status_code | Cuándo                                                                      |
| ---- | ----------- | --------------------------------------------------------------------------- |
| 401  | 7           | La clave falta o es incorrecta.                                             |
| 402  | 36          | El periodo del plan ha terminado.                                           |
| 404  | 34          | No hay ninguna productora ni cadena con ese id, o el id no es un número.    |
| 405  | 37          | Enviaste un método de escritura.                                            |
| 429  | 25          | Superaste tus solicitudes por minuto. Espera los segundos de `Retry-After`. |

Consulta [errores](https://amodb.dev/es/errors/) para ver la lista completa y [límites de solicitudes](https://amodb.dev/es/rate-limits/) para los encabezados.

## Notas prácticas

- Guarda el `id` de la productora junto al nombre. Los nombres cambian, los ids no.
- Comprueba que `logo_path` no sea `null` antes de mostrarlo. No dependas de `homepage`, `headquarters` ni `description`, porque están vacíos.
- Los detalles de productoras y cadenas se guardan en la caché perimetral 6 horas. Los archivos de logo de `img.amodb.dev` se guardan 30 días.
- Una cadena es un concepto de TV. Para obtener sus series, usa `with_networks` en `/discover/tv`, no en discover de películas.
- Para encontrar una productora por nombre, usa la búsqueda de productoras de arriba y elige la fila correcta por `name` y `origin_country`.

## Preguntas y respuestas

### ¿De dónde saco el id de una productora o de una cadena?

Léelos de títulos que ya obtuviste. Una película lista production_companies, y una serie de TV lista networks y production_companies. Cada entrada trae el id numérico que aceptan los endpoints de productoras y cadenas.

### ¿Puedo listar todas las películas de una productora?

Usa discover con el filtro with_companies. Pasa el id de la productora y recorre los resultados por páginas. Añade with_networks en discover de TV para listar las series que emitió una cadena.

### ¿Los archivos de logo dependen de la clave de API?

No. El JSON que contiene la ruta del logo necesita tu clave, pero los archivos de img.amodb.dev no la necesitan y se guardan en caché 30 días.

### ¿Cómo encuentro una productora por nombre?

Llama a GET /3/search/company?query=lucasfilm. Las filas no se ordenan por coincidencia exacta, así que compara name y origin_country y toma el id de la fila correcta. No hay búsqueda de cadenas, así que lee los ids de cadena desde una serie.

## Páginas relacionadas

- [API de detalles de película](https://amodb.dev/es/movies/): API de detalles de película con rutas y JSON de TMDB v3. Obtén una película por id y añade créditos, puntuaciones y moods con append_to_response, en 14 idiomas.
- [API de series de TV](https://amodb.dev/es/tv-series/): API de series de TV con las mismas rutas y JSON que TMDB v3. Obtén una serie con temporadas, cadenas y próximo episodio, más clasificaciones y plataformas.
- [API Discover](https://amodb.dev/es/discover/): API Discover con los mismos filtros que TMDB v3. Lista películas y series por género, reparto, productora, palabra clave, año, nota, duración y plataforma.
- [API de imágenes y host de imágenes](https://amodb.dev/es/images-api/): API de imágenes de películas con rutas TMDB v3: lista pósters, fondos, logos y fotogramas por título y cárgalos desde img.amodb.dev en 10 tamaños sin clave.
- [API de búsqueda](https://amodb.dev/es/search/): API de búsqueda con rutas y JSON de TMDB v3. Encuentra películas, series, personas, colecciones, productoras y palabras clave por texto, con filtros de año.
- [Inicio rápido](https://amodb.dev/es/quickstart/): Haz tu primera llamada a amodb: consigue una clave, pide los detalles de una película en curl, JavaScript, Python, PHP o Go y carga el póster. En 2 minutos.

Actualizado: 2026-10-18. Source: https://amodb.dev/es/companies-networks/
