Calling this without an account: every endpoint on this page answers a plain GET, with no signup and no key of your own — https://api.reefapi.com/jiji/v1/search?key=ak_live_jtEp58J7k4i6ov0VtjSQMPd0K0424IQY&src=t&country=ng&category=cars&limit=24 — rate limited and free. How this lane works.

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 →
Classifieds & Second-hand

Jiji API & Scraper

The Jiji API returns Africa's largest classifieds network as clean JSON in ten actions, across five country storefronts: Nigeria, Ghana, Kenya, Tanzania and Uganda.

10 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

Country is one parameter, not five products, and each storefront keeps its own catalogue, its own region tree and its own currency. search takes a keyword, a category, a region, a price band, a posted-within window, a sort order and any filter the category itself publishes, and returns up to 96 rows. Every row carries the listing_id and advert_id, the title and canonical URL, the price with its currency, the category's own attributes, the state and town, the cover photo and photo count, the description, Jiji's trust labels, whether the ad is promoted or inspected, and the seller's account id and rating. listing opens one ad in full: the complete description, every photo at full resolution with its dimensions, every attribute the category defines, Jiji's own market-price band, view and favourite counts, the posting date, the breadcrumb path, and the seller with their profile, their shop pages, how long they have been on Jiji, when they were last seen, and the phone number or numbers the ad publishes. seller_listings returns a dealer's, shop's, agency's or private account's whole live stock in the same row shape. seller_reviews returns buyer feedback with the good, neutral and bad counts and each review's rating, stars, text, date and the seller's reply. similar returns Jiji's own comparable live ads, and price_history returns every price the seller has asked for an ad with the date of each change, which is Jiji's record rather than a reconstruction. categories, regions and filters are free, and they are the values the other actions take. Filters were not assumed to work: 23 filter cases were run against a same-run unfiltered control and all 23 narrowed, from make=Toyota cutting 59,504 Nigerian car ads to 24,730, make plus model to 6,349, a 2018-2021 year range to 7,474 and a dog breed from 3,713 to 4. A 168-call run across all ten actions returned 100 percent success on every action, and a 135-case end-to-end run over 18 verticals and all five countries passed 135 of 135. No Jiji account, one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

The five Jiji storefronts, and what each one answered in the same run

Country is a parameter on search and on every other action, and the default is ng. Each storefront is its own catalogue, its own region tree and its own currency, so the same call returns different markets and different money. These counts are one measured run on 2026-09-24: the cars category, and the size of each country's region tree.

countryStorefrontCurrencyCars in that runPlaces in the region tree
ngjiji.ngNigerian naira59,5041,369
ghjiji.com.ghGhanaian cedi17,157599
kejiji.co.keKenyan shilling23,5021,674
tzjiji.co.tzTanzanian shilling16,7923,045
ugjiji.ugUgandan shilling2,300171

