A read-only door into the catalog.
The same product data that powers our catalog pages, served as JSON. Built for integrations and AI agents that would rather read a record than scrape a page. No API key, no sign-up.
Discovery
Our homepage returns Link response headers (RFC 8288) pointing at
every machine-readable entry point, so an agent can find all of this from the
root URL alone.
-
/.well-known/api-catalogrel="api-catalog" FluentSupply API catalog -
/openapi.jsonrel="service-desc" FluentSupply Catalog API - OpenAPI 3.1 description -
/api-docsrel="service-doc" FluentSupply Catalog API - documentation -
/llms.txtrel="describedby" FluentSupply site summary for AI agents
Search the catalog
GET /api/products
Returns a page of catalog products. With no parameters you get the most recently updated SKUs. Results match what a logged-out visitor sees on the catalog.
| Parameter | Type | Notes |
|---|---|---|
search | string | Free-text match against product name and SKU. |
category_id | string | Category slug. Includes sub-categories. Slugs appear in catalog URLs. |
page | integer | 1-based page number. Default 1. |
per_page | integer | Results per page. Default 12, capped at 100. |
Example
curl "https://www.fluentsupply.com/api/products?search=ceramic%20vase&per_page=5" Response
{
"success": true,
"data": [
{
"id": "prod-9xK2mQ",
"company_sku": "FS-CV-0142",
"name": "Reactive glaze ceramic vase, tall",
"category": { "id": "cat-7Hd2", "name": "Vases", "slug": "vases" },
"material": "Stoneware",
"color": "Ash grey",
"dimensions": "16 x 16 x 38 cm",
"weight_kg": 1.9,
"moq": 200,
"main_image": "/media/products/prod-9xK2mQ/main.webp",
"created_at": "2026-02-11T08:31:04Z",
"updated_at": "2026-08-22T02:15:47Z"
}
],
"meta": { "page": 1, "per_page": 12, "total": 37 }
} | Field | Notes |
|---|---|
id | Stable catalog id. Product page lives at /products/p/{id}. |
company_sku | Public SKU code the seller assigns to this product. Null when none is set. |
external_sku | Deprecated alias of company_sku. Kept for one release for backward compatibility; will be removed. |
name | Product name in English. |
category | Object with id, name and slug. Null when uncategorised. |
material | Primary material, free text. |
color | Stock colour, free text. |
dimensions | Free text, e.g. 20 x 20 x 35 cm. |
weight_kg | Unit weight in kilograms. |
moq | Minimum order quantity in pieces. |
main_image | Image URL. Relative paths resolve against the media host. |
created_at / updated_at | ISO 8601 timestamps. |
What is not here
Quotes, inquiries, orders, sample inspections and account data need a signed-in buyer account and are only available through the website. There is no public write API — an agent acting for a buyer should send them to the contact form or an account rather than trying to post an inquiry.
Fair use
Anonymous responses are cached at the edge for 60 seconds, so repeating the same
query inside that window is free. There is no hard rate limit today, but the
catalog is a small sourcing desk, not a CDN. Keep it under a few requests per
second, cache what you read, and identify yourself with a descriptive
User-Agent. If you need bulk access,
email us — we would rather hand you a file than watch you paginate.