BuyRecord Products API

The Products API from BuyRecord — 3 operation(s) for products.

Operations 3

GET /v1/products/search Search Products #
GET /v1/products/compare Compare Products #
GET /v1/products/{product_id}/outcomes Get Product Outcomes #

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/buyrecord-app:buyrecord-app-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

buyrecord-app-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BuyRecord Products API
  description: 'BuyRecord publishes verified purchase outcomes (kept, kept and liked, complained, returned, with reasons) for products. Every outcome is tied to a proof of purchase: a connected Shopify store''s order record, or the merchant''s DKIM-signed order confirmation email. Scores run from 0 to 100, are shown from 5 verified outcomes and carry the number of outcomes and a confidence level. Scope: US online stores, 15 product categories, all prices; for products without a score, the price, availability, the store''s return policy and the rating the store publishes on its own site are returned, labelled apart from verified outcomes, with US CPSC recall flags. Verified stays (hotels and rentals) are scored the same way from DKIM-signed booking confirmations. Reading needs no key; submitting an outcome needs an API key or OAuth. No buyer personal data is stored. The same operations are available as an MCP server at https://api.buyrecord.app/mcp. Summary: https://buyrecord.app/llms.txt; methodology: https://buyrecord.app/methodology.html.'
  version: 0.1.0
tags:
- name: Products
paths:
  /v1/products/search:
    get:
      summary: Search Products
      description: 'Products matching a name, GTIN or SKU (of the product or one of its variants), each with its outcome summary.

        A barcode or SKU query also names the matching variant.'
      operationId: search_products
      parameters:
      - name: query
        in: query
        required: true
        schema:
          type: string
          minLength: 2
          maxLength: 100
          title: Query
      - name: category
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 50
          - type: 'null'
          description: home_kitchen, apparel, beauty, health, jewelry, toys_baby, sports_outdoors, electronics, pets, food_drink, arts_crafts, garden, automotive, office, other
          title: Category
        description: home_kitchen, apparel, beauty, health, jewelry, toys_baby, sports_outdoors, electronics, pets, food_drink, arts_crafts, garden, automotive, office, other
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 50
          minimum: 1
          default: 10
          title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchHits'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Products
  /v1/products/compare:
    get:
      summary: Compare Products
      description: Outcomes for 2 to 5 products, in the order given.
      operationId: compare_products
      parameters:
      - name: ids
        in: query
        required: true
        schema:
          type: array
          items:
            type: string
            format: uuid
          minItems: 2
          maxItems: 5
          title: Ids
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Comparison'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Products
  /v1/products/{product_id}/outcomes:
    get:
      summary: Get Product Outcomes
      description: 'Score, sample size, outcome breakdown and top return reasons for one product, plus the price history,

        variants and return policy details published on the merchant''s site (not verified).'
      operationId: get_product_outcomes
      parameters:
      - name: product_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Product Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductDetails'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      tags:
      - Products
components:
  schemas:
    RetailerOffer:
      properties:
        retailer:
          type: string
          enum:
          - bestbuy
          - walmart
          title: Retailer
        retailer_name:
          type: string
          enum:
          - Best Buy
          - Walmart
          title: Retailer Name
        url:
          type: string
          title: Url
          description: Product page at the retailer.
        affiliate_link:
          type: boolean
          title: Affiliate Link
          description: 'True when the url is an affiliate link: BuyRecord may earn a commission if a purchase follows. Commissions never affect which products are returned or their order.'
        price:
          anyOf:
          - type: number
          - type: 'null'
          title: Price
          description: USD, as returned by the retailer's API at fetched_at.
        available:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Available
        rating:
          anyOf:
          - $ref: '#/components/schemas/RetailerRating'
          - type: 'null'
          description: The retailer's customer rating (average and count only).
        match:
          type: string
          const: gtin
          title: Match
          default: gtin
        fetched_at:
          type: string
          format: date-time
          title: Fetched At
        source:
          type: string
          const: retailer_api
          title: Source
          default: retailer_api
        attribution:
          type: string
          title: Attribution
          description: Data source, as the retailer's terms require.
        logo_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Logo Url
          description: Retailer logo to show next to this data, when its terms require one.
        label:
          type: string
          const: published by the retailer, not verified
          title: Label
          default: published by the retailer, not verified
      type: object
      required:
      - retailer
      - retailer_name
      - url
      - affiliate_link
      - price
      - available
      - rating
      - fetched_at
      - attribution
      - logo_url
      title: RetailerOffer
      description: 'The same product (exact GTIN match) at a big retailer, from the retailer''s official API. Not verified by

        BuyRecord, never part of the verified score, and never used to rank results.'
    PolicyDetails:
      properties:
        return_shipping:
          type: string
          enum:
          - free
          - paid
          - not_stated
          title: Return Shipping
        restocking_fee:
          type: string
          enum:
          - none
          - 'yes'
          - not_stated
          title: Restocking Fee
        restocking_fee_percent:
          anyOf:
          - type: number
          - type: 'null'
          title: Restocking Fee Percent
        restocking_fee_amount:
          anyOf:
          - type: number
          - type: 'null'
          title: Restocking Fee Amount
        warranty_mentioned:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Warranty Mentioned
        warranty_months:
          anyOf:
          - type: integer
          - type: 'null'
          title: Warranty Months
        warranty_lifetime:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Warranty Lifetime
        ships_from_country:
          anyOf:
          - type: string
          - type: 'null'
          title: Ships From Country
          description: ISO 3166 country code.
        final_sale_items:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Final Sale Items
          description: True when the policy excludes some items as final sale.
        label:
          type: string
          const: published on the merchant's site, not verified
          title: Label
          default: published on the merchant's site, not verified
      type: object
      required:
      - return_shipping
      - restocking_fee
      - restocking_fee_percent
      - restocking_fee_amount
      - warranty_mentioned
      - warranty_months
      - warranty_lifetime
      - ships_from_country
      - final_sale_items
      title: PolicyDetails
      description: Facts read from the store's public refund and shipping policy pages. Not verified by BuyRecord.
    RetailerRating:
      properties:
        average:
          type: number
          title: Average
          description: Out of 5.
        count:
          type: integer
          title: Count
      type: object
      required:
      - average
      - count
      title: RetailerRating
    MerchantPublishedRating:
      properties:
        average:
          type: number
          title: Average
          description: Out of 5.
        count:
          type: integer
          title: Count
        label:
          type: string
          const: published on the merchant's site, not verified
          title: Label
          default: published on the merchant's site, not verified
      type: object
      required:
      - average
      - count
      title: MerchantPublishedRating
      description: 'Average rating and review count the merchant publishes on its own product page (schema.org

        AggregateRating). Not verified by BuyRecord and never part of the verified score.'
    SearchHits:
      properties:
        products:
          items:
            $ref: '#/components/schemas/ProductHit'
          type: array
          title: Products
      type: object
      required:
      - products
      title: SearchHits
    Comparison:
      properties:
        products:
          items:
            $ref: '#/components/schemas/ProductOutcomes'
          type: array
          title: Products
      type: object
      required:
      - products
      title: Comparison
    Recall:
      properties:
        recall_number:
          type: string
          title: Recall Number
        recall_date:
          type: string
          format: date
          title: Recall Date
        url:
          type: string
          title: Url
          description: Official CPSC recall notice.
        match:
          type: string
          enum:
          - upc
          - brand_and_name
          title: Match
      type: object
      required:
      - recall_number
      - recall_date
      - url
      - match
      title: Recall
      description: 'A US CPSC recall linked to this product. match: ''upc'' (exact barcode) or ''brand_and_name''.'
    ProductOutcomes:
      properties:
        product_id:
          type: string
          format: uuid
          title: Product Id
        title:
          type: string
          title: Title
          description: Product name as published by the merchant, cleaned and capped at 200 characters.
        url:
          type: string
          title: Url
        price:
          anyOf:
          - type: number
          - type: 'null'
          title: Price
        available:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Available
        source:
          type: string
          enum:
          - merchant_sync
          - email_receipt
          - public_web
          - merchant_reported
          title: Source
        merchant_published_rating:
          anyOf:
          - $ref: '#/components/schemas/MerchantPublishedRating'
          - type: 'null'
        store_policy:
          anyOf:
          - $ref: '#/components/schemas/StorePolicy'
          - type: 'null'
        recalls:
          items:
            $ref: '#/components/schemas/Recall'
          type: array
          title: Recalls
          description: US CPSC recalls linked to this product.
        retailer_offers:
          items:
            $ref: '#/components/schemas/RetailerOffer'
          type: array
          title: Retailer Offers
          description: Same GTIN at big retailers (official APIs). Not verified.
        score:
          anyOf:
          - type: number
          - type: 'null'
          title: Score
          description: 0 to 100. Null when sample_size is below min_sample.
        sample_size:
          type: integer
          title: Sample Size
        min_sample:
          type: integer
          title: Min Sample
        confidence:
          anyOf:
          - type: string
            enum:
            - low
            - medium
            - high
          - type: 'null'
          title: Confidence
          description: low under 10 verified outcomes, medium under 30, high from 30. Null when no score is shown.
        breakdown:
          additionalProperties:
            type: integer
          propertyNames:
            enum:
            - kept_silent
            - kept_positive
            - complained
            - returned
          type: object
          title: Breakdown
        top_reasons:
          items:
            type: string
            enum:
            - size
            - quality
            - not_as_described
            - late_delivery
            - damaged
            - other
          type: array
          title: Top Reasons
        computed_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Computed At
      type: object
      required:
      - product_id
      - title
      - url
      - price
      - available
      - source
      - merchant_published_rating
      - store_policy
      - score
      - sample_size
      - min_sample
      - confidence
      - breakdown
      - top_reasons
      - computed_at
      title: ProductOutcomes
    ProductHit:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        title:
          type: string
          title: Title
          description: Product name as published by the merchant, cleaned and capped at 200 characters.
        gtin:
          anyOf:
          - type: string
          - type: 'null'
          title: Gtin
        url:
          type: string
          title: Url
        category:
          type: string
          title: Category
        price_band:
          type: string
          enum:
          - under_30
          - '30_50'
          - '50_100'
          - '100_150'
          - over_150
          - unknown
          title: Price Band
        price:
          anyOf:
          - type: number
          - type: 'null'
          title: Price
          description: Lowest variant price in USD, as published by the merchant.
        available:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Available
        shop_domain:
          type: string
          title: Shop Domain
        source:
          type: string
          enum:
          - merchant_sync
          - email_receipt
          - public_web
          - merchant_reported
          title: Source
          description: 'public_web: from the merchant''s public site; no verified outcomes implied.'
        outcomes:
          $ref: '#/components/schemas/OutcomeSummary'
          description: Verified purchase outcomes only.
        merchant_published_rating:
          anyOf:
          - $ref: '#/components/schemas/MerchantPublishedRating'
          - type: 'null'
        store_policy:
          anyOf:
          - $ref: '#/components/schemas/StorePolicy'
          - type: 'null'
        recalls:
          items:
            $ref: '#/components/schemas/Recall'
          type: array
          title: Recalls
          description: US CPSC recalls linked to this product.
        retailer_offers:
          items:
            $ref: '#/components/schemas/RetailerOffer'
          type: array
          title: Retailer Offers
          description: Same GTIN at big retailers (official APIs). Not verified.
        matched_variant:
          anyOf:
          - $ref: '#/components/schemas/Variant'
          - type: 'null'
      type: object
      required:
      - id
      - title
      - gtin
      - url
      - category
      - price_band
      - price
      - available
      - shop_domain
      - source
      - outcomes
      - merchant_published_rating
      - store_policy
      title: ProductHit
      description: 'REST only: a search result that also names the variant matched by a barcode or SKU query.'
    PricePoint:
      properties:
        price:
          type: number
          title: Price
        since:
          type: string
          format: date-time
          title: Since
      type: object
      required:
      - price
      - since
      title: PricePoint
    OutcomeSummary:
      properties:
        score:
          anyOf:
          - type: number
          - type: 'null'
          title: Score
          description: 0 to 100. Null when sample_size is below min_sample.
        sample_size:
          type: integer
          title: Sample Size
        min_sample:
          type: integer
          title: Min Sample
        confidence:
          anyOf:
          - type: string
            enum:
            - low
            - medium
            - high
          - type: 'null'
          title: Confidence
          description: low under 10 verified outcomes, medium under 30, high from 30. Null when no score is shown.
        top_reasons:
          items:
            type: string
            enum:
            - size
            - quality
            - not_as_described
            - late_delivery
            - damaged
            - other
          type: array
          title: Top Reasons
      type: object
      required:
      - score
      - sample_size
      - min_sample
      - confidence
      - top_reasons
      title: OutcomeSummary
    PriceHistory:
      properties:
        lowest:
          $ref: '#/components/schemas/PricePoint'
        highest:
          $ref: '#/components/schemas/PricePoint'
        tracked_since:
          type: string
          format: date-time
          title: Tracked Since
        price_changes:
          type: integer
          title: Price Changes
        label:
          type: string
          const: published on the merchant's site, not verified
          title: Label
          default: published on the merchant's site, not verified
      type: object
      required:
      - lowest
      - highest
      - tracked_since
      - price_changes
      title: PriceHistory
      description: 'Lowest and highest price seen at the merchant''s own site since BuyRecord started tracking it (one snapshot a

        week, kept when something changed). Not verified; no price alerts.'
    StorePolicy:
      properties:
        return_window_days:
          anyOf:
          - type: integer
          - type: 'null'
          title: Return Window Days
        free_returns:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Free Returns
        label:
          type: string
          const: published on the merchant's site, not verified
          title: Label
          default: published on the merchant's site, not verified
      type: object
      required:
      - return_window_days
      - free_returns
      title: StorePolicy
      description: Return policy facts read from the store's public refund policy. Not verified by BuyRecord.
    ProductDetails:
      properties:
        product_id:
          type: string
          format: uuid
          title: Product Id
        title:
          type: string
          title: Title
          description: Product name as published by the merchant, cleaned and capped at 200 characters.
        url:
          type: string
          title: Url
        price:
          anyOf:
          - type: number
          - type: 'null'
          title: Price
        available:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Available
        source:
          type: string
          enum:
          - merchant_sync
          - email_receipt
          - public_web
          - merchant_reported
          title: Source
        merchant_published_rating:
          anyOf:
          - $ref: '#/components/schemas/MerchantPublishedRating'
          - type: 'null'
        store_policy:
          anyOf:
          - $ref: '#/components/schemas/StorePolicy'
          - type: 'null'
        recalls:
          items:
            $ref: '#/components/schemas/Recall'
          type: array
          title: Recalls
          description: US CPSC recalls linked to this product.
        retailer_offers:
          items:
            $ref: '#/components/schemas/RetailerOffer'
          type: array
          title: Retailer Offers
          description: Same GTIN at big retailers (official APIs). Not verified.
        score:
          anyOf:
          - type: number
          - type: 'null'
          title: Score
          description: 0 to 100. Null when sample_size is below min_sample.
        sample_size:
          type: integer
          title: Sample Size
        min_sample:
          type: integer
          title: Min Sample
        confidence:
          anyOf:
          - type: string
            enum:
            - low
            - medium
            - high
          - type: 'null'
          title: Confidence
          description: low under 10 verified outcomes, medium under 30, high from 30. Null when no score is shown.
        breakdown:
          additionalProperties:
            type: integer
          propertyNames:
            enum:
            - kept_silent
            - kept_positive
            - complained
            - returned
          type: object
          title: Breakdown
        top_reasons:
          items:
            type: string
            enum:
            - size
            - quality
            - not_as_described
            - late_delivery
            - damaged
            - other
          type: array
          title: Top Reasons
        computed_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Computed At
        compare_at_price:
          anyOf:
          - type: number
          - type: 'null'
          title: Compare At Price
        price_history:
          anyOf:
          - $ref: '#/components/schemas/PriceHistory'
          - type: 'null'
        variants:
          items:
            $ref: '#/components/schemas/Variant'
          type: array
          title: Variants
        policy_details:
          anyOf:
          - $ref: '#/components/schemas/PolicyDetails'
          - type: 'null'
      type: object
      required:
      - product_id
      - title
      - url
      - price
      - available
      - source
      - merchant_published_rating
      - store_policy
      - score
      - sample_size
      - min_sample
      - confidence
      - breakdown
      - top_reasons
      - computed_at
      - compare_at_price
      - price_history
      - variants
      - policy_details
      title: ProductDetails
      description: 'REST only: product outcomes plus price history, variants and policy details.'
    Variant:
      properties:
        variant_id:
          type: integer
          title: Variant Id
        sku:
          anyOf:
          - type: string
          - type: 'null'
          title: Sku
        gtin:
          anyOf:
          - type: string
          - type: 'null'
          title: Gtin
        options:
          additionalProperties:
            type: string
          type: object
          title: Options
          description: 'e.g. {"Color": "Black"}'
        condition:
          anyOf:
          - type: string
            enum:
            - new
            - refurbished
            - used
          - type: 'null'
          title: Condition
          description: Null when the merchant does not say.
        price:
          anyOf:
          - type: number
          - type: 'null'
          title: Price
        compare_at_price:
          anyOf:
          - type: number
          - type: 'null'
          title: Compare At Price
        available:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Available
        price_history:
          anyOf:
          - $ref: '#/components/schemas/PriceHistory'
          - type: 'null'
      type: object
      required:
      - variant_id
      - sku
      - gtin
      - options
      - condition
      - price
      - compare_at_price
      - available
      - price_history
      title: Variant
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      description: API key (br_live_...). Required for writing.
      scheme: bearer