{"openapi":"3.1.0","info":{"title":"StoreForAgents API","version":"1.2.0","description":"Browse and buy from StoreForAgents.com. Payment always happens on a Stripe Checkout page opened by a human. Rate limits per IP are listed in x-rate-limits; every response carries RateLimit and RateLimit-Policy headers, and HTTP 429 includes Retry-After."},"x-rate-limits":{"global":{"limit":600,"window_seconds":300,"applies_to":"All routes combined, per IP (Stripe webhook excluded)"},"read":{"limit":120,"window_seconds":60,"applies_to":"GET /products.json, /api/catalog, /llms.txt, /llms-full.txt, /openapi.json, /policies.json, /feeds/*, /.well-known/*, /sitemap*.xml, /robots.txt, /api/deals/rotation, /api/health, /api/config"},"checkout":{"limit":10,"window_seconds":60,"applies_to":"POST /api/checkout (burst)"},"checkoutHour":{"limit":30,"window_seconds":3600,"applies_to":"POST /api/checkout (hourly)"},"forms":{"limit":30,"window_seconds":60,"applies_to":"POST /consent, GET /set-lang/*"},"admin":{"limit":5,"window_seconds":900,"applies_to":"POST /api/deals/rotation/run (admin)"}},"components":{"responses":{"TooManyRequests":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait"},"RateLimit":{"schema":{"type":"string"}},"RateLimit-Policy":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"const":"rate_limited"},"retry_after":{"type":"integer"},"limit":{"type":"integer"},"window_seconds":{"type":"integer"}}}}}}}},"servers":[{"url":"https://storeforagents.com"}],"paths":{"/products.json":{"get":{"operationId":"getCatalog","summary":"Full catalog: trending deals and website packages","responses":{"200":{"description":"Catalog"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/api/checkout":{"post":{"operationId":"createCheckout","summary":"Create a Stripe Checkout session for one item","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["item_type","item_id","accept_terms"],"properties":{"item_type":{"type":"string","enum":["deal","website_package"]},"item_id":{"type":"string"},"quantity":{"type":"integer","minimum":1,"maximum":10,"default":1},"customer_email":{"type":"string","format":"email"},"accept_terms":{"type":"boolean","const":true,"description":"Must be true, and only after the human buyer accepted the terms of sale at https://storeforagents.com/terms"},"locale":{"type":"string","enum":["en","sv","de","fr","es"],"default":"en","description":"Language of the Stripe payment page and return pages"},"service_start_consent":{"type":"boolean","description":"Website packages only: the consumer asks that work starts within the 14-day withdrawal period"}}}}}},"responses":{"200":{"description":"checkout_url to open"},"400":{"description":"Invalid request or terms not accepted"},"404":{"description":"Unknown item"},"409":{"description":"Price not set yet"},"429":{"$ref":"#/components/responses/TooManyRequests"},"502":{"description":"Payment provider error"},"503":{"description":"Checkout not open yet"}}}},"/api/deals/rotation":{"get":{"operationId":"getRotation","summary":"Deals flagged for replacement (older than 14 days, 0 sales)","responses":{"200":{"description":"Rotation report"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/api/health":{"get":{"operationId":"health","summary":"Service status","responses":{"200":{"description":"OK"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}}}}