Skip to content
Insights · Engineering

Which payout did that charge settle?

Name the payout on that charge: the id, the status, and the amount. A different payout can move another balance, and another account does not list it.

Scroll
EngineeringOct 30, 202613 min readBy Salman Naqvi, Founder & CEO
Which payout did that charge settle?

A founder says the money left, or says it never arrived. Tonight, three proofs, in a console you administer. Name the payout that charge settled into: the payout id, the status, and the amount. Show a different payout whose id, or whose amount, is not this one. Show another account's list that does not contain this payout. If any of the three needs the person who wired the bank account, you have not shown the payout. You have a balance and a guess.

This is the payout. It is not the invoice. Which invoice did that charge pay? is the invoice id, the status, and the total. A payout can be pending while the invoice is paid, and an invoice number is not a payout id. It is not the dispute. Which dispute did that charge open? is a dispute id and a reason. A dispute amount is not a payout amount. It is not the refund. Which refund did that charge get? is a refund id. A refund can succeed while this payout is still pending. It is not the checkout session. Which session did that checkout open? is a session id and two statuses. A session can be complete before any payout exists.

None of what follows is a rate for this product, and none of it is legal advice. The fields below are one processor's current description of a payout. The counts below that are one researcher's description of UK business payments, plus the table that researcher printed. A status enum is not a census of your customers. A paper that never opened your balance cannot name the payout on the charge you took tonight. They do tell you which numbers people mix up when they try to sound precise about a payout they have not opened.

Stripe's sample payout prints id po_1OaFDbEcg9tTZuTgNYmX0PKB, object payout, amount 1100, currency usd, and created 1680648691. 1100 is an integer in the smallest currency unit. The page does not print a dollar sign next to it. Do not rewrite 1100 as a price you prefer. 1680648691 is a Unix timestamp on an example. It is not a count of payouts. arrival_date is 1680652800. Subtract created from arrival_date and the difference is 4109 seconds. 86400 seconds is one day. 4109 is not 86400, so the sample gap is not one day, and it is not the two business days a card sentence on another page likes to recite. 3600 seconds is one hour. 4109 is not 3600. The remainder after one hour is 509 seconds. 4109 is also not the amount 1100. The sample's balance_transaction is txn_1OaFDcEcg9tTZuTgYMR25tSe, 28 characters. The payout id is 27 characters. The destination ba_1MtIhL2eZvKYlo2CAElKwKu2 is also 27. 28 is not 27. livemode is false. automatic is false. method is standard. status is pending (Stripe, The Payout object).

The status names and the list filter are not one list. The object says the status is paid, pending, in_transit, canceled, or failed. Five names. pending means it has not been submitted to the bank. in_transit means it has. paid means the transaction succeeded. failed or canceled can follow, and the same sentence says that change can happen within 5 business days. 5 business days are not 4109 seconds. The same paragraph says some payouts that fail might initially show as paid, then change to failed. paid is not a promise that the status will stay paid. The list endpoint's status filter names pending, paid, failed, or canceled. Four names. in_transit is on the object and not on the filter. A payout whose status is in_transit is a status the object documents and a filter the list page does not offer. Do not drop in_transit because the filter forgot it, and do not add a sixth name because a dashboard uses a friendlier word.

source_type and type are not the same field, and the sample uses both. source_type can be card, fpx, or bank_account. Three names. type can be bank_account or card. Two names. The sample's source_type is card and its type is bank_account. card on the source is not card on the type, and bank_account on the type is not the source. fpx is a source type. It is not a type. reconciliation_status can be completed, in_progress, or not_applicable. Three names. The sample is not_applicable. The attribute text says listing the balance transactions inside a payout is supported for standard automatic payouts. The sample's method is standard and its automatic flag is false. not_applicable is consistent with a payout that is not automatic. It is not the status completed, and completed is not paid. method is standard or instant. Two names. instant is not standard. failure_code, failure_message, and failure_balance_transaction are null on the sample. A null failure code is not a failure you invent. description is null. statement_descriptor is null. original_payout is null. reversed_by is null. metadata is an empty object. Empty is not a missing payout.

