# Gebrauchtwagen.at API — the Austrian used and new car market live: every car listed for sale in Austria on gebrauchtwagen.at, searchable by make, model, price, first registration, mileage, power, fuel, gearbox, body type, offer type (used, new, Jahreswagen, demo, day registration), dealer or private seller, VAT-deductible, price rating, postcode radius and listing age; then one listing in full: gross and net price with VAT rate, the site's price rating with its median and bands, full technical data, equipment list, consumption and CO2, photos, location with coordinates, and the dealer with phone numbers and ratings. Plus makes and models.

> Search cars for sale in Austria with the filters the site applies itself. Up to 20 rows a page. 🔴 The source serves at most 4,000 rows per query (narrow with filters to reach the rest); the total is exact.
> ReefAPI engine `gebrauchtwagen-at` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/gebrauchtwagen-at/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/gebrauchtwagen-at/v1/search — 2 credits
Search cars for sale in Austria with the filters the site applies itself. Up to 20 rows a page. 🔴 The source serves at most 4,000 rows per query (narrow with filters to reach the rest); the total is exact.

**Parameters:**
- `make` (string, optional) — Make as the site's own slug: 'volkswagen', 'bmw', 'mercedes-benz', 'skoda'. The `makes` action lists every make with its slug and id. An unknown slug is refused (INVALID_PARAM), never served as the whole market.
- `model` (string, optional) — Model slug inside `make`: 'golf', 'x3', 'c-klasse', 'model-3'. Needs `make`.
- `make_id` (integer, optional) — Numeric make id instead of the slug (Volkswagen = 74, BMW = 13) — from `makes`.
- `model_id` (integer, optional) — Numeric model id instead of the slug (VW Golf = 2084) — from `models`. Needs make_id.
- `query` (string, optional) — Free text matched against the listing (e.g. 'gti', 'allrad', 'anhängerkupplung').
- `price_min` (integer, optional) — Minimum price in EUR (the advertised consumer price).
- `price_max` (integer, optional) — Maximum price in EUR.
- `year_min` (integer, optional) — First registration from this year.
- `year_max` (integer, optional) — First registration up to this year.
- `mileage_min` (integer, optional) — Minimum mileage in km.
- `mileage_max` (integer, optional) — Maximum mileage in km.
- `power_kw_min` (integer, optional) — Minimum power in kW.
- `power_kw_max` (integer, optional) — Maximum power in kW.
- `fuel` (array, optional) — Fuel code(s), one or several comma-separated (one request either way): B petrol, D diesel, E electric, 2 petrol hybrid, 3 diesel hybrid, L LPG, C CNG, H hydrogen, M ethanol, O other. English words (petrol, diesel, electric, lpg …) are accepted too. [one of: B, D, E, 2, 3, L, C, H, M, O]
- `transmission` (enum, optional) — Gearbox: automatic, manual or semi_automatic. [one of: automatic, manual, semi_automatic]
- `body_type` (enum, optional) — Body type, as the site groups it. [one of: small_car, convertible, coupe, suv, estate, sedan, van, transporter, other]
- `offer_type` (enum, optional) — Vehicle offer type: used, new, annual (Jahreswagen), classic (Oldtimer), demo (Vorführwagen), pre_registered (Tageszulassung). [one of: used, new, annual, classic, demo, pre_registered]
- `seller_type` (enum, optional) — Only dealers or only private sellers. [one of: dealer, private]
- `seller_id` (string, optional) — One seller's stock: the `seller.seller_id` of any search row or listing.
- `vat_deductible` (boolean, optional) — Only listings whose dealer issues a VAT invoice (MwSt. ausweisbar) — the ones with a net price.
- `price_rating` (enum, optional) — The site's own price rating: very_good, good or fair. [one of: very_good, good, fair]
- `online_since_days` (integer, optional) — Only listings put online in the last N days (1-7 or 14, the site's own choices). [one of: 1, 2, 3, 4, 5, 6, 7, 14]
- `zip` (string, optional) — Austrian postcode for a radius search (needs radius_km).
- `radius_km` (integer, optional) — Radius around `zip` in km (the site's own steps). [one of: 10, 20, 50, 100, 150, 200, 250, 300, 400]
- `sort` (enum, optional, default "standard") — Sort key. [one of: standard, price, year, mileage, power, newest, make]
- `order` (enum, optional, default "asc") — Sort direction for `sort` (ignored for standard). [one of: asc, desc]
- `page` (integer, optional, default 1) — Page number. 🔴 The source serves at most 4,000 rows per query (page × limit ≤ 4,000); `meta.pagination.last_page` says where it stops.
- `limit` (integer, optional, default 20) — Rows per page, 1-20 (the source's page size). Under a sort the source returns fewer (17 measured).

**Returns:** listings[] — listing_id, url, title, subtitle, make, model, model_id, model_group, variant, model_version, engine, offer_type, price (EUR, advertised), currency, price_display, price_vat_label, price_on_request, price_is_symbolic, price_before_reduction_display, super_deal, first_registration (YYYY-MM), year, mileage_km, power_kw, power_hp, fuel, transmission, engine_ccm, available_now, available_from, location{country_code, postcode, city, street}, seller{seller_id, type, company_name, contact_name, phones[], rating, rating_count, dealer_page, logo}, image, image_count, placement, ad_tier. meta: total, pagination{page, limit, last_page, has_more, retrievable_max}, filters_applied, warnings.

**Example request body:**
```json
{
  "make": "volkswagen",
  "model": "golf",
  "fuel": "D",
  "year_min": 2018
}
```

### POST https://api.reefapi.com/gebrauchtwagen-at/v1/listing — 2 credits
One car in full by its listing_id: price (gross) with net price and VAT rate where the dealer publishes them, negotiable / on-request flags, the site's price rating (category, market median and the price bands), make/model/version ids, first registration, mileage, kW/PS, fuel, gearbox, drive, body, colour, seats, doors, weight, previous owners, service history, consumption and CO2, equipment by category, warranty, description, every photo, location with coordinates and the seller (company, contact, phones, ratings by category).

**Parameters:**
- `listing_id` (string, required) — The listing's id: `listing_id` of a search row (a GUID).

**Returns:** listing{} — the search-row fields plus make_id, legal_category, is_new, price_net, vat_rate, vat_deductible, price_negotiable, price_is_final, price_dealer, price_rating{category, median, ranges[]}, production_year, fuel_code, gears, cylinders, drive_train, body_type, color, paint_type, upholstery, seats, doors, weight_kg, previous_owners, full_service_history, fuel_consumption_l_100km, co2_g_km, electric_range_km, equipment{category: [..]}, warranty, description, images[], status, created_at, dealer_reference, location{lat, lng}, seller{recommend_pct, ratings_by_category[], imprint_url, stock_url}.

**Example request body:**
```json
{
  "listing_id": "0f38a516-be54-4c22-989c-f4b31cb81626"
}
```

### POST https://api.reefapi.com/gebrauchtwagen-at/v1/makes — 3 credits
Every make the site offers with its slug and numeric id, plus the site's own filter vocabularies (fuel, body type, gearbox, offer type, price rating, sort keys) with their labels.

**Parameters:** none

**Returns:** makes[{make_id, name, slug, top}], filters{fuel[], body_type[], transmission[], offer_type[], price_rating[], sort[]}

### POST https://api.reefapi.com/gebrauchtwagen-at/v1/models — 1 credit
Models, model lines ('Golf (alle)') and model groups of one make, with ids — the values `search` takes as model / model_id.

**Parameters:**
- `make_id` (integer, required) — Numeric make id from `makes` (Volkswagen = 74).

**Returns:** models[{model_id, name, slug, model_line_id}], model_lines[{id, name}], model_groups[{id, name}], top_model_ids[]

**Example request body:**
```json
{
  "make_id": 74
}
```

## 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=gebrauchtwagen-at
- Human docs page: https://reefapi.com/docs/gebrauchtwagen-at
- Overview page: https://reefapi.com/gebrauchtwagen-at-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
