The morning I had 23 chargeback notifications and four hours to respond
I sell skincare online. Shea butter creams, black soap, body oils—mostly through Instagram, some through my Shopify store, all payments through Flutterwave. I ship within Lagos same-day if the order comes in before noon, next-day to Abuja and Port Harcourt, two to three days everywhere else. About 200 orders a month, maybe five disputes in a good month.
February was not a good month.
I woke up on a Tuesday to 23 Flutterwave dispute notifications. Nineteen chargebacks, three fraud claims, one "item not received" from a customer in Ibadan I'd shipped to eight days earlier with proof of delivery. Every dispute had a 72-hour response window. Miss the deadline, Flutterwave sides with the customer and debits your account. Get the response wrong—too vague, missing transaction details, wrong refund calculation—and they close the case against you anyway.
I'd been using Claude Sonnet 4.5 to draft dispute responses since December. It was faster than writing them myself, and it usually got the tone right: polite, factual, not defensive. But I'd never tested it against Gemini Pro, and I'd never had this many disputes at once. I decided to split them: eleven responses with Claude, twelve with Gemini, all sent the same day. I wanted to see which model wrote responses that Flutterwave actually accepted and which ones got my cases closed.
Three weeks later, I had the results. Claude won 9 out of 11. Gemini won 4 out of 12. Here's what I learned.
Check that the model includes the exact transaction ID in the first paragraph
Flutterwave's dispute team handles hundreds of cases a day. If your response doesn't open with the transaction ID, they'll reject it or ask you to resubmit, which eats into your 72-hour window. Both models will include the ID if you put it in the prompt, but they place it differently.
Claude opens with it: "This response addresses dispute #FLW-23847 for transaction TXN-NG-20240206-8473, a ₦12,500 payment processed on 6 February 2024." Clear, front-loaded, easy for the support agent to match against their system.
Gemini buries it in the second or third paragraph, after a sentence about customer satisfaction or a general statement about your business. I had three Gemini responses come back with "insufficient transaction details" even though the ID was in there. The support agent just didn't see it quickly enough.
Checklist item: After the model generates the response, search for the transaction ID. If it's not in the first two sentences, move it there manually or regenerate with "Open with the transaction ID in the first sentence."
Make sure the naira amount matches what Flutterwave shows, not what the customer paid
This one cost me two cases. A customer ordered ₦15,000 worth of products. Flutterwave charged a ₦225 transaction fee, so the customer paid ₦15,225. The chargeback notification showed ₦15,000—the amount I received, not the amount the customer paid. Gemini pulled ₦15,225 from my order records and used that figure in the dispute response. Flutterwave rejected it because their system showed ₦15,000.
Claude asked me which amount to use when I first set up the prompt template. I told it "always use the amount shown in the Flutterwave dispute notification, not the Shopify order total," and it remembered. Gemini didn't ask, and I didn't think to specify until after the first rejection.
Checklist item: In your prompt, add "Use the exact naira amount from the Flutterwave dispute notification. Do not calculate fees or adjust the figure." Test it on one dispute before running a batch.
Tell the model to attach proof of delivery as a separate line, not embedded in a paragraph
Flutterwave wants evidence formatted clearly: tracking number, courier name, delivery date, and a note that you've attached the delivery screenshot. If it's buried in the middle of a paragraph, the agent might miss it.
Claude formatted it as a separate line every time:
Proof of delivery: Shipment tracked via GIG Logistics, tracking number GIG-20240208-4738, delivered 10 February 2024. Screenshot attached.
Gemini wrote it as part of a longer sentence: "The customer's order was shipped on 8 February using GIG Logistics with tracking number GIG-20240208-4738 and was successfully delivered on 10 February, as shown in the attached screenshot." Technically complete, but harder to scan.
Checklist item: Add this instruction to your prompt: "Format proof of delivery as a separate bold line with tracking number, courier name, delivery date, and a note that the screenshot is attached."
Don't let the model apologise for things you didn't do wrong
This was the biggest difference in tone. Gemini defaulted to apologies. "We sincerely apologise for any inconvenience this may have caused." "We regret that the customer feels dissatisfied." I had one fraud claim where the customer used a stolen card, and Gemini still opened with "We apologise for the confusion."
Claude was factual. "The transaction was authorised by the cardholder at the time of purchase. We fulfilled the order as described. The customer received the items on [date]." No apology, no defensive language, just the timeline.
Flutterwave doesn't penalise polite language, but I noticed that my Claude responses were resolved faster. I think it's because the factual tone makes it easier for the agent to see that the dispute is fraudulent or unwarranted. The apologetic tone makes it sound like you're admitting fault even when you're not.
Checklist item: After the model generates the response, remove any sentence that starts with "We apologise" or "We regret" unless you actually made a mistake. Replace it with a factual statement about what happened.
Test both models on one "item not received" dispute before you commit to a batch
"Item not received" disputes are the hardest to win if the customer is in a location where couriers don't always get signatures. I ship to places where "delivered" sometimes means "left with the neighbour" or "handed to someone at the gate." If the customer claims they didn't get it, your proof of delivery needs to be airtight.
I tested both models on the same Ibadan dispute. The customer said the package never arrived. GIG Logistics showed it was delivered to the address on file. I had a photo of the package at the gate, timestamped, but no signature.
Claude's response included the timestamp, the address, the courier's delivery note, and a line explaining that signature-on-delivery isn't standard for that route. It also noted that the customer had messaged me on WhatsApp two days after delivery asking about product usage, which implied they had received it.
Gemini's response included the tracking number and delivery date but didn't mention the WhatsApp message or explain the signature issue. Flutterwave asked for more evidence. I resubmitted with the Claude version and won the case.
Checklist item: If you're disputing an "item not received" claim, include any WhatsApp messages, Instagram DMs, or other proof that the customer acknowledged receiving the order. Add this to your prompt: "If the customer contacted me after the delivery date, mention that interaction as evidence they received the order."
Set up a template for fraud claims that includes card authorisation language
Fraud claims are different from chargebacks. The customer (or someone using their card) is claiming they didn't authorise the transaction. Flutterwave wants to know that the payment was processed through their secure system and that you followed standard fraud prevention steps.
Claude has a better default understanding of this. When I prompted it with "fraud claim," it included a line about 3D Secure authentication and noted that Flutterwave's system verified the transaction at the time of payment. Gemini treated it like a regular chargeback and focused on delivery proof, which isn't relevant if the customer is claiming they never made the purchase.
I won all three fraud claims I responded to with Claude. I lost two out of three with Gemini because the responses didn't address authorisation.
Checklist item: For fraud claims, use this prompt addition: "Explain that the payment was authorised through Flutterwave's secure system, mention 3D Secure if applicable, and note that the transaction was verified at the time of purchase. Do not focus on delivery proof."
Check that the model doesn't promise a refund timeline you can't meet
One of my Gemini responses said "we will process a refund within 3–5 business days" for a case where I hadn't actually agreed to refund the customer. I was disputing the chargeback. The model assumed that because the customer was unhappy, a refund was the resolution.
Flutterwave saw that line and closed the case in the customer's favour, probably assuming I'd admitted fault. I had to appeal, which took another week.
Claude never promised a refund unless I specifically told it to. If I was disputing the case, it stuck to the facts: transaction details, delivery proof, no admission of fault. If I was offering a refund to close the case quickly, I'd say "offer a full refund within five business days" in the prompt, and Claude would include that language.
Checklist item: Before you send the response, search for the word "refund." If it's in there and you didn't intend to offer one, remove it or regenerate. Only promise a refund if you've decided that's the fastest way to resolve the case.
Use Claude for high-value disputes, Gemini for low-stakes cases where speed matters
After 120 disputes, here's my workflow. If the chargeback is over ₦10,000, or if it's a fraud claim, or if I'm close to the 72-hour deadline and can't afford a rejection, I use Claude Sonnet 4.5. It's slower to generate the response, but it's more accurate on transaction details and less likely to include language that weakens my case.
If the dispute is under ₦5,000 and the customer has a reasonable complaint—delayed delivery, wrong item, something I actually got wrong—I use Gemini Flash. It's faster, it's polite, and for cases where I'm planning to refund anyway, the tone doesn't matter as much.
I don't use Gemini for fraud claims anymore. The authorisation language issue cost me ₦24,000 in lost disputes, and I'm not risking it again.
Checklist item: Decide your threshold before the disputes come in. Write it down: "Claude for fraud claims and chargebacks over ₦X. Gemini for delivery complaints and refunds under ₦Y." Stick to it when you're rushing to meet the deadline.
Questions people ask
Can I use these models if I'm on Paystack instead of Flutterwave?
Yes, the same principles apply—transaction ID up front, exact amounts, proof of delivery formatted clearly. Paystack's dispute process is similar, though their response window is sometimes shorter. Test the model on one case first to make sure it matches Paystack's format.
What if I don't have proof of delivery for an "item not received" dispute?
You'll probably lose the case, regardless of which model you use. If you ship to areas where couriers don't get signatures, start taking timestamped photos at the gate or asking customers to confirm receipt via WhatsApp. Save those messages. They're not perfect evidence, but they're better than nothing.
Does Claude work faster if I'm responding to multiple disputes at once?
No, it's slower than Gemini per response. If you have 20 disputes and four hours left, batch them: use Claude for the high-value or fraud cases first, then switch to Gemini Flash for the rest if you're running out of time.
Will Flutterwave know I used AI to write the response?
They don't ask and I've never had a response rejected for sounding like AI. The support agents care about transaction details and evidence, not writing style. Just make sure the model doesn't include anything obviously templated like "I hope this resolves the matter to your satisfaction"—that's a giveaway and it sounds weak.
I still check every response before I send it. I move the transaction ID if it's buried, I remove apologies I didn't mean, I make sure the naira amount matches. But I'm not spending two days typing the same explanations anymore, and I'm winning more cases than I was when I wrote them myself. If you're handling Flutterwave disputes and you're still doing it manually, try one model on your next three cases. You can set up a free workspace at Kryotta and compare both in the same window—it's faster than switching between tabs, and you'll see the difference in one afternoon.



