Square Orders API with Stripe: the 1% fee, and how to avoid it

Square charges a 1% fee per transaction when you use the Square Orders API with a non-Square payments provider, such as Stripe. Orders paid with Square payments carry no Orders API fee. A Square staff reply on the developer forum adds that the fee is billed to the developer's application account, on the amount recorded as an external payment, by invoice. Flint keeps orders, catalog, inventory, and payments in one API, processes cards on Stripe, and has no separate orders fee.
Verified against official documentationReviewed Send a correction (opens in a new tab)

The fee is one sentence on Square's payments pricing page: "If you want to use the Square Orders API with a non-Square payments provider, there is a 1% fee per transaction." It is on top of what Stripe charges for the card. On Flint the order and the payment are the same system, so there is nothing to record twice and no orders fee to pay: cards cost 3.79% + 35¢ per payment, Stripe's processing included, with no monthly fee.

What the 1% Orders API fee costs

The fee is 1% of each payment recorded in Square as EXTERNAL. Square's pricing page lists no cap, so it grows with your volume:

Monthly payments recorded as externalOrders API fee per monthPer year
$25,000$250$3,000
$100,000$1,000$12,000
$500,000$5,000$60,000

In August 2026 a developer building an ordering platform asked Square who pays it. The Square staff reply said:

  • It is "billed to the developer (the application account), not to the sellers" whose accounts hold the orders.
  • It is "1% of the total amount passed as the EXTERNAL payment," not the order total.
  • Square invoices the developer "once the accrued balance reaches a threshold," and the threshold "is not disclosed and subject to change."
  • "There's no per-transaction line item in the APIs," so you can't read the fee off a payment or a payout.

For a platform serving many sellers, that makes the fee a cost of the platform itself, owed on every seller's volume, that you learn the size of from an invoice.

What pairing Square orders with Stripe takes

Square's external payments guide is the documented path. The order and its totals live in Square, the card is charged on Stripe, and your webhook handler records the Stripe charge back in Square and pays the order with it:

JavaScript
// 1. The order lives in Square. square() is your fetch wrapper for
//    https://connect.squareup.com with the Square-Version header.
const { order } = await square("POST", "/v2/orders", {
  idempotency_key: `order-${cartId}`,
  order: {
    location_id: LOCATION_ID,
    line_items: cart.map((item) => ({
      catalog_object_id: item.variationId,
      quantity: String(item.quantity),
    })),
  },
});

// 2. The card is charged on Stripe, for the total Square computed.
const intent = await stripe.paymentIntents.create({
  amount: Number(order.total_money.amount),
  currency: "usd",
  metadata: { square_order_id: order.id },
});

// 3. In your payment_intent.succeeded handler, record the Stripe charge in
//    Square as an external payment, then pay the order with it.
const { payment } = await square("POST", "/v2/payments", {
  idempotency_key: `ext-${intent.id}`,
  source_id: "EXTERNAL",
  amount_money: order.total_money,
  order_id: order.id,
  location_id: LOCATION_ID,
  autocomplete: false,
  external_details: { type: "CARD", source: "Stripe", source_id: intent.id },
});

await square("POST", `/v2/orders/${order.id}/pay`, {
  idempotency_key: `pay-${order.id}`,
  payment_ids: [payment.id], // must add up to the order total
});
// Square accrues 1% of payment.amount_money against your developer account.

That is the happy path. Around it, your app also owns:

  • Two sets of idempotency keys and retries. If the Stripe charge succeeds and the Square write fails, the buyer has paid for an order Square still shows as open, and your handler has to retry it.
  • Totals that have to match. PayOrder requires the payment total to equal the order total, so a cart change after the PaymentIntent is created leaves the payment unable to close the order.
  • Refunds and disputes in two places. Money moves back on Stripe, and the Square order has to be told, or Square's reports keep the sale.
  • Two bills. Stripe's fee comes out of each payment; Square's 1% arrives on an invoice later.

Per payment: Square plus Stripe, and Flint

With Stripe's standard US card rate of 2.9% + 30¢, the pair costs 3.9% + 30¢ per payment, across two companies. Flint's card rate is 3.79% + 35¢ and covers the Stripe processing underneath. On a $100 payment that is $4.20 against $4.14. The two are equal at about $45; above it Flint costs less, and below it Flint costs up to 5¢ more per payment, with one system instead of two. Neither figure includes sales tax tools or add-ons; Flint's are on its pricing page.

On Flint, orders and payments are one API

Flint is a commerce API where the order is the record every payment belongs to. Catalog, stock, tax, delivery, checkout, and refunds all read the same order, so there is no external payment to record and nothing to reconcile between vendors. A product with variants creates its stock items in the same request:

cURL
curl -X POST https://api.withflintpay.com/v1/products \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: product-mug" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ceramic mug",
    "product_type": "physical",
    "options": [{
      "name": "Color",
      "values": [
        {"value": "White"},
        {"value": "Black"}
      ]
    }],
    "variants": [
      {
        "sku": "MUG-WHITE",
        "unit_price_money": {"amount": 1299, "currency": "USD"},
        "line_item_tax_category": "physical_goods",
        "selected_options": [{"option_name": "Color", "value": "White"}],
        "inventory_item": {"name": "Ceramic mug, white", "sku": "MUG-WHITE"}
      },
      {
        "sku": "MUG-BLACK",
        "unit_price_money": {"amount": 1299, "currency": "USD"},
        "line_item_tax_category": "physical_goods",
        "selected_options": [{"option_name": "Color", "value": "Black"}],
        "inventory_item": {"name": "Ceramic mug, black", "sku": "MUG-BLACK"}
      }
    ]
  }'

An order prices each line from the catalog and calculates US sales tax for the delivery address. Naming a stock location makes payment hold the stock, commit it when the payment succeeds, and release it if the payment fails:

cURL
curl -X POST https://api.withflintpay.com/v1/orders \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: order-cart-1042" \
  -H "Content-Type: application/json" \
  -d '{
    "line_items": [{"variant_id": "var_1kmn0aExample", "quantity": 2}],
    "inventory_routing_source": {"type": "fixed_location", "location_id": "loc_1kmn0aExample"},
    "delivery_destination": {
      "address": {
        "line1": "120 Main Street",
        "city": "Brooklyn",
        "state": "NY",
        "postal_code": "11249",
        "country": "US"
      },
      "recipient": {"name": "Ada Lovelace"}
    },
    "tax": {"enabled": true}
  }'

Then send the buyer to Flint's hosted checkout for that order, which takes cards, Apple Pay, Google Pay, ACH debit, and Affirm, or pay it from your own page with Stripe Elements:

cURL
curl -X POST https://api.withflintpay.com/v1/checkout-sessions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: checkout-cart-1042" \
  -H "Content-Type: application/json" \
  -d '{
    "order_id": "ord_1kmn0aExample",
    "redirects": {"success_redirect_url": "https://example.com/thanks"}
  }'

One order.paid webhook tells you it's done. Refunds name line items, returns put stock back, and the order's totals update with each one. If you are building for many merchants, each one onboards inside your product and installs your app through Flint's partner app authorization.

Square Orders API with Stripe, and Flint, side by side

Square Orders API with StripeFlint
Orders fee1% of each external payment, invoiced to the developerNone
Card processingStripe, 2.9% + 30¢, billed by StripeStripe, included in 3.79% + 35¢
Where the payment is recordedStripe, then copied to Square as EXTERNALOn the order
Refund one itemOn Stripe by amount, then recorded in SquarePOST /v1/refunds with line_items
Systems to reconcileTwoOne

Who Flint is built for

Flint is for US businesses, and the developers building for them, that sell on their own website or app and get paid in US dollars. Buyers can pay from anywhere with a card. It covers online and in-app payments, not card readers.

Questions, answered

How much is the Square Orders API fee?

1% per transaction when you use the Square Orders API with a non-Square payments provider, such as Stripe. Square's pricing page lists no cap or minimum. Orders paid with Square payments have no Orders API fee.

Who pays the Square Orders API 1% fee?

According to a Square staff reply on the developer forum in August 2026, the developer's application account pays it, not the sellers whose accounts hold the orders. The fee is 1% of the amount recorded as the EXTERNAL payment, and Square invoices the developer once the accrued balance reaches a threshold it doesn't disclose. Nothing shows up per transaction in the API.

Can I use the Square Orders API with Stripe?

Yes, with the 1% fee. Your app charges the card on Stripe, records that charge in Square with CreatePayment using source_id EXTERNAL, and completes the order with PayOrder. Refunds, disputes, and payouts happen on Stripe, so your app keeps the two systems in step.

How do I avoid the Square Orders API fee?

Square's answer is to take the payment with Square payments, which carry no Orders API fee. If you want Stripe processing, use a system that has orders and payments together. Flint keeps orders, catalog, inventory, and payments in one API with cards processed on Stripe, and has no separate orders fee.

Does Flint charge a fee for orders?

Not for orders paid through Flint. Cards cost 3.79% + 35¢ per payment, which covers the Stripe processing underneath, with no monthly fee. Automatic tax, invoices, and subscriptions are optional add-ons at published rates. The Core plan also includes 20 orders a month paid outside Flint, such as an invoice paid by check.

Can I connect my existing Stripe account to Flint?

Not today. Flint sets up the Stripe processing account for each business during onboarding, and payouts go to that business's own bank account. Cards saved in another Stripe account aren't moved.

Is Flint a good alternative to the Square Orders API?

For US businesses and the developers building for them, selling online or in an app: yes. Flint's orders come with a catalog with variants and modifiers, stock held at payment, automatic US sales tax, promotions, shipping and pickup, a hosted checkout, returns, and line-item refunds, all paid through the same API. It has no card readers, so in-person sales stay on your point of sale.

Sources

All sources accessed October 15, 2026.