Every row in all five runs carried a price and a currency. Category slugs and region slugs are not shared between countries, which is why categories and regions are free actions: ask the storefront you are about to search.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/jiji/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "country": "ng",
    "category": "cars",
    "limit": 24
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "jiji",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 12397.9,
    "record_count": 23,
    "bytes": 106456,
    "cache_hit": false,
    "upstream_calls": 3,
    "charged_credits": 2,
    "version": "0.1.0"
  },
  "data": {
    "results": [
      {
        "listing_id": "tCxVwIgfULaXsSUwyhv8VaC",
        "advert_id": 55286514,
        "title": "Nissan Pathfinder SV 4dr 4x4 (3.5L 6cyl) 2016 Silver",
        "url": "https://jiji.ng/lekki/cars/nissan-pathfinder-sv-4dr-4x4-3-5l-6cyl-2016-silver-tCxVwIgfULaXsSUwyhv8VaC.html",
        "price": 14700000,
        "price_label": "₦ 14,700,000",
        "price_not_published": false,
        "currency": "NGN",
        "condition": "Foreign Used",
        "description": "Foreign used Nissan pathfinder SV AWD 2016 full option total accident free with parking sensor,...",
        "category": {
          "id": 29,
          "name": "Cars",
          "slug": "cars"
        },
        "location": {
          "region_id": 160,
          "region": "Lagos State",
          "area": "Lekki",
          "slug": "lekki",
          "label": "Lagos State, Lekki"
        },
        "attributes": [
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]",
            "unit": "[trimmed-depth]"
          },
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]",
            "unit": "[trimmed-depth]"
          }
        ],
        "labels": [
          {
            "type": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          }
        ],
        "image": "https://pictures-nigeria.jijistatic.net/207138407_MzAwLTQwMC1iZmNhY2M5NzEz.webp",
        "image_count": 20,
        "is_promoted": true,
        "is_inspected": false,
        "is_job": false,
        "status": "active",
        "seller": {
          "user_id": 12777388,
          "name": "JEFJASJAY JEFJASJAY",
          "rating": 4.9,
          "avatar_url": "https://assets.jijistatic.net/static/img/no-image/user/no_avatar.png"
        },
        "can_view_contacts": true
      },
      {
        "listing_id": "CoGQW8s12hniW2rDvMVPxGHT",
        "advert_id": 55198073,
        "title": "Toyota Tundra CrewMax 4x4 Limited 2011 Black",
        "url": "https://jiji.ng/ojodu/cars/toyota-tundra-crewmax-4x4-limited-2011-black-CoGQW8s12hniW2rDvMVPxGHT.html",
        "price": 5000000,
        "price_label": "₦ 5,000,000",
        "price_not_published": false,
        "currency": "NGN",
        "condition": "Local Used",
        "description": "Toyota Tundra 2011 on belt this market value is between 10m to 12m very sound and sharp buy and work...",
        "category": {
          "id": 29,
          "name": "Cars",
          "slug": "cars"
        },
        "location": {
          "region_id": 165,
          "region": "Lagos State",
          "area": "Ojodu",
          "slug": "ojodu",
          "label": "Lagos State, Ojodu"
        },
        "attributes": [
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]",
            "unit": "[trimmed-depth]"
          },
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]",
            "unit": "[trimmed-depth]"
          }
        ],
        "labels": [
          {
            "type": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          },
          {
            "type": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          }
        ],
        "image": "https://pictures-nigeria.jijistatic.net/206744040_MzAwLTQwMC0yZDc0OGU5NWRh.webp",
        "image_count": 12,
        "is_promoted": true,
        "is_inspected": false,
        "is_job": false,
        "status": "active",
        "seller": {
          "user_id": 6678224,
          "name": null,
          "rating": null,
          "avatar_url": null
        },
        "can_view_contacts": true
      },
      {
        "listing_id": "yVRv6tcw0XXf00cBXHUifLC8",
        "advert_id": 55004635,
        "title": "Toyota Camry SE V6 4dr Sedan (3.5L 6cyl 6AM) 2009 Blue",
        "url": "https://jiji.ng/ojodu/cars/toyota-camry-se-v6-4dr-sedan-3-5l-6cyl-6am-2009-blue-yVRv6tcw0XXf00cBXHUifLC8.html",
        "price": 8800000,
        "price_label": "₦ 8,800,000",
        "price_not_published": false,
        "currency": "NGN",
        "condition": "Foreign Used",
        "description": "Toyota Camry sport 2008 model pure accident free and also pure first body",
        "category": {
          "id": 29,
          "name": "Cars",
          "slug": "cars"
        },
        "location": {
          "region_id": 165,
          "region": "Lagos State",
          "area": "Ojodu",
          "slug": "ojodu",
          "label": "Lagos State, Ojodu"
        },
        "attributes": [
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]",
            "unit": "[trimmed-depth]"
          },
          {
            "name": "[trimmed-depth]",
            "value": "[trimmed-depth]",
            "unit": "[trimmed-depth]"
          }
        ],
        "labels": [
          {
            "type": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          },
          {
            "type": "[trimmed-depth]",
            "value": "[trimmed-depth]"
          }
        ],
        "image": "https://pictures-nigeria.jijistatic.net/205883332_MzAwLTQwMC03NzAxOTZlYzA5.webp",
        "image_count": 11,
        "is_promoted": true,
        "is_inspected": false,
        "is_job": false,
        "status": "active",
        "seller": {
          "user_id": 6678224,
          "name": null,
          "rating": null,
          "avatar_url": null
        },
        "can_view_contacts": true
      }
    ],
    "count": 23,
    "total_results": 58968,
    "page": 1,
    "pages_fetched": 1,
    "total_pages": 188,
    "page_size": 24,
    "has_more": true,
    "next_page": 2,
    "posted_in_last_day": 1698,
    "posted_in_last_hour": 20,
    "country": "ng",
    "currency": "NGN",
    "category": {
      "id": 29,
      "slug": "cars",
      "name": "Cars",
      "parent_id": 6,
      "parent_name": "Vehicles"
    },
    "region": null,
    "filters_applied": [],
    "query": null
  }
}
Actions

