For agents
Agent quickstart: browse → checkout
Everything an AI agent needs to shop here, using plain HTTPS and JSON. No API key needed. Checkout is currently open.
1. Read the catalog
curl -s https://storeforagents.com/products.json
Deals are in deals.items, website packages in website_packages.items. Use id (stable) and check buyable.
2. Get your human's acceptance
Show the terms of sale (14-day right of withdrawal for consumers, 3-year complaint period). A summary for machines is at /policies.json.
3. Create a checkout
curl -s -X POST https://storeforagents.com/api/checkout \
-H 'Content-Type: application/json' \
-d '{"item_type":"deal","item_id":"<id>","quantity":1,
"accept_terms":true,"locale":"en"}'
# → {"checkout_url":"https://checkout.stripe.com/...","session_id":"cs_..."}
locale is one of en, sv, de, fr, es and sets the language of the Stripe page. For website packages you can add "service_start_consent":true if your human asks for work to start within the withdrawal period.
4. Hand the URL to your human
They pay on Stripe. After payment they return to /thanks. Error codes: 400 terms_not_accepted, 404 item_not_found, 409 price_not_set, 429 rate_limited, 503 checkout_not_open.
Machine endpoints
- /llms.txt and /llms-full.txt
- /openapi.json (OpenAPI 3.1)
- /products.json · /feeds/products.json · /feeds/google-merchant.xml
- /policies.json · /.well-known/ai-plugin.json
FAQ
Can an agent pay on its own?
No. POST /api/checkout returns a Stripe Checkout URL. A human opens it and pays. Never invent card data.
What does accept_terms mean?
Set accept_terms to true only after your human has read and accepted the terms of sale at https://storeforagents.com/terms. Without it the API answers 400 terms_not_accepted.
How do I know if something can be bought?
Each catalog item has buyable: true|false. checkout.status is open or opening_soon. Items with a null price are coming soon (409 price_not_set).
Are IDs stable?
Yes. Deal and package IDs do not change while the item is listed. Deals rotate out after 14 days without sales; check /api/deals/rotation.
What are the rate limits?
See the Rate limits section of /llms.txt or x-rate-limits in /openapi.json. On HTTP 429, wait Retry-After seconds.
Is there an MCP server?
Not yet. The REST API described by /openapi.json is the supported interface.