The create call returns the same id, and its limits are not the sample's amount. The request sends amount 1100 and currency usd. The response is the same object, including arrival_date 1680652800 and created 1680648691. Creating the example did not produce a second payout. The version header on that request is 2026-10-28.endive. That string is 17 characters. It is not 4109, and it is not po_1OaFDbEcg9tTZuTgNYmX0PKB. statement_descriptor, if you set one, has a maximum of 22 characters. For US ACH payouts the same page says the NACHA field is limited to 10 characters, and Stripe truncates a longer descriptor. 22 is not 10. The sample's statement_descriptor is null, so neither limit was used. Do not copy 22 onto the amount, and do not copy 10 onto 1100. A descriptor you have not set is null. It is not the word PAYOUT (Stripe, Create a payout).

The list call is a third page, and it does not show a different payout. The request sets limit to 3. The response object is list, has_more is false, and data holds one payout. That one payout is po_1OaFDbEcg9tTZuTgNYmX0PKB again. 1 is not 3. The parameter text says limit can range from 1 to 100, and the default is 10. 3 is not 10, and 10 is not 100. A page that asked for three and returned one is not a ledger of three payouts. If has_more is false, the next page is not hiding a second id. Do not invent a second id so that the three proofs feel complete. A different payout is one whose id is not this one, in an account you administer. The documentation's list is not that second payout (Stripe, List all payouts).

The study people reach for when they want a settlement delay did not open a processor console. Kerstin Hotte, at KEDGE Business School, used anonymised UK business payments from 2015 to 2023 and compared them with GDP and input-output tables. The abstract prints 2015–2023. The figure note prints August 2015 to December 2023. August is not January. The whole of 2015 is not the months from August. The paper is arXiv:2407.14776, version 2, dated 13 May 2025, and the header also prints 14 May 2025 as the manuscript date. 13 May is not 14 May. Neither date is the sample's created integer 1680648691 (Hotte, Mapping the disaggregated economy in real-time).

The UK Finance counts she cites are three different numbers. She prints 40.4 billion payment counts in the UK in 2021, of which businesses made about 5.5 billion, with 3 billion being business-to-business. 5.5 is not 3. 40.4 is not 5.5. Her data, she writes, covers 2.6% of all business-to-business transactions if measured as counts. 2.6% of 3 billion is 78 million. The page does not print 78 million. Do not cite 2.6% as if it were 78 million, and do not cite 78 million as if she had counted your payouts. The same paragraph says the transferred value was more than £1.2 trillion in 2021, against UK nominal GDP of £2.28 trillion in 2021. 1.2 is not 2.28. 2.6% of 2.28 trillion is 0.05928 trillion, not 1.2. The count share is not the value share. 1.2 divided by 2.28 is about 0.526. The page does not print 52.6%, and 52.6% is not 2.6%.

The fee table and the prose do not use one interval. Table 1 prints Bacs fees of £0.05-0.5, a limit of £20 million, and 3-5 days until clearing and settlement. The prose later prints Bacs fees of £0-0.5. 0.05 is not 0. The lower end moved, and the page does not say it moved. Faster Payments, in the table, is immediate clearing, a limit of £1 million, and fees of £1-5. The prose calls the same scheme near-to-real-time. immediate is not near-to-real-time. A footnote says the Faster Payments maximum was lifted from £250 thousand to £1 million in early 2023. 250 times 4 is 1000, so the new cap is four times the old one when both are read in thousands. The page does not print four. £20 million on Bacs is not £1 million on Faster Payments. CHAPS fees in the table are £12-35, and the table says CHAPS has no transaction limit. £12 is not £0.05. Card fees are printed as 2-6% of transaction value plus additional charges. 2% is not £0.05. SWIFT is up to 7 days, with fees of £20-40 or 3-5%. 7 days is not 3-5 days. 3% is not £0.05.

The sample inside the paper is not the UK Finance total. The Bacs extract is an unweighted sample of about 117,000 service users and about 22.1% of the value of Bacs payments in 2023. 117,000 is not 78 million, and 22.1% is not 2.6%. 2023 is not 2021. Businesses reach Bacs in three ways: their own Service User Number, a bureau that still uses their number, or a provider that uses its own number. Three ways. The instruments are Direct Debit and Direct Credit. Two names. Three is not two. She prints the average transaction value in the data as about £16.200 in 2023. That is the figure on the page. It is not 1100, and it is not 4109. Do not rescale it into cents so that it looks like the Stripe sample. Faster Payments, separately, reached an aggregate of almost £2 billion in the 2020s. £2 billion is not more than £1.2 trillion. A scheme total is not a payout id.

