What the API does
Three questions, the fields that make the answer safe to use, and what the catalogue contains right now.
This is a small demonstration catalogue, not live retailer inventory. Use it to understand the interface and honesty fields, not as a market snapshot.
Worked examples
Which battery fits a DeWalt DCD796?
POST /v1/products/search
{
"query": "battery for DeWalt DCD796N",
"limit": 5
}match.identityThe compatible battery is identified against the drill with confirmed evidence.
price.completenessShipping and tax are known, so 62.49 is a comparable delivered total.
purchase_readyIdentity, stock, price and route all pass; the route is safe to show.
{
"results": [{
"product": {
"title": "DeWalt DCB184 18V XR 5.0Ah Battery"
},
"match": {
"type": "compatible",
"identity": "confirmed",
"reasons": ["Manufacturer-compatible model DCD796N"]
},
"best_offer": {
"price": {
"item": "52.99",
"shipping": "5.00",
"tax": "4.50",
"total": "62.49",
"currency": "GBP",
"completeness": "complete",
"unknown_components": []
},
"availability": "in_stock"
},
"purchase_ready": true
}]Is this barcode the exact product I asked for?
POST /v1/products/search
{
"query": "5035048469658",
"limit": 5
}match.identityThe GTIN resolves to one canonical product instead of matching title text.
purchase_readyFalse because the observed offer lacks tax, even though stock is known.
price.completenesslocation_required prevents a total from being invented.
{
"results": [{
"product": {
"title": "18V XR Lithium-Ion Battery",
"identifiers": [{
"type": "gtin",
"value": "5035048469658"
}]
},
"match": {
"type": "exact",
"identity": "confirmed",
"reasons": ["GTIN equality"]
},
"best_offer": {
"price": {
"item": "49.99",
"shipping": "4.95",
"tax": null,
"total": null,
"currency": "GBP",
"completeness": "location_required",
"unknown_components": ["tax"]
},
"availability": "in_stock"
},
"purchase_ready": false
}]Can this be shipped today, and can I trust the total?
POST /v1/products/search
{
"query": "DeWalt DCB184 battery",
"limit": 5
}best_offerThe response distinguishes item cost from delivered cost and carries an observed_at time.
price.completenessA missing shipping amount is disclosed as unknown rather than treated as free.
purchase_readyFalse because no comparable delivered total is available, even though stock is known.
{
"coverage": {
"merchants_searched": 3,
"merchants_known": 4,
"market_complete": false
},
"results": [{
"product": {
"title": "DeWalt DCB184 18V XR 5.0Ah Battery"
},
"match": {
"type": "exact",
"identity": "confirmed"
},
"best_offer": {
"price": {
"item": "55.00",
"shipping": null,
"tax": null,
"total": null,
"currency": "GBP",
"completeness": "incomplete",
"unknown_components": ["shipping", "tax"]
},
"availability": "in_stock",
"observed_at": "2026-08-31T08:12:00Z"
},
"offer_count": 2,
"purchase_ready": false
}]In the catalogue now
These are the merchants and sources this service has rights to search. It is not a complete view of the market.
Try it yourself
Search the demonstration catalogue without writing a client, then get a free key to send the same request over REST or MCP.