# autolina.ch API — live car listings from Switzerland: ~91,000 new and used cars, vans, campers and classics from ~2,300 Swiss dealers and private sellers. Search by make, model, model group, version text, condition (new / used / demo / classic / pre-registered), fuel (incl. every hybrid type), gearbox, drive, body, colour, canton, price in CHF, mileage, year, horsepower and seats; then pull one listing in full: asking price and new-car list price in CHF, leasing rate, specs, consumption and CO2, battery range, warranty, MFK inspection, equipment, description, photos and the seller with the contact details the listing prints. Plus makes with live counts, models per make, dealer profiles and the dealer directory. No login, no key.

> Search autolina.ch's car listings with the filters the source applies natively: make (name or id), model, model group, free text on the version line, condition, fuel, gearbox, drive, body type, colour, canton, price (CHF), mileage, year of first registration, horsepower, seats, listing age, photos-only, MFK-inspected and one dealer's stock. 1-100 rows a page. Every enum is a closed list: an unknown value is rejected instead of silently returning the whole catalogue.
> ReefAPI engine `autolina` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/autolina/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/autolina/v1/search — 2 credits
Search autolina.ch's car listings with the filters the source applies natively: make (name or id), model, model group, free text on the version line, condition, fuel, gearbox, drive, body type, colour, canton, price (CHF), mileage, year of first registration, horsepower, seats, listing age, photos-only, MFK-inspected and one dealer's stock. 1-100 rows a page. Every enum is a closed list: an unknown value is rejected instead of silently returning the whole catalogue.

**Parameters:**
- `make` (string, optional) — Make by name or slug as the site writes it (vw, bmw, mercedes-benz, skoda, tesla). Resolved against the site's live make list; an unknown make is rejected, never ignored. Use `make_id` to skip the lookup.
- `make_id` (string, optional) — Make id(s) from the `makes` action (52 = VW, 13 = BMW), comma-separated for several.
- `model_id` (string, optional) — Model id(s) from the `models` action (609 = VW Golf). Search rows carry the same `model_id`.
- `model_group_id` (string, optional) — Model group id(s) from the `models` action — e.g. 74 = 'GOLF (alle)', which covers Golf, Golf Variant, Golf Plus, Golf Sportsvan and Golf Cabriolet.
- `query` (string, optional) — Free text matched against the listing's version line (e.g. 'golf gti', 'tdi', 'amg', 'long range'). Several words must all appear.
- `condition` (array, optional) — Vehicle condition as the source classifies it. One value or several comma-separated (any of them). [one of: new, used, classic, demo, pre_registered]
- `fuel` (array, optional) — Fuel / drive energy. One value or several comma-separated (any of them). [one of: petrol, diesel, electric, cng, lpg, bioethanol, full_hybrid_petrol, full_hybrid_diesel, hydrogen, mild_hybrid_petrol, plugin_hybrid_petrol, mild_hybrid_diesel, plugin_hybrid_diesel]
- `body_type` (array, optional) — Body type. One value or several comma-separated (any of them). [one of: cabriolet, coupe, suv, small_car, estate, saloon, pickup, van, commercial, camper]
- `transmission` (array, optional) — Gearbox. One value or several comma-separated (any of them). [one of: automatic, manual]
- `drive` (array, optional) — Driven wheels. One value or several comma-separated (any of them). [one of: all_wheel, rear_wheel, front_wheel]
- `exterior_color` (array, optional) — Exterior colour, one value or several comma-separated. [one of: anthracite, beige, blue, bordeaux, brown, yellow, gold, gray, green, pink, orange, red, black, silver, turquoise, violet, white, other]
- `canton` (array, optional) — Seller's canton as a two-letter code (ZH, BE, VD, GE, TI …; FL = Liechtenstein), one or several comma-separated. [one of: AG, AI, AR, BE, BL, BS, FR, GE, GL, GR, JU, LU, NE, NW, OW, SG, SH, SO, SZ, TG, TI, UR, VD, VS, ZG, ZH, FL]
- `price_min` (integer, optional) — Lowest asking price in CHF (inclusive).
- `price_max` (integer, optional) — Highest asking price in CHF (inclusive).
- `mileage_min` (integer, optional) — Fewest kilometres (inclusive).
- `mileage_max` (integer, optional) — Most kilometres (inclusive).
- `year_min` (integer, optional) — Earliest year of first registration (inclusive).
- `year_max` (integer, optional) — Latest year of first registration (inclusive).
- `power_hp_min` (integer, optional) — Lowest power in hp (PS), inclusive.
- `power_hp_max` (integer, optional) — Highest power in hp (PS), inclusive. Any power filter returns only listings that state their power.
- `seats_min` (integer, optional) — Fewest seats (inclusive).
- `listed_within_days` (enum, optional) — Only listings put online in the last N days. [one of: 1, 2, 3, 7, 14, 30]
- `with_photos_only` (boolean, optional, default false) — Only listings that have at least one photo.
- `mfk_inspected` (boolean, optional, default false) — Only cars that passed the Swiss MFK inspection (frisch ab MFK).
- `dealer_id` (string, optional) — Only one seller's stock: `seller.seller_id` of a listing or `dealer_id` of the `dealers` action.
- `sort` (enum, optional, default "relevance") — Result order. [one of: relevance, newest, price_asc, price_desc, mileage_asc, mileage_desc, year_asc, year_desc, make_asc, make_desc]
- `page` (integer, optional, default 1) — Page number. The source serves every matching row (no depth cap below the total was found), so page × limit can reach the total.
- `limit` (integer, optional, default 20) — Rows per page, 1-100.

