POLICYANDPLAY LTD Products API

Live UK marketplace product and price search

Operations 1

POST /api/query Search live UK marketplace listings #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fetch-price-com-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fetch-price-com-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: fetch-price Products API
  version: 1.3.0
  summary: Live UK marketplace product and price search for AI agents and humans
  description: Live UK marketplace product search operated by POLICYANDPLAY LTD at https://api.fetch-price.com.
  contact:
    name: fetch-price (POLICYANDPLAY LTD)
    url: https://fetch-price.com/docs/
    email: contact@fetch-price.com
  license:
    name: MIT (SDKs and MCP server; the API itself carries no published licence or terms page)
    url: https://github.com/fusionx212/fetch-price
  x-generated-from: documentation
  x-authored-by: API Evangelist
servers:
- url: https://api.fetch-price.com
  description: Production (the only base the provider publishes)
security:
- {}
- ApiKeyAuth: []
- BearerAuth: []
tags:
- name: Products
  description: Live UK marketplace product and price search
paths:
  /api/query:
    post:
      operationId: queryProducts
      summary: Search live UK marketplace listings
      description: 'Plain-language product search across the supported UK marketplaces. Returns normalised results with live GBP prices, condition, marketplace, image and a direct affiliate-tracked purchase URL. Every result declares result_type: "item" is a real listing with a live price; "search_link" is a tracked marketplace search URL with price 0, served for networks not yet live (Amazon UK) or when an upstream API is briefly unavailable. Works without a key on the free tier (50 lookups/month, counted per IP); send X-API-Key or a Bearer token to use a registered agent''s quota and BYOK affiliate routing. GET on this path returns 405.'
      tags:
      - Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryRequest'
            examples:
              docs-quickstart:
                summary: The quick-start request from the provider's docs
                value:
                  query: portable air conditioner
                  max_results: 3
                  max_price: 300
                  networks:
                  - ebay_uk
      responses:
        '200':
          description: Search results
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResponse'
              examples:
                docs-live-response:
                  summary: Live response captured by the provider on 27 Jul 2026 (from the docs)
                  value:
                    results:
                    - product: Air Conditioning 5460BTU Remote Control Portable Air Conditioner Smart AC
                      price: 275.99
                      currency: GBP
                      condition: New
                      network: ebay_uk
                      result_type: item
                      item_id: v1|358845422976|0
                      image: https://i.ebayimg.com/images/g/.../s-l225.jpg
                      url: https://www.ebay.co.uk/itm/358845422976?...&campid=...
                    meta:
                      query: portable air conditioner
                      networks_searched:
                      - ebay_uk
                      returned: 3
        '400':
          description: Validation error (observed live with an empty body)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                query-required:
                  summary: Observed 2026-09-19 for POST /api/query with body {}
                  value:
                    error: query required
                    results: []
        '401':
          description: Key rejected. The MCP server maps this to "unauthorised - set FETCH_PRICE_API_KEY or register for a free key at fetch-price.com".
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          description: Method not allowed (observed for GET)
        '429':
          description: Rate limit exceeded - 30 requests/minute per key or per IP, or the plan's monthly lookup quota
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    QueryRequest:
      type: object
      required:
      - query
      properties:
        query:
          type: string
          maxLength: 200
          description: Plain-language product search, max 200 chars
        max_results:
          type: integer
          minimum: 1
          maximum: 20
          default: 5
          description: Items per network. Default 5, max 20
        max_price:
          type: number
          description: Upper price bound in GBP, applied at source
        networks:
          type: array
          description: 'Marketplaces to search. Default: both. Send only when choosing - an empty array is rejected as "no valid networks" (per the first-party SDK).'
          items:
            $ref: '#/components/schemas/Network'
        min_price:
          type: number
          description: Lower price bound in GBP. Sent by the first-party JavaScript and Python SDKs; not in the docs field table.
        currency:
          type: string
          default: GBP
          description: Sent by the first-party SDKs (always GBP); not in the docs field table.
    QueryResponse:
      type: object
      required:
      - results
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/Result'
        meta:
          $ref: '#/components/schemas/QueryMeta'
    QueryMeta:
      type: object
      properties:
        query:
          type: string
        networks_searched:
          type: array
          items:
            $ref: '#/components/schemas/Network'
        returned:
          type: integer
    Network:
      type: string
      description: Marketplace identifier. ebay_uk is live; amazon_uk is rolling out and returns a search_link result.
      enum:
      - ebay_uk
      - amazon_uk
    Error:
      type: object
      description: 'Plain JSON error envelope (not RFC 9457): a human-readable error string; /api/query also returns an empty results array.'
      required:
      - error
      properties:
        error:
          type: string
        results:
          type: array
          items: {}
    Result:
      type: object
      description: One normalised listing. Item results include product, price, currency, condition, network, url, image and item_id.
      required:
      - product
      - price
      - currency
      - network
      - result_type
      - url
      properties:
        product:
          type: string
        price:
          type: number
          description: Live price in GBP; 0 for a search_link result
        currency:
          type: string
          example: GBP
        condition:
          type: string
          example: New
        network:
          $ref: '#/components/schemas/Network'
        result_type:
          type: string
          description: item = a real listing with a live price and item-level affiliate-tracked buy link; search_link = a tracked marketplace search URL with price 0, served for networks not yet live or if the upstream API is briefly unavailable. Never present a search_link to a user as though it were a product.
          enum:
          - item
          - search_link
        item_id:
          type: string
          description: Marketplace item identifier (eBay Browse API form, e.g. v1|358845422976|0)
        image:
          type:
          - string
          - 'null'
          format: uri
        url:
          type: string
          format: uri
          description: Direct purchase URL, affiliate-tracked by the marketplace. Present to the user unchanged.
  headers:
    X-RateLimit-Remaining:
      description: Requests remaining in the current minute window
      schema:
        type: integer
    X-RateLimit-Limit:
      description: Requests allowed per minute for this key or IP (observed value 30)
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: fp_-prefixed key issued by POST /api/agents/register. Optional on the free tier (keyless requests are counted per IP); required to use a registered agent's plan quota and BYOK routing. The first-party SDKs send this header.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: fp_-prefixed API key
      description: The same key sent as Authorization Bearer, which is how the stdio MCP server and the provider's SKILL.md send it.
