Webhooks carry custom_data, so callers who only ever saw payments arrive never
noticed that reading a transaction back threw it away. Anyone reconciling out of
band — a webhook that never landed, a status check after the browser closed —
got a payment with no way to tell what it was for.
The SDK types custom data loosely enough that a transaction created elsewhere
can hold a shape we did not write, so anything that is not a string-keyed array
reads as absent rather than reaching the caller as a surprise.
Split from 33143addb0c37e697ae0249e4c9abf5f291fa02f