Napexa
REST & MCPAuthorised data only

The product layer AI agents can trust.

Resolve exact products, check compatibility, get authorised offers with honest delivered prices, and route purchases compliantly.

Built for consequential answers

Identity, price, freshness and rights — in the response, every time.

A transport layer for agents that need to know what is true, what is unknown, and what they are allowed to do next.

Proof in the data

A catalogue you can inspect.

Current figures from the catalogue, not a build-time estimate.

Suppliers with productsLive
153

Merchants represented by at least one active offer.

ProductsLive
236,748

Canonical products resolved from authorised data.

OffersLive
248,117

Active offer records with source and freshness context.

Sources we may searchLive
928

Licensed or otherwise permitted sources, not suppliers with stock.

Data region

GBmerchant country

Derived from the country recorded for suppliers represented in the catalogue.

Market types represented

By supplier
1
Builders' merchants
27
DIY
25
Hardware
1
Timber
4
Tool hire
70
Trade

How the catalogue grows

988 suppliers found by discovery

  1. 1Found in public records

    OpenStreetMap and Companies House, queried directly. Two sources that disagree, merged only on unambiguous evidence.

  2. 2Asked, not assumed

    Every candidate's own robots.txt is read first. A site that says no, or does not answer, is not added at all.

  3. 3Recorded with its basis

    Each merchant carries what was checked and when, so the reason we may crawl it can be audited later.

These are the merchants and sources this service has rights to search. It is not a complete view of the market.

Request
curl -s "http://localhost:8420/v1/products/search" \
  -H "Authorization: Bearer $APG_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "battery for DeWalt DCD796N", "limit": 5}'
Response shape
{
  "product": { "title": "DeWalt DCB184 18V XR 5.0Ah Battery" },
  "match": { "type": "compatible", "identity": "confirmed" },
  "best_offer": {
    "price": { "total": "62.49", "currency": "GBP", "completeness": "complete" },
    "availability": "in_stock"
  },
  "purchase_ready": true
}
purchase_ready

Only true when identity, stock, price and route are all safe to act on.

price.completeness

Only a complete price has a total. Missing shipping is never read as zero.

match.identity

Confirmed identity is separate from compatibility or string similarity.

A useful constraint

No invented certainty.

Responses disclose merchant coverage, offer freshness and price completeness. We do not call an item price “cheapest” unless every delivered component is known, and commission is not an organic ranking factor.

Product search built for AI agents