Api Endpoint

api.syntalic.com

Find the lowest price for a product across retailers

Open interactive test console

Offering

Provider
api.syntalic.com
Method
GET
Offering type
Api Endpoint
Transport type
http
Category
Business And Commerce
Delivery
Not provided
Pricing model
Not provided
x402 version
2

Endpoint context

URL
https://api.syntalic.com/v1/shopper/best-price
MIME type
application/json
First seen
2026-10-16T01:50:03.310Z
Last seen
Tags
X402, pricing, retail, Amazon, walmart, price-tracking, shopping

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.01 USDC
Atomic price: 10000 · Network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp · Asset: USDC · Scheme: exact
Payment option 2
0.01 USDC
Atomic price: 10000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "amount": "10000",
    "payTo": "2hYY7wHhXsoWnskQRzYFUNH7YboXNMEqbGnAFHpRuB2W"
  },
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "10000",
    "payTo": "0xe2e662cF219025AFC0C9Bf850b6a2B0a0b5517fe"
  }
]

Observed health

Status
Reachable
Latest latency
66 ms
Average latency
140 ms
HTTP status
400
Last checked
Reachability
100% over 14 checks

Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.

Input schema

{
  "type": "http",
  "method": "GET",
  "queryParams": {
    "type": "object",
    "properties": {
      "q": {
        "type": "string",
        "example": "airpods",
        "minLength": 1,
        "description": "Search query (product name, keyword, or brand + model). Required unless `product_uid` or `entity_uid` is supplied."
      },
      "limit": {
        "type": "integer",
        "default": 10,
        "example": 10,
        "maximum": 50,
        "minimum": 1,
        "description": "Max results to return (default 10, min 1, max 50)"
      },
      "strict": {
        "type": "boolean",
        "default": false,
        "example": false,
        "description": "When true, restrict the comparison to entity-verified listings of the matched product (match_type 'entity' only). Default false also includes title-match rows — useful for broad queries, but may mix product variants."
      },
      "country": {
        "enum": [
          "us",
          "ca"
        ],
        "type": "string",
        "default": "us",
        "example": "us",
        "description": "Country (us or ca)"
      },
      "retailer": {
        "enum": [
          "amazon",
          "walmart",
          "target",
          "bestbuy",
          "homedepot",
          "costco",
          "ikea",
          "samsclub",
          "cvs",
          "dillards"
        ],
        "type": "string",
        "example": "amazon",
        "description": "Filter to a specific retailer platform (long-tail specialty stores are also present; any platform key is accepted)"
      },
      "entity_uid": {
        "type": "string",
        "example": "e_airpods_deal",
        "minLength": 1,
        "description": "Stable cross-retailer entity identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should resolve within the same physical-product entity."
      },
      "product_uid": {
        "type": "string",
        "example": "p_airpods_deal",
        "minLength": 1,
        "description": "Stable product identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should pin to this listing instead of re-resolving free text."
      }
    }
  }
}

Output schema

{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "input"
  ],
  "properties": {
    "input": {
      "type": "object",
      "required": [
        "type",
        "method"
      ],
      "properties": {
        "type": {
          "type": "string",
          "const": "http"
        },
        "method": {
          "enum": [
            "GET",
            "HEAD",
            "DELETE"
          ],
          "type": "string"
        },
        "headers": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "queryParams": {
          "type": "object",
          "anyOf": [
            {
              "required": [
                "q"
              ]
            },
            {
              "required": [
                "product_uid"
              ]
            },
            {
              "required": [
                "entity_uid"
              ]
            }
          ],
          "properties": {
            "q": {
              "type": "string",
              "example": "airpods",
              "minLength": 1,
              "description": "Search query (product name, keyword, or brand + model). Required unless `product_uid` or `entity_uid` is supplied."
            },
            "limit": {
              "type": "integer",
              "default": 10,
              "example": 10,
              "maximum": 50,
              "minimum": 1,
              "description": "Max results to return (default 10, min 1, max 50)"
            },
            "strict": {
              "type": "boolean",
              "default": false,
              "example": false,
              "description": "When true, restrict the comparison to entity-verified listings of the matched product (match_type 'entity' only). Default false also includes title-match rows — useful for broad queries, but may mix product variants."
            },
            "country": {
              "enum": [
                "us",
                "ca"
              ],
              "type": "string",
              "default": "us",
              "example": "us",
              "description": "Country (us or ca)"
            },
            "retailer": {
              "enum": [
                "amazon",
                "walmart",
                "target",
                "bestbuy",
                "homedepot",
                "costco",
                "ikea",
                "samsclub",
                "cvs",
                "dillards"
              ],
              "type": "string",
              "example": "amazon",
              "description": "Filter to a specific retailer platform (long-tail specialty stores are also present; any platform key is accepted)"
            },
            "entity_uid": {
              "type": "string",
              "example": "e_airpods_deal",
              "minLength": 1,
              "description": "Stable cross-retailer entity identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should resolve within the same physical-product entity."
            },
            "publish_id": {
              "type": "string",
              "minLength": 1,
              "description": "Optional. Pin the answer to a serving publish: pass meta.publish_id from an earlier answer. When the served snapshot has moved on, or cannot be confirmed, the request is answered 409 PUBLISH_CHANGED naming the current publish, before any payment challenge and free. Use it to keep several answers on one snapshot."
            },
            "product_uid": {
              "type": "string",
              "example": "p_airpods_deal",
              "minLength": 1,
              "description": "Stable product identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should pin to this listing instead of re-resolving free text."
            },
            "retailer_id": {
              "type": "string",
              "example": "retailer:samsclub",
              "pattern": "^retailer:[a-z0-9]{1,64}$",
              "description": "A chain by id, from GET /v1/ontology/resolve (a retailer match's `id`): the chain (seller_norm) whatever lane its listings were scraped through, never a lane. `retailer=` matches the scrape lane, so a Shopify store's chain can only be asked for by id (#1090). Send it instead of `retailer=`, not with it."
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "output": {
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "example": {
          "type": "object"
        }
      }
    }
  }
}