Feed and checkout API
Everything an agent needs to find your products and send a shopper to pay. Replace STORE_ID with the id in your dashboard under Feed & docs.
● Live“Try it” calls the real API on the demo store (). Test mode, nothing is charged.
Quickstart
From your store URL to a first test order in five steps. No code needed.
- Paste your store addressOn the home page, enter your store URL and press Show my feed. We read your product pages.
- Check the preview, then create a free accountYou see every product we found and what blocks a sale. The account keeps that catalog.
- Fix what blocks sales and publishRed issues (no price, unreadable price, duplicate SKU) stop checkout. Publish makes your feed public at
/feeds/STORE_ID. - Turn on channelsPick the agents and add the cart widget to your site. Copy the feed URL and
skill.mdfor agents. - Place a test orderOpen your agent link, pay with the test card
4242 4242 4242 4242. The order shows in Orders with the agent that sent it.
Feed spec
Every published store has a public JSON feed. CORS is open, no key needed. Fields follow the OpenAI Product Feed Spec, plus a BMOS checkout block. “Always” fields are never null.
curl https://bmos-app.apps.art-and-see.com/feeds/STORE_ID
Top level
store_id in checkout.crypto only when the store has a USDC rail.Product
items[].id.id when there is none. Checkout accepts it too.null when unknown.endpoint, method, body, and human_url for the shopper. null when not buyable.skill.md
Plain instructions an agent can follow: where the feed is, which products can be bought, and how to open a checkout. Markdown, CORS open.
curl https://bmos-app.apps.art-and-see.com/feeds/STORE_ID/skill.md
Checkout API
Sessions follow the Agentic Checkout states: not_ready_for_payment → ready_for_payment → completed or canceled. Amounts are in cents. All routes are JSON with CORS open.
/api/checkout_sessions
Create a session from feed product ids (or SKUs). Returns 201. Items that cannot be bought come back in errors; if none can be bought you get 422.
curl -X POST https://bmos-app.apps.art-and-see.com/api/checkout_sessions \
-H 'content-type: application/json' \
-d '{"store_id":"STORE_ID","items":[{"id":"PRODUCT_ID","quantity":1}],"agent":"Claude"}'
agent is one of chatgpt, claude, gemini, perplexity, copilot, grok. It stamps the order so the merchant sees who sent it. Optional: buyer, fulfillment_address.
Response
{
"id": "cs_k3m9x2p0qa",
"status": "not_ready_for_payment",
"currency": "USD",
"line_items": [
{ "id": "PRODUCT_ID", "item": { "id": "PRODUCT_ID", "quantity": 1 },
"title": "12 in 1 Phillips, Flathead and Socket Pocket", "base_amount": 2397, "total": 2397 }
],
"totals": [
{ "type": "subtotal", "amount": 2397 }, { "type": "fulfillment", "amount": 595 },
{ "type": "tax", "amount": 0 }, { "type": "total", "amount": 2992 }
],
"fulfillment_options": [
{ "id": "standard", "title": "Standard", "subtitle": "3–5 business days", "total": 595 },
{ "id": "express", "title": "Express", "subtitle": "1–2 business days", "total": 1495 }
],
"fulfillment_option_id": "standard",
"buyer": null,
"fulfillment_address": null,
"messages": [{ "type": "info", "content": "Buyer email and delivery address are required before payment." }],
"links": { "pay": "https://bmos-app.apps.art-and-see.com/pay/cs_k3m9x2p0qa", "terms_of_use": null, "return_policy": "https://…" },
"order": null,
"test_mode": true,
"errors": []
}
/api/checkout_sessions/:id
Read status, line items, totals and delivery options.
curl https://bmos-app.apps.art-and-see.com/api/checkout_sessions/SESSION_ID
/api/checkout_sessions/:id
Add the buyer, the delivery address, a delivery option, or replace items. When email and address are set, status becomes ready_for_payment.
curl -X POST https://bmos-app.apps.art-and-see.com/api/checkout_sessions/SESSION_ID \
-H 'content-type: application/json' \
-d '{"buyer":{"email":"sam@example.com","name":"Sam Lee"},"fulfillment_address":{"line1":"1 Main St","city":"Austin","state":"TX","zip":"78701","country":"US"},"fulfillment_option_id":"standard"}'
/api/checkout_sessions/:id/complete
Complete the order. payment.method: card, applepay, googlepay, paypal or crypto (crypto needs payment.rail). Response has status: "completed" and order.id. Test mode: nothing is charged.
curl -X POST https://bmos-app.apps.art-and-see.com/api/checkout_sessions/SESSION_ID/complete \
-H 'content-type: application/json' \
-d '{"payment":{"method":"card"}}'
/api/checkout_sessions/:id/cancel
Cancel a session that was not paid. A completed session stays completed.
curl -X POST https://bmos-app.apps.art-and-see.com/api/checkout_sessions/SESSION_ID/cancel
Most agents should not pay for the shopper. Give the shopper links.pay so they confirm the exact total and pay on the store’s checkout.
Agent links
A plain link that opens the store’s checkout with the cart filled. Opening it creates a session and redirects (303) to /pay/SESSION_ID. No API call needed.
https://bmos-app.apps.art-and-see.com/c/STORE_ID?items=PRODUCT_ID:1,OTHER_ID:2&from=chatgpt
items is a comma list of id:quantity (quantity 1–99). from is the agent: chatgpt, claude, gemini, perplexity, copilot or grok. Every buyable product in the feed carries its own link in checkout.human_url.
Widget
One script tag adds the cart drawer and checkout to your site. It reads your feed, so prices always match.
<script src="https://bmos-app.apps.art-and-see.com/widget.js" data-store="STORE_ID" defer></script>
Your own buttons
Mark any button with a feed product id (or SKU). The widget wires the click.
<button data-bmos-add="PRODUCT_ID">Add to cart</button>
From JavaScript
window.BMOS.add('PRODUCT_ID', 2); // add 2 to the cart and open it
window.BMOS.open(); // open the cart drawer
window.BMOS.products; // the feed products the widget loaded
On a product page the feed knows, with no data-bmos-add button, the widget adds its own buy box with price and variants.
Errors
Errors are JSON { "error": "message" }. The message is written for a person; show it as is.
errors[] for items left out: “Unknown product”, “This product cannot be bought here”/pay/SESSION_IDstore_id“Unknown or unpublished store”errors[]Test mode & test card
Every store runs in test mode today. Payments are simulated end to end, nothing is charged, and orders are real records in the dashboard. Feeds and sessions say test_mode: true.
Test card 4242 4242 4242 4242 · any future date · any 3 digits. Apple Pay, Google Pay, PayPal and USDC (Base, Solana, Tempo, Coinbase) are simulated too.
Changelog
- 24 Sep 2026 · Feed 0.2
Current version. The feed includes a per-product
checkoutblock with a ready request andhuman_url,channels_excluded,externalandexternal_linkfor affiliate items, andcapabilities.crypto_rails.