---
title: "Checks a price someone has claimed for a product against the prices WEM has itself observed at retailers (recent readings, within a small tolerance; not a live quote), and reports the cheapest observed offer"
method: POST
path: "/api/agent/products/verify_offer"
---

# Checks a price someone has claimed for a product against the prices WEM has itself observed at retailers (recent readings, within a small tolerance; not a live quote), and reports the cheapest observed offer

`POST /api/agent/products/verify_offer`

## Request

- Base URL: `https://wem3.ai`
- URL: `https://wem3.ai/api/agent/products/verify_offer`
- Auth: none declared

Check a claimed price against prices WEM has observed at retailers (not a live fetch). Identify by gtin, slug, wem_id, provider+externalId or title. Verdicts: confirmed, price_moved, not_at_retailer, no_claim, unknown_product (unchecked, not false). Records a receipt.

## Request body

- union
  - object
    - `gtin` string, required: Product barcode: EAN-13, UPC-A, EAN-8 or GTIN-14. Strongest identifier.
    - `slug` string: WEM canonical slug, as in wem3.ai/pl/{slug}.
    - `wem_id` string: WEM ID (W + 10 Crockford characters + check). Active catalogue products only.
    - `provider` string: With externalId: the retailer source of a listing that identifies the product, e.g. 'amazon'. To name the shop the claim is about, use `retailer`.
    - `externalId` string: That listing's own id (an ASIN, or the shop's own item number). Use with provider.
    - `title` string: Product title. The weakest identifier: used only when no id is given, and only if it passes a relevance check.
    - `price` number: The price being claimed. Omit to ask only for the observed offers.
    - `currency` string: ISO 4217 code for the claimed price. Default GBP. Only offers in this currency are compared.
    - `retailer` string: The shop the price was claimed at, as a slug or display name. Omit to compare against every shop.
  - object
    - `gtin` string: Product barcode: EAN-13, UPC-A, EAN-8 or GTIN-14. Strongest identifier.
    - `slug` string, required: WEM canonical slug, as in wem3.ai/pl/{slug}.
    - `wem_id` string: WEM ID (W + 10 Crockford characters + check). Active catalogue products only.
    - `provider` string: With externalId: the retailer source of a listing that identifies the product, e.g. 'amazon'. To name the shop the claim is about, use `retailer`.
    - `externalId` string: That listing's own id (an ASIN, or the shop's own item number). Use with provider.
    - `title` string: Product title. The weakest identifier: used only when no id is given, and only if it passes a relevance check.
    - `price` number: The price being claimed. Omit to ask only for the observed offers.
    - `currency` string: ISO 4217 code for the claimed price. Default GBP. Only offers in this currency are compared.
    - `retailer` string: The shop the price was claimed at, as a slug or display name. Omit to compare against every shop.
  - object
    - `gtin` string: Product barcode: EAN-13, UPC-A, EAN-8 or GTIN-14. Strongest identifier.
    - `slug` string: WEM canonical slug, as in wem3.ai/pl/{slug}.
    - `wem_id` string, required: WEM ID (W + 10 Crockford characters + check). Active catalogue products only.
    - `provider` string: With externalId: the retailer source of a listing that identifies the product, e.g. 'amazon'. To name the shop the claim is about, use `retailer`.
    - `externalId` string: That listing's own id (an ASIN, or the shop's own item number). Use with provider.
    - `title` string: Product title. The weakest identifier: used only when no id is given, and only if it passes a relevance check.
    - `price` number: The price being claimed. Omit to ask only for the observed offers.
    - `currency` string: ISO 4217 code for the claimed price. Default GBP. Only offers in this currency are compared.
    - `retailer` string: The shop the price was claimed at, as a slug or display name. Omit to compare against every shop.
  - object
    - `gtin` string: Product barcode: EAN-13, UPC-A, EAN-8 or GTIN-14. Strongest identifier.
    - `slug` string: WEM canonical slug, as in wem3.ai/pl/{slug}.
    - `wem_id` string: WEM ID (W + 10 Crockford characters + check). Active catalogue products only.
    - `provider` string, required: With externalId: the retailer source of a listing that identifies the product, e.g. 'amazon'. To name the shop the claim is about, use `retailer`.
    - `externalId` string, required: That listing's own id (an ASIN, or the shop's own item number). Use with provider.
    - `title` string: Product title. The weakest identifier: used only when no id is given, and only if it passes a relevance check.
    - `price` number: The price being claimed. Omit to ask only for the observed offers.
    - `currency` string: ISO 4217 code for the claimed price. Default GBP. Only offers in this currency are compared.
    - `retailer` string: The shop the price was claimed at, as a slug or display name. Omit to compare against every shop.
  - object
    - `gtin` string: Product barcode: EAN-13, UPC-A, EAN-8 or GTIN-14. Strongest identifier.
    - `slug` string: WEM canonical slug, as in wem3.ai/pl/{slug}.
    - `wem_id` string: WEM ID (W + 10 Crockford characters + check). Active catalogue products only.
    - `provider` string: With externalId: the retailer source of a listing that identifies the product, e.g. 'amazon'. To name the shop the claim is about, use `retailer`.
    - `externalId` string: That listing's own id (an ASIN, or the shop's own item number). Use with provider.
    - `title` string, required: Product title. The weakest identifier: used only when no id is given, and only if it passes a relevance check.
    - `price` number: The price being claimed. Omit to ask only for the observed offers.
    - `currency` string: ISO 4217 code for the claimed price. Default GBP. Only offers in this currency are compared.
    - `retailer` string: The shop the price was claimed at, as a slug or display name. Omit to compare against every shop.

## Response `200`

Tool result. `success: false` means the tool ran and reported a problem.

- object
  - `success` boolean, required
  - `data` object: Shape depends on the tool. Search-style results carry `products`, an optional `catalogMatch` of identity-resolved offers, and `filtered`, a count by reason of the weak matches withheld — report that count rather than implying the search was exhaustive.
  - `error` string

## Other responses

- `400`: Unknown tool or a malformed body.
- `429`: Burst or daily quota exhausted. Respect `retry-after` — retrying sooner cannot succeed.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/wem3/apis/wem-price-compare-api.md) · [All operations](https://skmtc.dev/wem3/apis/wem-price-compare-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wem3/apis/wem-price-compare-api/revisions/52e5c33c3f39?raw)
