# Category Field Reference

This document describes the `category_fields` available for each category that supports structured vehicle/equipment data. For general API usage (authentication, endpoints, workflow), see the [Client Documentation](client-documentation).

> **For the most up-to-date field definitions and valid enum values**, open the relevant `POST` endpoint (e.g. `POST /v4/car`) in the [Swagger UI](swagger-ui/) and click the **Schema** tab next to "Example Value".

---

## Registered Vehicle — Common Fields

The following fields are shared by all registered vehicle categories (Car, Transport, Motorcycle, Moped, Snowmobile, ATV, Camper, Caravan, Trailer). Each category section below lists only its **category-specific** fields — these common fields are always available in addition.

Only `model_year` is required. On `POST`, either `registration_number` or `vin` must be provided.

| Field | Type | Description |
|---|---|---|
| `body_type` | string | Body type slug (e.g. `"sedan"`, `"suv"`). Validated against available values filtered by vehicle type. |
| `brand` | string | Brand slug (e.g. `"volvo"`, `"bmw"`). Validated against available values. |
| `model` | string | Model slug. For cars, validated against brand's model list; other types accept free text. |
| `model_type` | string | Trim or variant (free text), e.g. `"T5"`, `"GTI"`. |
| `model_year` | integer | **Required.** Manufacturing year (1900–2100). |
| `in_traffic_date` | string | Date when the vehicle was first registered in traffic. Format: `YYYY-MM-DD`. |
| `registration_number` | string | Swedish registration number (max 6 characters), e.g. `"ABC123"`. Required on `POST` if `vin` is not provided. Cannot be changed after creation. |
| `vin` | string | Vehicle Identification Number (17–19 characters). Required on `POST` if `registration_number` is not provided. |
| `color` | string | Vehicle color (free text), e.g. `"black"`, `"silver metallic"`. |
| `is_vat_deductible` | boolean | Whether the vehicle price is VAT deductible. |
| `registration_number_hidden` | boolean | Hide the registration number from the public ad listing. |
| `equipments` | array of strings | Equipment list. One item per element — do not use commas within items. |
| `salesperson` | string (email) | Salesperson email address. Validated against the dealer's registered salespersons in Blocket Admin. Send `null` or `""` to unset. |
| `warranty` | string | Warranty information (max 500 characters). |
| `return_policy` | string | Return policy information (max 500 characters). |
| `service_history` | string | Service history information (max 500 characters). |
| `product_declaration` | string (URL) | URL to product declaration document. |
| `home_delivery` | string | Home delivery information (max 500 characters). |

---

## Car (1020)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Car supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available car body types. `brand` and `model` are validated against available car brands and models.

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 50000}`. Units: `km`, `mil`. Once set, mileage cannot change between zero and non-zero (new/used status is permanently locked at creation). |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. Cannot be changed once set. |
| `condition.wheels` | array | Wheel sets (max 2). Each wheel: `name` (`summer`, `winter`, `winter_studded`), `tires` (4 positions: `front_left`, `front_right`, `rear_left`, `rear_right` with thread depth), `rim_size`. Required if `vehicle_ratings` is provided. |
| `condition.vehicle_ratings` | array | Condition ratings (max 5). Names: `exterior`, `interior` (values: `very_good`, `good`, `approved`, `poor`), `engine`, `brakes`, `equipment` (values: `good`, `minor_deviation`, `greater_deviation`). Required if `wheels` is provided. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 250}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types (multiple allowed): `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |
| `powertrain.drive_type` | string | Drive system: `fwd`, `rwd`, `awd`. Case insensitive. |
| `online_purchasable` | boolean | Mark the vehicle as purchasable online. Requires DCB product activation for the dealer. Incompatible with leasing prices. |

**Example** (`POST /v4/car`)**:**
```json
{
  "source_id": "car-001",
  "dealer_code": "YOUR_CODE",
  "body": "Well-maintained Volvo XC60 with low mileage",
  "price": [{"type": "list", "amount": 350000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "suv",
    "brand": "volvo",
    "model": "xc60",
    "model_type": "T6 AWD",
    "model_year": 2022,
    "registration_number": "ABC123",
    "color": "black",
    "condition": {
      "mileage": {"unit": "km", "value": 35000},
      "is_new_vehicle": false
    },
    "powertrain": {
      "transmission": "automatic",
      "power": {"unit": "hp", "value": 310},
      "fuels": ["gasoline"],
      "drive_type": "awd"
    },
    "equipments": ["GPS", "Heated seats", "Panoramic roof", "ACC"]
  }
}
```

---

## Transport (1021)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Transport supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available transport vehicle body types.

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 80000}`. Units: `km`, `mil`. New/used status is permanently locked at creation (same as Car). |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. Cannot be changed once set. |
| `condition.wheels` | array | Wheel sets (max 2). Same structure as Car. Required if `vehicle_ratings` is provided. |
| `condition.vehicle_ratings` | array | Condition ratings (max 5). Same structure as Car. Required if `wheels` is provided. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 190}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types: `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |
| `powertrain.torque` | object | Engine torque, e.g. `{"unit": "nm", "value": 400}`. Units: `nm`, `lb-ft`. |
| `powertrain.drive_type` | string | Drive system: `fwd`, `rwd`, `awd`. Case insensitive. |
| `physics.gross_weight` | object | Gross vehicle weight, e.g. `{"unit": "kg", "value": 3500}`. Units: `g`, `kg`, `t`. |
| `physics.length` | object | Overall length, e.g. `{"unit": "m", "value": 6.0}`. Units: `mm`, `cm`, `m`. |
| `physics.cargo` | object | Cargo dimensions. Nested object with `length`, `width`, `height` — each a length unit object (units: `mm`, `cm`, `m`). |
| `online_purchasable` | boolean | Mark as purchasable online. Requires DCB product activation. Incompatible with leasing prices. |

**Example** (`POST /v4/transport`)**:**
```json
{
  "source_id": "transport-001",
  "dealer_code": "YOUR_CODE",
  "body": "Versatile Mercedes Sprinter for commercial use",
  "price": [{"type": "list", "amount": 280000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "van",
    "brand": "mercedes-benz",
    "model": "sprinter",
    "model_year": 2021,
    "registration_number": "TRN123",
    "condition": {
      "mileage": {"unit": "km", "value": 45000},
      "is_new_vehicle": false
    },
    "powertrain": {
      "transmission": "automatic",
      "power": {"unit": "hp", "value": 190},
      "fuels": ["diesel"],
      "torque": {"unit": "nm", "value": 440},
      "drive_type": "rwd"
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 3500},
      "length": {"unit": "m", "value": 6.9},
      "cargo": {
        "length": {"unit": "m", "value": 4.3},
        "width": {"unit": "m", "value": 1.8},
        "height": {"unit": "m", "value": 1.9}
      }
    },
    "equipments": ["Reversing camera", "Partition wall", "Load securing rails"]
  }
}
```

---

## Motorcycle (1140)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Motorcycle supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available motorcycle body types.

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 12000}`. Units: `km`, `mil`. Status change between new/used is allowed. |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. |
| `condition.engine_runtime` | object | Engine runtime, e.g. `{"unit": "hour", "value": 350}`. Units: `hour`, `min`. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 150}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types: `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "cc", "value": 998}`. Units: `cc`, `l`. |
| `powertrain.engine_type` | string | Engine configuration: `unknown`, `single`, `flat-twin`, `parallel-twin`, `inline-2`, `v-twin`, `inline-3`, `flat-4`, `inline-4`, `v-4`, `flat-6`, `inline-6`, `v-twin-8`. |

**Example** (`POST /v4/motorcycle`)**:**
```json
{
  "source_id": "mc-001",
  "dealer_code": "YOUR_CODE",
  "body": "Low-mileage Ducati Panigale in excellent condition",
  "price": [{"type": "list", "amount": 185000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "sport",
    "brand": "ducati",
    "model": "panigale-v4",
    "model_year": 2022,
    "registration_number": "MCY123",
    "color": "red",
    "condition": {
      "mileage": {"unit": "km", "value": 5200},
      "is_new_vehicle": false,
      "engine_runtime": {"unit": "hour", "value": 120}
    },
    "powertrain": {
      "transmission": "sequential",
      "power": {"unit": "hp", "value": 214},
      "fuels": ["gasoline"],
      "displacement": {"unit": "cc", "value": 1103},
      "engine_type": "v-4"
    },
    "equipments": ["Quick shifter", "Traction control", "Riding modes"]
  }
}
```

---

## Moped (1121)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Moped supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available moped body types (defaults to `"moped"`).

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 5000}`. Units: `km`, `mil`. Status change between new/used is allowed. |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. |
| `condition.engine_runtime` | object | Engine runtime, e.g. `{"unit": "hour", "value": 200}`. Units: `hour`, `min`. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 5}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types: `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |

**Example** (`POST /v4/moped`)**:**
```json
{
  "source_id": "moped-001",
  "dealer_code": "YOUR_CODE",
  "body": "Excellent condition Yamaha moped",
  "price": [{"type": "list", "amount": 35000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "moped",
    "brand": "yamaha",
    "model": "aerox",
    "model_year": 2020,
    "registration_number": "ABC123",
    "condition": {
      "mileage": {"unit": "km", "value": 5000},
      "is_new_vehicle": false
    },
    "powertrain": {
      "transmission": "automatic",
      "fuels": ["gasoline"]
    }
  }
}
```

---

## Snowmobile (1180)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Snowmobile supports the following category-specific fields. All category-specific fields are optional.

`body_type` defaults to `"snowmobile"` and is validated against available values.

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 8000}`. Units: `km`, `mil`. Status change between new/used is allowed. |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. |
| `condition.engine_runtime` | object | Engine runtime, e.g. `{"unit": "hour", "value": 400}`. Units: `hour`, `min`. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 200}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types: `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "cc", "value": 850}`. Units: `cc`, `l`. |

