Commerce infrastructure forAI agents
Swell is a headless commerce platform that describes itself. Products, orders and subscriptions behind one API.
Try it without an account
The schema this page keeps pointing at is published, and the app scaffold runs on your own machine. Neither needs a Swell login.
# Every model config is checked against this published JSON Schema.
# No account, no key. Open it in a browser if you prefer.
curl https://json.swell.store/model.json
# Siblings cover the rest of an app's config surface
# content.json setting.json notification.json webhook.jsonBoth run exactly as shown, against nothing but the public internet. The scaffold needs npm, not an account.
Guesswork is the bug
Swell replaces recall with lookup. One query language, one response envelope, and over 750 field descriptions returned by a live endpoint.
Nothing to memorize. The store tells you
One call returns a store’s whole schema at runtime: every model—standard, merchant custom and app-installed alike—with field types and relationships.
// One call returns every model: standard, custom, and app-installed.
swell.init(storeId, secretKey);
const models = await swell.get('/:models', { limit: 100 });
// Ground truth for THIS store, including fields no training data has seen.
models.results.find((m) => m.name === 'products').fields.price;
// { type: 'currency', description: 'List price used when `sale=false`…
// See the `purchase_options` array to manage a product's price.' }Descriptions ship inside the schema—the response that types price as a currency also says to write purchase_options.
The API is a JSON file
Drop a JSON file into your app’s models/ directory and Swell generates the REST resource from it—fields, validation, relationships and lifecycle events, with no endpoint code to write.
{
"label": "Reviews",
"public": true,
"fields": {
"product": { "type": "link", "model": "products", "key": "product_id" },
"title": { "type": "string", "required": true },
"rating": { "type": "int", "min": 1, "max": 5, "required": true },
"status": {
"type": "string",
"enum": ["submitted", "approved", "rejected"],
"default": "submitted"
},
"score": { "type": "int", "formula": "like_count - dislike_count" }
}
}Invalid writes come back as an errors object keyed by field, each with a machine-readable code—REQUIRED, MINVAL, MAXVAL—so an agent can correct its own payload instead of parsing prose.
Six keys, one folder, no build config
A serverless function is one file that default-exports a handler, and its exported config decides the trigger—HTTP route, model event or cron. The config directories are a fixed set, nothing to invent.
{
"id": "honest_reviews",
"version": "1.0.6",
"name": "Honest Reviews",
"description": "Honest reviews from honest people",
"type": "admin",
"permissions": [
"write_products",
"read_orders",
"write_accounts",
"public"
]
}Every command that does work takes flags, and -y accepts defaults without hanging, so no prompt blocks an agent.
Safe to hand to an agent
Push cannot reach production
swell app push always targets your test environment. Reaching a live store is a separate, explicit command.
Your editor checks the config
Generated config files carry a $schema URL pointing at a published JSON Schema, so mistakes surface as you type.
Merchants control their data
App data is stored in a secure, isolated database for each merchant.
Releases are reviewed
Apps published to the Swell App Store are reviewed by our team before they go out.
Powered by Cloudflare Workers


Built for people who read the API first

“It's clear you guys have put a lot of thought into the design of the API. We've evaluated 14 commerce platforms so far and very few offer all of the endpoints and properties necessary for truly headless commerce so we're always excited to find a new platform that has everything covered.”
“I've spent far too many hours of my life hacking together APIs that were an afterthought. Reading your docs gives me the same breath of fresh air I felt when reading Stripe's documentation for the first time many years ago.”

“Headless and API-first solutions is our preference because of the need for flexibility and interoperability. Swell was the most complete offer, with subscriptions and personalization included.”
“You seem to be tackling the common issues with other platforms (such as multi-language and multi-currency) in a beautiful and more importantly simple way.”

“So sick that you can have a bunch of options, select whether or not they generate variants, etc... I can't tell you how many hacky things I've done with Shopify to achieve this.”
“The ability to create custom notifications and have them blend in seamlessly with the rest of the notifications is so nice. For example, seeing my custom shipping confirmation email in the dashboard... chef’s kiss.”
“Using Swell for subscriptions, it just works. We develop it, it shows up in the dashboard, it's beautiful and all integrated. It just makes sense.”

“Swell was very easy to work with. I could get all the information out of the backend very easily, and you could tell it was something that was thought about from the beginning.”
Create a store and point your agent at it
