Eight unauthenticated, free routes that expose how the API works to humans, agents, crawlers, and payment facilitators. Use them to bootstrap an integration without ever holding a key, and to verify connectivity before paying for data routes.
GET /health{ status: 'ok' } when the FastAPI process and the Supabase pooler are both reachable; returns 503 when the DB ping fails. Railway's auto-restart policy keys off this — don't rely on it for SLO measurement, but it's a safe smoke-test.GET /openapi.jsonGET /skill.mdGET /llms.txtGET /prompts.jsonGET /.well-known/x402GET /.well-known/mppGET /methodology.mdThe recommended onboarding sequence for an agent or new client:
/skill.md or /llms.txt to learn what the API does./.well-known/x402 to learn how to pay for data routes./openapi.json if you want a typed client. Discovery routes (/v1/stores, /v1/chains) are free — start there to confirm the shape./health before paid calls in production to confirm the service is reachable.{ "status": "ok" }HTTP/1.1 503 Service Unavailable
Content-Type: application/json
{ "detail": "db unreachable" }# MainMarket — Grocery Shelf Intelligence
You can call the MainMarket API to get real-time US grocery prices, store
locations, coupons, and published inflation indices.
Base URL: https://api.mainmarket.com
Pricing: discovery routes are free; data routes are $0.01 per call via x402.
## Capabilities
- /v1/stores — geo-search 70+ chain stores
- /v1/products — canonical product catalog (528k SKUs)
- /v1/prices — store-scoped pricing with tiered fallback
- /v1/coupons — active coupons with savings math
- /v1/indices/{slug} — published price indices (egg, soda, baskets)
See https://api.mainmarket.com/openapi.json for the machine-readable spec.{
"version": "2",
"supported_schemes": ["exact"],
"supported_networks": ["base"],
"asset": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"symbol": "USDC",
"decimals": 6
},
"facilitator": "https://x402.coinbase.com/api",
"facilitator_display_name": "Coinbase x402",
"pay_to": "0x...",
"discovery": "https://x402scan.com/?host=api.mainmarket.com"
}/openapi.json is regenerated on every API deploy from the FastAPI route signatures and Pydantic models. There's no separate publish step — what you fetch is what's running./health: no cache (must reflect live state).Cache-Control: public, max-age=3600 (1 hour). Files are checked into the repo and only change on deploys./openapi.json: Cache-Control: public, max-age=300 (5 minutes) so a fresh deploy propagates within minutes to clients that re-fetch periodically.These routes don't have validation — a request either matches the path or 404s. The only meaningful error is 503 on /health when the DB ping fails (used by Railway's auto-restart).