**Example** (`POST /v4/snowmobile`)**:**
```json
{
  "source_id": "snowmobile-001",
  "dealer_code": "YOUR_CODE",
  "body": "Powerful Ski-Doo Summit for mountain riding",
  "price": [{"type": "list", "amount": 120000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "snowmobile",
    "brand": "ski-doo",
    "model": "summit",
    "model_year": 2023,
    "registration_number": "SNO123",
    "condition": {
      "mileage": {"unit": "km", "value": 3500},
      "is_new_vehicle": false,
      "engine_runtime": {"unit": "hour", "value": 200}
    },
    "powertrain": {
      "transmission": "automatic",
      "power": {"unit": "hp", "value": 165},
      "fuels": ["gasoline"],
      "displacement": {"unit": "cc", "value": 850}
    },
    "equipments": ["Electric start", "Heated grips", "Reverse"]
  }
}
```

---

## ATV (1143)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), ATV supports the following category-specific fields. All category-specific fields are optional.

`body_type` defaults to `"atv"`.

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 6000}`. Units: `km`, `mil`. Status change between new/used is allowed. |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. |
| `condition.engine_runtime` | object | Engine runtime, e.g. `{"unit": "hour", "value": 300}`. Units: `hour`, `min`. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 90}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types: `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "cc", "value": 686}`. Units: `cc`, `l`. |

**Example** (`POST /v4/atv`)**:**
```json
{
  "source_id": "atv-001",
  "dealer_code": "YOUR_CODE",
  "body": "Versatile Can-Am Outlander for work and trail",
  "price": [{"type": "list", "amount": 95000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "atv",
    "brand": "can-am",
    "model": "outlander",
    "model_year": 2021,
    "registration_number": "ATV123",
    "condition": {
      "mileage": {"unit": "km", "value": 4500},
      "is_new_vehicle": false,
      "engine_runtime": {"unit": "hour", "value": 250}
    },
    "powertrain": {
      "transmission": "automatic",
      "power": {"unit": "hp", "value": 91},
      "fuels": ["gasoline"],
      "displacement": {"unit": "cc", "value": 976}
    },
    "equipments": ["Winch", "Snow plough mount", "Heated grips"]
  }
}
```

---

## Camper / Motorhome (1102)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Camper supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available camper body types.

| Field | Type | Description |
|---|---|---|
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 50000}`. Units: `km`, `mil`. Status change between new/used is allowed. |
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. Derived from mileage if not provided. |
| `powertrain.transmission` | string | Transmission type: `manual`, `automatic`, `sequential`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 180}`. Units: `hp`, `kw`. |
| `powertrain.fuels` | array of strings | Fuel types: `gasoline`, `diesel`, `electric`, `ethanol`, `natural_gas`. Case insensitive. |
| `physics.gross_weight` | object | Gross vehicle weight, e.g. `{"unit": "kg", "value": 3500}`. Units: `g`, `kg`, `t`. |
| `physics.length` | object | Overall length, e.g. `{"unit": "m", "value": 7.5}`. Units: `mm`, `cm`, `m`. |
| `physics.number_of_beds` | integer | Number of beds / sleeping places. |

**Example** (`POST /v4/camper`)**:**
```json
{
  "source_id": "camper-001",
  "dealer_code": "YOUR_CODE",
  "body": "Spacious Mercedes camper with 4 beds and full kitchen",
  "price": [{"type": "list", "amount": 450000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "integrated",
    "brand": "mercedes-benz",
    "model": "sprinter",
    "model_year": 2019,
    "registration_number": "DEF456",
    "condition": {
      "mileage": {"unit": "km", "value": 50000}
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 3500},
      "length": {"unit": "m", "value": 7.5},
      "number_of_beds": 4
    },
    "powertrain": {
      "transmission": "manual",
      "fuels": ["diesel"]
    }
  }
}
```

---

## Caravan (1101)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Caravan supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available caravan body types. Caravan has no powertrain fields.

| Field | Type | Description |
|---|---|---|
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. |
| `physics.gross_weight` | object | Gross weight, e.g. `{"unit": "kg", "value": 1800}`. Units: `g`, `kg`, `t`. |
| `physics.length` | object | Overall length, e.g. `{"unit": "m", "value": 6.5}`. Units: `mm`, `cm`, `m`. |
| `physics.number_of_beds` | integer | Number of beds / sleeping places. |

**Example** (`POST /v4/caravan`)**:**
```json
{
  "source_id": "caravan-001",
  "dealer_code": "YOUR_CODE",
  "body": "Modern Kabe caravan in excellent condition",
  "price": [{"type": "list", "amount": 150000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "2-axle",
    "brand": "kabe",
    "model": "classic",
    "model_year": 2018,
    "registration_number": "CAR123",
    "condition": {
      "is_new_vehicle": false
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 1800},
      "length": {"unit": "m", "value": 6.5},
      "number_of_beds": 6
    }
  }
}
```

---

## Trailer (1045)

In addition to the [common registered vehicle fields](#registered-vehicle--common-fields), Trailer supports the following category-specific fields. All category-specific fields are optional.

`body_type` is validated against available trailer body types. Trailer has no powertrain fields.

| Field | Type | Description |
|---|---|---|
| `condition.is_new_vehicle` | boolean | Whether the vehicle is new. |
| `physics.gross_weight` | object | Gross weight, e.g. `{"unit": "kg", "value": 2000}`. Units: `g`, `kg`, `t`. |
| `physics.length` | object | Overall length, e.g. `{"unit": "m", "value": 4.5}`. Units: `mm`, `cm`, `m`. |
| `physics.cargo` | object | Cargo dimensions. Nested object with `length`, `width`, `height` — each a length unit object (units: `mm`, `cm`, `m`). |

**Example** (`POST /v4/trailer`)**:**
```json
{
  "source_id": "trailer-001",
  "dealer_code": "YOUR_CODE",
  "body": "Horse trailer for 2 horses with living quarters",
  "price": [{"type": "list", "amount": 80000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "body_type": "horse",
    "brand": "böckmann",
    "model": "comfort",
    "model_year": 2020,
    "registration_number": "TRL123",
    "condition": {
      "is_new_vehicle": false
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 2000},
      "length": {"unit": "m", "value": 4.5},
      "cargo": {
        "length": {"unit": "m", "value": 3.0},
        "width": {"unit": "m", "value": 1.7},
        "height": {"unit": "m", "value": 2.3}
      }
    }
  }
}
```

---

## Boat (1060)

All `category_fields` are optional.

| Field | Type | Description |
|---|---|---|
| `brand` | string | Make slug (e.g. `"bayliner"`, `"hallberg-rassy"`). Validated against available values. |
| `model` | string | Model name (free text). |
| `model_year` | integer | Manufacturing year. |
| `body_type` | string | Boat class slug. Validated against available values. |
| `registration_number` | string | Boat registration number. |
| `srs_number` | string | SRS number (Swedish boat register). |
| `color` | string | Color of the boat. |
| `max_speed` | object | Max speed, e.g. `{"unit": "knots", "value": 30}`. Units: `knots`, `kmh`. |
| `motor_included` | boolean | Whether a motor is included in the sale. |
| `powertrain.type` | string | Motor type slug (e.g. `"outboard"`). Validated against available values. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 200}`. Units: `hp`, `kw`. |
| `powertrain.fuel` | string | Motor fuel slug (e.g. `"diesel"`). Validated against available values. |
| `powertrain.engine_brand` | string | Engine manufacturer (free text), e.g. `"Volvo Penta"`. |
| `physics.length` | object | Overall length, e.g. `{"unit": "m", "value": 10.5}`. Units: `mm`, `cm`, `m`. |
| `physics.weight` | object | Weight, e.g. `{"unit": "kg", "value": 3500}`. Units: `g`, `kg`, `t`. |
| `physics.depth` | object | Depth below waterline, e.g. `{"unit": "m", "value": 1.2}`. Units: `mm`, `cm`, `m`. |
| `physics.width` | object | Beam (width), e.g. `{"unit": "cm", "value": 320}`. Units: `mm`, `cm`, `m`. |
| `physics.material` | string | Hull material slug. Validated against available values. |
| `physics.number_of_seats` | integer | Number of seats. |
| `physics.number_of_beds` | integer | Number of beds. |
| `equipments` | array of strings | Equipment list. One item per element — do not use commas within items. |