What the Jiji API does

ActionDescriptionConcrete use caseKey params
searchSearch 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.Price-intelligence teams call search to search a Jiji storefront across every vertical.country, query, category, region, price_min, ...
listingOne 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.Classifieds aggregators call listing to get one ad in full.listing_id, country, include_phone
seller_listingsEvery 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.Resale and arbitrage tools call seller_listings to get every live ad of one seller.user_id, country, query, category, region, ...
seller_reviewsWhat 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.Lead-generation teams call seller_reviews to get what buyers wrote about a seller.seller_id, country, page, rating
similarJiji's own comparable live ads for one listing — what the same market is asking right now, in the search row shape.Price-intelligence teams call similar to get jiji's own comparable live ads for one listing.advert_id, country, page
price_historyEvery 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.Classifieds aggregators call price_history to get every price the seller has asked for this ad since it was posted, with the date of each change.advert_id, country
suggestJiji'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.Resale and arbitrage tools call suggest to get jiji's keyword autocomplete.query, country, category
categoriesJiji'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.Lead-generation teams call categories to get jiji's whole category tree for a country.country
regionsEvery 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.Price-intelligence teams call regions to get every state, city and district Jiji lists for a country, with ids and slugs and which ones it….country
filtersEvery 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).Classifieds aggregators call filters to get every filter one category publishes, with the allowed values, the range bounds and the unit.country, category, region, filters
Code samples

Call search from your stack

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}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.jiji.search with {"country":"ng","category":"cars","limit":24}.
Use cases

Who uses this API and why

  • Price a used car, phone or flat against what the Nigerian, Ghanaian, Kenyan, Tanzanian or Ugandan market is asking today.
  • Track one dealer, shop or agency: their whole live stock in pages, their buyer feedback, and what changes week over week.
  • Watch a segment for new supply with posted_within and a validated filter set, then diff on listing_id.
  • Measure rents, land prices and asking-price drift by state or town from real advertised prices and price_history.
  • Feed a comparison, alerting or lead product with live African classifieds rows in each country's own currency.
FAQ

Questions developers ask before integrating

Which Jiji countries does the API cover?

Five: Nigeria, Ghana, Kenya, Tanzania and Uganda, passed as country with the values ng, gh, ke, tz and ug. Nigeria is the default. Each one is a separate storefront with its own catalogue, its own region tree and its own currency, so a category slug or a region slug from one country is not guaranteed to exist in another. The free categories and regions actions list exactly what that storefront publishes.

Do the Jiji filters actually filter?

Here, yes, and it was measured rather than assumed. Jiji itself accepts a filter name it does not know and hands back the unfiltered list, so a query that looks like it worked can silently be the whole category. Every filter you send is checked against the schema Jiji publishes for that category before any search is issued, and a name or a value the schema does not carry comes back as an error naming the ones that do. 23 filter cases were run against a same-run unfiltered control and all 23 narrowed: make=Toyota took 59,504 car ads to 24,730, make plus model to 6,349, a 2018-2021 year range to 7,474, a mileage ceiling to 2,603, a price band to 850, a region to 41,601 and a dog breed from 3,713 to 4.

