Skip to content
Insights · Engineering

Which customer did that charge name?

Name the customer id on that charge, or write that the field is null. A different charge can name someone else, and another account does not list this one.

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

A customer says a charge is not theirs, or says the receipt went to someone else. Tonight, three proofs, in a console you administer. Name the customer on that charge: the charge id, and the customer id, or a written line that the customer field is null. Show a different charge whose customer id is not this one, or whose customer field is null when this one is not. Show another account's list that does not contain this charge. If any of the three needs the person who wired checkout, you have not named the customer. You have an amount and a guess.

This is the customer id on one charge. It is not the card. Which card did that charge use? is the brand and the last four. A last four can be right while the customer field is null, and a customer id can be right while the brand is not the one they remember. It is not the refund. Which refund did that charge get? is a refund object against a charge. A refund can exist while the customer field is still null, and a customer id is not a refund id. It is not the checkout session. Which session did that checkout open? is the session that started the payment. A session can name a customer the charge does not store, and a charge can name a customer the session page you opened does not. It is not the subscription status. Which status is that subscription in? is one of the names a subscription stores. A subscription can be active while this charge's customer field is null.

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 charge and of a customer, and the two samples are not the same object. The scores below that are a 2020 paper about predicting whether two clients at one bank will transfer money, after the names were removed. A customer id on an example is not a census of your buyers. A paper that never stored an email cannot name the customer on the charge you opened tonight. They do tell you which numbers people mix up when they try to sound precise about a person they have not opened.

Stripe's charge sample prints customer null. null is the value on that example. It is not an id, and it is not a name you are allowed to invent. The sample's id is ch_3MmlLrLkdIwHu7ix0snN0B15. That string is a charge. It is not a customer. The sample's payment_method is card_1MmlLrLkdIwHu7ixIJwEWSNR. A card id is not a customer id. amount is 1099, amount_captured is 1099, and amount_refunded is 0. 1099 is an amount in the smallest currency unit on an example. The page says the minimum amount is $0.50 US, which would be 50 of those units, and that the amount supports up to eight digits, for example 99999999. 50 is not 1099. 99999999 is not 1099. The page also says status is succeeded, pending, or failed. Three names. succeeded is not a customer. livemode is false, so the object is an example, not a live payment on your account. created is the integer 1679090539. That integer is not an email (Stripe, The Charge object).

The same charge sample leaves four other places a person might look, and all four are empty. billing_details.name is null. billing_details.email is null. receipt_email is null. receipt_number is null. A null name is not Jenny Rosen. A null email is not an address. receipt_url is a URL on the sample, and a URL is not a customer id. description is null. metadata is an empty object. An empty object is not a key you named the buyer with. payment_intent is null. A null payment intent is not a customer. disputed is false. false is not an id. Do not fill any of those nulls from a different page because the charge you were asked about feels incomplete.

The customer object is a second sample, and it does not sit on that charge. Its id is cus_NffrFeUfNV2Hib. 18 characters. The charge id is 27 characters. 18 is not 27, and the customer id does not appear on the charge sample at all. The customer sample's name is Jenny Rosen. 11 characters. The page says business_name has a maximum length of 150 characters, and individual_name has a maximum length of 150 characters. 11 is not 150. 150 on one field is not 150 on the other, and neither maximum is the name that was stored. The sample's email is jennyrosen@example.com. 22 characters. 22 is not 150, and it is not the 22-character statement-descriptor limit on the charge page. A length that happens to match a different limit is still an email on an example. The sample's invoice_prefix is 0759376C. 8 characters. next_invoice_sequence is 1. 8 is not 1. balance is 0. 0 is a balance on an example. It is not a count of customers, and a negative balance, which the page says means credit, is not the same field as a positive balance, which the page says means an amount owed. The sample's currency is null. A null currency is not usd on the charge.

