Made-in-China Sourcing API

Read live B2B buying requests, not product listings

The Made-in-China Sourcing API returns live B2B buying requests (RFQs) as clean JSON — what importers are asking to purchase right now, in their own full text.

no credit card1,000 free credits · instant API key · live in 10 seconds
Missing a Made-in-China Sourcing endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
M
/made-in-china/v1

2 active endpoints. Every call is 1 credit.

  • POST/made-in-china/v1/rfq_search
  • POST/made-in-china/v1/categories

What Made-in-China Sourcing endpoints does ReefAPI ship?

2 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

2 endpoints

rfq_search

1 cr

Search live buying requests posted by Made-in-China buyers.

required
optional
query, category, buyer_country, posted_within, page, limit, include_expired

categories

1 cr

The 27 top-level sourcing categories of the buying-request board, with the ids that rfq_searc…

required
optional
query

Every parameter, every allowed value →

Made-in-China Sourcing API

2 of 2 endpoints, ready to run

View docs ↗

Live purchase requests: the buyer's own full text, how many units they want, which country they are buying from, the day it was posted, the day it expires and how many quote slots are left.

1 credit0 required · 6 optional
POST/made-in-china/v1/rfq_search
ok956 ms · 20 records · sample
{
  "ok": true,
  "meta": {
    "api": "made-in-china",
    "endpoint": "rfq_search",
    "mode": "live",
    "latency_ms": 956.3,
    "record_count": 20,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "rfq_id": "utiaFgIOEdHh",
        "title": "Solar Panels",
        "description": "Light weight",
        "url": "https://sourcing.made-in-china.com/request/utiaFgIOEdHh/Solar-Panels.html",
        "quantity": 6,
        "quantity_text": "6",
        "quantity_unit": "Piece(s)",
        "posted_at": "2026-08-27",
        "expires_at": "2026-11-24",
        "expired": false,
        "closed": false,
        "quotes_left": 4,
        "quotes_allowed": 6,
        "budget": null,
        "budget_currency": null,
        "category_id": "2019020000",
        "origin_site": "From English Site",
        "image": null,
        "has_attachments": false
      },
      {
        "rfq_id": "xnhfaCqTIvtH",
        "title": "Electric 3 Wheeler Passenger Rickshaw with Solar Panels",
        "description": "We are interested to import Electric 3 wheeler Passenger Rickshaw with Solar Panels. If you are able to supply the requested Electric 3 wheeler Passenger Rickshaw with solar panels please contact us with full technical proposal and price offer with terms and conditions. Looking forward to receive your valued quotation. Thanks",
        "url": "https://sourcing.made-in-china.com/request/xnhfaCqTIvtH/Electric-3-Wheeler-Passenger-Rickshaw-with-Solar-Panels.html",
        "quantity": 10,
        "quantity_text": "10",
        "quantity_unit": "Piece(s)",
        "posted_at": "2026-08-26",
        "expires_at": "2026-11-11",
        "expired": false,
        "closed": false,
        "quotes_left": 3,
        "quotes_allowed": 7,
        "budget": "> 10000",
        "budget_currency": "USD",
        "category_id": "2350020000",
        "origin_site": "From English Site",
        "image": null,
        "has_attachments": false
      },
      {
        "rfq_id": "AfltkEIPIZip",
        "title": "Solar Panel Waste",
        "description": "Solar panel waste",
        "url": "https://sourcing.made-in-china.com/request/AfltkEIPIZip/Solar-Panel-Waste.html",
        "quantity": 100,
        "quantity_text": "100",
        "quantity_unit": "Ton(s)",
        "posted_at": "2026-08-28",
        "expires_at": "2026-11-22",
        "expired": false,
        "closed": false,
        "quotes_left": 10,
        "quotes_allowed": 0,
        "budget": null,
        "budget_currency": null,
        "category_id": "1537010000",
        "origin_site": "From English Site",
        "image": null,
        "has_attachments": false
      }
    ],
    "query": "solar panel",
    "page": 1,
    "page_size": 20,
    "returned": 20,
    "total_estimate": 250,
    "pages_available": 25,
    "has_more": true,
    "next_page": 2,
    "filters_applied": {
      "category": null,
      "buyer_country": null,
      "posted_within": "7d",
      "include_expired": false
    }
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Made-in-China Sourcing API works

Made-in-China Sourcing is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /made-in-china/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

A demand feed, not a catalogue

