Agriaffaires / MachineryZone
Agriaffaires / MachineryZone
/agriaffaires/v1/search4 creditsSearch or browse either marketplace. Combine free text with the typed filters the source supports natively — category, manufacturer, model, advert type, year of construction, hour meter, price band, seller country, region and department, professional or private, with a photo, posted this week — and sort by price, year, hours, model, manufacturer or listing date. 50 rows a page. 🔴 Depth is capped by the source at 200 pages = 10,000 rows per query and page 201 silently serves page 1, so narrow rather than page; the filters are measured to bite hard (22,115 rows -> 6,787 by a year and price window -> 947 by one manufacturer).
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
| query | optional | — | Free-text search across the whole listing (title, model and description), exactly as the site's own search box does it. Either `query` or `category_id` is the normal starting point. Use `keyword` instead for a narrower match: measured on the same minute, `query=tracteur` answered 33,908 and `keyword=tracteur` 7,905 — the keyword form is title/model-weighted while this one also matches the seller's prose. |
| keyword | optional | — | A narrower text match than `query` (the site's `search[keyword]` field). Measured: 7,905 rows for 'tracteur' where `query` gave 33,908, and it still reaches other categories (a lorry carrying a tractor matched), so it is a text filter, not a category filter. |
| model | optional | — | The model designation as the seller typed it (the site's own `search[modele]` field). Combine with `manufacturer` for a comparable set; use `price_index` when what you want is the market price band for that make and model rather than the rows. |
| category_id | optional | 1– | The marketplace's own category (tree) id — 702 is the farm tractor, 802 the fertiliser spreader. The id is language- and brand-invariant (702 answers 'Tracteur agricole' on .com and 'Traktor' on .de), which is why it, and not a slug, is the handle. Get ids from `categories`, `facets` or `suggest`. 🔴 The source will not accept a category together with other filters in one request and answers 200 with zero rows if you try, so this engine sends it first and the rest afterwards — which costs one extra upstream request when you combine them. |
| manufacturer | optional | — | Manufacturer by NAME, resolved live against the source's own facet list for your query, so a misspelling is a clear error with the real options rather than a silently wrong answer. 🔴 Resolving costs one extra upstream request (the engine has to read the facet panel first); pass `manufacturer_id` from `facets` if you already know it and want the cheaper call. |
| manufacturer_id | optional | 1– | Manufacturer by the source's own facet id, as `facets` publishes it (7607 = John Deere). These ids are GLOBAL rather than per-category — measured: an unfiltered result page publishes 1,004 of them and John Deere is 7607 there and on the tractor category page alike — so one taken from any `facets` call works anywhere. 🔴 It is NOT the same id space as the price observatory's make id for the same brand (4039 for John Deere), and the observatory answers an EMPTY result rather than an error when given the wrong one, so the two are never interchanged. |
| listing_type | optional | sale · wanted · auction · rental | What kind of advert. Defaults to everything, which MIXES offers with 'wanted' adverts and auctions — pass `sale` if you only want machines actually on offer. Measured on one query: 32,797 for sale, 829 wanted, 179 auctions, 97 rentals. The four ids behind these names are identical on both brands and in every language. |
| year_min | optional | 1900–2100 | Earliest year of construction, inclusive. 🔴 A YEAR, not a timestamp: this source takes 2015 and the filter bites (33,942 -> 24,718). A unix timestamp is ACCEPTED and answers 7,786 rows of nonsense, so the engine rejects anything that is not a plausible year instead of forwarding it. |
| year_max | optional | 1900–2100 | Latest year of construction, inclusive. |
| year_known | optional | — | Only listings whose year of construction is published at all. Useful because a year range on this source silently also drops the rows that have no year. |
| operating_hours_min | optional | 0– | Lowest hour-meter reading, inclusive. This is the machine's own hour counter (`h`), kept strictly separate from any odometer reading, which the source publishes as a distance property of its own. |
| operating_hours_max | optional | 0– | Highest hour-meter reading, inclusive. |
| operating_hours_known | optional | — | Only listings that publish an hour-meter reading at all. |
| price_min | optional | 0– | Lowest price, in EUR, VAT-excluded — the source's own reference price, which is the same number on every national host (it does not convert currency). Measured to bite exactly: a 30,000-90,000 band on the tractor category took 22,115 rows to 6,787. |
| price_max | optional | 0– | Highest price, in EUR, VAT-excluded. |
| with_price_only | optional | — | Only listings that publish a price. 🔴 'Price on request' is a STATE here, not a missing value: those rows come back with `price: null` and `price_on_request: true`, and dropping them loses machines that are genuinely for sale. Measured: 25,754 of 33,942 rows publish a price. |
| country | optional | AE · AL · AM · AT · BA · BE · BG · CA · CH · CL · CN · CZ · DE · DK · EE · ES · FR · GB · GR · HR · HU · ID · IE · IT · LT · LU · LV · MD · ME · MK · MU · MX · NL · NO · PA · PH · PL · PT · PY · RO · RS · RU · SE · SI · SK · TH · TW · UA · US | Seller country, as an ISO-3166-1 alpha-2 code. 🔴 This is an enum and not a pass-through for a reason that was measured: the source takes a numeric area id of its own, and an id it does not know produces a DIFFERENT, WRONG result set rather than an error or an empty one (control 33,942 rows; France 15,230; bogus id 11,117; the string 'FR' 11,125 — all HTTP 200 with real rows). The ids behind these codes were read off the source's own select and are brand- and language-invariant. |
| region_id | optional | 1– | Seller region, by the source's own id, which `locations` publishes for a country. Requires `country`, and the engine checks the id against the source's own live region list for that country before sending it — see the note on `country` for why. |
| department_id | optional | 1– | Seller department / province, by the source's own id, which `locations` publishes for a region. Requires `region_id`. |
| postcode | optional | — | Centre a radius search on a postcode YOU supply, together with `radius_km`. 🔴 The site's own 'around me' radius and its distance column are computed from the viewer's position, which for an API means the location of whichever server made the call — so neither is offered. A postcode you pass is a property of your question, not of our exit, which is why this form is. |
| radius_km | optional | 1–1000 | Radius in kilometres around `postcode`. Requires `postcode` and `country`. |
| seller_type | optional | professional · private | Whether the advert comes from a business or a private seller. Dealer adverts carry the company name, its town and its logo; private ones carry a location only. |
| has_photo | optional | — | Only listings with at least one photo (measured 32,674 of 33,942). |
| has_video | optional | — | Only listings with a video. |
| posted_within_week | optional | — | Only listings published in the last seven days — the only recency window the source itself offers, so no other one is invented here. Pair it with `sort=newest` to watch a market. |
| flash_deal | optional | — | Only the source's own 'flash sale' adverts. |
| sort = newest | optional | newest · price_asc · price_desc · year_asc · year_desc · hours_asc · hours_desc · model_asc · model_desc · manufacturer_asc · manufacturer_desc · rental_price_asc · rental_price_desc | Result order. 🔴 The source also offers an ascending and a descending DISTANCE order; neither is exposed, because the distance it sorts on is measured from the caller's own position, which for an API is the server that made the request — the same reason no distance field is published. `dealer_price_ref_*` is likewise not offered: the source only reveals it to a logged-in professional. |
| page = 1 | optional | 1–200 | Result page, 50 rows each. 🔴 The ceiling is 200 pages = 10,000 rows per query no matter what `total` says, and page 201 does not error — it answers a redirect back to PAGE 1, so a naive pager re-reads the first page forever. Asking beyond the ceiling is an error here. To go deeper, narrow: category, manufacturer, year, price and country all bite hard (22,115 -> 6,787 -> 947 on one measured chain). |
| include_facets | optional | — | Also return the source's own live filter counts for this query in `meta.facets` — the categories, manufacturers, conditions and numeric ranges that actually have stock, with the ids the filters accept. |
/agriaffaires/v1/detail3 creditsOne listing in full, by id. Returns the machine (manufacturer, model, year of construction, condition, availability, hour meter, engine power), the price with its currency — cross-checked against the page's own schema.org product data and reported if the two disagree — every technical property the seller typed with the source's own label, the raw number, the real unit and the printed unit label, the seller's own description, the full gallery, the category breadcrumb and the business behind the advert. An auction's price row is returned as `auction_start_price`, never as an asking price.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | The numeric listing id, as `search` returns it and as it appears in the listing URL. 🔴 Both slugs in that URL are ignored by the source, so the id alone is enough; a listing that has gone answers NOT_FOUND rather than something else. |
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
/agriaffaires/v1/categories3 creditsThe marketplace's own category tree with the numeric ids every other action takes and the source's own live counts. Agriaffaires publishes some 320 categories under its machinery families, MachineryZone its own set; ids are language-invariant, so the id you get here works on all 43 hosts. 🔴 The tree lives on exactly one page (the homepage); result pages load it over AJAX and do not contain it, so this action reads the homepage for the hierarchy and the source's own facet list for the ids, and says in `meta` how many it could match.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
/agriaffaires/v1/facets3 creditsThe source's own live filter vocabulary and counts for a query: which categories and manufacturers have stock and how much, which conditions, gearboxes, drive and equipment values exist for that category, and the real minimum and maximum of every numeric property it offers. 🔴 This is the action that keeps you out of this source's worst behaviour — a value it does not recognise does not error, it answers HTTP 200 with zero rows and a total of 0 — so take manufacturer ids and property values from here rather than guessing them.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
| query | optional | — | Free-text search across the whole listing (title, model and description), exactly as the site's own search box does it. Either `query` or `category_id` is the normal starting point. Use `keyword` instead for a narrower match: measured on the same minute, `query=tracteur` answered 33,908 and `keyword=tracteur` 7,905 — the keyword form is title/model-weighted while this one also matches the seller's prose. |
| keyword | optional | — | A narrower text match than `query` (the site's `search[keyword]` field). Measured: 7,905 rows for 'tracteur' where `query` gave 33,908, and it still reaches other categories (a lorry carrying a tractor matched), so it is a text filter, not a category filter. |
| category_id | optional | 1– | The marketplace's own category (tree) id — 702 is the farm tractor, 802 the fertiliser spreader. The id is language- and brand-invariant (702 answers 'Tracteur agricole' on .com and 'Traktor' on .de), which is why it, and not a slug, is the handle. Get ids from `categories`, `facets` or `suggest`. 🔴 The source will not accept a category together with other filters in one request and answers 200 with zero rows if you try, so this engine sends it first and the rest afterwards — which costs one extra upstream request when you combine them. |
| listing_type | optional | sale · wanted · auction · rental | What kind of advert. Defaults to everything, which MIXES offers with 'wanted' adverts and auctions — pass `sale` if you only want machines actually on offer. Measured on one query: 32,797 for sale, 829 wanted, 179 auctions, 97 rentals. The four ids behind these names are identical on both brands and in every language. |
| country | optional | AE · AL · AM · AT · BA · BE · BG · CA · CH · CL · CN · CZ · DE · DK · EE · ES · FR · GB · GR · HR · HU · ID · IE · IT · LT · LU · LV · MD · ME · MK · MU · MX · NL · NO · PA · PH · PL · PT · PY · RO · RS · RU · SE · SI · SK · TH · TW · UA · US | Seller country, as an ISO-3166-1 alpha-2 code. 🔴 This is an enum and not a pass-through for a reason that was measured: the source takes a numeric area id of its own, and an id it does not know produces a DIFFERENT, WRONG result set rather than an error or an empty one (control 33,942 rows; France 15,230; bogus id 11,117; the string 'FR' 11,125 — all HTTP 200 with real rows). The ids behind these codes were read off the source's own select and are brand- and language-invariant. |
/agriaffaires/v1/suggest1 creditThe site's own autocomplete for a typed prefix, in two buckets: whole search phrases people use, and categories with their numeric ids and live counts. Use it to turn what a user typed into values the `category_id` and `query` filters actually accept.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What the user has typed so far. The source wants at least three characters and answers in two buckets: whole search phrases and categories with their numeric ids and live counts — which is how you turn typing into values the filters accept. |
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
/agriaffaires/v1/dealers3 creditsThe dealer directory — the supplier side of the marketplace. Company name, activity, country, town, department, how many further addresses the group has, the manufacturer ranges they carry and how many adverts they have online, 50 a page. Searchable by company name, filterable by country, and ordered by the source's own sort values — company name, or how many adverts a dealer has online.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
| company | optional | — | Filter the dealer directory by company name (the source's own `all_company` field). |
| country | optional | AE · AL · AM · AT · BA · BE · BG · CA · CH · CL · CN · CZ · DE · DK · EE · ES · FR · GB · GR · HR · HU · ID · IE · IT · LT · LU · LV · MD · ME · MK · MU · MX · NL · NO · PA · PH · PL · PT · PY · RO · RS · RU · SE · SI · SK · TH · TW · UA · US | Seller country, as an ISO-3166-1 alpha-2 code. 🔴 This is an enum and not a pass-through for a reason that was measured: the source takes a numeric area id of its own, and an id it does not know produces a DIFFERENT, WRONG result set rather than an error or an empty one (control 33,942 rows; France 15,230; bogus id 11,117; the string 'FR' 11,125 — all HTTP 200 with real rows). The ids behind these codes were read off the source's own select and are brand- and language-invariant. |
| page = 1 | optional | 1–400 | Directory page, 50 dealers each. |
| sort = name | optional | name · name_desc · listings_asc · listings_desc · default | Directory order, using the source's own five sort values. The default here is `name` rather than the source's `default`, because `default` is exactly that — an order the source does not name and does not document, so a caller paging through 2,600 dealers would be relying on something that can change under them. Pass `default` explicitly if you want the source's own ordering. |
/agriaffaires/v1/dealer3 creditsOne dealer's public business profile by id: company name, activity, registration number where the source prints one, how long they have been on the marketplace, their own website, their follower count, the manufacturer ranges they carry and the breakdown of their stock by category with live counts. Contact people, phone numbers and e-mail addresses are deliberately not returned.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| dealer_id | required | — | The dealer's own numeric id, as `dealers` and `search` return it. |
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
/agriaffaires/v1/dealer_listings3 creditsOne dealer's actual stock, paged — the same row shape as `search`. Unlike some machinery marketplaces, this source's dealer pages carry REAL listings rather than login-walled placeholders (measured: 50 genuine rows with distinct ids, prices and years, over 13 pages for one dealer), so they are returned.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| dealer_id | required | — | The dealer's own numeric id, as `dealers` and `search` return it. |
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
| page = 1 | optional | 1–200 | Page of this dealer's stock, 50 rows each; `meta.pagination.last_page` is the source's own last page for that dealer. The cap of 200 is carried over from the search route, where it was measured; the dealer route's own ceiling was not measured, and no dealer in the directory has anything close to 10,000 adverts online, so it has never been reached. |
/agriaffaires/v1/price_index2 creditsThe marketplace's own PRICE OBSERVATORY — what a make, model and year actually sells for on this marketplace: minimum, maximum and average asking price plus how many listings the figure rests on. Call it with nothing for the rubric list, with `rubric_id` for its makes, with `rubric_id` + `make_id` for its models, and with `model` + `year` on top for the price band itself. 🔴 This sub-system keeps its own id space: rubric 510 and make 4039 are the farm tractor and John Deere here, while `search` calls the same two 702 and 7607 — and giving it a search id answers an EMPTY result rather than an error, so always take the ids from this action.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
| rubric_id | optional | 1– | The price observatory's own rubric id — 510 is the farm tractor. 🔴 NOT the search `category_id` for the same thing (702): the observatory keeps its own id space and answers an EMPTY result rather than an error when given the other one. Call this action with no parameters to get the rubric list. |
| make_id | optional | 1– | The price observatory's own make id — 4039 is John Deere. 🔴 NOT the search facet's manufacturer id for the same brand (7607): measured, `/observatoire-prix/search/510/7607/6r195/2024` answers `{"data":[]}` while `.../510/4039/6r195/2024` answers the real price band. Requires `rubric_id`; with only `rubric_id` this action returns the make list. |
| model | optional | — | The model, as the observatory spells it. Requires `rubric_id` and `make_id`; with only those two this action returns the model list, which is the spelling to use. |
| year | optional | 1900–2100 | Year of construction. With `rubric_id`, `make_id` and `model` this is what turns the call into the actual price band: minimum, maximum and average asking price plus how many listings that figure rests on. |
/agriaffaires/v1/locations1 creditThe geography the filters accept, from the source itself: the countries this engine will take, then a country's regions and a region's departments with the ids `search` wants. 🔴 It exists because an area id the source does not know does not error — it answers a different, wrong result set — so the only safe ids are the ones it hands out itself.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| site = agriaffaires | optional | agriaffaires · machineryzone | Which of MB Diffusion's two marketplaces to read. 🔴 This is a REAL data axis, not a language switch: `agriaffaires` is agricultural machinery (tractors, harvesters, sprayers, balers) and `machineryzone` is construction, earthmoving and handling (excavators, loaders, cranes, forklifts). They are separate catalogues on the same application, so a listing id from one does not exist on the other. |
| market = fr | optional | ar · br · ca · ca_fr · cn · cz · de · es · eu · fi · fr · hu · in · it · lt · nl · no · pl · pt · ro · rs · se · tr · ua · uk · us | Which national host to read, i.e. the LANGUAGE of the labels — not a different catalogue. 🔴 Measured on 2026-10-08: the same listing answers on every host with the SAME price in the SAME currency (46952423 = EUR 151,000 on .com, .de, .co.uk, .it, .us and .pl alike; the site does not convert, its currency selector is client-side display only), and `category_id=702` returns 22,206 / 22,246 / 22,224 / 22,228 / 22,253 / 22,263 on .com / .de / .co.uk / .us / .cn / .com.ua within the same minutes. Pick the market whose language you want the labels and descriptions in. Not every market exists on both sites — a pair with no host answers MARKET_UNAVAILABLE and names the site that does have it, rather than returning fields this engine cannot name. |
| country | optional | AE · AL · AM · AT · BA · BE · BG · CA · CH · CL · CN · CZ · DE · DK · EE · ES · FR · GB · GR · HR · HU · ID · IE · IT · LT · LU · LV · MD · ME · MK · MU · MX · NL · NO · PA · PH · PL · PT · PY · RO · RS · RU · SE · SI · SK · TH · TW · UA · US | Country, as an ISO-3166-1 alpha-2 code. With no country this action returns the country list itself; with one it returns that country's regions; with `region_id` as well, that region's departments. |
| region_id | optional | 1– | Seller region, by the source's own id, which `locations` publishes for a country. Requires `country`, and the engine checks the id against the source's own live region list for that country before sending it — see the note on `country` for why. |
curl -X POST https://api.reefapi.com/agriaffaires/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"tracteur","market":"fr","page":1}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}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.
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.
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.
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.