**Returns:** listings[]: listing_id, url, title, source_title, make, make_id, make_slug, model, model_id, model_slug, version, condition (new|used|classic|demo|pre_registered), condition_code, is_new_listing (the site's 'recently listed' badge — NOT the condition), price (asking price, integer CHF), currency, lease_rate_monthly, lease_type, first_registration (ISO date), year, construction_year, mileage_km, power_hp, power_kw, engine_ccm, fuel, fuel_code, transmission, transmission_code, drive, drive_code, body_type, body_type_code, exterior_color, exterior_color_code, interior_color, location{postcode, city, canton, country}, seller{type (dealer|private), name, logo}, is_premium, quality_seals[], image, images[], video_url, updated_at. meta: total, total_is_exact, pagination{page, limit, last_page, has_more}, filters_applied, warnings.

**Example request body:**
```json
{
  "make": "vw",
  "model_group_id": "74",
  "fuel": "petrol",
  "year_min": 2018,
  "sort": "price_asc"
}
```

### POST https://api.reefapi.com/autolina/v1/listing — 1 credit
One listing in full by its id: make, model and version, condition, asking price and the new-car list price in CHF, monthly leasing rate, first registration, mileage, power in hp and kW, engine size, cylinders, gears, doors, seats, weights, fuel consumption, CO2, energy label, Euro norm, battery capacity and range, warranty, MFK inspection date, part-exchange and WIR payment, standard and optional equipment, the seller's description, every photo, views, dates, and the seller (dealer or private) with the address, phone, WhatsApp and e-mail the listing page prints. A removed listing returns NOT_FOUND.

**Parameters:**
- `listing_id` (string, required) — The `listing_id` of a search row, passed as is (or the number at the end of an autolina.ch/auto/… URL).

**Returns:** listing{} with the search-row fields plus description, new_price, gross_price, doors, seats, cylinders, gears, kerb_weight_kg, total_weight_kg, trailer_load_braked_kg, fuel_consumption, fuel_consumption_combined_l100km, co2_g_km, energy_efficiency, euronorm, battery_capacity_kwh, battery_range_km, inspection_date, mfk_inspected, warranty{has_warranty, type, text}, part_exchange_possible, wir_payment, financing, eurotax_code, chassis_number, dealer_reference, equipment{standard[], optional[]}, thumbnails[], views, created_at, updated_at, is_online, seller{type, dealer_id, seller_id, name, street, postcode, city, canton, phone, mobile_phone, whatsapp, email, logo, profile_url, offers_test_drive}.

**Example request body:**
```json
{
  "listing_id": "5000000"
}
```

### POST https://api.reefapi.com/autolina/v1/makes — 1 credit
Every make on autolina.ch with its live listing count — the ids `search` takes as make_id and `models` takes as make.

**Parameters:** none

**Returns:** makes[{make_id, name, slug, count}]

### POST https://api.reefapi.com/autolina/v1/models — 2 credits
The models of one make with their model groups — the ids `search` takes as model_id and model_group_id.

**Parameters:**
- `make` (string, optional) — Make id (from `makes`) or the make's name/slug (vw, bmw, mercedes-benz).

**Returns:** make{make_id, name, slug}, models[{model_id, name, slug, model_group_id, model_group}]

**Example request body:**
```json
{
  "make": "bmw"
}
```

### POST https://api.reefapi.com/autolina/v1/dealer — 1 credit
One dealer's profile: address, canton, phone, WhatsApp, e-mail, website, about text and the makes it has in stock. Its listings: `search` with dealer_id.

**Parameters:**
- `dealer_id` (string, required) — Dealer id: `seller.dealer_id` of a listing or `dealer_id` of the `dealers` action.

**Returns:** dealer{dealer_id, name, url, street, postcode, city, canton, phone, mobile_phone, whatsapp, email, website, logo, banner, about, subscription_expired, has_dealer_page, makes_in_stock[{make_id, name, slug, models_in_stock}]}

**Example request body:**
```json
{
  "dealer_id": "9990"
}
```

### POST https://api.reefapi.com/autolina/v1/dealers — 1 credit
The dealer directory (~2,300 Swiss dealers), 1-100 a page, optionally by part of the name, by make sold or by quality seal.

**Parameters:**
- `query` (string, optional) — Part of the dealer's name.
- `make_id` (integer, optional) — Only dealers selling this make (id from `makes`).
- `quality_seal_id` (enum, optional) — Only dealers carrying this quality seal. [one of: 22, 23, 24]
- `page` (integer, optional, default 1) — Page number. The source serves every matching row (no depth cap below the total was found), so page × limit can reach the total.
- `limit` (integer, optional, default 20) — Dealers per page, 1-100.

**Returns:** dealers[{dealer_id, name, url, street, postcode, city, canton, quality_seals[], makes[]}]; meta.total, meta.pagination.

**Example request body:**
```json
{
  "query": "garage"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=autolina
- Human docs page: https://reefapi.com/docs/autolina
- Overview page: https://reefapi.com/autolina-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
