PUT /accounts/:id/liquidation
Point an auto-liquidating virtual account at a different crypto account, or enable auto-liquidation on a virtual account created without it. Fiat credited to the virtual account after the update is converted and settled to the new destination; deposits already in flight settle wherever they were headed when they arrived.
Enabling after creation is available only where the account supports it. can_enable_liquidation on the account says whether this endpoint will accept it; GET /customers/:id/liquidation-destinations reports the same for a customer and currency ahead of the create, plus which crypto accounts qualify as the destination. Where it isn't supported, a liquidation target can only be attached when the account is created.
To turn auto-liquidation off, use DELETE /accounts/:id/liquidation.
Request
| Field | Type | Required | Notes |
|---|---|---|---|
account_id | uuid | yes | id of the crypto account incoming fiat settles to. Must belong to the same customer and be finished provisioning. Its currency becomes the settlement currency. Must be the customer's own wallet — see First-party destinations. |
developer_fee_bps | number | no | Your fee on the auto-converted funds, in basis points (100 = 1%). USD only, at most 10000. Omit for no fee. |
The body is a full replace of the liquidation settings, the same shape as liquidation on account creation. Omitting developer_fee_bps clears any configured fee — resend the current value to keep it.
First-party destinations
An auto-liquidation destination must be the account holder's own wallet. A crypto account registered with account_holder.is_third_party: true is rejected with a 400, and GET /customers/:id/liquidation-destinations leaves it out of destinations. Use a crypto account registered as the customer's own.
Response 200
The updated account, with liquidation reflecting the new destination:
{
"id": "7d31…",
"kind": "fiat",
"origin": "virtual",
"currency": "USD",
"status": "active",
"liquidation": {
"account_id": "5e3a…",
"address": "0x1ab8…",
"currency": "USDC",
"developer_fee_bps": 50,
"can_turn_off": true
}
}Errors
- 400 Validation: auto-liquidation can't be enabled on this account (not supported for its currency, or the account is external).
- 400 InvalidAccountFields
liquidation.account_id: no crypto account with thatidexists for this customer. - 400 Validation: the referenced crypto account hasn't finished provisioning yet, so it can't be used as a liquidation target.
- 400 Validation:
developer_fee_bpsis over10000, or set on a non-USDaccount. - 400 Validation: the referenced crypto account is registered as a third party's; the destination must be the customer's own wallet.
- 400 Validation: the new target could not be applied to the account. Its liquidation settings are left exactly as they were; contact support.
- 404: unknown account id, or the account belongs to a different org.
Example
curl -X PUT "$SEISMIC_ORCHESTRATION_URL/v0/accounts/7d31…/liquidation" \
-H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"account_id": "5e3a…",
"developer_fee_bps": 50
}'Turn auto-liquidation off
DELETE /accounts/:id/liquidation stops auto-liquidation on a virtual account: the liquidation target and any developer_fee_bps are cleared, and future deposits stay in the account as balance. A conversion already in flight completes to its configured destination; only deposits arriving after the change are affected.
Not every auto-liquidating account can be switched off. liquidation.can_turn_off on the account says which; where it's false the request returns a 400 and the configuration set at creation stays in place. Turning it off on an account that doesn't auto-liquidate is a no-op. The response is the updated account with no liquidation block.
curl -X DELETE "$SEISMIC_ORCHESTRATION_URL/v0/accounts/7d31…/liquidation" \
-H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY"