Skip to content
Seismic Orchestration

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

FieldTypeRequiredNotes
account_iduuidyesid 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_bpsnumbernoYour 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 that id exists 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_bps is over 10000, or set on a non-USD account.
  • 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"