The two samples were not created at the same second, and the customer sample does not belong to the charge sample. The customer created value is 1680893993. The charge created value is 1679090539. The difference is 1803454 seconds. 20 times 86400 is 1728000, and the remainder is 75454, so the gap is 20 days and 75454 seconds. It is not 21 days. 21 times 86400 is 1814400, which is larger than 1803454. Do not call the gap three weeks. livemode is false on the customer as well. Two examples in test mode are not one live buyer. delinquent is false. The page says paying an invoice sets delinquent to false, and so does marking an invoice uncollectible, and an automatic payment failure sets it to true. false on an example is not a receipt. tax_exempt is none. The enum is exempt, none, or reverse. Three names. none is not null, and reverse is not exempt. preferred_locales is an empty array. Empty is not the language en. The page also documents customer_account as a separate nullable id, an Account representing a customer. A customer_account is not the customer field on a charge. The charge sample does not print customer_account. Do not paste cus_NffrFeUfNV2Hib onto ch_3MmlLrLkdIwHu7ix0snN0B15 because both pages were open.

The study people reach for when they want a score about who is connected to whom is a different document, and it says the names were already gone. Valentina Shumovskaia, Kirill Fedyanin, Ivan Sukharev, Dmitry Berestnev, and Maxim Panov, at Skoltech and Sberbank, use transactions and transfers from one large European bank over five years. Each transaction is a timestamp, an amount, and a currency. The graph they describe has 86 million nodes and about 4 billion edges. 86 million is nodes. About 4 billion is the phrase they use for edges. About 4 billion is not 86 million. The split is the first three years, the fourth year, and the fifth year. 3 plus 1 plus 1 is 5. The credit-scoring slice later is approximately one hundred thousand clients, and they say it is a part of the initial dataset. One hundred thousand is not 86 million. A score on that graph is not the customer id on your charge (Shumovskaia, Fedyanin, Sukharev, Berestnev, and Panov, Linking Bank Clients using Graph Neural Networks Powered by Rich Transactional Data).

Table 1 prints two ROC AUC columns, and they do not move together. Common Neighbors is 0.398 on edge sampling and 0.629 out of time. Adamic-Adar is 0.391 and 0.646. Resource Allocation is 0.35 and 0.639. The table spells the next row Jacard Index, 0.284 and 0.62. Jacard is what the cell's row is called. Do not silently rename it and then treat the renamed row as a different paper. Preferential Attachment is 0.746 and 0.497. That row falls from the first column to the second. The rows above it rise. 0.746 is not 0.497, and 0.746 is not Adamic-Adar's 0.646. SEAL is 0.85 and 0.77. 0.85 is not 0.77. Table 2 repeats SEAL at 0.85 and 0.77, then WL-SEAL at 0.87 and 0.75, then 2-SEAL at 0.89 and 0.78. 0.87 is not 0.89. 0.75 is not 0.78. The prose says both WL-SEAL and 2-SEAL are superior to SEAL. On the out-of-time column, WL-SEAL's 0.75 is below SEAL's 0.77. Do not let the sentence replace the cell.

Table 4 is a summary, and it does not copy Table 1 or Table 2. Best heuristic is 0.646. That matches Adamic-Adar's out-of-time cell, and it does not match Preferential Attachment's 0.746. SEAL in Table 4 is 0.74. SEAL's out-of-time cell in Table 1 is 0.77. 0.74 is not 0.77. 2-SEAL in Table 4 is 0.79. 2-SEAL's out-of-time cell in Table 2 is 0.78. 0.79 is not 0.78. 2-SEAL-RNN in Table 4 is 0.858. Table 3, which is a different feature grid, prints 2-SEAL-RNN as 0.727, 0.804, 0.83, and 0.858. 0.858 matches the last of those four. It does not match the first three. Table 3's SEAL row is 0.62, 0.747, 0.74, and 0.76. 0.747 is not 0.74, and 0.74 there is the structural-labels cell, which happens to equal Table 4's SEAL number and does not equal Table 1's 0.77. The prose says the proposed models give a large increase, almost 0.1 in some of the cases. Almost 0.1 is their phrase. 0.858 minus 0.77 is 0.088, which is not 0.1, and 0.858 minus 0.646 is 0.212, which is not 0.1 either. Do not pick the subtraction you prefer and replace the phrase.

