Cosmos IBC Transfer Timed Out — Why Haven’t My Tokens Come Back?

 / 
2

Tokens not coming back is most often not because the "refund failed," but because the refund step has not yet been triggered or completed on the source chain. After an IBC transfer times out, the refund does not happen automatically. It requires a relayer to submit a timeout message (MsgTimeout) on the source chain. Only after the source chain processes this message will the tokens be released back to your address. Seeing "timeout" only means the packet has expired. It does not mean the refund transaction has already been put on-chain.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

How a timeout refund actually works

IBC transfers follow the ICS-20 standard. When you send tokens from Chain A to Chain B, the tokens are locked (or burned) on Chain A, and a packet is created and sent to Chain B. The packet carries a timeout timestamp or block height. If Chain B does not receive the packet before the timeout, the packet enters the "timeout" state.

But "timeout" is an on-chain event, not an automatic refund button. Someone, usually a relayer, needs to submit a MsgTimeout transaction on Chain A with the timeout proof. After Chain A verifies the proof, it runs the OnTimeoutPacket callback and releases the locked tokens back to the refund receiver address. The official Cosmos documentation clearly describes this path: a timed-out packet needs a relayer to submit a timeout message before the source chain will issue a refund.

So the situation you see — tokens not coming back — means one part of this chain has not finished yet: the relayer has not submitted the timeout message, the source chain has not yet confirmed the timeout transaction, or the relayer submitted it but the transaction failed. Skip's documentation has a status called TRANSFER_PENDING_ERROR, which is described as "an error occurred, refund pending." This status itself shows that the refund is a separate step that needs to be waited for.

What you should check now

First, confirm whether your transfer really only involves a transfer. If you used Skip Go or a similar aggregator route, the path may include a Swap. When a pure transfer fails, the tokens go back to the original address on the source chain. But if the path includes a Swap, the failure may happen before or after the Swap, and the final location of the tokens will be different. First confirm which tool and route type you used, then judge which chain the refund should appear on.

Check your address on the source chain block explorer. Find the transaction where you started the transfer and note the transaction hash. Then check the recent transaction history of your address on the source chain explorer and look for a timeout-related transaction, which may appear as MsgTimeout or a similar type. If that transaction exists and is confirmed, the tokens should already have been refunded. Check whether your wallet has added the correct token denom. If that transaction does not exist, it means the relayer has not submitted the timeout message yet.

If you used Skip Go or a similar frontend, use the source transaction hash to check its status in the Explorer. IBC transactions in pending state may take up to 24 hours to clear. If the status shows TRANSFER_PENDING_ERROR, it means the refund is queued. Keep waiting or contact that tool's Discord support.

Why a refund may look "lost"

There is one easily overlooked situation: the address the refund goes to may not be the same display location as the address you are currently checking. The receiver of an IBC refund is the address that initiated the transfer, on the source chain. If you are checking the balance in a wallet on the destination chain, of course you will not see it. Go back to the source chain wallet or block explorer and check using your source chain address.

Another situation is a token denom display issue. The refunded tokens may be the same denom you originally held on the source chain, but if the wallet does not index or display it correctly, the balance may look like zero. Checking the raw balance of the address in a block explorer is more reliable than looking at the wallet interface.

When you need to ask for help

If you have looked up your address on the source chain explorer but cannot find any timeout or refund-related transaction, and the time since you started the transfer has clearly passed the normal relayer delay — the IBC packet timeout itself may be set very short, but relayer processing can be delayed — then something has gone wrong in the relayer step. The official Cosmos documentation recommends opening a ticket in the Interchain Discord if you cannot locate the funds. When you go there, bring the source chain transaction hash, source chain name, destination chain name, token type, and amount. Do not just say "my tokens were not refunded." With this information, they can help you check the relayer status.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

References

  1. Cosmos Docs·Cross-chain Failure Cases, date: 2026-10-27
  2. Cosmos Docs·Transaction Support, date: 2026-10-27
  3. Cosmos Docs·Quickstart (IBC timeout path), date: 2026-10-27
  4. Cosmos Docs·Events (OnTimeoutPacket), date: 2026-10-27
  5. CosmWasm Docs·ICS20: Fungible Token Transfer, date: 2026-10-27