x-provenance:
  method: generated
  generated: '2026-09-19'
  authored_by: API Evangelist
  publisher_openapi: none
  sources:
  - https://fetch-price.com/docs/
  - https://fetch-price.com/llms.txt
  - https://raw.githubusercontent.com/fusionx212/fetch-price/master/mcp/fetch_price_mcp.py
  - https://raw.githubusercontent.com/fusionx212/fetch-price/master/js/index.js
  - https://raw.githubusercontent.com/fusionx212/fetch-price/master/python/fetch_price/__init__.py
  exercised: true
  live_checks:
  - request: GET https://api.fetch-price.com/health
    http_status: 200
    body: '{"ebay_live":true,"networks":["ebay_uk","amazon_uk"],"status":"ok","version":"1.3.0"}'
  - request: GET https://api.fetch-price.com/api/stats
    http_status: 200
    body: '{"agents_active":1,"networks_available":["ebay_uk","amazon_uk"],"version":"1.2.0"}'
  - request: POST https://api.fetch-price.com/api/query with body {}
    http_status: 400
    body: '{"error":"query required","results":[]}'
    headers: x-ratelimit-limit 30, x-ratelimit-remaining 27, access-control-allow-origin *
  - request: GET https://api.fetch-price.com/api/query
    http_status: 405
  - request: GET https://api.fetch-price.com/
    http_status: 200
    body: '{"a2a":"POST / or /a2a (JSON-RPC 2.0, message/send)","agent_card":"/.well-known/agent-card.json","docs":"https://fetch-price.com/docs","health":"/health","query":"POST /api/query","service":"fetch-price API"}'
  not_exercised:
  - POST /api/agents/register creates an account and issues a key, so it was described from the docs only.
  - A successful POST /api/query consumes a free-tier lookup and runs a live eBay search; the 200 shape is the provider's captured live response of 27 Jul 2026 reproduced verbatim from the docs.
  openapi_probes_that_missed:
  - https://api.fetch-price.com/openapi.json (404)
  - https://api.fetch-price.com/openapi.yaml (404)
  - https://api.fetch-price.com/swagger.json (404)
  - https://api.fetch-price.com/docs (404)
  - https://fetch-price.com/openapi.json (404)