Update2: Stripe sent an update and it sounds like Coinbase will credit the BTC to my Coinbase account soon:
In that instance, it appears Coinbase notified us that they received .00231463 instead of 0.1154481, and as a result this failed to trigger a mispayment on our side. That said, it has been confirmed that the mispaid funds have been located in a transfer between two Coinbase accounts, but have not been lost. I should be able to provide you with further update once as I hear more regarding the route in which the funds will be returned.
After two weeks of reporting an issue with Bitcoin where funds sent to Stripe simply went missing, Stripe and Coinbase have still not been able to put the Bitcoin back into my account.
It all began when I was doing a final test on the Bitcoin payment integration on our cloud hosting platform, where we use Stripe's Checkout.js Bitcoin support. I decided to test the live payment system to make sure that everything was working. My plan was simple:
It seemed fine all the way through step 6. The payment was received and then refunded successfully. I did accidentally make an overpayment, sending approximately $200 USD instead of $5 USD in Bitcoin, which was a pretty bad mistake, but it should have been fine -- according to Stripe's Bitcoin documentation, "when a source is charged, any unused bitcoin received in excess will be returned to the customer automatically". This usually works seamlessly, even if the Bitcoin transaction is not tagged with a refund address (in that case, Stripe will e-mail the user with a link to a webpage where they can input the destination address for the overpayment refund), and this is honestly really impressive because other Bitcoin payment processors that we have used in the past do not have a good solution for these cases.
But nope... the transaction was never refunded. In fact, it seems like Stripe never saw the overpayment:
(For overpayments, the Transactions section typically still shows the original payment amount.)
Yet, on my Coinbase account:
Well, this should be easy to sort out, right? After all, I can click the "See history on blockchain.info" to lookup the transaction on the Bitcoin public ledger and figure out what's going on -- if the transaction was for the small amount seen on Stripe, then I can contact them, and if it was the large amount seen on Coinbase, then I can contact Coinbase.
Unfortunately, for transactions between two Bitcoin addresses that are on the Coinbase network, Coinbase will perform an internal transfer of funds. The transaction is never pushed to the blockchain, avoiding the need to pay Bitcoin fees, and making payment confirmation instantaneous. Of course, it also makes the transaction more difficult to investigate. Stripe relies on Coinbase to process Bitcoin payments, so the "see history" button actually showed no transactions.
Still, both transactions are clearly displayed on my respective accounts, so I thought they would be able to quickly resolve the problem and refund me. I contacted both companies on 27 May 2017.
The initial response from Stripe didn't make much sense since the documentation says overpayments are refunded automatically (but, to be fair, my e-mail probably wasn't super-clear):
Date: 05/27/2017 02:47 AM
Thanks for getting in touch. I'd love to provide some documentation on how you can handle BTC mispayments--I know how worrying they can be!
As of right now, mispayments must be handled manually on the account holder's end. This can be partially automated with webhooks, but that's getting ahead of myself. I'd recommend reading through this section of our support library for information on how you can take care of this:
I know working with BTC can be a bit counterintuitive at times since it doesn't behave quite like a normal payment method, so please feel free to message me if you have any questions or anything comes up that you'd like to run by me. I'm only an email away!
But eventually, they understood the situation:
Date: 05/29/2017 01:42 PM
Thanks so much for passing this along -- that screenshot is incredibly helpful. To confirm, I went ahead an escalated this occurrence with our partners and will be sure to check in as I hear more from them. Looking forward to getting this resolved as soon as possible.
Update: I just want to clarify, Stripe's support team has been very responsive and I never doubted that the issue would eventually be resolved, I am just frustrated that it is taking so long and that it's not clear if the issue will be prevented in the future (but after posting this, Stripe said they would ensure this would not happen in the future).
Coinbase was, as I expected, quite a bit slower at responding:
Date: 06/06/2017 06:15 AM
I'm looking into this report that you've shared regarding the Bitcoin address '1PsuTeBpGPev9KXCRgf2Pg2AAB7cTgE2fB' related to the Order 'O9TPSCE4'.
I'll get back to you as soon as we have an update. Thank you for your patience.
But alas, I still haven't gotten an update, and the funds still aren't showing up anywhere. So, now it's been two weeks, and the 0.11313347 BTC is still missing.
The biggest problem, though, is that Stripe and Coinbase have not shown any indication that they understand how big of an issue this is. Stripe literally lost funds that were sent to them, but although they seem to be helpful and I'm hopeful I'll eventually get the BTC back, the response I would expect is more along the lines of "we'll look into this immediately and make sure that future overpayments from Coinbase users are correctly handled". Instead, from my side it seems like their focus has been to merely fix this one occurrence of the bug, meaning we'll have to go through this two-week-plus back-and-forth exchange again the next time it happens. It is especially unfortunate because Stripe's support is nevertheless ten times more helpful and one hundred times more competent than any other credit card payment processor.
(You can argue that this is probably an issue on Coinbase's side and not Stripe's, but fact is Stripe partners with Coinbase and funds sent with Stripe's Bitcoin support were lost.)