Do the three proofs on one real payout, in the console that actually holds it. First, the binding. Copy the payout id, the status, the amount, the currency, the arrival_date, and the balance transaction id. If status is pending, write pending. Do not rewrite it as paid because the bank app already shows a deposit. If automatic is false, write false. If source_type is card and type is bank_account, write both. Do not collapse them into one word. If the gap between created and arrival_date is 4109 seconds on an example, that example is not your payout. Second, the other payout. A different payout, with a different id, is not this one. A chart of UK payment counts is not that second payout. If you cannot show a payout that is not this one, you have a counter, not a record. Third, the other account. A list that belongs to someone else does not contain this payout id. If the only list is a single shared balance and you cannot say whose payout it is, write that. A tenant you cannot name is the finding.

Three moves feel like the proof and are a second problem. Marking the payout paid because the status was embarrassing, before you have copied the id. Changing a status does not tell you which payout you were looking at, and a sample that can move from paid back to failed is a reason to copy the status twice, not a reason to skip it. Quoting 2.6% because it looks precise, while the payout you were asked about is one row, and the payments that produced that percent had not opened your balance. Asking a model which of the five statuses it was. The model will pick a plausible name. It will not open the payout. An invoice you have not kept, while the customer is arguing about a charge, is which invoice did that charge pay?. Opening that screen does not name the payout id.

The path is ordinary when an operator can open one merchant's payout without opening the next merchant's balance as the way to prove it. PayOrch is a payment orchestration dashboard: wallets, providers, merchants, fees, and fraud controls in one view. The shape that matters here is one payout you can point at, in an account you administer, distinct from the next payout. That case is not a payout ledger. Nothing in the description is a headcount, a duration, or a result figure. If the only control on the screen changes every merchant's balance together, you do not have this proof. You have a totals page.

There is a version of this afternoon where hiring the path is the wrong purchase. Nothing has been charged, because the product does not take money yet. You have no product. You are still choosing who will build, and the document in front of you is a term sheet. The criteria for that choice sit on the page written for a top SaaS development company. That page is criteria. It does not rank anyone, including us. The only fact in the room is a share from a paper. 2.6% is not your payout, and 1100 is not your payout. A customer has already seen another customer's payment. Naming a status does not close a leak. Or you wanted a lawyer to say whether a network rule applies. Hire the lawyer.

When the charge is real and the console cannot name the payout, the missing object is specific. An admin action, in an account you administer, that shows one payout id, one status, and one amount, shows a different payout that is not that one, and shows another account's list without it. A startup software development company that expects this will have put that action next to the rest of the billing screen, before a stranger's complaint is the way you discover the vendor owns the payout. One that needs a call in order for you to see which payout is stored is telling you who holds the bank line. If the first slice is a fixed capability, an AI integration sprint is the shape where the acceptance sentence can include the three proofs. If you do not yet know which system stores the payout, a two-week AI readiness assessment maps the systems. The findings are yours. They are not a promise that a paper's share applies, and they are not 1100.

The ruleset a push hit, and the container that code used, are different objects: which ruleset did that push hit? and which container did that code use?. Do not record either on this page. A ruleset id is not a payout id. A container id is not a payout status. The product a price sells is a different object: which product did that price sell?. Do not record it here. A product id is not a payout id.

Before you tell them the bank was paid, do the three proofs and write the status. Name the payout, the status, and the amount, or write that no payout was stored. Show a different payout that is not that one. Show another account's list that does not hold it. Do not mark it paid to avoid reading the status, and do not ask a model which of the five it was. A paper can tell you how UK payment schemes differ on days and fees. The binding is the payout you can defend.

Questions

Three records, in a console you administer. The payout id, the status, and the amount. A different payout whose id or amount is not this one. Another account's list that does not contain this payout. If any of the three needs the person who wired the bank account, you do not have the proof.

No. A percentage of someone else's business payments is not the id on this payout. A payout you can defend is the id, the status, and the amount, or a written line that the console does not store one. 2.6% of a national count is not status pending, and 1100 on a sample object is not your customer's amount.

When nothing has been charged, when you have no product, when you are still choosing a firm, when the only fact in the room is a paper's percentage, when a customer has already seen another customer's payment, or when you wanted a lawyer.

Find this useful? Tell Google to show you more of it.

Let's put AI to work in your business.

A 30-minute call. You bring the workflow or the roadmap — we'll tell you what's feasible, what it costs, and what we'd build first.

Book a call→