# Companies and networks

> The company and network endpoints return the name, origin country and logo path of a studio or a TV network by id, at GET /3/company/{company_id} and GET /3/network/{network_id}. Paths and JSON match TMDB v3. Pass the ids to with_companies and with_networks in discover to list their titles.

## Endpoint

`GET /3/company/{company_id}`

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

Response:

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

## Get company details

`GET /3/company/{company_id}` returns one production company: name, origin country and logo path. It also carries `description`, `headquarters`, `homepage` and `parent_company`, but amodb leaves them empty. The id is the TMDB company id, so ids you stored earlier keep working.

The sample below reads the first production company of movie 550 and then loads that company.

```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)
}
```

### Parameters

| Parameter    | In    | Required   | Description                                               |
| ------------ | ----- | ---------- | --------------------------------------------------------- |
| `company_id` | path  | yes        | Numeric company id, for example `25`.                     |
| `api_key`    | query | one of two | Your key. Use this or the `Authorization: Bearer` header. |

### Response fields

| Field            | Type           | Notes                                          |
| ---------------- | -------------- | ---------------------------------------------- |
| `description`    | string         | Always an empty string.                        |
| `headquarters`   | string         | City or region. Empty for most companies.      |
| `homepage`       | string         | Website address. Empty for most companies.     |
| `id`             | integer        | Company id.                                    |
| `logo_path`      | string or null | Append to `https://img.amodb.dev/t/p/{size}`.  |
| `name`           | string         | Company name.                                  |
| `origin_country` | string         | ISO 3166-1 code such as `US`. Can be empty.    |
| `parent_company` | null           | Always `null`. amodb does not fill the parent. |

### Example response

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

The same shape comes back for every company id, for example `/3/company/1` for Lucasfilm.

## Get network details

`GET /3/network/{network_id}` returns a TV network: name, origin country, logo path, `headquarters` and `homepage`. It has no `description` and no `parent_company`. Read a network id from the `networks` array of a series. The series `/3/tv/1399` lists HBO with id 49.

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

| Field            | Type           | Notes                                                                           |
| ---------------- | -------------- | ------------------------------------------------------------------------------- |
| `headquarters`   | string         | Empty for most networks.                                                        |
| `homepage`       | string         | Empty for most networks.                                                        |
| `id`             | integer        | Network id.                                                                     |
| `logo_path`      | string or null | Logo file path.                                                                 |
| `name`           | string         | Network name.                                                                   |
| `origin_country` | string         | ISO 3166-1 code. An empty string for global streaming services such as Netflix. |

## Endpoints in this group

Every path shares the base `https://api.amodb.dev/3` and the same auth as other endpoints.

| Method and path             | Returns                                                                  | Parameters      |
| --------------------------- | ------------------------------------------------------------------------ | --------------- |
| `GET /company/{company_id}` | Company record                                                           | `company_id`    |
| `GET /network/{network_id}` | Network record                                                           | `network_id`    |
| `GET /search/company`       | Paged list of companies with `id`, `name`, `logo_path`, `origin_country` | `query`, `page` |

amodb does not offer `alternative_names` or `images` paths for companies and networks. The logo is the `logo_path` in the record itself.

### Logos

Build the logo address as `https://img.amodb.dev/t/p/w185` plus `logo_path`. `GET /3/configuration` lists the logo sizes: `w92`, `w154`, `w185`, `w300`, `w500` and `original`. The [images](https://amodb.dev/images-api/) page has the full size table. Logo files are mostly PNG, and image files need no key. A company without a logo has `logo_path` set to `null`.

## Filter discover by company or network

Company and network ids are most useful as filters. Discover turns an id into a list of titles.

| Filter           | Works on                             | Meaning                                                    |
| ---------------- | ------------------------------------ | ---------------------------------------------------------- |
| `with_companies` | `/discover/movie` and `/discover/tv` | Titles made by these companies.                            |
| `with_networks`  | `/discover/tv`                       | Series aired by these networks. Movie discover ignores it. |

Separate several ids with a comma to require all of them, or with a pipe character (encoded as `%7C`) to accept any of them. The call below lists movies for one company, sorted by popularity. The second call lists the series that HBO aired.

```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"
```

Discover results are cached at the edge for 30 minutes and arrive 20 per page. The full filter list is on the [discover](https://amodb.dev/discover/) page.

## Find a company by name

`GET /3/search/company?query=lucasfilm` returns a paged list. Each row has `id`, `logo_path`, `name` and `origin_country`. The rows are not ranked by exact match: the studio called `Lucasfilm Ltd.` has id 1 and is the third row, after two similar names. Compare `name` and `origin_country` before you take an id. The query rules are on the [search](https://amodb.dev/search/) page. There is no network search path.

## Errors

A company or network that does not exist returns the TMDB error body with `status_code` 34. Other failures use the same body.

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

See [errors](https://amodb.dev/errors/) for the whole list and [rate limits](https://amodb.dev/rate-limits/) for the headers.

## Practical notes

- Store the company `id` next to the name. Names change, ids do not.
- Check `logo_path` for `null` before you render it. Do not rely on `homepage`, `headquarters` or `description`, because they are empty.
- Company and network details are cached for 6 hours at the edge. Logo files on `img.amodb.dev` are cached for 30 days.
- A network is a TV concept. To get its series, use `with_networks` on `/discover/tv`, not on movie discover.
- To find a company by name, use the company search above, then pick the right row by `name` and `origin_country`.

## Questions and answers

### Where do I get a company id or a network id?

Read them from titles you already fetched. A movie lists production_companies, and a TV series lists networks and production_companies. Each entry carries the numeric id that the company and network endpoints accept.

### Can I list every movie a company made?

Use discover with the with_companies filter. Pass the company id and page through the results. Add with_networks on TV discover to list the series a network aired.

### Are logo files behind the API key?

No. The JSON that holds the logo path needs your key, but the files on img.amodb.dev need no key and are cached for 30 days.

### How do I find a company by name?

Call GET /3/search/company?query=lucasfilm. The rows are not ranked by exact match, so compare name and origin_country and take the id of the right row. There is no network search, so read network ids from a series.

## Related pages

- [Movie details API](https://amodb.dev/movies/): Movie details API with the same paths and JSON as TMDB v3. Get one movie by id, add credits, ratings and moods with append_to_response, in 14 languages.
- [TV series API](https://amodb.dev/tv-series/): TV series API with the same paths and JSON as TMDB v3. Get a show by id with seasons, networks and the next episode, plus content ratings and watch providers.
- [Discover API](https://amodb.dev/discover/): Discover API with the same filters as TMDB v3. List movies and TV shows by genre, cast, company, keyword, year, rating, runtime and provider, with sorting.
- [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.
- [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.
- [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/companies-networks/
