Raw schema
{
"type": "object",
"properties": {
"source_store": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Store address of the benchmark store, such as \"mysneakerstore.com\": a bare host, an https link or a myshopify.com address."
},
"target_store": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Store address of the store compared with the benchmark, such as \"allbirds.com\". Its currency is the default output currency."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Optional text filter for product title, brand, or category, such as \"runner\" or \"sneaker\"."
},
"match_by": {
"type": "string",
"enum": [
"title",
"sku",
"handle"
],
"default": "title",
"description": "How products are paired: \"title\" (title without case or punctuation, the default), \"handle\" (the /products/ URL slug, best for two regional stores of one brand) or \"sku\" (first variant name)."
},
"min_gap_pct": {
"type": "number",
"minimum": 0,
"default": 0,
"description": "Keep only pairs whose price gap, in either direction, is at least this percent of the converted source price, such as 15. Default 0 keeps every pair."
},
"include_landed_duty": {
"type": "boolean",
"default": false,
"description": "Subtract the flat EU duty on low-value parcels (3 EUR per item, Council Regulation (EU) 2026/382, converted to the target currency) from landed_gap. duty_allowance replaces it when set."
},
"target_currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO 4217 code to convert prices into, such as \"USD\", \"EUR\" or \"GBP\". Default: the target store currency."
},
"fx_rate": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Manual rate: units of the target currency per 1 unit of the source store currency, such as 0.86 for USD to GBP. Same direction as fx_conversion.rate. Default: the latest ECB reference rate."
},
"shipping_allowance": {
"type": "number",
"minimum": 0,
"default": 0,
"description": "Shipping cost per item in the target currency, subtracted from landed_gap. Default 0."
},
"duty_allowance": {
"type": "number",
"minimum": 0,
"description": "Duty per item in the target currency, subtracted from landed_gap. When set, it replaces the EU flat duty of include_landed_duty. When omitted, duty is 0 unless include_landed_duty is true."
}
},
"required": [
"source_store",
"target_store"
],
"additionalProperties": false
}