Withdrawalfailed
Derived alias of withdrawal.updated for the two terminal states where the money did not arrive: failed (the
payout was returned, usually by the receiving bank) and denied (SideShift or the payout provider refused it).
Unlike withdrawal.completed, status is NOT normalized — read it to tell the two apart.
metadata.errorCode and metadata.errorMessage carry the underlying reason when the payout provider supplies
one, which is what makes this event triageable without asking the user what happened.
A canceled withdrawal is not a failure and is delivered on withdrawal.updated only. Both failed and
denied are terminal: the withdrawal will not transition again.
A withdrawal.completed subscription implies this event — if you asked to hear when a payout lands, you receive
the bounce too, with no subscription change. Ignore unknown type values and this is a no-op until you handle it.