{
  "object": "doc",
  "title": "What does data_source \"sandbox\" mean?",
  "description": "The sandbox catalog, what is real in it, and what is synthetic.",
  "section": "Getting started",
  "url": "https://cart-route.com/docs/sandbox",
  "updated": "2026-09-23",
  "prev": "https://cart-route.com/docs/credits",
  "next": "https://cart-route.com/docs/api/search",
  "text": "`data_source: \"sandbox\"` means the response comes from the Cartroute sandbox catalog: real product identities, identifiers and retailer policies, with synthetic prices, stock levels and coupon codes that move daily like live data. Every API response, MCP tool result and JSON page states its data source, so an agent can always tell which it is looking at.\n\n## What in the sandbox is real?\n\n- Products, brands, models, GTINs and MPNs, and their specifications.\n\n- Which retailers cover which categories, their membership rules, free-shipping thresholds and return windows.\n\n- The API itself: authentication, credits, errors, rate limits, pagination, idempotency and the MCP server behave exactly as in production.\n\n## What in the sandbox is synthetic?\n\n- Prices and the 180-day price history, generated as realistic daily series with promotions.\n\n- Stock levels and delivery windows.\n\n- Coupon codes, success rates and sample sizes. Do not try sandbox codes at a real checkout.\n\n- SKUs. `retailer_url` links open the retailer's search page for the product rather than a specific listing.\n\n## Why does a sandbox exist?\n\nSo an agent can be built and tested end to end, including its handling of out-of-stock offers, membership-only stores, coupons needing eligibility and price verdicts, without anyone buying anything and without depending on retailer availability during development.\n\n## Can I show sandbox prices to shoppers?\n\nNo. Present them as test data only. When your integration moves to a live key, `data_source` becomes `\"live\"`; check the field rather than assuming.\n\n## How fresh is the sandbox?\n\nPrices roll forward every day, each offer's `last_checked_at` is re-stamped every 10 minutes, and expired coupons are replaced, so freshness logic in an agent behaves as it would against live data."
}