Hi everyone, I’m hoping someone here can help me troubleshoot a pretty strange issue I’ve been running into with my website and how it handles payments through Monzo’s API. I’ve been building a site where users can order products and pay using Monzo integration, but the behavior hasn’t been consistent, and I’m struggling to pin down what’s going wrong.
The main problem is that when a user submits payment, sometimes the transaction shows up instantly in their Monzo app, but on my backend, the webhook either doesn’t trigger at all or arrives very late (like 10–15 minutes later). Because of that, my system marks the payment as incomplete, even though the customer has already been charged. This is leading to a lot of confusion and customer support messages.
I’ve double-checked my webhook URL configuration in the Monzo developer portal, and it looks fine. My server is responding with a 200 OK when I test locally, but when it’s live, I occasionally see failed delivery attempts in the logs. It’s inconsistent though — sometimes it works perfectly for several transactions in a row, and then randomly one fails or gets delayed. I can’t see a clear pattern.
I’ve also tried logging everything at the server level to make sure the issue isn’t on my side. Requests from other APIs I use (like Stripe and PayPal for testing) come in instantly, no problem. That makes me think this is either something specific about how Monzo webhooks behave, or maybe the way my site is handling the authentication tokens. I am currently refreshing tokens manually, and I wonder if that could be causing timing issues when the webhook tries to fire.
Another odd thing is that sometimes the transaction details I receive are missing fields like merchant.name or local_amount, which breaks parts of my parsing logic. I don’t know if that’s expected behavior when Monzo hasn’t fully processed the transaction yet, or if I’m missing some extra step to fetch the completed transaction data once the webhook is received.
Has anyone else run into similar problems with Monzo API/webhooks? Do you have best practices for making sure payments are processed smoothly and reliably? At this point, I’m considering implementing a backup check where I periodically poll the Monzo API for the latest transactions, but that feels like a workaround rather than a proper fix. Any guidance, examples, or even just confirming this is a common quirk would be hugely appreciated! Sorry for the very long post