Every other engine in this category answers what is for sale. This one answers what somebody is trying to buy — which is the side of a marketplace a supplier, a broker or a sales team actually needs.

01categories
POST/made-in-china/v1/categories
{}

27 boards with their ids. Run once and cache it; the action reads the live rail so it stays current on its own.

02rfq_search
POST/made-in-china/v1/rfq_search
{"category": "<id>", "posted_within": "24h", "limit": 100}

The last day's requests on one board. Every row carries its own post date and expiry date, so a daily job de-duplicates on rfq_id and needs no state of its own.

One credit per hundred requests. Run it once a day per board and you have a lead feed with the requirement text already in it.

request
curl -X POST https://api.reefapi.com/made-in-china/v1/rfq_search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"solar panel"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "made-in-china",
    "endpoint": "rfq_search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Two different category id spaces, and what the buyer_country filter does and does not cover

This reads the demand side of Made-in-China: the requests importers post saying what they want to buy. Two things trip people up. The category id you filter with and the category id that comes back on a result are different id spaces, and the country filter is a short closed list while the country field on a result is not. Measured on 2026-08-27 across the open board and a 'solar panel' search.

FieldFormatMeasured
rfq_ida 12-character mixed-case token, not a numberXEWTzgRYqBeJ; all 20 rows of a measured page were exactly 12 characters
category (the filter)a 12-character token from the categories actionnOmtxmJTGEnQ; the board publishes 27 top-level categories
results[].category_ida 10-digit numeric string - a different id space2019020000. It cannot be passed back as the category filter. Filtering on the Machinery token returned 10 rows whose numeric ids all began 19
buyer.countryfree text, unrestricted14 distinct countries in 20 rows, including France, Guatemala, Malawi, Afghanistan and "HONG KONG, CHINA"
buyer_country (the filter)a closed set of 10 plus "other"united_states, india, nigeria, united_kingdom, pakistan, australia, canada, south_africa, ghana, brazil, other. Sending 'germany' returns INVALID_PARAM with the allowed list attached
posted_at / expires_atdate only, YYYY-MM-DD, no time and no timezoneposted 2026-08-15, expires 2026-11-02. The gap is not fixed: 77, 79, 88 and 89 days across four measured rows
quotes_left + quotes_allowedthe two always add up to 10true on all 20 rows: (5,5), (3,7), (4,6), (1,9), (7,3)
origin_sitewhich language edition the buyer posted through"From English Site" on 15 of 20, plus French, German, Spanish and Russian
budgeta band as a string, not a number"> 10000" alongside budget_currency "USD". 12 of 20 rows had neither budget nor currency

This is a buying-request board, not a supplier catalogue. There are no supplier profiles, no MOQ tables, no price lists and no audit or verified-supplier fields here - the only party described in a row is the buyer.

How fresh the board is, and how much of the request you actually get

Measured on the live board across four filter combinations and ten pages.

This is the demand side, and that is the whole point

A row is not a product for sale. It is a purchase somebody is asking for: what they want, how many, which country they are buying from, when they posted and when the request expires. Nothing else in this category answers that question.

Same-day fresh, and the recency filter really filters

Asking for the last 24 hours returned 20 of 20 rows posted on the board's own current day, from fifteen different countries. The board stamps its own date in its own timezone, which can read a day ahead of UTC — take the row's posted_at rather than assuming your own clock.

The country filter really narrows, and the count moves with it

Filtering to the United States returned 20 of 20 rows from the United States and the reported result count fell from 56,301 to 4,274. On the unfiltered board one page of 20 spanned fourteen countries. This is a filter, not a sort.

The full request text, not a teaser

The board does not truncate, and neither does the row. Across four sampled pages the median request ran 42 to 259 characters depending on the filter, with the longest running several hundred — enough to see the specification, the certification asked for and the destination, which is the part that decides whether a lead is worth a reply.

Real pagination, roughly 5,600 pages deep

20 rows a page by default and up to 100 a call. Page 10 shared nothing with page 1. The board reported 5,631 pages available on the open query, and expired requests are dropped before you see them unless you deliberately ask for them.

The same query twice returns the same rows

Two runs minutes apart returned the identical 20 request ids. The reported total moved by three, which is the board taking new posts rather than the answer wobbling.

Some fields are genuinely sparse, and it shows

Against us, but worth knowing rather than discovering: budget was filled on 1 of 20 rows and the quantity on 18 of 20. Post date, expiry, country and the request text were on every row of every page we opened. Filter on what is filled.

What identifies a request, and what we publish

A row carries the buyer's country, whether their contact address is confirmed and how many quote slots remain, which is what tells you whether a lead is live. The sample published on this page drops the poster's name; the API returns what the board itself publishes.

What people build with Made-in-China Sourcing

The jobs this data is most often used for.

2

endpoints

1

credit per call

01

B2B sales teams call rfq_search to find importers actively requesting a product and read the quantity and buyer country before quoting.

02

Lead-generation pipelines filter on quotes_left and expires_at to prioritise requests still open to new suppliers.

03

Trade analysts use categories to sweep a whole sourcing board and measure demand by product line and buyer country.

04

Market-entry researchers track posted_at volume by buyer country to see where purchase intent is coming from.

What Made-in-China Sourcing data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/made-in-china/v1/rfq_search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"solar panel"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/made-in-china/v1/rfq_search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "solar panel"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Made-in-China Sourcing.

Get a free key →
Is this supplier data or buyer data?

Buyer data. Every row is a purchase request an importer posted: what they want, how many, which country they are buying from, when it was posted and when it expires. There is no supplier catalogue behind this endpoint, so if you are after factory profiles, MOQ tables or verified-supplier badges, this is the other side of the marketplace. What it is good for is demand - 2,182 new requests were posted board-wide in the 24 hours before the measurement.

Why can I only filter by ten buyer countries when the results show many more?

Because the site publishes a fixed facet of ten countries plus a catch-all, while the country on each request is whatever the buyer actually entered. A single page of 20 solar-panel requests spanned 14 countries including France, Guatemala, Malawi and Afghanistan, none of which are in the facet. If you need one of those, pull the wider result set and filter on buyer.country yourself.

What happens if I pass a country that is not on the list?

It is rejected with INVALID_PARAM and the allowed values come back in the error detail. That is deliberate: the site itself silently treats an unrecognized region as "other" and would hand you a plausible-looking list of the wrong buyers, which is worse than an error. A measured call with buyer_country 'germany' returned INVALID_PARAM rather than German requests.

Can I use the category_id from a result as the category filter?

No, they are separate id spaces. The filter takes a 12-character token like nOmtxmJTGEnQ, which you get from the categories action, while a result row carries a 10-digit numeric category_id like 2019020000. The two do correspond: filtering on the Machinery token returned 10 rows whose numeric category_ids all started with 19. But you cannot substitute one for the other, so call categories for the 27 valid filter tokens.

Is the request text truncated?

No, and that is the main reason to read this board through an API. description carries the buyer's complete message. A measured page had a median length of 259 characters and one request over 900, running through panel dimensions, open-circuit voltage, certifications, glass thickness and container packing counts. Most of what a quote needs is already in there.

What do quotes_left and quotes_allowed mean?

They describe the request's quote budget, and they always add up to 10 - verified on all 20 rows of a measured page, with pairs like (5,5), (3,7), (1,9) and (7,3). A request with a low remaining count has already drawn suppliers; a full one is untouched. Combine that with posted_at to find requests that are both fresh and uncontested.

Does every request have a budget?

No. On a measured page of 20, one row had a budget value, seven more had a currency with no amount, and 12 had neither. When a budget is present it is a band expressed as a string, such as "> 10000", with budget_currency alongside - not a number you can sum. Quantity is the more reliable size signal: it came back as an integer on 18 of the 20 rows, with quantity_unit spelling out the unit.

What is origin_site telling me?

Which language edition of the site the buyer posted through, which is a rough proxy for their working language. A measured page split 15 English, 2 French, 1 German, 1 Spanish and 1 Russian. It is worth reading before you draft a reply, since a request tagged "From Russian Site" arrived written in English but came from someone browsing the Russian storefront.

What is the Made-in-China Sourcing API?

Made-in-China Sourcing API is a ReefAPI endpoint group for live b2b buying requests from importers, with quantity, country and expiry. It returns live JSON through POST requests under /made-in-china/v1.

Is the Made-in-China Sourcing API free to try?

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

Do I need a Made-in-China Sourcing login or account?

No login to Made-in-China Sourcing 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 Made-in-China Sourcing data?

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

How many credits does the Made-in-China Sourcing API use?

Made-in-China Sourcing actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Made-in-China Sourcing from an AI assistant or MCP client?

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

37 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Made-in-China Sourcing, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-28.