# Kijiji API — Canada's #1 classifieds (kijiji.ca): search the marketplace, cars and real estate, read the full listing with seller and category path, browse categories, autocomplete and a seller's other listings. Prices in CAD, English or French labels. No account, no browser; private sellers' data stays private.

> Search kijiji.ca listings across every category (Buy & Sell, Cars & Vehicles, Real Estate, Pets, Services …) by keyword, category, location or postal code + radius: listing id, title, price in CAD with its type (fixed, please contact, swap/trade, free), wanted or offered, city, province and postal prefix, posting date, private or dealer seller, vehicle and property details, photo, and the true total. Paid top ads come back separately. Filter by price, free / contact-only, wanted ads, seller type and any category filter (make, year, bedrooms …); sort by newest, oldest or price.
> ReefAPI engine `kijiji` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/kijiji/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, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /kijiji/v1/search — 1 credit
Search kijiji.ca listings across every category (Buy & Sell, Cars & Vehicles, Real Estate, Pets, Services …) by keyword, category, location or postal code + radius: listing id, title, price in CAD with its type (fixed, please contact, swap/trade, free), wanted or offered, city, province and postal prefix, posting date, private or dealer seller, vehicle and property details, photo, and the true total. Paid top ads come back separately. Filter by price, free / contact-only, wanted ads, seller type and any category filter (make, year, bedrooms …); sort by newest, oldest or price.

