In normal operation, funds should not be locked forever. Transfers either complete, get refunded, or clearly fail. However, protocol bugs, chain issues, or incorrect user input (e.g., wrong address, edited PSBT) can still cause irrecoverable loss in edge cases.
How we represent your transfer
When you query the /status endpoint with your source/destination txHash (or transactionId), you'll see:
- Status: PENDING, DONE, NOT_FOUND, INVALID, or FAILED
- Substatus:
- For PENDING:
- WAIT_SOURCE_CONFIRMATIONS
- WAIT_DESTINATION_TRANSACTION
- BRIDGE_NOT_AVAILABLE
- CHAIN_NOT_AVAILABLE
- REFUND_IN_PROGRESS
- UNKNOWN_ERROR
- For DONE:
- COMPLETED
- PARTIAL
- REFUNDED
- For FAILED:
- OUT_OF_GAS
- SLIPPAGE_EXCEEDED
- INSUFFICIENT_ALLOWANCE
- INSUFFICIENT_BALANCE
- EXPIRED
- UNKNOWN_ERROR
- For PENDING:
Interpretation:
- DONE + COMPLETED: Transfer finished as requested.
- DONE + PARTIAL: Full value received, but in a different token than expected.
- DONE + REFUNDED: Funds were returned on the source chain / refund address.
- PENDING + REFUND_IN_PROGRESS: A refund is being executed; should later become DONE + REFUNDED.
- FAILED + substatuses: Transfer could not be completed; recoverability depends on the bridge and exact on-chain state.
How refunds work in practice
- Automatic bridge refunds: Some bridges auto-refund if the destination leg cannot be executed. We surface this as REFUND_IN_PROGRESS → REFUNDED.
- LI.FI-triggered refunds: For some tools (e.g., cBridge flows with NOT_PROCESSABLE_REFUND_NEEDED), LI.FI executes a refund transaction from a refund wallet on the source chain.
Bitcoin & Chainflip
Bitcoin-based flows, especially Chainflip, are more fragile. Chainflip requires a strict Bitcoin output order:
- 1st output: Bridged amount to the bridge depositor address
- 2nd output: OP_RETURN containing the memo with bridge-specific and LI.FI tracking details
- 3rd output: Refund output back to sender's address (mandatory for Chainflip)
Our PSBT builder enforces this structure. If the transaction would be unsafe (e.g., insufficient UTXOs for a proper refund output), the API may return an error before anything is sent.
If you manually edit the PSBT or raw Bitcoin transaction (reorder/remove outputs, change values, broadcast via another wallet), the bridge may never recognize your deposit. In that case, funds can be permanently lost and are not recoverable by LI.FI or the bridge.
Bottom line: For Bitcoin/Chainflip, do not hand-edit PSBTs or "optimize" outputs; let the integration build and broadcast the transaction.
When to reach out
- Still PENDING after a few hours, especially with UNKNOWN_ERROR or no movement between substatuses.
- FAILED and you're not sure if/where a refund landed.
- Bitcoin/Chainflip transfer where you edited the PSBT or see an unexpected status.
Want to know more? These pages may help: