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

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.