How do I know which filters a category supports?

Ask the free filters action with a category. It returns every filter that category publishes, with its key, its label, whether it is single-choice, multi-choice or a range, its unit, and the complete list of allowed values or the range bounds. Some filters only exist once a parent choice is made: the model list appears after a make is chosen, so pass the parent back into filters to see the children it unlocks. In search, filters are name=value pairs separated by a semicolon, ranges take from-to, from- or -to, and several values for one filter are comma-separated: make=Toyota;model=Camry or condition=Foreign Used;year_of_manufacture=2018-2021.

Why do some Jiji ads come back with no price?

Because Jiji publishes none for them. Job ads are the clearest case: 0 of 23 general job rows and 0 of 24 IT job rows carried a price, and 18 of 23 cleaning-service rows carried none either. Those ads come back with price null and price_not_published true, plus Jiji's own price_label kept verbatim, so a missing price is never reported as 0 and never reads as free. In the other 15 categories measured, every row in the sample carried a price.

Do I get the seller's phone number?

The listing action returns the phone number or numbers the ad itself publishes, in seller.phone and seller.phones, and it did so on 22 of 22 detail calls across 13 verticals. It is on by default and include_phone set to false turns it off, which also saves one upstream call. Jiji publishes no seller e-mail address to a logged-out reader, so no e-mail field is returned: 0 hits in 30 ads scanned end to end and 0 in 38 raw payloads. The rest of the seller block is the public profile Jiji shows anyway: display name, account id, rating, profile or shop URL, avatar, advert and feedback counts, how long they have been on Jiji, when they were last seen, and their trust labels.

How deep can I page a Jiji search?

Jiji's page is fixed at 24 rows and cannot be widened, so limit above 24 is served as consecutive pages, up to 96 rows in one call, with duplicates dropped. The search window itself is Jiji's: a 58,000-ad category reported 223 pages, which is roughly 5,350 ads reachable per query. Asking past total_pages is an error rather than an empty page. To go wider than the window, partition the query by region, price band or filter, which is what the free regions and filters actions exist to give you.

Which Jiji fields come back empty, and why?

Whatever Jiji does not publish, reported as absence rather than guessed. Four categories publish no row-level attributes at all, and not one row in the samples carried any: cleaning-services 0 of 23, babies-and-kids-accessories, dogs-and-puppies and livestock-and-poultry 0 of 24 each, and building-materials 2 of 23, while cars, phones, property, land, laptops, furniture, appliances and jobs carry a full attribute table on every row. condition is null wherever the category defines none, which includes property, jobs and services. seller.name is attached to a search row only on some ads, from 16 of 24 on furniture down to 0 of 24 on houses for sale, but seller.user_id is complete everywhere and listing always has the name. listing_id, advert_id, title, url, image, description, location.region and seller.user_id were complete in all 18 categories measured.

What does an empty Jiji search mean?

It means no ad matched, and the answer says so explicitly. An empty result is re-checked before it is returned, and empty_confirmed true is only present when the re-check agreed, so a real no-match is distinguishable from a blip. A sold, expired or removed ad is a different case: Jiji serves it nothing at all, so a dead listing_id is NOT_FOUND rather than an empty success.

What is the Jiji API?

Jiji API is a ReefAPI endpoint group for africa's largest classifieds across nigeria, ghana, kenya, tanzania and uganda: ads in local currency, the seller and their whole stock. It returns live JSON through POST requests under /jiji/v1.

Is the Jiji API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Jiji calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Jiji login or account?

No login to Jiji is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Jiji data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Jiji API use?

Jiji actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Jiji from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call jiji actions with the same key, credit pool and JSON envelope used by normal REST requests.

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 →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.