# V4 Re-enabled Vehicle Categories

**Last Updated:** February 2026  
**API Version:** v4

## Overview

V4 API adds support for four vehicle categories with full field specifications. These categories can now be created with detailed vehicle information (brand, model, mileage, equipment, etc.) just like cars and motorcycles.

## Re-enabled Categories

- 🛵 **Moped** (category_id: `1121`)
- 🚐 **Camper** (category_id: `1102`)
- 🏕️ **Caravan** (category_id: `1101`)
- 🪝 **Trailer** (category_id: `1045`)

## Category Specifications

### Moped (1121)

**Required Fields:**
- `body_type`: Always "moped"
- `brand`: Brand name (e.g., "yamaha", "honda")
- `model`: Model name (e.g., "aerox", "vision")
- `model_year`: Manufacturing year
- `registration_number`: Vehicle registration number
- `condition.mileage`: Current mileage
- `powertrain.transmission`: Transmission type
- `powertrain.fuels`: Fuel types

**Example:**
```json
{
  "source_id": "moped-001",
  "dealer_code": "YOUR_CODE",
  "category_id": "1121",
  "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"]
    }
  }
}
```

**Optional Fields:**
- `condition.engine_runtime`: Engine hours (for tracking engine usage)
- `powertrain.power`: Engine power specification
- `equipment`: Additional equipment and features

---

### Camper (1102)

**Required Fields:**
- `body_type`: Camper body type (e.g., "integrated", "semi-integrated", "alcove")
- `brand`: Brand name (e.g., "mercedes-benz", "volkswagen")
- `model`: Model name
- `model_year`: Manufacturing year
- `registration_number`: Vehicle registration number
- `condition.mileage`: Current mileage
- `powertrain.transmission`: Transmission type
- `powertrain.fuels`: Fuel types

**Example:**
```json
{
  "source_id": "camper-001",
  "dealer_code": "YOUR_CODE",
  "category_id": "1102",
  "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"]
    }
  }
}
```

**Optional Fields:**
- `physics`: Physical specifications
  - `gross_weight`: Total weight specification
  - `length`: Vehicle length
  - `number_of_beds`: Sleeping capacity
- `powertrain.power`: Engine power
- `equipment`: Additional features

**Body Types:**
- `integrated` - Integrated camper
- `semi-integrated` - Semi-integrated
- `alcove` - Alcove camper
- `other` - Other types

---

### Caravan (1101)

**Required Fields:**
- `body_type`: Caravan type (e.g., "2-axle", "single-axle")
- `brand`: Brand name (e.g., "kabe", "hobby")
- `model`: Model name
- `model_year`: Manufacturing year
- `registration_number`: Vehicle registration number

**Example:**
```json
{
  "source_id": "caravan-001",
  "dealer_code": "YOUR_CODE",
  "category_id": "1101",
  "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
    }
  }
}
```

**Optional Fields:**
- `condition.is_new_vehicle`: New vehicle flag
- `physics`: Physical specifications
  - `gross_weight`: Total weight
  - `length`: Caravan length
  - `number_of_beds`: Sleeping capacity

**Body Types:**
- `2-axle` - Two-axle caravan
- `single-axle` - Single-axle caravan
- `other` - Other configurations

---

### Trailer (1045)

**Required Fields:**
- `body_type`: Trailer type (e.g., "horse", "cargo", "boat")
- `brand`: Brand name (e.g., "böckmann", "humbaur")
- `model`: Model name
- `model_year`: Manufacturing year
- `registration_number`: Vehicle registration number

**Example:**
```json
{
  "source_id": "trailer-001",
  "dealer_code": "YOUR_CODE",
  "category_id": "1045",
  "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": {
        "type": "volume",
        "unit": "m3",
        "value": 12.5
      }
    }
  }
}
```

**Optional Fields:**
- `condition.is_new_vehicle`: New vehicle flag
- `physics`: Physical specifications
  - `gross_weight`: Total weight
  - `length`: Trailer length
  - `cargo`: Cargo capacity

**Body Types:**
- `horse` - Horse trailer
- `cargo` - Cargo trailer
- `boat` - Boat trailer
- `other` - Other types

---

## Common Fields

### Mileage

Specify mileage with unit and value:

```json
{
  "mileage": {
    "unit": "km",    // or "mil" (Swedish mile)
    "value": 50000
  }
}
```

**Units:**
- `km` - Kilometers
- `mil` - Swedish miles (1 mil = 10 km)

### Weight

Specify weight with unit and value:

```json
{
  "gross_weight": {
    "unit": "kg",    // or "ton"
    "value": 3500
  }
}
```

**Units:**
- `kg` - Kilograms
- `ton` - Metric tons

### Length

Specify length with unit and value:

```json
{
  "length": {
    "unit": "m",     // meters
    "value": 7.5
  }
}
```

### Transmission

```json
{
  "transmission": "manual"  // or "automatic"
}
```

**Options:**
- `manual` - Manual transmission
- `automatic` - Automatic transmission

### Fuels

```json
{
  "fuels": ["diesel"]  // Array of fuel types
}
```

**Options:**
- `gasoline` - Gasoline/Petrol
- `diesel` - Diesel
- `electric` - Electric
- `hybrid` - Hybrid (electric + fuel)
- `ethanol` - Ethanol (E85)
- `gas` - Gas (CNG/LPG)

## Field Validation

### Required vs Optional

**All Categories Require:**
- `body_type`
- `brand`
- `model`
- `model_year`
- `registration_number`

**Category-Specific Requirements:**
- **Moped:** Must include `condition.mileage` and `powertrain`
- **Camper:** Must include `condition.mileage` and `powertrain`
- **Caravan:** No additional requirements beyond common fields
- **Trailer:** No additional requirements beyond common fields

### Data Types

- **Strings:** brand, model, body_type, registration_number
- **Integers:** model_year, mileage value, weight value, number_of_beds
- **Floats:** length value, cargo value
- **Booleans:** is_new_vehicle
- **Arrays:** fuels
- **Objects:** condition, physics, powertrain

## Error Examples

### Missing Required Field

```json
{
  "category_fields": {
    "brand": ["This field is required."]
  }
}
```

### Invalid Unit

```json
{
  "category_fields": {
    "condition": {
      "mileage": {
        "unit": ["Must be 'km' or 'mil'"]
      }
    }
  }
}
```

### Invalid Body Type

```json
{
  "category_fields": {
    "body_type": ["Invalid choice: 'invalid_type'"]
  }
}
```

## Best Practices

### 1. Use Correct Units

```json
{
  "mileage": {"unit": "km", "value": 5000}  // ✅ Correct
}
```

### 2. Provide Optional Fields

Including optional fields like `physics` improves ad quality:

```json
{
  "physics": {
    "gross_weight": {"unit": "kg", "value": 3500},
    "length": {"unit": "m", "value": 7.5},
    "number_of_beds": 4
  }
}
```

### 3. Use Accurate Body Types

Choose the most specific body type available for better categorization.

### 4. Include High-Quality Images

```json
{
  "image_urls": [
    "https://example.com/front-view.jpg",
    "https://example.com/interior.jpg",
    "https://example.com/side-view.jpg"
  ]
}
```

## Migration from V3

If you have existing ads in V3 for these categories, see the [Migration Guide](v4-backward-compatibility) for upgrade instructions.

## Support

For questions or issues:

1. Check the [Implementation Guide](v4-implementation-guide)
2. Review the [Swagger UI](swagger-ui/)
3. Contact your Blocket representative

---

**Need Help?** Contact your Blocket representative for technical support or integration assistance.
