Jiji
Africa's largest classifieds across Nigeria, Ghana, Kenya, Tanzania and Uganda: ads in local currency, the seller and their whole stock.
/jiji/v1/search2 creditsSearch a Jiji storefront across every vertical — vehicles, property, electronics, phones, jobs, services, fashion, home and garden, babies, agriculture, animals — by keyword and/or category, with the filters that category actually publishes. Each row carries the ad id and URL, title, price in local currency, the category's own attributes (a car's condition and transmission, a flat's bedrooms, a phone's storage), the state and town, the cover photo, the seller's account and rating, and Jiji's own trust labels. 🔴 Jiji ACCEPTS a filter name it does not know and returns the unfiltered list — `make=Toyota` and `region=137` both did — so every filter you send is checked against Jiji's published schema first and a wrong one comes back as an error naming the ones that exist.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| query | optional | — | Free-text search, e.g. 'toyota camry', 'iphone 15', '3 bedroom flat'. Combine with `category` to search inside one vertical. |
| category | optional | — | A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error. |
| region | optional | — | A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, 119. The free `regions` action lists every one. |
| price_min | optional | 0– | Lowest price, in the country's own currency. |
| price_max | optional | 0– | Highest price, in the country's own currency. |
| filters | optional | — | Category filters, as `name=value` pairs separated by ';' (or a JSON object). Names and values are the ones Jiji itself publishes for that category — ask the free `filters` action. Ranges take `from-to`, `from-` or `-to`. Several values for one filter are comma-separated. Examples: `make=Toyota;model=Camry`, `condition=Foreign Used;year_of_manufacture=2018-2021`, `colour=Black,Blue;mileage=-80000`. A name Jiji does not publish is REJECTED rather than silently ignored — see the action description. |
| sort = relevance | optional | relevance · newest · price_asc · price_desc | Result order. |
| posted_within | optional | hour · day | Only ads posted in the last hour or the last day. |
| page = 1 | optional | 1– | Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page. |
| limit = 24 | optional | 1–96 | How many ads to return, 1-96. Jiji's page is fixed at 24 rows and cannot be widened, so anything above 24 is fetched as consecutive pages. |
/jiji/v1/listing2 creditsOne ad in full: title, the complete description, price with Jiji's own market-price band, every photo at full resolution, every attribute the category defines, when it was posted, how many people have viewed and saved it, the trust labels, the breadcrumb path, and the seller — account id, display name, rating, how long they have been on Jiji, when they were last seen, their shop pages, and the phone number(s) the ad publishes.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | The ad's id — the `listing_id` a search row returns, or a full jiji ad URL, or the ...-<id>.html tail of one. |
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| include_phone = true | optional | — | Fetch the seller's published phone number(s) as well (one extra upstream call). On by default. |
/jiji/v1/seller_listings2 creditsEvery live ad of one seller — a dealer, an agency, a shop or a private account — in the same row shape as `search`, so a whole inventory comes back page by page.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| user_id | required | — | The seller's numeric account id — `seller.user_id` on any of their ads. |
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| query | optional | — | Free-text search, e.g. 'toyota camry', 'iphone 15', '3 bedroom flat'. Combine with `category` to search inside one vertical. |
| category | optional | — | A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error. |
| region | optional | — | A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, 119. The free `regions` action lists every one. |
| sort = relevance | optional | relevance · newest · price_asc · price_desc | Result order. |
| page = 1 | optional | 1– | Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page. |
| limit = 24 | optional | 1–96 | How many ads to return, 1-96. Jiji's page is fixed at 24 rows and cannot be widened, so anything above 24 is fetched as consecutive pages. |
/jiji/v1/seller_reviews1 creditWhat buyers wrote about a seller: the good / neutral / bad counts, and each review with its rating, text, date, the reviewer, the ad it was left on and the seller's reply.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| seller_id | required | — | The seller's id string — `seller.seller_id` from a `listing` answer. |
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| page = 1 | optional | 1– | Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page. |
| rating | optional | good · neutral · bad | Only reviews of one kind. |
/jiji/v1/similar2 creditsJiji's own comparable live ads for one listing — what the same market is asking right now, in the search row shape.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| advert_id | required | — | The ad's NUMERIC id (`advert_id` in a search row). A `listing_id` guid is also accepted and costs one extra lookup. |
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| page = 1 | optional | 1– | Which page of results to start from (1-based). Jiji's own window ends at `total_pages`; asking past it is an error, never an empty page. |
/jiji/v1/price_history1 creditEvery price the seller has asked for this ad since it was posted, with the date of each change — Jiji's own record, not a reconstruction.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| advert_id | required | — | The ad's NUMERIC id (`advert_id` in a search row). A `listing_id` guid is also accepted and costs one extra lookup. |
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
/jiji/v1/suggest1 creditJiji's keyword autocomplete — what real buyers type, each suggestion carrying the category it belongs to and a ready-made search URL, so a half-typed word becomes a valid query without guessing a category.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | The partial phrase to complete. |
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| category | optional | — | A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error. |
/jiji/v1/categoriesfreeJiji's whole category tree for a country — every group and sub-category with its id, slug, name and live advert count. Free: these are the values `search` and `filters` take, so nobody has to guess one.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
/jiji/v1/regionsfreeEvery state, city and district Jiji lists for a country, with ids and slugs and which ones it treats as popular. Free: these are the values `region` takes.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
/jiji/v1/filtersfreeEvery filter one category publishes, with the allowed values, the range bounds and the unit — car makes and their models, property types and bedroom counts, phone brands and storage sizes, job types, conditions, colours. Free, and the authoritative input for `search`'s `filters` parameter. Pass `filters` here too to see the child filters a choice unlocks (choose a make, get its models).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| country = ng | optional | ng · gh · ke · tz · ug | Which Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency. |
| category | optional | — | A category by slug, numeric id or name — `cars`, `mobile-phones`, `houses-apartments-for-rent`, `jobs`, 29, 'Cars'. Validated against Jiji's own tree (the free `categories` action), because Jiji answers an unknown category slug with the WHOLE site instead of an error. |
| region | optional | — | A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, 119. The free `regions` action lists every one. |
| filters | optional | — | Category filters, as `name=value` pairs separated by ';' (or a JSON object). Names and values are the ones Jiji itself publishes for that category — ask the free `filters` action. Ranges take `from-to`, `from-` or `-to`. Several values for one filter are comma-separated. Examples: `make=Toyota;model=Camry`, `condition=Foreign Used;year_of_manufacture=2018-2021`, `colour=Black,Blue;mileage=-80000`. A name Jiji does not publish is REJECTED rather than silently ignored — see the action description. |
curl -X POST https://api.reefapi.com/jiji/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"country":"ng","category":"cars","limit":24}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}