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.

schema.shbash
# 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.json

Both 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.

discover.jsjavascript
// 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.

/products/orders/carts/accounts/subscriptions/categories/payments/invoices/shipments/coupons/promotions/giftcards/returns/attributes

One definition. Every surface.

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.

models/reviews.jsonjson
{
  "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.

An app is configuration, not scaffolding

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.

swell.jsonjson
{
  "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

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

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

Merchants control their data

App data is stored in a secure, isolated database for each merchant.

Releases are reviewed

Releases are reviewed

Apps published to the Swell App Store are reviewed by our team before they go out.

Powered by Cloudflare Workers

fake cube
gradient lines

Built for people who read the API first

blurry-background

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.

Rhen ZabelCo-Founder, VIOLET

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.

blurry-background

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.

Antonie CailletFounder, ültro

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.

blurry-background

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.

Joseph ThomasSoftware Developer, Sanctuary Computer

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.

Claudio Christian FofiuDirector of Technology, Monogram
blurry-background

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.

Yuliy SchwartzburgCo-Founder, THE RAYY

Create a store and point your agent at it

3d logo