**Parameters:**
- `query` (string, optional) — Keyword. Optional when category_id, location_id or postal_code narrows the search.
- `category_id` (integer, optional) — kijiji category id from `categories` or a search's category_facets — e.g. 10 Buy & Sell, 644 Bikes, 27 Cars & Vehicles, 174 Cars & Trucks, 34 Real Estate, 37 Apartments & Condos for rent, 17220001 Free Stuff. 0 = all categories.
- `location_id` (integer, optional) — kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.
- `postal_code` (string, optional) — Canadian postal code (M5V 3L9) or its first three characters (M5V). Searches around it within radius_km; rows then carry location.distance_m.
- `radius_km` (number, optional, default 10) — Search radius around postal_code, in km (1-1000).
- `page` (integer, optional, default 1) — Result page, 1-100 (40 listings per page). kijiji serves no more than 100 pages.
- `sort` (enum, optional, default "newest") — Order of results. A sort the site does not apply to this search is rejected instead of silently falling back to newest. [one of: newest, oldest, price_asc, price_desc]
- `price_min` (number, optional) — Lowest asking price in CAD (whole dollars).
- `price_max` (number, optional) — Highest asking price in CAD (whole dollars).
- `price_type` (enum, optional) — Only give-away ads or only ads without a published price. [one of: free, contact]
- `ad_type` (enum, optional, default "offer") — kijiji returns offers unless wanted ads are asked for. A wanted ad's price is the buyer's budget. [one of: offer, wanted]
- `seller_type` (enum, optional) — Only private sellers or only dealers (categories that publish 'For Sale By'). [one of: owner, dealer]
- `filters` (object, optional) — Category-specific filters by the site's own names, from filters_available (include_facets=true): a value (`{"carmake": "honda"}`), several values (`["honda", "toyota"]`) or a range (`"2015__2018"` or `{"min": 2015, "max": 2018}`). A filter the site does not apply is rejected.
- `include_facets` (boolean, optional, default false) — Also return category_facets, location_facets and filters_available with counts.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** results[]{listing_id, title, url, listing_format (standard|autos|real_estate — the site's record type, not the category), listing_type (offer|wanted), price (CAD, null unless an amount is published), currency, price_type (fixed|contact|swap_trade|give_away), is_free, price_before_drop, msrp, price_extras (e.g. PLUS_TAXES), price_rating (vehicles), category_id, location{location_id, location_name, city, province, postal_prefix, neighbourhood, distance_m — every seller; address, postal_code, nearest_intersection, latitude, longitude — businesses, or with include_pii}, posted_at, sorted_at, seller_type (private|business), seller_id, seller_rating, seller_verified, is_top_ad, ad_source, price_drop, highlighted, shipped_by_seller, description_excerpt, image, image_count, vehicle{make, model, trim, year, mileage_km, condition, body_type, transmission, drivetrain, fuel_type, colour, doors, seats, vin}, property{bedrooms, bathrooms, area_sqft, unit_type, furnished, pets_allowed, parking_spots, date_available, agreement_type, rented_by, utilities_included, smoking_permitted}, attributes[]{name, codes}, duplicate_of}, count, total_results, page, page_size, last_page, has_more, sort_applied, filters_applied[], category{category_id, name, path[]}, location{location_id, name}, radius_km, keywords, site_search_url, top_ads[] (paid placements, same row shape), category_facets[], location_facets[], filters_available[] (include_facets), currency

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

### POST /kijiji/v1/cars/search — 1 credit
Search cars and trucks (and other vehicles) on kijiji.ca — Canada's largest used-car marketplace: make, model, trim, year, mileage in km, body type, transmission, drivetrain, fuel, colour, VIN, price in CAD with dealer extras (plus taxes, MSRP, kijiji's price rating) and dealer or private seller. Filter by make, model, year, mileage, body type, fuel, drivetrain, condition, price, seller type, location or postal code; sort by newest, oldest, price or mileage.

**Parameters:**
- `make` (string, optional) — Make code as kijiji writes it (honda, toyota, mercedesbenz …; see filters_available).
- `model` (string, optional) — Model code (civic, corolla …).
- `year_min` (integer, optional)
- `year_max` (integer, optional)
- `mileage_min_km` (integer, optional)
- `mileage_max_km` (integer, optional)
- `body_type` (string, optional) — Body type code (sedan, suvcrossover, pickuptruck, coup, htchbck, conv, minivan …).
- `fuel_type` (enum, optional) [one of: gas, diesel, electric, hybrid, other]
- `drivetrain` (enum, optional) [one of: 4x4, awd, fwd, rwd]
- `condition` (enum, optional) [one of: new, used, lease, damaged]
- `category_id` (integer, optional, default 174) — Vehicle category, default 174 Cars & Trucks (27 = all Cars & Vehicles).
- `query` (string, optional) — Keyword. Optional when category_id, location_id or postal_code narrows the search.
- `location_id` (integer, optional) — kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.
- `postal_code` (string, optional) — Canadian postal code (M5V 3L9) or its first three characters (M5V). Searches around it within radius_km; rows then carry location.distance_m.
- `radius_km` (number, optional, default 10) — Search radius around postal_code, in km (1-1000).
- `page` (integer, optional, default 1) — Result page, 1-100 (40 listings per page). kijiji serves no more than 100 pages.
- `sort` (enum, optional, default "newest") — Order of results. [one of: newest, oldest, price_asc, price_desc, mileage_asc, mileage_desc]
- `price_min` (number, optional) — Lowest asking price in CAD (whole dollars).
- `price_max` (number, optional) — Highest asking price in CAD (whole dollars).
- `seller_type` (enum, optional) — Only private sellers or only dealers (categories that publish 'For Sale By'). [one of: owner, dealer]
- `filters` (object, optional) — Category-specific filters by the site's own names, from filters_available (include_facets=true): a value (`{"carmake": "honda"}`), several values (`["honda", "toyota"]`) or a range (`"2015__2018"` or `{"min": 2015, "max": 2018}`). A filter the site does not apply is rejected.
- `include_facets` (boolean, optional, default false) — Also return category_facets, location_facets and filters_available with counts.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** results[]{listing_id, title, url, listing_format (standard|autos|real_estate — the site's record type, not the category), listing_type (offer|wanted), price (CAD, null unless an amount is published), currency, price_type (fixed|contact|swap_trade|give_away), is_free, price_before_drop, msrp, price_extras (e.g. PLUS_TAXES), price_rating (vehicles), category_id, location{location_id, location_name, city, province, postal_prefix, neighbourhood, distance_m — every seller; address, postal_code, nearest_intersection, latitude, longitude — businesses, or with include_pii}, posted_at, sorted_at, seller_type (private|business), seller_id, seller_rating, seller_verified, is_top_ad, ad_source, price_drop, highlighted, shipped_by_seller, description_excerpt, image, image_count, vehicle{make, model, trim, year, mileage_km, condition, body_type, transmission, drivetrain, fuel_type, colour, doors, seats, vin}, property{bedrooms, bathrooms, area_sqft, unit_type, furnished, pets_allowed, parking_spots, date_available, agreement_type, rented_by, utilities_included, smoking_permitted}, attributes[]{name, codes}, duplicate_of}, count, total_results, page, page_size, last_page, has_more, sort_applied, filters_applied[], category{category_id, name, path[]}, location{location_id, name}, radius_km, keywords, site_search_url, top_ads[] (paid placements, same row shape), category_facets[], location_facets[], filters_available[] (include_facets), currency

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

### POST /kijiji/v1/real_estate/search — 1 credit
Search kijiji.ca real estate — apartments and condos for rent, houses for rent and for sale, rooms, land and commercial space: rent or price in CAD, bedrooms, bathrooms, size in sq ft, unit type, furnished, pets, parking, move-in date, utilities included, neighbourhood, and whether the owner or a property manager lists it. Filter by bedrooms, bathrooms, unit type, furnished, pets, size, price, landlord type, location or postal code; sort by newest, oldest or price.

**Parameters:**
- `bedrooms` (string, optional) — Bedroom count as kijiji lists it: 0 (bachelor/studio), 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5.
- `bathrooms` (number, optional) — Bathroom count (1, 1.5, 2 …).
- `unit_type` (enum, optional) [one of: apartment, condo, basement-apartment, house, townhouse, duplex-triplex]
- `furnished` (boolean, optional)
- `pets_allowed` (enum, optional) [one of: 1, 0, limited]
- `rented_by` (enum, optional) [one of: owner, professional]
- `area_min_sqft` (integer, optional)
- `area_max_sqft` (integer, optional)
- `category_id` (integer, optional, default 34) — Real-estate category, default 34 (all real estate). 37 Apartments & Condos for rent, 30349001 For Rent, 35 Houses for Sale, 641 Land for Sale, 40 Commercial & Office Space — more in category_facets.
- `query` (string, optional) — Keyword. Optional when category_id, location_id or postal_code narrows the search.
- `location_id` (integer, optional) — kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.
- `postal_code` (string, optional) — Canadian postal code (M5V 3L9) or its first three characters (M5V). Searches around it within radius_km; rows then carry location.distance_m.
- `radius_km` (number, optional, default 10) — Search radius around postal_code, in km (1-1000).
- `page` (integer, optional, default 1) — Result page, 1-100 (40 listings per page). kijiji serves no more than 100 pages.
- `sort` (enum, optional, default "newest") — Order of results. A sort the site does not apply to this search is rejected instead of silently falling back to newest. [one of: newest, oldest, price_asc, price_desc]
- `price_min` (number, optional) — Lowest asking price in CAD (whole dollars).
- `price_max` (number, optional) — Highest asking price in CAD (whole dollars).
- `filters` (object, optional) — Category-specific filters by the site's own names, from filters_available (include_facets=true): a value (`{"carmake": "honda"}`), several values (`["honda", "toyota"]`) or a range (`"2015__2018"` or `{"min": 2015, "max": 2018}`). A filter the site does not apply is rejected.
- `include_facets` (boolean, optional, default false) — Also return category_facets, location_facets and filters_available with counts.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** results[]{listing_id, title, url, listing_format (standard|autos|real_estate — the site's record type, not the category), listing_type (offer|wanted), price (CAD, null unless an amount is published), currency, price_type (fixed|contact|swap_trade|give_away), is_free, price_before_drop, msrp, price_extras (e.g. PLUS_TAXES), price_rating (vehicles), category_id, location{location_id, location_name, city, province, postal_prefix, neighbourhood, distance_m — every seller; address, postal_code, nearest_intersection, latitude, longitude — businesses, or with include_pii}, posted_at, sorted_at, seller_type (private|business), seller_id, seller_rating, seller_verified, is_top_ad, ad_source, price_drop, highlighted, shipped_by_seller, description_excerpt, image, image_count, vehicle{make, model, trim, year, mileage_km, condition, body_type, transmission, drivetrain, fuel_type, colour, doors, seats, vin}, property{bedrooms, bathrooms, area_sqft, unit_type, furnished, pets_allowed, parking_spots, date_available, agreement_type, rented_by, utilities_included, smoking_permitted}, attributes[]{name, codes}, duplicate_of}, count, total_results, page, page_size, last_page, has_more, sort_applied, filters_applied[], category{category_id, name, path[]}, location{location_id, name}, radius_km, keywords, site_search_url, top_ads[] (paid placements, same row shape), category_facets[], location_facets[], filters_available[] (include_facets), currency

### POST /kijiji/v1/listing — 1 credit
The full kijiji.ca listing by id or URL: title, full description, price in CAD with its type, status (active, deleted, expired), wanted or offered, category path, every attribute with its label, every photo, video and virtual-tour links, city, province and postal prefix, posting and expiry dates, view count, vehicle details (make, model, year, km, VIN, dealer price extras and market price rating) or property details (bedrooms, bathrooms, size, utilities, neighbourhood walk/transit scores), and the seller — for businesses the dealer or agency name, website, profile and member-since date; for private sellers only type, member-since and listing count.

**Parameters:**
- `listing_id` (string, required) — Listing id (the number at the end of a kijiji.ca/v-… URL) or the full listing URL.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** listing{listing_id, title, url, status (active|deleted|expired|…), is_active, listing_format, listing_type, price, currency, price_type, is_free, price_before_drop, msrp, price_extras, price_rating, market_average_price, description, category_id, category, category_path[]{category_id, name}, location{…}, neighbourhood{name, summary, walk_score, transit_score, cycle_score}, posted_at, sorted_at, expires_at, views, images[], image_count, video_url, virtual_tour_url, is_mls_listing, rental_badge, vehicle{…}, property{…}, attributes[]{name, codes, label, values}, flags{is_top_ad_listing, price_drop, highlighted, from_dealer, financing_available, trade_in_accepted, commission_free}, seller{type, id, name (businesses), verified, has_phone, member_since, listing_count, profile_url, website_url, account_type}}

### POST /kijiji/v1/categories — 1 credit
kijiji.ca's category tree one level at a time, with live listing counts: the sub-categories of a category (all of Canada or one location), plus the locations below the chosen one and the filters that category supports. Pass a node's category_id back to walk down.

**Parameters:**
- `category_id` (integer, optional) — kijiji category id from `categories` or a search's category_facets — e.g. 10 Buy & Sell, 644 Bikes, 27 Cars & Vehicles, 174 Cars & Trucks, 34 Real Estate, 37 Apartments & Condos for rent, 17220001 Free Stuff. 0 = all categories.
- `location_id` (integer, optional) — kijiji location id from a search's location_facets — provinces (9004 Ontario, 9001 Quebec, 9003 Alberta, 9007 British Columbia …) and cities/regions (1700273 City of Toronto, 1700281 Montreal …). 0 = all of Canada.
- `query` (string, optional) — Optional keyword: counts are then for that keyword.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** category{category_id, name, path[]}, categories[]{category_id, name, count}, count, total_results, locations[]{location_id, name, count}, filters_available[]{name, label, group, kind, values[], min, max}, location{location_id, name}

### POST /kijiji/v1/suggest — 1 credit
kijiji.ca search autocomplete: completed keywords for a partial term, each with the categories it is most often searched in.

**Parameters:**
- `query` (string, required) — The partial keyword.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** suggestions[]{keyword, categories[]{category_id, name}}, count, query

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

### POST /kijiji/v1/seller_listings — 1 credit
All current listings of one kijiji.ca seller (a dealer, agency or private seller), newest first: listing id, title, price, city, category and photo — with the business name for dealers.

**Parameters:**
- `seller_id` (string, required) — The seller id from a search row (seller_id) or listing (seller.id).
- `page` (integer, optional, default 1) — Page, 20 listings per page.
- `language` (enum, optional, default "en") — Language of category names, attribute labels and values. Titles and descriptions stay as the seller wrote them. [one of: en, fr]
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-5).

**Returns:** seller{id, type, name (businesses), listing_count, member_since, profile_url}, results[]{listing_id, title, url, price, price_type, is_free, city, category_id, image, posted_at, is_top_ad}, count, page, has_more

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