api.syntalic.com
Find the lowest price for a product across retailers
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"
}
}
}
}
}