Inventory, orders and fulfillment on top of Stripe
Stripe takes the payment. It doesn't track stock, keep an order through shipping and returns, or stop two people buying the last item. CommerceForAI adds that layer on your own Stripe account: a catalog, stock that can't oversell, orders, shipping, returns and refunds, through one API.
What Stripe alone leaves you to build
| You need | With Stripe alone | With CommerceForAI |
|---|---|---|
| Stock counts | Your own table, decremented in webhook code | Held at checkout, committed on payment, released on expiry |
| Orders | Built from checkout.session.completed yourself | Created for you, with numbers, statuses and history |
| Shipping | Separate label service and glue code | Rates and labels through EasyPost or Shippo, tracking and delivery status |
| Refunds and returns | Refund API plus your own restocking logic | One call, with restock and the customer email |
| Changing an order | Manual | Swap or remove items before shipping; the difference is refunded |
How it sits on your Stripe account
- You connect your existing Stripe account (or create one during setup). Charges, payouts and disputes stay on it, and you are the merchant of record.
- Checkout is Stripe's hosted page, created with the right line items, shipping and tax settings.
- Sales tax uses Stripe Tax if you turn it on. Discount codes are mirrored into your Stripe account.
- CommerceForAI never holds your money. Its fee is taken as a Stripe application fee: nothing for the first 100 orders a month, then 1% per order, at most $29 a month.
Start
npx commerceforai init # a free test store and API key, no sign-up
npm install commerceforai # or: pip install commerceforaiconst { data: product } = await commerce.products.create({ name: "Camp Mug", price: 2400, inventory: 40 });
const { data: checkout } = await commerce.checkouts.create({
items: [{ variant_id: product.variants[0].id, quantity: 2 }],
success_url: "https://yoursite.com/thanks",
});
// After payment: commerce.orders.list({ status: "paid" }) → ship → commerce.orders.fulfill(id, { carrier, tracking_number })Full walkthrough: Quickstart. Shipping and returns: guide. If you only take one-off payments and track nothing, a Stripe Payment Link is enough: see the comparison.