Skip to content

Flint vs Stripe

Flint Pay vs Stripe: Stripe processing underneath, the commerce system on top.

Flint Pay runs on Stripe’s card processing and adds the commerce system Stripe leaves you to build: orders, product variants, inventory held at payment, stacked promotions, automatic US sales tax computed after discounts, shipping and pickup, returns, and line-item refunds. On Stripe, its own fulfillment guide leaves saving line items and updating stock to your code after each payment. On Flint the order is the record, and the dashboard, hosted checkout, and buyer account come with your API keys.

3.79% + 35¢ on cards · no monthly fee · free sandbox · no credit card

last reviewed 2026-10-15 · sources

01Side by side

Flint vs Stripe, need by need.

The Stripe column is what Stripe's own docs and pricing pages say today, each linked under Sources. The Flint column is what a Flint account does, with the API name behind it.

Card processingStripe Payments, Checkout, and Billing: Stripe.Flint: Stripe, on a processing account Flint sets up and runs for you. Card details go from the buyer's browser straight to Stripe.
Order recordStripe Payments, Checkout, and Billing: No order object. The Orders and SKU resources were removed in stripe-node 11.0.0 (2022-11-15), and the fulfillment guide leaves saving line items to your code. Orders API historyFlint: Every checkout, payment link, invoice, and subscription renewal creates an order with line items and server-computed totals.POST /v1/orders
Product variantsStripe Payments, Checkout, and Billing: A separate product for each size and color combination, per Stripe's catalog guide.Flint: Products with options and variants, plus categories, modifier sets, and bundles.POST /v1/products
InventoryStripe Payments, Checkout, and Billing: No stock field on the Product object. The fulfillment guide leaves updating inventory or stock records to your code. Stripe inventory trackingFlint: Stock per location, held when payment starts, committed when it succeeds, and released when it fails.held_quantity
Discount codesStripe Payments, Checkout, and Billing: Checkout Sessions currently support up to one coupon or promotion code.Flint: Codes and automatic promotions that stack by rules you set, including buy X get Y, with a preview call.combines_with
Sales taxStripe Payments, Checkout, and Billing: Stripe Tax, priced separately: 0.5% per transaction on no-code integrations or 50¢ per API transaction, where you're registered.Flint: Automatic US sales tax computed after discounts and recorded per line, at 0.50% only on payments that carry tax. Or pass your own rates.tax_money
Shipping and pickupStripe Payments, Checkout, and Billing: Shipping rates are a fixed amount for the whole order, and only payment-mode Checkout Sessions take shipping options. Local pickup on StripeFlint: Region-priced rates, free shipping over a threshold, in-store pickup, scheduled local delivery, and rate callbacks, on one-time orders and on subscription renewals.POST /v1/delivery-methods
Refund one itemStripe Payments, Checkout, and Billing: A refund is an amount against a Charge or PaymentIntent; no parameter names a line item. Line-item refunds on StripeFlint: Refund by line item and quantity. Flint computes the item's share of the discount and the tax.line_item_allocations
Tips onlineStripe Payments, Checkout, and Billing: Stripe’s tipping features, on-reader and on-receipt, are for Terminal in-person payments. Tips on Stripe CheckoutFlint: Tip presets on hosted checkout and payment links: three percentages or smart fixed amounts.tip_percent_options
Invoice late feesStripe Payments, Checkout, and Billing: Invoicing from 0.4% per paid invoice. The documented invoice statuses are draft, open, paid, void, and uncollectible, and neither the lifecycle docs nor the pricing page lists a late fee.Flint: Payment terms with a fixed or percentage late fee, an overdue status, reminders on your schedule, and credit notes, at 0.40% of invoice-collected payments.late_fee_policy
SubscriptionsStripe Payments, Checkout, and Billing: Stripe Billing, 0.7% of Billing volume on pay as you go. Shipping on Stripe subscriptionsFlint: Any interval, trials, setup fees, and four retries over 16 days. Each renewal is an order that can ship. 0.40% of subscription payments.POST /v1/subscriptions
Buyer accountStripe Payments, Checkout, and Billing: The customer portal manages payment details, invoices, and subscriptions. One-time orders in the portalFlint: A hosted buyer account with orders, tracking, returns, invoices, subscriptions, and saved cards, or build your own on the same API.GET /v1/me/orders

02What you build