**Example — Motorboat** (`POST /v4/boat`)**:**
```json
{
  "source_id": "boat-001",
  "dealer_code": "YOUR_CODE",
  "body": "Well-maintained Bayliner with Volvo Penta engine",
  "price": [{"type": "list", "amount": 250000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "bayliner",
    "model": "VR5",
    "model_year": 2020,
    "body_type": "daycruiser",
    "registration_number": "SE12345",
    "color": "white",
    "max_speed": {"unit": "knots", "value": 35},
    "motor_included": true,
    "powertrain": {
      "type": "outboard",
      "power": {"unit": "hp", "value": 200},
      "fuel": "petrol",
      "engine_brand": "Volvo Penta"
    },
    "physics": {
      "length": {"unit": "m", "value": 6.7},
      "weight": {"unit": "kg", "value": 1400},
      "material": "fiberglass",
      "number_of_seats": 8
    },
    "equipments": ["GPS", "Anchor winch", "Shore power", "Swim platform"]
  }
}
```

---

## Bus (1321)

All `category_fields` are optional. `brand`, `body_type`, `powertrain.axle_type`, `physics.box_type`, `physics.cabin_type`, `physics.suspension_front`, and `physics.suspension_rear` are validated against available values (see Swagger schema for valid options).

| Field | Type | Description |
|---|---|---|
| `brand` | string | Make slug (e.g. `"volvo"`, `"scania"`). Validated against available values. |
| `body_type` | string | Bus segment slug (e.g. `"bus"`). Validated against available values. |
| `model` | string | Model name (free text). |
| `model_year` | integer | Model year. |
| `registration_number` | string | Registration number. |
| `vin` | string | Chassis number / VIN (5–17 characters). |
| `eu_approved` | boolean | EU type approval. |
| `eu_approved_date` | string | EU approval date (`YYYY-MM-DD`). |
| `in_traffic_date` | string | First registration date (`YYYY-MM-DD`). |
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 150000}`. Units: `km`, `mil`. |
| `powertrain.axle_type` | string | Axle type slug (e.g. `"4x2"`). Validated against available values. |
| `powertrain.transmission` | string | Transmission (free text), e.g. `"automatic"`, `"opticruise"`, `"I-Shift"`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 350}`. Units: `hp`, `kw`. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "l", "value": 9.3}`. Units: `cc`, `l`. |
| `physics.cabin_type` | string | Cabin type slug. Validated against available values. |
| `physics.box_type` | string | Box type slug. Validated against available values. |
| `physics.length` | object | Overall length. |
| `physics.wheelbase` | object | Wheelbase length. |
| `physics.gross_weight` | object | Total weight, e.g. `{"unit": "kg", "value": 12000}`. |
| `physics.cargo_weight` | object | Cargo weight capacity. |
| `physics.boot_size` | object | Cargo volume, e.g. `{"unit": "m3", "value": 30}`. |
| `physics.number_of_seats` | integer | Number of seats. |
| `physics.interior_size_height` | object | Interior height. |
| `physics.interior_size_length` | object | Interior length. |
| `physics.interior_size_width` | object | Interior width. |
| `physics.suspension_front` | string | Front suspension slug. Validated against available values. |
| `physics.suspension_rear` | string | Rear suspension slug. Validated against available values. |
| `physics.extra_brake` | boolean | Has extra brake. |
| `physics.tail_lift` | boolean | Has tail lift. |
| `equipments` | array of strings | Equipment list. One item per element. |

**Example** (`POST /v4/bus`)**:**
```json
{
  "source_id": "bus-001",
  "dealer_code": "YOUR_CODE",
  "title": "Volvo 9700 touring coach",
  "body": "Well-maintained Volvo 9700 touring coach",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000006"},
  "price": [{"type": "list", "amount": 1200000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "volvo",
    "body_type": "bus",
    "model": "9700",
    "model_year": 2020,
    "registration_number": "BUS123",
    "condition": {
      "mileage": {"unit": "km", "value": 150000}
    },
    "powertrain": {
      "axle_type": "4x2",
      "transmission": "automatic",
      "power": {"unit": "hp", "value": 460},
      "displacement": {"unit": "l", "value": 12.8}
    },
    "physics": {
      "number_of_seats": 53,
      "gross_weight": {"unit": "kg", "value": 18000},
      "suspension_front": "air",
      "suspension_rear": "air"
    },
    "equipments": ["AC", "Toilet", "WiFi"]
  }
}
```

---

## Truck (1322)

All `category_fields` are optional. `brand`, `body_type`, `powertrain.axle_type`, `physics.box_type`, `physics.cabin_type`, `physics.suspension_front`, and `physics.suspension_rear` are validated against available values (see Swagger schema for valid options).

| Field | Type | Description |
|---|---|---|
| `brand` | string | Make slug (e.g. `"volvo"`, `"scania"`). Validated against available values. |
| `body_type` | string | Truck segment slug (e.g. `"truck"`). Validated against available values. |
| `model` | string | Model name (free text). |
| `model_year` | integer | Model year. |
| `registration_number` | string | Registration number. |
| `vin` | string | Chassis number / VIN (5–17 characters). |
| `eu_approved` | boolean | EU type approval. |
| `eu_approved_date` | string | EU approval date (`YYYY-MM-DD`). |
| `in_traffic_date` | string | First registration date (`YYYY-MM-DD`). |
| `condition.mileage` | object | Mileage, e.g. `{"unit": "km", "value": 250000}`. Units: `km`, `mil`. |
| `powertrain.axle_type` | string | Axle type slug (e.g. `"4x2"`). Validated against available values. |
| `powertrain.transmission` | string | Transmission (free text), e.g. `"automatic"`, `"opticruise"`, `"I-Shift"`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 460}`. Units: `hp`, `kw`. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "l", "value": 12.8}`. Units: `cc`, `l`. |
| `physics.cabin_type` | string | Cabin type slug (e.g. `"long"`). Validated against available values. |
| `physics.box_type` | string | Box type slug (e.g. `"freezer"`). Validated against available values. |
| `physics.box_length` | object | Box length, e.g. `{"unit": "m", "value": 7.5}`. |
| `physics.length` | object | Overall length. |
| `physics.wheelbase` | object | Wheelbase length. |
| `physics.gross_weight` | object | Total weight, e.g. `{"unit": "kg", "value": 18000}`. |
| `physics.cargo_weight` | object | Cargo weight capacity. |
| `physics.boot_size` | object | Cargo volume, e.g. `{"unit": "m3", "value": 40}`. |
| `physics.number_of_seats` | integer | Number of seats. |
| `physics.number_of_pallets` | integer | Number of pallets (1–50). |
| `physics.interior_size_height` | object | Interior height. |
| `physics.interior_size_length` | object | Interior length. |
| `physics.interior_size_width` | object | Interior width. |
| `physics.suspension_front` | string | Front suspension slug (e.g. `"air"`). Validated against available values. |
| `physics.suspension_rear` | string | Rear suspension slug (e.g. `"air"`). Validated against available values. |
| `physics.extra_brake` | boolean | Has extra brake. |
| `physics.tail_lift` | boolean | Has tail lift. |
| `equipments` | array of strings | Equipment list. One item per element. |

**Example** (`POST /v4/truck`)**:**
```json
{
  "source_id": "truck-001",
  "dealer_code": "YOUR_CODE",
  "title": "Volvo FH16 750",
  "body": "Well-maintained Volvo FH16 with low mileage",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000005"},
  "price": [{"type": "list", "amount": 850000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "volvo",
    "body_type": "truck",
    "model": "FH16 750",
    "model_year": 2022,
    "registration_number": "TRK123",
    "vin": "YV2RT40A5NB123456",
    "condition": {
      "mileage": {"unit": "km", "value": 120000}
    },
    "powertrain": {
      "axle_type": "6x4",
      "transmission": "automatic",
      "power": {"unit": "hp", "value": 750},
      "displacement": {"unit": "l", "value": 16.1}
    },
    "physics": {
      "cabin_type": "long",
      "gross_weight": {"unit": "kg", "value": 26000},
      "number_of_seats": 2,
      "suspension_front": "air",
      "suspension_rear": "air",
      "tail_lift": false
    },
    "equipments": ["Retarder", "ACC", "Lane assist"]
  }
}
```

---

## Agriculture Thresher (1227)

All `category_fields` are optional. `brand` and `powertrain.fuel` are validated against available values (see Swagger schema for valid options).

| Field | Type | Description |
|---|---|---|
| `brand` | string | Make slug (e.g. `"claas"`, `"john-deere"`). Validated against available values. |
| `model` | string | Model (free text), e.g. `"Lexion 770"`. |
| `model_year` | integer | Manufacturing year. |
| `powertrain.fuel` | string | Fuel type slug (e.g. `"diesel"`). Validated against available values. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 467}`. Units: `hp`, `kw`. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "l", "value": 15.6}`. Units: `cc`, `l`. |
| `condition.engine_runtime` | object | Working hours, e.g. `{"unit": "hour", "value": 3200}`. Minimum 1 hour. |
| `physics.gross_weight` | object | Machine weight, e.g. `{"unit": "kg", "value": 15000}`. Units: `g`, `kg`, `t`. |
| `equipments` | array of strings | Equipment list. One item per element. |

**Example** (`POST /v4/agriculture-thresher`)**:**
```json
{
  "source_id": "thresher-001",
  "dealer_code": "YOUR_CODE",
  "title": "Claas Lexion 770 thresher",
  "body": "Well-maintained Claas Lexion 770 thresher",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000001"},
  "price": [{"type": "list", "amount": 2500000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "claas",
    "model": "Lexion 770",
    "model_year": 2018,
    "powertrain": {
      "fuel": "diesel",
      "power": {"unit": "hp", "value": 467},
      "displacement": {"unit": "l", "value": 15.6}
    },
    "condition": {
      "engine_runtime": {"unit": "hour", "value": 3200}
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 15000}
    },
    "equipments": ["GPS", "Auto-steering", "Yield monitor"]
  }
}
```

---

## Agriculture Tractor (1228)

All `category_fields` are optional. `brand` and `powertrain.fuel` are validated against available values (see Swagger schema for valid options).

Same fields as [Agriculture Thresher](#agriculture-thresher-1227), plus:

| Field | Type | Description |
|---|---|---|
| `registration_number` | string | Vehicle registration number. |
| `vin` | string | Chassis number / VIN (5–17 characters). |
| `tyre.front` | string | Front tyre size (free text), e.g. `"650/65R38"`. |
| `tyre.rear` | string | Rear tyre size (free text), e.g. `"900/60R32"`. |

**Example** (`POST /v4/agriculture-tractor`)**:**
```json
{
  "source_id": "tractor-001",
  "dealer_code": "YOUR_CODE",
  "title": "John Deere 6R 250 tractor",
  "body": "Low-hours John Deere 6R 250 tractor",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000002"},
  "price": [{"type": "list", "amount": 950000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "john-deere",
    "model": "6R 250",
    "model_year": 2021,
    "registration_number": "ABC123",
    "powertrain": {
      "fuel": "diesel",
      "power": {"unit": "hp", "value": 250}
    },
    "condition": {
      "engine_runtime": {"unit": "hour", "value": 1500}
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 8000}
    }
  }
}
```

---

## Agriculture Tools (1229)

All `category_fields` are optional. `tools_category` is validated against available values (see Swagger schema for valid options).

| Field | Type | Description |
|---|---|---|
| `brand` | string | Brand (free text), e.g. `"Husqvarna"`, `"John Deere"`. |
| `model` | string | Model (free text), e.g. `"T540i"`. |
| `model_year` | integer | Manufacturing year. |
| `physics.gross_weight` | object | Machine weight, e.g. `{"unit": "kg", "value": 250}`. Units: `g`, `kg`, `t`. |
| `tools_category` | string | Tool sub-category slug (e.g. `"chainsaw"`, `"tractor-mower"`). Validated against available values. |

**Example — Forestry Machinery** (`POST /v4/agriculture-tools`)**:**
```json
{
  "source_id": "tools-001",
  "dealer_code": "YOUR_CODE",
  "title": "Husqvarna T540i chainsaw",
  "body": "Lightly used Husqvarna T540i top-handle chainsaw",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000003"},
  "price": [{"type": "list", "amount": 8500, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "husqvarna",
    "model": "T540i",
    "physics": {"gross_weight": {"unit": "kg", "value": 5}},
    "tools_category": "chainsaw"
  }
}
```

**Example — Ground Care Machinery** (`POST /v4/agriculture-tools`)**:**
```json
{
  "source_id": "tools-002",
  "dealer_code": "YOUR_CODE",
  "title": "John Deere X350R ride-on mower",
  "body": "Low-hours John Deere X350R tractor mower",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000004"},
  "price": [{"type": "list", "amount": 45000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "john-deere",
    "model": "X350R",
    "physics": {"gross_weight": {"unit": "kg", "value": 310}},
    "tools_category": "tractor-mower"
  }
}
```

---

## Construction (1323)

All `category_fields` are optional. `brand`, `body_type`, `cab_type`, and `chassis_type` are validated against available values (see Swagger schema for valid options).

| Field | Type | Description |
|---|---|---|
| `brand` | string | Make slug (e.g. `"volvo"`, `"caterpillar"`). Validated against available values. |
| `body_type` | string | Segment slug (e.g. `"excavator"`). Validated against available values. |
| `model_year` | integer | Model year (1900–2100). |
| `service_contract` | boolean | Machine has a service contract. |
| `vin` | string | Chassis/VIN number. |
| `condition.engine_runtime` | object | Working hours, e.g. `{"unit": "hour", "value": 3200}`. |
| `powertrain.power` | object | Engine power, e.g. `{"unit": "hp", "value": 250}`. |
| `powertrain.displacement` | object | Engine displacement, e.g. `{"unit": "cc", "value": 4500}`. |
| `powertrain.transmission` | string | Transmission type. |
| `physics.gross_weight` | object | Gross weight, e.g. `{"unit": "kg", "value": 8000}`. |
| `physics.workload` | object | Work load, e.g. `{"unit": "kg", "value": 5000}`. |
| `physics.lift_capacity` | object | Lifting capacity, e.g. `{"unit": "kg", "value": 3000}`. |
| `physics.lift_height` | object | Lifting height, e.g. `{"unit": "m", "value": 6}`. |
| `physics.boot_size` | object | Load capacity, e.g. `{"unit": "m3", "value": 2.5}`. |
| `physics.max_speed` | integer | Top speed in km/h. |
| `physics.additional_hydraulics` | boolean | Machine has additional hydraulics. |
| `physics.auxiliary_hydraulics_performance` | integer | Auxiliary hydraulics performance in litres/min. |
| `physics.cab_type` | string | Cab type slug. Validated against available values. |
| `physics.ce_marked` | boolean | Machine has CE certification. |
| `physics.chassis_type` | string | Chassis type slug. Validated against available values. |
| `physics.statement_of_compliance` | boolean | Machine has statement of compliance. |

**Example** (`POST /v4/construction`)**:**
```json
{
  "source_id": "construction-001",
  "dealer_code": "YOUR_CODE",
  "title": "Volvo EC220E Excavator",
  "body": "Well-maintained Volvo excavator with low hours",
  "contact": {"name": "Seller", "email": "seller@example.com", "phone": "0700000005"},
  "price": [{"type": "list", "amount": 850000, "currency": "SEK"}],
  "visible": true,
  "location": {"longitude": 18.0686, "latitude": 59.3293},
  "category_fields": {
    "brand": "volvo",
    "body_type": "excavator",
    "model_year": 2020,
    "vin": "VCE0EC220E1234567",
    "condition": {"engine_runtime": {"unit": "hour", "value": 3200}},
    "powertrain": {
      "power": {"unit": "hp", "value": 170},
      "displacement": {"unit": "cc", "value": 5700}
    },
    "physics": {
      "gross_weight": {"unit": "kg", "value": 22000},
      "lift_capacity": {"unit": "kg", "value": 5000},
      "cab_type": "enclosed",
      "ce_marked": true
    }
  }
}
```
