Trade outcomes are deterministic. If a fill, liquidation, or cancellation looks wrong, the onchain record and the API will show the exact inputs.
Why was I liquidated?
A position is liquidated when account equity falls below maintenance margin. Open the liquidation record in Trade History; it shows the mark price, the maintenance requirement, and the liquidation size. The mark price can differ from the last traded price. See liquidations.
My TP executed at a loss although the trigger was profitable
The trigger uses mark price, but the fill uses book price. In a fast market, the book can gap through the trigger. A market TP guarantees execution, not price. Use a limit TP if you need a price floor, and accept that it may not fill.
My stop loss did not execute
Check the trigger direction. For a long, the stop must be below the mark; for a short, above. Also check that the order was reduce-only and that the position still existed when the trigger fired. If the position was already closed, the order was canceled.
Why was my chase order canceled?
A chase order cancels when the spread exceeds your maximum, the browser tab closes, the order fills, or the five-order limit is exceeded. It runs in the tab that created it; closing the tab cancels it.
What does "Action already expired" mean?
The signed action included an expiresAfter timestamp that has passed. Generate a new action with a future timestamp. An expired action still consumes rate-limit weight, so do not retry it blindly.
I cannot sell a leftover spot balance
The remaining size may be below the lot size. Spot dust can be converted to USDC from the spot screen, or swapped in a single transaction. If the market is halted, wait for it to resume.
My funding payment looks wrong
Funding is charged on notional at the hourly timestamp, not on entry price. Check fundingHistory for the exact rate and userFunding for your payment. A position opened after the timestamp does not pay for that hour.
Reconstruct a trade
Use the Info endpoint to fetch the exact records:
{ "type": "userFills", "user": "0xYourAccount", "aggregateByTime": false }Fills include closedPnl, fee, crossed, oid, tid, and time. Match the tid to the liquidation or order record for the full picture.
Account address, not API wallet
Use the account address that owns the position. Querying an API wallet address returns no fills.