{
  "domains": {
    "whisky.auction": { "minIntervalMs": 2500, "concurrency": 1, "engines": ["api"], "country": "GB", "currency": "GBP", "backfillMaxPages": 120, "notes": "Plain HTML lot grids; robots.txt only disallows /smartpaynotification. 2.5 s politeness; monthly auctions." },
    "chairish.com": { "minIntervalMs": 3000, "concurrency": 1, "engines": ["api"], "country": "US", "currency": "USD", "backfillMaxPages": 60, "notes": "JSON-LD Product arrays on /collection/ and /style/ pages; robots disallows /search and /product/list|grid|data — never fetched." },
    "1stdibs.com": { "minIntervalMs": 5000, "concurrency": 1, "engines": ["api"], "timeoutMs": 90000, "country": "US", "currency": "USD", "backfillMaxPages": 50, "notes": "3 MB server-rendered browse pages (serverVars_data Relay store); site caps browse at 50 pages. robots disallows /search/ and /soa/ (GraphQL) — never fetched. F5/Shape client detection present, no challenge for plain HTTPS." },
    "pamono.com": { "minIntervalMs": 4000, "concurrency": 1, "engines": ["api"], "country": "US", "currency": "USD", "backfillMaxPages": 40, "notes": "Magento category grids; robots disallows /catalog/, /terms/ etc.; other bots get Crawl-Delay 5–7 s → 4 s here." },
    "peytonstreetpens.com": { "minIntervalMs": 3000, "concurrency": 1, "engines": ["api"], "country": "US", "currency": "USD", "backfillMaxPages": 30, "notes": "BigCommerce category grids; robots disallows search.php/cart/account and _bc_fsnf facets — never fetched." },
    "chatterleyluxuries.com": { "minIntervalMs": 10000, "concurrency": 1, "engines": ["api"], "userAgent": "browser", "country": "US", "currency": "USD", "backfillMaxPages": 20, "notes": "WooCommerce Store API. robots Crawl-delay: 10 honoured. Bot UA receives a query-stripping 301 to http (degraded), browser UA gets 200 JSON — userAgent=browser only for this public JSON endpoint; tiny volume." },
    "api.ebay.com": { "minIntervalMs": 600, "concurrency": 2, "engines": ["api"], "country": "US", "notes": "eBay Browse API (gated, OAuth2 client credentials). Default Buy API quota 5,000 calls/day; 429 → backoff." },
    "api.sandbox.ebay.com": { "minIntervalMs": 600, "concurrency": 1, "engines": ["api"], "country": "US", "notes": "eBay sandbox (EBAY_ENV=sandbox)." },
    "openapi.etsy.com": { "minIntervalMs": 400, "concurrency": 2, "engines": ["api"], "country": "US", "notes": "Etsy Open API v3 (gated, x-api-key). 10 qps / 10,000 per day default quota." },
    "api.trademe.co.nz": { "minIntervalMs": 1500, "concurrency": 1, "engines": ["api"], "country": "NZ", "currency": "NZD", "notes": "Trade Me API v1 (gated, OAuth 1.0a application-only). Hourly call quota, HTTP 429 when exceeded." },
    "api.tmsandbox.co.nz": { "minIntervalMs": 1500, "concurrency": 1, "engines": ["api"], "country": "NZ", "currency": "NZD", "notes": "Trade Me sandbox (TRADEME_ENV=sandbox)." }
  }
}