The credit-scoring paragraph is a third scale. Standard GCN is plus 0.8% Gini against an RNN on each user's transactions. GCN with the link-prediction attention is plus 1.4% Gini. 0.8 is not 1.4. 1.4 divided by 0.8 is 1.75, not 2. The prose says the attention almost doubles the effect of considering graph structure. Almost doubles is their phrase. 1.75 is the quotient of the two cells. Do not replace the phrase with the quotient, and do not replace 1.4 with 1.6 because doubling 0.8 would be 1.6. The hardware sentence is 1 GPU, 32 CPU cores, and 512 GB of RAM. 32 is not 512, and neither is a customer count. None of these cells is cus_NffrFeUfNV2Hib, and none of them is the null on the charge sample.

Do the three proofs on one real charge, in the console that actually holds it. First, the binding. Copy the charge id and the customer id. If the customer field is null, write null. Do not infer cus_NffrFeUfNV2Hib because a sample customer object prints it, and do not infer Jenny Rosen because a sample name prints it. If the email on the customer is absent, write that it was not stored. A billing name that is also null is a second empty field, not a substitute id. Second, the other customer. A different charge, with a different customer id or with null where this one has an id, is not this one. A chart of bank clients is not that second charge. If you cannot show a charge that is not this customer, you have a counter, not a record. Third, the other account. A list that belongs to someone else does not contain this charge id. If the only list is a single shared table and you cannot say whose charge it is, write that. A tenant you cannot name is the finding. It is not a reason to tell the buyer the customer was Jenny Rosen.

Three moves feel like the proof and are a second problem. Copying the email off the receipt because the customer field was embarrassing, and then describing the missing id as a cleanup. Quoting 0.858 because it looks precise, while the charge you were asked about is one row, and the study that printed 0.858 had already removed the names. Asking a model which customer was charged. The model will pick a plausible name. It will not open the charge. A card you have not kept, while the customer is arguing about the last four, is which card did that charge use?. Opening that screen does not name the customer id.

The path is ordinary when an operator can open one merchant's wallet without opening the next merchant's wallet as the way to prove it. PayOrch is a payment orchestration dashboard: wallets, providers, and merchants in one view, with a log an operator can read. The shape that matters here is one merchant you can point at, in an account you administer, distinct from the next merchant. That case is not a customer ledger. Nothing in the description is a headcount, a duration, or a result figure. If the only control on the screen shows a day's volume and will not name a customer id, you do not have this proof. You have a chart.

There is a version of this afternoon where hiring the path is the wrong purchase. Nothing is 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 score from a paper. 0.858 is not your charge, and null on a sample is not your charge. A customer has already seen another customer's record. Naming an id 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 customer, the missing object is specific. An admin action, in an account you administer, that shows one charge id and one customer id or an explicit null, shows a different charge that is not that customer, 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 buyer. One that needs a call in order for you to see which customer is stored is telling you who holds the charge. 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 charge, a two-week AI readiness assessment maps the systems. The findings are yours. They are not a promise that a paper's score applies, and they are not Jenny Rosen.

The workflow a run executed, and the category a moderation call flagged, are different objects: which workflow did that run execute? and which category did that call flag?. Do not record either on this page. A YAML path is not a customer id. A category score is not a charge.

Before you tell them the charge was theirs, do the three proofs and write the id. Name the charge and the customer, or write that the customer was null. Show a different charge that is not that customer. Show another account's list that does not hold it. Do not paste a sample name onto a null, and do not ask a model which of the buyers it was. A paper can tell you what a bank could predict after the names were removed. The binding is the charge you can defend.

Questions

Three records, in a console you administer. The charge id and the customer id, or a written line that the customer field is null. A different charge whose customer id is not this one. Another account's list that does not contain this charge. If any of the three needs the person who wired checkout, you do not have the proof.

No. A ROC AUC on someone else's bank graph is a score after the names were removed. A customer you can defend is the id on this charge, or a written line that the field is null. 0.858 is not a customer id, and Jenny Rosen on a sample object is not your buyer. null on the charge sample is not an id you may invent.

When nothing is charged, when you have no product, when you are still choosing a firm, when the only fact in the room is a paper's score, when a customer has already seen another customer's data, 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→