DEV Community

NovaAPI
NovaAPI

Posted on

The top-up left your wallet and the balance still says zero

The top-up left your wallet and the balance still says zero

You sent the money. The dashboard still shows zero. The instinct is to send it again — that is the single most expensive move available to you, because the first transfer is usually still in flight and now you have two of them.

Here is the order I would check things in, mostly because it is the opposite of the order people actually use.

1. Confirm the transfer left your side, not that you asked it to

An exchange withdrawal that is queued is not a transfer. Neither is a "success" screen with no transaction hash behind it. Open the withdrawal record and copy the hash — that string is the only thing anyone can look up. A screenshot of your exchange balance proves nothing to the other side; a hash resolves in seconds.

2. Compare the amount that arrived, not the amount you sent

This is where most "missing money" cases actually live. Exchange withdrawal fees are deducted before the transfer lands. You send ten dollars, nine dollars and forty cents arrives. If the provider credits what arrived, the balance is a bit short and everything worked correctly.

Worth knowing before you escalate: does the provider require an exact amount for the credit to fire? If it does, a short transfer can sit unmatched indefinitely while both sides assume the other is looking into it.

3. Check which network the money is on

Stablecoins exist on several chains and the same ticker on two chains is two different assets. A transfer on the wrong one is not slow, it is gone — no support process recovers it, and the person on the other end usually cannot even see it.

If a payment page says one network, and it does so in the body rather than a footnote, that is not decoration. It is the failure mode the operator has seen most.

4. Check whether the address was per-order

Some flows hand you a fresh address for each top-up so an incoming transfer has something to match against. If you reuse the address from a previous order out of habit, the money arrives but nothing ties it to the new one. The block explorer will show a confirmed transfer, and the provider's matching logic will show nothing at all. Both are true.

5. Only then ask a human

When you do, send the hash, the network, the exact amount, and the time in UTC. That is a five-line message someone can resolve. "I paid and it's not showing" is not, and it usually gets you a request for a screenshot, then a second request, and by then you have lost an afternoon.

What we changed because of this

We run a gateway, so we sit on the support side of these. Two decisions came straight out of it: you open the top-up order before the money moves, so an incoming transfer has something to match against; and we credit what actually arrives rather than failing an order over a withdrawal fee.

Neither is clever. They are just the failures that actually happen, as opposed to the ones that are easy to design for.

I wrote the longer version, with the checks laid out for a failed payment rather than a failed top-up, on our site: paying for a DeepSeek API key when the payment rails don't work.

We're NovaAPI — a reseller, not DeepSeek, and not an authorised partner.

Top comments (0)