Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Jiji API page →
docs / jiji

Jiji

Africa's largest classifieds across Nigeria, Ghana, Kenya, Tanzania and Uganda: ads in local currency, the seller and their whole stock.

base /jiji/v110 endpoints
post/jiji/v1/listing2 credits

One 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.

ParameterAllowed / rangeDescription
listing_idrequired—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 = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
include_phone = trueoptional—Fetch the seller's published phone number(s) as well (one extra upstream call). On by default.
Try in playground →
post/jiji/v1/seller_listings2 credits

Every 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.

ParameterAllowed / rangeDescription
user_idrequired—The seller's numeric account id — `seller.user_id` on any of their ads.
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
queryoptional—Free-text search, e.g. 'toyota camry', 'iphone 15', '3 bedroom flat'. Combine with `category` to search inside one vertical.
categoryoptional—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.
regionoptional—A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, 119. The free `regions` action lists every one.
sort = relevanceoptionalrelevance · newest · price_asc · price_descResult order.
page = 1optional1–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 = 24optional1–96How 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.
Try in playground →
post/jiji/v1/seller_reviews1 credit

What 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.

ParameterAllowed / rangeDescription
seller_idrequired—The seller's id string — `seller.seller_id` from a `listing` answer.
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
page = 1optional1–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.
ratingoptionalgood · neutral · badOnly reviews of one kind.
Try in playground →
post/jiji/v1/similar2 credits

Jiji's own comparable live ads for one listing — what the same market is asking right now, in the search row shape.

ParameterAllowed / rangeDescription
advert_idrequired—The ad's NUMERIC id (`advert_id` in a search row). A `listing_id` guid is also accepted and costs one extra lookup.
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
page = 1optional1–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.
Try in playground →
post/jiji/v1/price_history1 credit

Every 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.

ParameterAllowed / rangeDescription
advert_idrequired—The ad's NUMERIC id (`advert_id` in a search row). A `listing_id` guid is also accepted and costs one extra lookup.
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
Try in playground →
post/jiji/v1/suggest1 credit

Jiji'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.

ParameterAllowed / rangeDescription
queryrequired—The partial phrase to complete.
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
categoryoptional—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.
Try in playground →
post/jiji/v1/categoriesfree

Jiji'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.

ParameterAllowed / rangeDescription
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
Try in playground →
post/jiji/v1/regionsfree

Every 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.

ParameterAllowed / rangeDescription
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
Try in playground →
post/jiji/v1/filtersfree

Every 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).

ParameterAllowed / rangeDescription
country = ngoptionalng · gh · ke · tz · ugWhich Jiji storefront to read. Each country is its own domain and its own catalogue, prices and currency.
categoryoptional—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.
regionoptional—A state / city / district by slug, id or name — `lagos`, `nairobi`, `greater-accra`, 119. The free `regions` action lists every one.
filtersoptional—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.
Try in playground →