---
title: "Catalog"
description: "Build slug-addressable manufacturer and model-group navigation."
canonical: "https://thecarapi.com/docs/catalog"
contract_version: "2026-08-19"
api_base: "https://api.thecarapi.com"
source: "https://thecarapi.com/docs/catalog.md"
---

# Catalog

Build slug-addressable manufacturer and model-group navigation.

## GET /api/catalog/manufacturers

Paginated manufacturer catalog with inventory counts.

**Scope:** `catalog`

### Parameters

| Parameter | Send in | Type | Required | Example | Where the value comes from | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `country` | Query string | string | no | `DE` | /api/countries -> country_details[].code | Restrict to a country or europe. |
| `limit / offset / page / page_size` | Query string | integer | no | `20 / 0` | Pagination state in your application. | Standard pagination. Default limit 50. |

### Example requests

```http
GET https://api.thecarapi.com/api/catalog/manufacturers?country=DE&limit=20
```

```http
GET https://api.thecarapi.com/api/catalog/manufacturers?page=2&page_size=25
```

### Example response

```json
{
  "success": true,
  "results": [
    {
      "slug": "bmw",
      "name": "BMW",
      "inventory_count": 1543,
      "brand_id": 12
    }
  ],
  "total": 96,
  "limit": 50,
  "offset": 0,
  "total_pages": 2,
  "max_page": 2
}
```

## GET /api/catalog/manufacturers/{slug}

Resolve one manufacturer by slug.

**Scope:** `catalog`

### Parameters

| Parameter | Send in | Type | Required | Example | Where the value comes from | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `slug` | URL path | string | yes | `bmw` | /api/catalog/manufacturers -> results[].slug | Manufacturer slug. |
| `country` | Query string | string | no | `DE` | /api/countries -> country_details[].code | Optional country restriction. |

### Example requests

```http
GET https://api.thecarapi.com/api/catalog/manufacturers/bmw
```

```http
GET https://api.thecarapi.com/api/catalog/manufacturers/bmw?country=DE
```

### Example response

```json
{
  "success": true,
  "manufacturer": {
    "slug": "bmw",
    "name": "BMW",
    "inventory_count": 1543,
    "brand_id": 12
  }
}
```

**Notes.** Returns 404 when the slug is unknown.

## GET /api/catalog/manufacturers/stats

Return aggregate manufacturer statistics.

**Scope:** `catalog`

### Parameters

| Parameter | Send in | Type | Required | Example | Where the value comes from | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `country` | Query string | string | no | `DE` | /api/countries -> country_details[].code | Optional country restriction. |

### Example requests

```http
GET https://api.thecarapi.com/api/catalog/manufacturers/stats
```

```http
GET https://api.thecarapi.com/api/catalog/manufacturers/stats?country=DE
```

### Example response

```json
{
  "success": true,
  "total_manufacturers": 96,
  "active_manufacturers": 84
}
```

## GET /api/catalog/model-groups

Paginated model groups for one manufacturer.

**Scope:** `catalog`

### Parameters

| Parameter | Send in | Type | Required | Example | Where the value comes from | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `manufacturer__slug` | Query string | string | yes | `bmw` | /api/catalog/manufacturers -> results[].slug | Parent manufacturer slug. |
| `search` | Query string | string | no | `320` | Free text entered by your user. | Substring filter on model name. |
| `country` | Query string | string | no | `DE` | /api/countries -> country_details[].code | Optional country restriction. |
| `limit / offset / page / page_size` | Query string | integer | no | `20 / 0` | Pagination state in your application. | Standard pagination. Default limit 50. |

### Example requests

```http
GET https://api.thecarapi.com/api/catalog/model-groups?manufacturer__slug=bmw&search=320
```

```http
GET https://api.thecarapi.com/api/catalog/model-groups?manufacturer__slug=bmw&country=DE&page=2&page_size=20
```

### Example response

```json
{
  "success": true,
  "results": [
    {
      "slug": "320d",
      "name": "320d",
      "inventory_count": 210,
      "manufacturer_slug": "bmw"
    }
  ],
  "total": 34,
  "limit": 50,
  "offset": 0,
  "total_pages": 1,
  "max_page": 1
}
```

## GET /api/catalog/model-groups/{slug}

Resolve one model group by slug.

**Scope:** `catalog`

### Parameters

| Parameter | Send in | Type | Required | Example | Where the value comes from | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `slug` | URL path | string | yes | `320d` | /api/catalog/model-groups -> results[].slug | Model-group slug. |
| `manufacturer__slug` | Query string | string | no | `bmw` | /api/catalog/manufacturers -> results[].slug | Manufacturer slug for disambiguation. |
| `country` | Query string | string | no | `DE` | /api/countries -> country_details[].code | Optional country restriction. |

### Example requests

```http
GET https://api.thecarapi.com/api/catalog/model-groups/320d?manufacturer__slug=bmw
```

```http
GET https://api.thecarapi.com/api/catalog/model-groups/320d?manufacturer__slug=bmw&country=DE
```

### Example response

```json
{
  "success": true,
  "model_group": {
    "slug": "320d",
    "name": "320d",
    "inventory_count": 210,
    "manufacturer_slug": "bmw"
  }
}
```
