Developers
Search Lianex’s cached product catalogue using a free JSON API or MCP. Available now: Australia (prices in AUD); other marketplaces are in progress. No API key, account or authentication required.
What it is, and what it costs
These endpoints return stored product data. They are cache-only: requests do not trigger live marketplace searches. Access is free and subject to a per-caller rate limit.
When rate limiting is enabled, responses include X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds until a slot frees). On 429, wait the Retry-After seconds before retrying. The OpenAPI specification states the current setting. When disabled, rate-limit headers are absent.
Try a small search for screen protectors priced in AUD:
curl --get 'https://api.lianex.ai/api/public/search' \
--data-urlencode 'q=screen protector' \
--data-urlencode 'currency=AUD' \
--data-urlencode 'limit=5' \
--data-urlencode 'compact=true'An empty answer means "not in our cache"
result: "hit"—productscontains ranked matches.result: "miss"—products: []and a message explain that no cached products match this query or page position. This does not mean the product does not exist. Acurrencythat is not served also returnsmiss, withemptied_by,available_regionsand aretry_urlwithout the filter; prices are never converted.result: "not_searched"— no searchable term was supplied.productsandhas_moreare absent. Do not show this as a search with no matches.
Use offset, limit and has_more for paging. Results may change between requests; pagination is not a saved snapshot. There is no catalogue-wide match total. Search count and category-browse total count only the products in that response.
The links we return are affiliate links
Pass product url links through unchanged to preserve affiliate tracking. Eligible purchases may earn Lianex a commission at no extra cost to shoppers, supporting this free API. See our affiliate disclosure.
Affiliate status does not affect ranking. There are no sponsored results.
Product ids carry their marketplace — except eBay
Product IDs use <provider>~~<marketplace-id>, for example amazon~~B09B2RL8CG. IDs without ~~ identify eBay products, for example v1~178119112778~0. Product pages are at https://lianex.ai/p/<id>.
The endpoints
9 public read endpoints, all GET and cache-only. The specification describes their parameters, status codes and response formats.
GET /api/public/browse— Every category that has a published page.GET /api/public/browse/{slug}— The cached, ranked products in one published category.GET /api/public/product/{safe_id}— One cached product, plus any cross-marketplace offers we hold for it.GET /api/public/products— Every product permalink we publish, with its freshness.GET /api/public/search— Free-text search over the cached catalogue. The one stateless query endpoint.GET /api/public/resolve-compare— Turn a set of permalink ids into the listings behind them.GET /api/public/vs— Every published head-to-head comparison.GET /api/public/vs/{slug}— One published head-to-head comparison.GET /api/public/share/comparison/{snapshot_id}— Resolve a historical shared link to its canonical comparison slug.
eBay products also carry shipping (the last-seen shipping cost and delivery window) and return_terms (whether returns are accepted, the return window and who pays return postage), and any product can carry a gtin barcode when its check digit is valid. Each is null when unknown. brand falls back to the listing’s own Brand item specific.
Searching: every filter the search endpoint takes
16 parameters control search, filtering and response size. Search uses query words and recognized product categories. A category match can include a title without the category word; insufficient category evidence falls back to title matching. An explicit category replaces automatic category selection.
Filters apply before a bounded result pool is selected. A filtered request may therefore include products absent from an unfiltered response. Results are ranked for each request.
q— Search words. Matching uses recognized product categories and title words, with a title-match fallback. Without a searchable term the response is not_searched, even if filters are supplied.limit— Maximum products per page. Values are clamped to the range 1–50. The response echoes the applied page_size. A non-integer value returns 422.min_price— Minimum price in each listing’s stored currency. Available now: Australia (prices in AUD). Accepts 1500 or $1,500.00. Supply currency to restrict prices to one currency. Invalid values are ignored.max_price— Maximum price, parsed like min_price. Available now: Australia (prices in AUD). Supply currency to restrict prices to one currency. A minimum above the maximum yields no matches.condition— One of new, refurbished or used. Products with no recorded condition do not match. Invalid values are ignored.marketplace— Marketplace: ebay, amazon, aliexpress, jbhifi or shein. Stored locale labels such as EBAY_AU are accepted. Takes precedence over provider.provider— Alias for marketplace. Ignored when marketplace is also supplied.brand— Exact brand, case-insensitive. Products with no stored brand do not match.fresher_than— Only products checked since this relative age (7d, 24h, 30m) or ISO-8601 date/time. Times without a timezone use UTC. Invalid values are ignored.sort— best_match (default), price (cheapest first) or price_desc (most expensive first). Invalid values use best_match and are listed in filters.ignored.offset— Number of ranked products to skip. Negative values use zero; invalid values use zero and appear in filters.ignored. Results may change between requests.compact— Set true for title, price, currency, condition, permalink and id only. False or empty returns full products. Invalid values are ignored. The applied selection appears in fields.fields— Comma-separated product fields, e.g. title,price,url. Overrides compact; id and permalink are always included. Unknown names are dropped. If none are valid, the full projection is returned and fields appears in filters.ignored.category— Published browse slug (mobile-phones) or numeric eBay category ID (9355), not a display name. Replaces automatic category selection. filters.applied echoes the supplied category and resolved ID.currency— ISO-4217 currency code. Available now: Australia (prices in AUD); other marketplaces are in progress. Filters to prices stored in that currency and never converts prices. A currency that is not served returns miss with emptied_by, available_regions and retry_url. Use with min_price and max_price.dedupe— Set true to keep the first result for each provider and normalized title, using the selected sort order. Off by default. Variants with identical titles may be combined. deduped counts removed rows in the ranked pool before paging.
Check filters.applied for normalized inputs and filters.ignored for unusable values. Invalid optional filters are ignored; a non-integer limit returns 422. Filters without a searchable q still return not_searched.
The machine-readable spec
https://api.lianex.ai/api/public/openapi.json
Each endpoint includes a JSON Schema response definition. Search uses a oneOf union distinguished by result. Check it before reading products. Schemas allow additionalProperties: true; ignore unknown keys and handle missing or null values. Search and category results may omit unavailable fields; product detail can return explicit nulls.
Lianex speaks MCP
AI clients can use the same public reads through the Model Context Protocol.
Send JSON-RPC 2.0 to POST /api/public/mcp on the API host. Supported methods are initialize, tools/list and tools/call. Send one message per request; JSON-RPC batches are unsupported. No API key, account or session is required.
Discovery documents are available at /.well-known/mcp.json, /.well-known/mcp and /mcp. These convenience addresses are not a ratified discovery standard; use the transport address above when configuring a client directly.
There is one tool per published read endpoint. The same cache-only results, paging, per-caller rate limit and affiliate-link guidance apply. Shared usage instructions arrive in the initialize response; each tool describes its own inputs and outputs. Live seller searches and analytics writes are unavailable through these tools.
What we do not promise
This API is best-effort, with no SLA, versioned release policy or deprecation guarantee. Consult the current specification when integrating. The conversational chat API is outside this public contract.
The robots.txt on lianex.ai applies to that website only. The API host currently publishes no robots.txt. Pace requests using the API’s rate-limit headers.
Questions
Get in touch through the contact page.
For API access, integrations or partnerships, email partners@lianex.ai.