Glossary
Stripe SetupIntent
A Stripe SetupIntent is the object that collects and validates a customer’s payment method without charging it, so the card is ready for a payment you intend to take later.
Also called: setup intent, setup_intent, seti_, saving a card for later
Definition
A SetupIntent is how Stripe collects a payment method without taking any money. Stripe puts it plainly: the Setup Intents API lets you "set up a payment method for future payments", and "it’s similar to a payment, but no charge is created".
The clearest evidence is what the object does not have. A PaymentIntent has an `amount`. A charge has an `amount`. A SetupIntent has no amount field at all, because there is no sum involved. It carries the payment method, the customer it will be attached to, and how you intend to use it later. That is the whole object.
That makes it the one thing in the Stripe payments chain designed to move no money. A [Checkout Session](/glossary/stripe-checkout-session) may produce nothing if the customer walks away. A [PaymentIntent](/glossary/stripe-payment-intent) may produce nothing if the card is declined. A SetupIntent produces nothing by design, every time, including when it works perfectly.
For bookkeeping that settles a question people ask constantly. If you can see Stripe activity against a customer and there is no matching record in your books, and the activity was a card being saved, nothing is missing and nothing is broken.
Key points
- +Collects and validates a payment method without charging it. Stripe: "no charge is created".
- +Has no `amount` field, unlike a PaymentIntent or a charge.
- +Identified by an id beginning `seti_`.
- +`usage` records how you plan to charge later: `on_session` or `off_session`, defaulting to `off_session`.
- +On success the payment method is attached to the Customer, when one is set.
- +Never produces a QuickBooks record, because no charge event ever fires.
Why `succeeded` here does not mean you were paid
A SetupIntent runs through a status ladder that looks almost identical to the one on a PaymentIntent, which is exactly why it trips people up. Stripe documents six values: `requires_payment_method`, `requires_confirmation`, `requires_action`, `processing`, `canceled`, and `succeeded`.
On a PaymentIntent, `succeeded` means the money was collected. On a SetupIntent, `succeeded` means the payment method is set up and ready to be charged at some point in the future. The same word describes two very different outcomes, and only one of them is a sale.
This matters most when someone is scanning a list rather than reading an object. A row that says `succeeded` next to a customer name and a card brand reads like a completed purchase. If the underlying object is a SetupIntent, no money moved, and there is nothing to reconcile against your bank.
The cancellation reasons are a useful tell in the other direction. Stripe records `abandoned`, `requested_by_customer`, or `duplicate` on a canceled SetupIntent. None of those is a failed payment, because there was no payment to fail. A customer who abandons a card-saving flow has not had anything declined.
Where you meet one without meaning to
Most people never call the Setup Intents API directly. They meet SetupIntents through other Stripe features that create them quietly.
The common one is Checkout. A Checkout Session has a `mode`, and Stripe defines the `setup` value as "save payment details to charge your customers later". A session in that mode produces a SetupIntent rather than a PaymentIntent, and stores its id in the session’s `setup_intent` field. The session’s `payment_status` then reads `no_payment_required`, which Stripe defines as covering the case where "the Checkout Session is in `setup` mode and doesn’t require a payment at this time".
So a `setup` mode Checkout Session is a hosted page that takes card details and charges nothing. It completes successfully, it produces a real object, and your bank account is untouched.
Stripe’s own examples of when to use this are worth repeating, because they describe ordinary businesses rather than edge cases: a car rental company that collects card details before the rental and charges after it ends, a crowdfunding site that saves cards and only charges them if the campaign hits its target, and a utility company that collects bank details up front and charges a different amount each month.
Every one of those has a gap between collecting the payment method and taking the money. The SetupIntent is what lives in that gap.
The charge that comes later is an ordinary charge
The `usage` field is where the SetupIntent records what you plan to do next. Stripe documents two values. `on_session` means you only intend to reuse the payment method while the customer is in your checkout flow and able to authenticate. `off_session` means the customer may or may not be present, and it is the default when you do not specify.
Off-session use is the interesting case for bookkeeping, because it is the one where a charge appears with no customer action behind it. Stripe is direct about the obligation that comes with it: charging someone when they are not actively using your site requires permission, set up as an agreement or mandate that covers the customer’s consent, the expected frequency, and how the amount will be determined.
When that later payment finally runs, it is not special. It creates a PaymentIntent and a charge like any other sale, and it produces a [balance transaction](/glossary/stripe-balance-transaction) carrying the gross amount, the [fee](/glossary/stripe-fee), and the net. Your books see that charge and record it normally.
So the full arc for a saved-card business is two events separated by time: a SetupIntent that creates nothing in your accounting, then a charge weeks or months later that creates everything. Reconciling the second one has nothing to do with the first.
How Acodei treats a SetupIntent
A SetupIntent never produces a QuickBooks record, and that is the designed outcome rather than a limitation.
Acodei’s sales records key on charge events. `charge.succeeded` and `charge.captured` are what route to a sync job and write a sales record, with the record type set by your account settings. A SetupIntent creates no charge, so nothing reaches the sync and nothing is written.
The practical consequence is that saved cards are invisible in your books until they are used, which is correct. A payment method on file is not revenue, not a receivable, and not a deferred balance. It is a stored credential.
When the off-session payment eventually runs, it produces an ordinary charge and posts like any other sale. The fact that the card was saved earlier changes nothing about how the eventual sale is recorded.
Want to see this on your own Stripe data?
Start a free trialFrequently asked questions
What is a Stripe SetupIntent?
It is the object Stripe uses to collect and validate a payment method without charging it, so you can charge it later. Stripe describes it as similar to a payment except that no charge is created. It has an id beginning `seti_` and, unlike a PaymentIntent, no amount field at all.
Does a SetupIntent create a record in QuickBooks?
No. Acodei’s sales records key on charge events, and a SetupIntent produces no charge, so no QuickBooks record is created. If you are looking at Stripe activity for a customer and finding nothing in your books, and that activity was a card being saved, nothing is missing.
My SetupIntent says succeeded. Where is the money?
There is no money. On a SetupIntent, `succeeded` means the payment method is set up and ready for a future charge, not that funds were collected. It is the same word PaymentIntents use for a completed payment, which is the source of the confusion, but the two mean different things.
What is the difference between a SetupIntent and a PaymentIntent?
A PaymentIntent is an attempt to collect a specific amount and it carries an `amount` field. A SetupIntent collects a payment method for later use and has no amount at all. A PaymentIntent can produce a charge and therefore a bookkeeping entry. A SetupIntent never does.
Does saving a card create deferred revenue or a receivable?
No. Storing a payment method creates no obligation in either direction: the customer has not paid you and has not agreed to a specific amount. Nothing is earned, nothing is owed, and nothing should appear in your books until an actual charge runs against that card.
What is a setup mode Checkout Session?
It is Stripe’s hosted page running in a mode Stripe defines as "save payment details to charge your customers later". It produces a SetupIntent instead of a PaymentIntent, stores the id in the session’s `setup_intent` field, and reports `payment_status: no_payment_required`. It collects card details and takes no money.
What customers say about running Stripe through Acodei

“If you're testing out all the different Stripe/QuickBooks integration apps right now, let me save you some time. This one is the best one by far.”
“Works well and is really helpful for massive transactions. The support is really fast and helpful. 100% recommended.”
Related reading
More glossary terms
- Undeposited Funds
- Stripe Balance Transaction
- Available vs Pending Balance
- Stripe Dispute
- Stripe Fee
- Stripe Balance Adjustment
- QuickBooks Credit Memo
- Stripe Tax
- QuickBooks Tax Code
- Stripe Reserve
- Stripe Tax Rate
- Stripe Fee Credit
- Stripe Credit Note
- QuickBooks Product/Service Item
- Stripe Payout
- QuickBooks Sales Receipt
- QuickBooks Bank Deposit
- QuickBooks Transfer
- Stripe Authorization Hold
- QuickBooks Refund Receipt
- QuickBooks Payment
- QuickBooks Expense
- QuickBooks Journal Entry
- Stripe Financial Account
- Holding Account
- Accounts Receivable
- Bank Feed
- Deferred Revenue
- Stripe PaymentIntent
- Stripe Checkout Session
Ready to try Acodei?
Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.