How to Search Encar Listings with a REST API
Encar.com lists hundreds of thousands of used cars in South Korea, but it doesn't offer a public API. Anyone wanting that data has to scrape HTML, deal with Korean-only fields, and keep up with layout changes. XAPI Korea wraps Encar's current inventory in a clean REST API with optional English translation for supported fields, so this post walks through the one endpoint you'll use the most: GET /v1/search.
Authentication
Authenticated data requests such as /v1/search need an API key in the X-API-Key header. You get one free (500 requests/month across your account) the moment you sign up, no credit card required. Public discovery endpoints such as /v1/filters and /v1/makes do not require a key.
curl "https://api.xapikorea.com/v1/search?brand=hyundai&year_from=2020&price_max=30000000&limit=5&lang=en" \
-H "X-API-Key: enc_your_key_here"
Filtering
/v1/search accepts the filters you'd expect from a car marketplace, all as query parameters:
| Parameter | Example | Notes |
|---|---|---|
brand | hyundai, bmw, mercedes-benz | English or Korean brand name |
model | tucson, sonata | |
year_from / year_to | 2020 / 2024 | |
price_min / price_max | 10000000 / 30000000 | Always in KRW |
fuel_type | gasoline, diesel, electric, hybrid, lpg | |
transmission | auto, manual | |
body_style | suv, van, truck, sports car | Only these four body styles can be filtered through Encar's search category mapping |
car_type | Y (domestic) or N (imported) | |
is_accident_free | true | Excludes any car with recorded accident history |
sort | Price, Mileage, Year, ModifiedDate (default) |
Not sure what values are accepted for a given field? GET /v1/filters (no auth required) returns manufacturers, fuel types, transmissions, the exact searchable body styles and sort options. Its body_styles values are suv, van, truck and sports car; /v1/search returns 422 for other body styles.
Reading the response
{
"total_count": 15234,
"page": 1,
"limit": 5,
"results": [
{
"id": 40907726,
"manufacturer": "Hyundai",
"model": "Tucson",
"badge": "Diesel 2.0 2WD Modern",
"year": "202103",
"mileage_km": 45000,
"price_krw": 23500000,
"fuel_type": "Diesel",
"transmission": "Automatic",
"location": "Seoul",
"thumbnail": "https://ci.encar.com/.../001.jpg",
"encar_url": "https://fem.encar.com/cars/detail/40907726"
}
],
"next_page": 2
}
next_page is null once you've reached the last page. That's a simple way to drive a "load more" button or a scraping loop without guessing at total pages up front.
Supported textual fields are translated to English by default (lang=en); pass lang=ko if you'd rather get the original Korean values back.
Identical search responses are cached for 60 seconds, so a listing change at Encar may take up to a minute to appear. Cached responses still consume one monthly request and are still subject to the normal per-minute rate limit.
Just counting, not listing
If you're building a filter UI and only need the result count (e.g. "1,204 cars found" next to a filter panel), GET /v1/search/count accepts brand, model, year_from, year_to, price_min, price_max, fuel_type, transmission, car_type and is_accident_free. It does not accept body_style, pagination, sorting or language controls. The response contains only the count rather than result rows.
A count request consumes one monthly request and one rate-limit slot, the same as a normal search request; a cache hit still counts. Count responses use the same 60-second cache duration as search responses.
Getting the full picture
/v1/search returns the fields you need for a results grid. For a single car's extended specifications, photo gallery and available inspection fields, fetch GET /v1/cars/{id}. That's covered in the next post.
Free plan gets you 500 requests/month across your account to try this out; Starter and Pro raise the ceiling to 10,000 and 100,000 with higher rate limits. See the pricing page or the full API reference for everything else the API exposes.
