"Don't assume "unknown" means "good". Assume the opposite." Ding! We have a winner.
"This API at the time retuned only 200s where the body had a message to be parsed which indicated success / status message / error." - and that's how you got yourself into this mess in the first place.
What I would really like to know is how the financial loss compares to the loss if Uber had handled the situation "correctly", i.e. stopped the transactions. I mean, is a restaurant really better off turning customers away all day, vs giving them free food all day? And if so, by how much?
[1] i.e that idempotency means always getting the same response, as opposed to the usual meaning which is that repeating the request n times leaves the system in the same state as the first time.
There should be a catch-all for errors and that should certainly not default to 'success'.
Now, if the API provider really did change the API to return something new that is not an error this is indeed trickier. In general good design is to check specifically for success and to deem everything else a failure, which avoids this sort of surprise.
It seems the safest option is whenever there is a new API state, a major version bump is needed
I also find it rather hilarious that the author of the thread then tries to shift the 'blame' to "growth!"...