What do you build around Stripe to sell physical products?

Each box on the left is code and data your team writes, tests, and keeps in sync with Stripe after every payment, refund, and return. On Flint each job is already a field or an endpoint on the order.

Around Stripe Checkout, you build

checkout.session.completedyour database
  1. Orders

    An orders table and an order lines table

    written from checkout.session.completed

  2. Variants

    A Stripe product per size and color

    mapped back to the catalog you keep

  3. Inventory

    A stock table, a hold at checkout start

    and a sweep that releases expired holds

  4. Promotions

    Your own stacking and best-offer logic

    because a Checkout Session takes one code

  5. Refund tax

    Each line's tax and discount share, stored

    and recomputed for every partial refund

  6. Returns

    A returns table, inspections, restocking

    and the refund each approved return triggers

  7. Order history

    An order history page for one-time buyers

    beside the portal's invoices and subscriptions

  8. Fulfillment

    A handler safe to run twice, concurrently

    plus a fulfillment status you record yourself

8 systems to build, run, and keep in sync

On Flint, you read the order

ord_1kmn0aExampleGET /v1/orders/{order_id}
  1. Orders

    orderPOST /v1/orders
  2. Variants

    variantsPOST /v1/products
  3. Inventory

    held_quantityGET /v1/inventory-levels
  4. Promotions

    combines_withPOST /v1/promotions
  5. Refund tax

    line_item_allocationsPOST /v1/refunds
  6. Returns

    returnPOST /v1/returns
  7. Order history

    ordersGET /v1/me/orders
  8. Fulfillment

    fulfillmentsorder.paid

1 order · 1 API key · 1 webhook stream

Stripe's fulfillment guide →Does Stripe track inventory? →

03After the payment

What runs on your server after a Stripe Checkout payment?

Stripe's guide asks for a fulfillment function that survives repeat and concurrent calls, retrieves the session with its line items, checks the payment status, fulfills, and records that it did. The left pane is that function with its database writes filled in. The right pane is the whole handler on Flint.

Stripe: the fulfillment function, filled in
import Stripe from "stripe";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);

export async function POST(request: Request) {
  const event = stripe.webhooks.constructEvent(
    await request.text(),
    request.headers.get("stripe-signature")!,
    process.env.STRIPE_WEBHOOK_SECRET!,
  );

  if (
    event.type === "checkout.session.completed" ||
    event.type === "checkout.session.async_payment_succeeded"
  ) {
    await fulfillCheckout(event.data.object.id);
  }
  return new Response(null, { status: 200 });
}

// must be safe to call twice, even at the same time, for one session
async function fulfillCheckout(sessionId: string) {
  const session = await stripe.checkout.sessions.retrieve(sessionId, {
    expand: ["line_items"],
  });
  if (session.payment_status === "unpaid") return;

  await db.transaction(async (tx) => {
    if (await tx.orders.findBySession(sessionId)) return; // already done

    const order = await tx.orders.insert({ sessionId, total: session.amount_total });
    for (const line of session.line_items!.data) {
      await tx.orderLines.insert({
        orderId: order.id,
        priceId: line.price!.id,
        quantity: line.quantity,
        tax: line.amount_tax, // kept for the partial refund later
      });
      await tx.stock.decrement(line.price!.id, line.quantity!); // your count, not Stripe's
    }
    await tx.fulfillments.insert({ orderId: order.id, status: "pending" });
  });
}

Stripe's required steps, with its TODOs and the optional writes its guide suggests (saving line items, updating stock) filled in. The order tables, the duplicate check, and the stock count are yours to run and back up.

Flint: order.paid
import { Client } from "@flintpay/node";

const flint = new Client({
  baseUrl: "https://api.withflintpay.com",
  apiKey: process.env.FLINT_API_KEY!,
});

export async function POST(request: Request) {
  const rawBody = new Uint8Array(await request.arrayBuffer());
  const { event, known } = flint.verifyWebhook(
    rawBody,
    Object.fromEntries(request.headers),
    [process.env.FLINT_WEBHOOK_SECRET!],
  );

  if (known && event.event_type === "order.paid") {
    // lines, tax, discounts, and committed stock are on the order
    await startShipment(event.data.object.order_id);
  }
  return new Response(null, { status: 204 });
}

The cart went in by variant, so Flint priced each line, held the stock at payment, and committed it on success. order.paid fires once per order, and a retry carries the same webhook id.

Which Stripe webhook event should you trust? →

04Included

What does a Flint account include that Stripe leaves to you?

One API and one dashboard. Checkout, payment links, orders, catalog, inventory, discounts, fulfillment, returns, refunds, the buyer account, and reporting are in the 3.79% + 35¢ card rate, with no monthly fee. Invoices, subscriptions, and automatic tax are priced add-ons.

Products carry options and variants, plus categories, modifier sets, and bundles.

POST /v1/products

Stock is held per location when payment starts, committed on success, and released on failure.

held_quantity · committed_quantity

Codes and automatic promotions stack by rules you set, with a preview call that shows the result first.

POST /v1/discount-previews

Automatic US sales tax is computed after discounts and recorded on each line item and in the order total.

tax_money

Shipping prices by region, goes free over a threshold, or switches to in-store pickup or scheduled local delivery.

POST /v1/delivery-methods

Returns run from a policy, with inspections, restocking fees, exchanges, and buyer self-serve.

POST /v1/return-policies

Refund a line item and its share of the discount and the tax goes back with it.

line_item_allocations

Hosted checkout and payment links offer tip presets, as percentages or smart fixed amounts.

tip_percent_options

Invoice payment terms carry a fixed or percentage late fee, with reminders on your schedule.

late_fee_policy

Subscription renewals are orders, so a box ships, quotes shipping, and gets taxed every cycle.

POST /v1/subscriptions

Buyers get a hosted account with their orders, tracking, returns, invoices, and saved cards.

GET /v1/me/orders

Pricing →The commerce API →Selling physical goods on Flint →

05Who Flint is for

Flint is built for US businesses selling online.

If that describes you, everything above is running the day you create your account.

US businesses

Flint onboards businesses in the US and pays out in USD to your own bank account. Buyers can pay from anywhere with a card.

Online payments

Hosted checkout, payment links, invoices, or Stripe Elements on your own site, with cards, Apple Pay, Google Pay, ACH debit, and Affirm.

Goods and services

Orders that ship, get picked up, deliver locally, or fulfill as a download or a service, with stock held at payment.

Developers and agents

A public OpenAPI spec, Node and PHP SDKs, a CLI, llms.txt, and MCP servers a coding agent can read.

06Switching

How do you switch from Stripe to Flint?

One flow at a time. Your frontend keeps Stripe.js and Stripe Elements for card entry; the calls your backend makes change.

  1. Recreate the catalog

    POST /v1/products

    Create each product with its options and variants, and keep the Stripe product id in metadata so your reports and support tools resolve during the cutover.

  2. Replace Checkout Sessions and Payment Links

    POST /v1/checkout-sessions

    Create an order from the cart and open a hosted checkout for it, or create a Flint payment link. Both collect what the order owes, with tax and discounts already computed.

  3. Move subscribers without a second charge

    POST /v1/subscriptions

    Recreate each recurring price as a subscription plan. Flint has no card import, so each subscriber first saves a card on Flint, in the hosted buyer account or on your own page. Then create their subscription with an imported billing start set to the start of the period Stripe already billed. Flint charges nothing for that period and takes over at the next renewal.

  4. Fulfill from order.paid

    order.paid

    Move the job your checkout.session.completed handler runs to order.paid, and verify Flint's webhook signatures in place of Stripe's.

  5. Go live

    Run each flow in a sandbox with Stripe's test cards, then switch to live keys. The host and the paths stay the same.

Read the Stripe migration guide →

07Start

From a sandbox key to a paid test order in ten minutes.

Node

npm install @flintpay/node

CLI

npm install -g @flintpay/cli

Test keys are prefixed flint_test_ and bound to a sandbox with its own data, so nothing you try there touches live money. Pay with 4242 4242 4242 4242, any future expiry, any CVC.

Sources

Where each claim comes from.

  • The fulfillment function must handle repeat calls, retrieve the session with its line items, check the payment status, fulfill, and record fulfillment status; the guide lists saving line items in your own database and updating inventory or stock records among what it may also do. Fulfill orders

    docs.stripe.com · checked 2026-10-15
  • Orders and SKU resources removed in stripe-node 11.0.0, released 2022-11-15. stripe-node migration guide for v11

    github.com · checked 2026-10-15
  • A separate product for each size and color combination. How products and prices work

    docs.stripe.com · checked 2026-10-15
  • The Product object's attributes, none of them a stock or quantity on hand. The Product object

    docs.stripe.com · checked 2026-10-15
  • Checkout Sessions currently support up to one coupon or promotion code. Add discounts

    docs.stripe.com · checked 2026-10-15
  • Shipping rates are fixed amounts for the entire order, and only payment-mode Checkout Sessions support shipping options. Charge for shipping

    docs.stripe.com · checked 2026-10-15
  • A refund names a Charge or PaymentIntent and an amount; no parameter names a line item. Create a refund

    docs.stripe.com · checked 2026-10-15
  • On-reader and on-receipt tipping are Terminal features. Collect tips

    docs.stripe.com · checked 2026-10-15
  • Invoice statuses: draft, open, paid, void, and uncollectible. How invoicing works

    docs.stripe.com · checked 2026-10-15
  • Invoicing Starter at 0.4% and Plus at 0.5% per paid invoice. Stripe Invoicing pricing

    stripe.com · checked 2026-10-15
  • Billing at 0.7% of Billing volume on pay as you go. Stripe Billing pricing

    stripe.com · checked 2026-10-15
  • Stripe Tax Basic at 0.5% per no-code transaction or 50¢ per API transaction, where you're registered. Stripe Tax pricing

    stripe.com · checked 2026-10-15
  • The customer portal manages payment details, invoices, and subscriptions. Customer portal

    docs.stripe.com · checked 2026-10-15

last reviewed 2026-10-15 · corrections: Flint Help

FAQ

Questions people ask.

What is the difference between Flint Pay and Stripe?

Stripe processes payments, and its fulfillment guide leaves the order record, stock updates, and fulfillment status to code on your server. Flint runs on Stripe's processing and adds that commerce system: orders with line items, product variants, inventory held at payment, promotions that stack, automatic US sales tax computed after discounts, shipping and pickup, returns, line-item refunds, invoices with late fees, subscriptions, a hosted buyer account, and a dashboard.

Is Flint a good alternative to Stripe for a small business?

Yes, for a US business selling goods or services on its own website or app that wants orders, inventory, promotions, sales tax, shipping, returns, and invoices without building them. Flint has no monthly fee and one published card rate, 3.79% + 35¢, which covers Stripe’s processing fees and the core commerce system; invoices, subscriptions, and automatic tax are priced add-ons. Sign up on the web or from the terminal with flint signup.

Is there a Stripe alternative with orders and inventory built in?

Flint. Every checkout, payment link, invoice, and renewal creates an order with line items and server-computed totals, and stock is tracked per location: held when payment starts, committed when it succeeds, and released when it fails. Stripe removed its Orders and SKU resources from stripe-node in version 11.0.0 (November 2022), and its Product object has no stock field.

Does Flint use Stripe?

Yes. Stripe processes every card payment on Flint. Card details go from the buyer's browser to Stripe, so neither your server nor Flint sees card numbers. Flint sets up and runs the processing account for each business, so you sign up once and hold one set of API keys. Flint does not connect to a Stripe account you already have.

How much does Flint cost compared with Stripe?

Flint charges 3.79% + 35¢ per card payment with no monthly fee. The rate covers Stripe’s processing fees and includes checkout, payment links, orders, catalog and inventory, discounts, fulfillment, returns, refunds, the buyer account, and reporting. Invoices and subscriptions are 0.40% each, and automatic tax is 0.50% on payments that carry tax. On Stripe, Billing is 0.7% of Billing volume, Stripe Tax is 0.5% per transaction on no-code integrations, and Invoicing starts at 0.4% per paid invoice, before the code you write for orders, stock, and returns. Flint pricing

Can I move Stripe subscribers to Flint without charging them twice?

Yes. Flint has no card import, so each subscriber first saves a card on Flint, in the hosted buyer account or on your own page. Then create their Flint subscription with an imported billing start set to the start of the period Stripe already billed. Flint charges nothing for that period, computes its end from the plan interval, and takes over at the next renewal. Stripe migration guide

Keep Stripe's processing. Stop building the store around it.

Free sandbox, no credit card, no sales call. Create an order by variant, take a test payment, and refund one line with its share of the tax.

Or run npm install -g @flintpay/cli && flint signup to create your account and a sandbox key from the terminal. CLI guide

More comparisons · last reviewed 2026-10-15