All
Filter by:
How do I deposit cash into my account?
I need help with account verification
Why can't I access my account?
Are there any crypto withdrawal fees?
I need help signing into my account
Partial liquidations, along with the associated fees, will go live on March 26, 2026
On Kraken Derivatives, your account balance can never go below zero. This is thanks to our Equity Protection Process (EPP), an automatic safety system that manages risk on all open positions to ensure full market integrity.
Think of the EPP as your safety net. If a trade moves sharply against you and your account value drops too low, the EPP kicks in automatically to close out your position before you can owe more than you have.
The basics: Initial Margin and Maintenance Margin
EPP by product type:
The steps the EPP follows depend on which type of contract you're trading. Select your product below.
Coin-M contracts use a 3-step process:
Full Liquidation
Assignment
Unwind
Each step only activates if the previous one wasn't enough to fully close the position.
When your equity drops below the Maintenance Margin, Kraken automatically attempts to close your position by placing an Immediate-or-Cancel (IOC) order on the market. This order has a limit price set so that if it fills, your account will not go negative.
Important: If your position closes at a better price than the absolute worst-case (bankruptcy) price, you keep any remaining margin. Many other exchanges take your entire maintenance margin regardless, we don't.
Example: You're long 1,000 BTC-USD contracts, entered at $8,000. Your maintenance margin is 0.00125 BTC. When the mark price hits $7,481, your position enters liquidation. Kraken submits an IOC sell order at $7,407 — the price at which your account value would be just above zero. If the order fills at any price better than $7,407, you keep whatever is left over.
Sometimes a liquidation order can't be fully filled — for example, if there aren't enough buyers in the market at that moment. When that happens, the remaining contracts go through assignment: Kraken routes them to registered liquidity providers who have agreed to take on positions in these situations.
The assignment price is the zero-equity price, the level at which your account would be exactly at zero, so your counterparty on the original trade can keep their position.
Example: A client has two open long positions using the same margin account:
LONG 1,760,000 Contracts on PI_BTCUSD
LONG 300,000 Contracts on FI_BTCUSD_200228
When liquidation kicks in:
Position | Total Size | Liquidated via Market | Assigned to Liquidity Providers |
|---|---|---|---|
PI_BTCUSD | 1,760,000 | 1,007,379 | 752,621 |
FI_BTCUSD_200228 | 300,000 | 300,000 | 0 |
The FI contract sold entirely on the open market. The PI contract could only partially sell — so the remaining 752,621 contracts were assigned to liquidity providers.
You'll receive an email notification if your position is assigned. Liquidity providers are also notified immediately via WebSocket. The liquidity provider immediately receives the notification over WebSocket feed alerting them to the Assignment. The message takes this format:
Bash
{ "feed": "fills",
"username": "[email protected]",
"fills": [ { "instrument": "PI_XBTUSD",
"time": 1581026151,
"price": 9292.5,
"seq": 103,
"buy": true,
"order_id": "87755b99-bfb7-4f51-a72b-70f542f793a5",
"fill_id": "89f0f4f9-66b5-45eb-ba3f-6eeb2da5cadd",
"fill_type": "assignee",
"qty": 184317 } ]}REST API response format:
Bash
{ "result": "success",
"fills": [ {
"fill_id": "89f0f4f9-66b5-45eb-ba3f-6eeb2da5cadd",
"symbol": "pi_xbtusd",
"side": "buy",
"order_id": "87755b99-bfb7-4f51-a72b-70f542f793a5",
"size": 184317,
"price": 9292.5,
"fillTime": "2020-02-06T21:55:51.000Z",
"fillType": "assignee" } ... ]}To detect an assignment programmatically, look for fill_type: "assignee" (WebSocket) or fillType: "assignee" (REST).
Note: You can manage your assignment preferences in the Assignment Program section of the platform. You will never receive an assignment larger than your available margin can handle.
If no liquidity providers are available to take on the remaining contracts, those contracts are unwound. This means:
The unwind mechanism is designed to be fair. Unwind thresholds are set to cover approximately a 1-hour, 99th-percentile adverse price move — meaning the compensation you receive should be enough to re-enter a similar trade with no loss (and potentially a small profit).
Example: A client holds long positions in:
After lliquidation and assignment:
Position | Total Size | Amount Liquidated | Amount Assigned | Amount Unwound |
|---|---|---|---|---|
PI_ETHUSD | 2,920,000 | 2,007,379 | 751,605 | 161,016 |
FI_ETHUSD_210625 | 400,000 | 0 | 0 | 0 |
The remaining 161,016 contracts that couldn't be liquidated or assigned were unwound.
Counterparties whose positions are unwound receive an email notification and an immediate WebSocket alert.
WebSocket notification format:
Bash
{
"feed": "fills",
"username": "[email protected]",
"fills": [
{
"instrument": "PI_ETHUSD",
"time": 1623344903068,
"price": 1647.0,
"seq": 1,
"buy": false,
"qty": 10000.0,
"order_id": "9bae454b-ec93-43f8-b31c-33d3881fe7ae",
"fill_id": "1298e9ed-4284-43b9-ab9e-0d93591efb36",
"fill_type": "unwindCounterparty",
"fee_paid": -0.00182149362,
"fee_currency": "ETH"
}
]
}REST API response format:
Bash
{
"result": "success",
"fills": [
{
"fill_id": "1298e9ed-4284-43b9-ab9e-0d93591efb36",
"symbol": "pi_ethusd",
"side": "sell",
"order_id": "9bae454b-ec93-43f8-b31c-33d3881fe7ae",
"size": 10000,
"price": 1647,
"fillTime": "2021-06-10T17:08:23.068Z",
"fillType": "unwindCounterparty"
}
]
}To detect an unwind programmatically, look for fill_type: "unwindCounterparty" (WebSocket) or fillType: "unwindCounterparty" (REST).
How are unwind counterparties chosen?
When contracts are unwound, the system selects counterparties on the opposite side (e.g., short positions when a long is being unwound), ranked from highest to lowest priority. The ranking is calculated separately for long and short positions using:
Rank score:
Positions with the highest rank score are targeted first.
Position Value = [absolute(Size/Price)] (inverse)
Return on Equity = [PnL/IM]
Effective Leverage = [Position Value/Portfolio Value]
Rank (1,2,3...)-- Separate for LONG and SHORT:
if negative: [RoE/Effective Leverage]
if positive: [RoE*Effective Leverage]
E.g. When a long position is unwound, it targets the positions of short by highest rank (1 first, 2 second, 3 third, etc.) until fully unwound.
The Multi-M EPP follows five main steps:
Partial Liquidation
Full Liquidation
Assignment
Covered Liquidation
Unwind
If your Margin Account Equity is below the maintenance margin threshold but above the Liquidation Margin, then before triggering a full liquidation the system attempts to restore your Margin Account Equity by partially closing your position in 10% increments. This continues until either your equity is restored above Maintenance Margin or the position is fully closed.
A Partial Liquidation Fee is charged on each filled iteration where the fill price is more favorable than the Zero Equity Price. The fee is the difference between the fill price (capped at Mark Price) and the Zero Equity Price, multiplied by the quantity filled.
Example: You're long 10 PF_BTCUSD contracts at a Mark Price of $20,000. Margin Account Equity is $1,900 against a Maintenance Margin requirement of $2,000 but above the Liquidation Margin.
Iteration 1: 1 contract is closed at $19,820. Fee charged: $10 (excess above Zero Equity Price of $19,810). Equity is now $1,710
Iteration 2: 1 contract is closed at $19,850. Fee charged: $40. Equity is now $1,520
Iteration 3: 1 contract closes at exactly the Zero Equity Price. No fee charged. Equity is now $1,330
Iteration 4: 1 contract closes at $20,100, above Mark Price. Fee is capped at the Mark Price, giving an excess of $190 above the Zero Equity Price. Fee charged: $190. The remaining $100 above Mark Price is retained by the trader. Equity is now $1,240
Iteration 5: Equity of $1,240 exceeds Maintenance Margin of $1,200. Partial liquidation process is completed.
In total, 4 contracts were closed for $79,580 in notional value, with $240 in fees charged.
Same core concept as a Coin-M liquidation, with one key difference: a Full Liquidation Fee is applied when this step is triggered. The fee equals half of the minimum Maintenance Margin percentage for the contract. (ex. for PF_XBTUSD, the liquidation fee is 0.5%, half of the 1% minimum MM).
Example: You're long 10 PF_XBTUSD contracts at an entry price of $20,000. Total position value: $200,000. Your maintenance margin is $2,000.
Liquidation triggers when the mark price hits $19,200
A liquidation fee of $1,000 (0.5% × $200,000) is debited immediately
An IOC sell order is submitted around $19,100, the price where your margin equity would be zero.
Same process as Coin-M, with one difference in pricing: in Multi-M, if the Derivatives Liquidity Pool has sufficient funds, the assignment price will be set within 0.75%–2.5% from the mark price (rather than strictly at zero-equity). If the pool doesn't have enough funds, it defaults to the zero-equity price.
Example: A client holds:
- 10 contracts on PF_XBTUSD
- 3 contracts on FF_XBTUSD_230728
Position | Size | Amount Liquidated | Amount Assigned |
|---|---|---|---|
PF_XBTUSD | 10 | 8 | 2 |
FF_XBTUSD_230728 | 3 | 3 | 0 |
The WebSocket and REST response formats are identical to Coin-M, look for fill_type: "assignee" / fillType: "assignee".
Note: You can manage your assignment preferences in the Assignment Program section. You will never receive an assignment your available margin cannot handle.
This step is unique to Multi-M. If assignment fails to place all remaining contracts, and the Derivatives Liquidity Pool has enough funds to cover the shortfall, and the current market spread is less than 4%, Kraken will attempt one more liquidation using the pool's funds.
This works by submitting another IOC order with its limit price set 5% away from the best bid/ask price. If it fills, the pool covers any additional losses by crediting the margin account, ensuring your balance doesn't go negative.
If the pool doesn't have sufficient funds, the process moves on to the final step: Unwind.
Example: A client holds:
- 50 contracts on PF_ETHUSD
- 15 contracts on FF_ETHUSD_230728
Position | Size | Amount | Amount | Amount Liquidated (covered) | Amount |
|---|---|---|---|---|---|
PF_ETHUSD | 50 | 30 | 15 | 5 | 0 |
FF_ETHUSD_230728 | 15 | 15 | 0 | 0 | 0 |
If, for whatever reason, the covered liquidation is unable to be executed, then the remaining contracts undergo an "unwind". This means that the contracts between you and your counterparties end and that the remaining portfolio value of the margin account is transferred to your counterparties. An unwind of one margin wallet will not affect any other margin wallets.
Example Unwind
Let's assume that there is a user whose current positions are:
- LONG 50 Contracts on PF_ETHUSD
- LONG 15 Contracts on FF_ETHUSD_230728
Both these positions are cross margined using the Multi-M margin wallet, which measures the risk in realtime, valuing the collateral vs position value, to determine whether to liquidate.
Once the Multi-M wallet margin equity is below the maintenance margin requirement for both positions, liquidation occurs and the system sells those positions into the orderbook at the 0-equity imputed price for each contract.
In this case, the user's liquidation plays out as follows:
Position | Size | Amount | Amount | Amount Covered Liquidation | Amount |
|---|---|---|---|---|---|
PF_ETHUSD | 50 | 30 | 15 | 3 | 2 |
FF_ETHUSD_230728 | 15 | 15 | 0 | 0 | 0 |
If covered liquidation also fails, the remaining contracts are unwound, same as in Coin-M. Contracts are cancelled, remaining portfolio value is transferred to counterparties, and the unwind does not affect any other margin wallets.
The WebSocket and REST formats are identical to Coin-M, look for fill_type: "unwindCounterparty" / fillType: "unwindCounterparty".
How are unwind counterparties chosen?
Same ranking logic as Coin-M, but Position Value is calculated differently for Multi-M (USD-margined):
Rank score: