Example assignment

Last updated: August 10, 2026

The assignment program is an alternative model designed to accommodate liquidity provision in high volatility periods. It functions as a step in the Equity Protection Process in which an unfilled liquidation will be assigned to volunteer Liquidity Providers at an undetermined price outside of the order book. This is designed to reduce friction in the liquidation process and avoid the bad client experience of simply breaking off open interest of profitable traders to offset poorly collateralized traders.

Below is an example in which a volunteer liquidity provider fills an unfilled liquidation via the assignment program. For details about the assignment logic itself, please see
Position Assignment System.

Lets assume that there is a client whose current positions are:

- LONG 1,760,000 Contracts on PI_BTCUSD

- LONG 300,000 Contracts on FI_BTCUSD_200228

Both these positions are using the main FI_BTCUSD margin account, which measures the risk in realtime, valuing the collateral vs position value, to determine whether to liquidate.

Once the margin account for the contract type is below the maintenance margin, liquidation occurs and the system sells those positions into the orderbook at the 0-equity imputed price for each contract.

In this case, the clients liquidation plays out as follows:

Position

Size

Amount Liquidated

Amount Assigned

PI_BTCUSD

1,760,000

1,007,379

752,621

FI_BTCUSD_200228

300,000

300,000

0


This means the entire FI_BTCUSD_200228 position of 300,000 Contracts was successfully sold into the orderbook to new counterparties who had existing bids.

However, the PI_BTCUSD position of 1,760,000 Contracts was only able to liquidate 1,007,379 successfully into the orderbook, with the remaining 752,621 unable to find a new counterparty.

As a result, this unfilled liquidation remainder is handled in the PAS by routing the LONG position to liquidity providers participating in the program based on individual preferences.

Below is an example notification for an Assignment of 184,317 Contracts allocated to "[email protected]". The client receives the following email (note that this format may change so do not rely on this formatting):

Selection_999_912_.png

The liquidity provider immediately receives the notification over WebSocket feed alerting them to the Assignment. The message takes this format:

{
"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
}
]
}

Additionally, the client may poll the REST API endpoint for fills to see:

{
"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"
}
...
]
}

The key fields in the responses are fill_type and fillType (for WebSocket and REST, respectively), which both take the value "assignee". This is the indication that should be used to programmatically handle the assignment.

Note:

- Set your preferences as you see fit on the Assignment Program section of the platform.

- You will not receive an Assignment that your available margin for the contract type can not handle.

The decimal and thousands separators shown in this article may differ from the formats displayed on our trading platforms. Review our article on how we use points and commas for more information.

Need more help?