The short answer on Flint
Flint has gift cards in the API. Sell them as catalog products in fixed or custom amounts. When the purchase is paid, Flint issues the card with a 16-character code and emails the recipient on the date the buyer chose. Buyers redeem codes at Flint's hosted checkout, up to 20 cards with one card payment covering the rest, or in your own checkout through the API. Balances, partial spends, refunds back to the card, and a liability report are part of the ledger. Card processing runs on Stripe underneath. The Flint requests are below.
What Stripe's gift card docs cover
Stripe's gift card payment method is for redeeming third-party gift cards, in its API reference's words. The docs set these conditions:
- Access is a private preview, requested from your account executive or by email with your Terminal device, integration type, and gift card provider.
- You need an existing agreement with a gift card provider; SVS is the supported provider listed. The provider's program sets load amounts, maximum balances, and expiry.
- Customers in the United States, in USD. Integration is the Payment Intents API or a Terminal reader.
- Redemptions settle off Stripe, so there are no disputes on them, and the refunds endpoint returns an error: you reload the card or activate a new one instead.
That fits a business that already runs a provider-backed gift card program. A business that wants to sell its own cards online, without a provider, has no gift card object to use.
The workaround: a coupon per card
The pattern third-party guides describe, such as Acodei's September 2026 write-up, sells a Gift card product through Checkout and turns each sale into a coupon with a single-use promotion code:
// After checkout.session.completed for the "Gift card" product
const coupon = await stripe.coupons.create({
amount_off: 5000,
currency: "usd",
duration: "once",
applies_to: { products: REGULAR_PRODUCT_IDS }, // keep the gift card product out
});
const code = await stripe.promotionCodes.create({
promotion: { type: "coupon", coupon: coupon.id },
code: randomCode(16),
max_redemptions: 1, // one order uses it up, whatever it spends
});
await db.giftCards.insert({ code: code.code, balance: 5000, soldFor: 5000 }); // your ledger
await sendGiftEmail(session.metadata.recipient_email, code.code); // your email
That is a code generator, a balance ledger, an email, an applies_to list to maintain, and accounting that treats the sale as a liability. These are the places it breaks:
Where coupon gift cards go wrong
On Flint, gift cards are a product and a ledger
Create a gift card product. This one sells a $50 card by default and lets the buyer pick any amount from $10 to $500:
curl -X POST https://api.withflintpay.com/v1/products \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: product-gift-card" \
-H "Content-Type: application/json" \
-d '{
"name": "Gift card",
"product_type": "gift_card",
"default_variant": {
"unit_price_money": { "amount": 5000, "currency": "USD" },
"gift_card_configuration": {
"face_value_money": { "amount": 5000, "currency": "USD" },
"price_mode": "face_value",
"custom_amount_bounds": {
"minimum_money": { "amount": 1000, "currency": "USD" },
"maximum_money": { "amount": 50000, "currency": "USD" }
}
}
}
}'
A buyer orders a $75 card for a friend, delivered on December 24. The order needs a customer, or a buyer who confirms their email at checkout:
curl -X POST https://api.withflintpay.com/v1/orders \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: order-gift-card-001" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cus_1kmn0aExample",
"line_items": [{
"variant_id": "var_1kmn0aExample",
"quantity": 1,
"gift_card_purchase": {
"face_value_money": { "amount": 7500, "currency": "USD" },
"recipient": {
"email": "sam@example.com",
"name": "Sam",
"message": "Happy birthday!",
"send_at": "2026-12-24T14:00:00Z"
}
}
}]
}'
Collect payment with a checkout session as for any order. When the payment settles, Flint issues the card, lists it on the line item's purchased_gift_cards by its last characters, and emails Sam a private link to the card on the 24th. Ordinary reads never show the full code.
To spend it, the buyer types the code at Flint's hosted checkout, which applies up to 20 cards to an order and charges the rest to one card payment. In your own checkout, your backend applies the code with the checkout credential, and the order's gift_card_estimate says what the cards cover and what the card still pays:
# In your own checkout: apply the code the buyer typed, with the checkout credential
curl -X POST https://api.withflintpay.com/v1/orders/ord_2bqr7dExample/gift-cards \
-H "X-Checkout-Session-ID: cs_1kmn0aExample" \
-H "X-Checkout-Session-Secret: ckat_1kmn0aExample" \
-H "Idempotency-Key: apply-gift-card-cart-123-1" \
-H "Content-Type: application/json" \
-d '{ "code": "ABCD-EFGH-JKMN-PQRS", "expected_version": 1790760000 }'
What the ledger handles:
- Balances and partial spends. A $75 card spent on a $35 order keeps $40, and the buyer can save the card in their store account to check it.
- Refunds. Refunding an order paid by gift card returns the value to the original card first.
- Guessing. After repeated failed codes, Flint requires a challenge before more lookups; hosted checkout runs it for you.
- Accounting. The
gift_card_liability_v1 report rolls forward what you owe, and orders_itemized_v2 separates gift card sales from merchandise. Discounted offers, such as a $100 card for $90, record both amounts. - Existing cards. Import balances from another system with
POST /v1/gift-cards and import funding.
The limits: Flint gift cards hold USD value issued by your business and spend only with your business. Purchased cards have no expiry or fees. They can't pay for subscriptions or buy other gift cards, face values go up to $2,000 a card, and promotional gift card products and general store credit aren't offered. The gift cards reference covers cash-out rules by state, funding losses from disputes, and recipient emails.
Who Flint is built for
US businesses selling online and in apps in USD, such as shops, restaurants, studios, and service businesses, that want gift cards on the same orders, checkout, and buyer account as everything else they sell. See Flint gift cards, Flint checkout, and the Flint commerce API.
Gift cards on Stripe and on Flint
| Stripe gift card payments | Stripe coupon workaround | Flint gift cards |
|---|
| Availability | Private preview | Coupons and promotion codes | Gift cards API |
| Who issues the card | Your gift card provider, such as SVS | Your code | Flint, when the purchase is paid |
| Sell online | Activation operations through the API | A Checkout product plus your email | Catalog product, fixed or custom amounts, recipient email |
| Redeem at hosted checkout | Payment Intents and Terminal | One code per Checkout Session | Up to 20 cards, plus one card payment |
| Leftover balance | Held by the provider | Your ledger and a new code | Stays on the card |
| Refund to the card | Reload or activate a new card | Your code | Back to the original card first |
| Liability report | From your provider | Your books | gift_card_liability_v1 |
Questions, answered
Does Stripe support gift cards?
Stripe has a private preview for accepting closed-loop gift cards from a gift card provider you already have an agreement with. The docs list SVS as the supported provider, US customers, and USD, and the integration paths are the Payment Intents API and Terminal readers. Redemptions settle off Stripe.
How do I sell gift cards with Stripe?
Without a gift card provider, sell a Gift card product through Checkout and issue each buyer a coupon with a single-use promotion code, as third-party guides describe. The balance, partial spends, combining cards, and the liability are yours to track, because a Checkout Session takes one code and a used code doesn't keep a remainder.
Can customers redeem gift cards at Stripe Checkout?
Only as a coupon or promotion code you issued, one per session. Stripe's gift card payment method, in private preview, is integrated through the Payment Intents API and Terminal; Checkout isn't one of its documented integration paths.
Which payments API includes gift cards?
Flint Pay. You sell gift cards as catalog products in fixed or custom amounts, Flint issues a code when the purchase is paid and emails the recipient on the date the buyer picks, and buyers redeem up to 20 cards with one card payment at hosted checkout. Balances, partial spends, refunds back to the card, and a liability report are built in. Card processing runs on Stripe underneath.
Do Flint gift cards expire?
No. Purchased Flint gift cards have no expiry and no fees. They hold USD value issued by your business and spendable only with your business, and they can't pay for subscriptions or buy other gift cards.
Is Flint a good alternative to Stripe for gift cards?
Yes, for US businesses selling online in USD that want to sell and redeem their own gift cards without a gift card provider contract or a coupon workaround. Gift cards are part of Flint's API alongside orders and checkout; Flint's published card rate is 3.79% + 35¢, which covers Stripe's processing fees, with no monthly fee.
Sources
All sources accessed October 15, 2026.