Quote Cancel Workflow

⛔ Old “GRFQ” Workflow

Successful Quote Cancellation

  1. API Request Returns 204 OK, no Response Body
  2. Event is sent to quote channel with kind: CANCELED
  3. Event is sent to quote_book channel with kind: REMOVED

Error Quote Cancellation

  1. API Returns 400
  2. No Websockets Messages

✅ New “OB” Workflow

Successful Quote Cancellation

  1. API Request Returns 202 OK, including action_id field with status: PENDING
  2. Event is sent to quote channel with kind: CANCELED
  3. Event is sent to quote_book channel with kind: REMOVED
  4. Event is sent to quote_status channel with matching action_id and success: true

Error Quote Cancellation - Quote Unavailable

  1. API Returns HTTP 400, Error 3308 “Unavailable Quote”
  2. No Websockets Messages

Error Quote Cancellation - Too Late to Cancel (Fails API Validation)

  1. API Returns HTTP 400, Error 3306 “Too late to cancel”
  2. No Websockets Messages

Error Quote Cancellation - Too Late to Cancel (API validation success, fails OrderBook Validation)

  1. API Returns HTTP 202 Accepted
  2. Event is sent to quote_status WebSocket Channel with Error 3306 “Too late to cancel”

💡 No WebSocket message is sent with the details of the pending quote, these details are only returned in the API Response

💬 Sample Messages

  • [DELETE] /quotes/{quote_id}/ API Response, Pending Quote Cancellation

    {
    "action_id": "7a27eaf2-fbb0-4163-8d23-e1a571df13cc"
    }
  • quote Channel, Successfully Cancelled Quote

    {
    "jsonrpc": "2.0",
    "method": "subscription",
    "params": {
    "channel": "quote",
    "data": {
    "kind": "CANCELED",
    "quote": {
    "side": "BUY",
    "status": "CLOSED",
    "maker": "PARA0",
    "product_codes": [
    "DO"
    ],
    "remaining_quantity": "25.3",
    "created": 1701395244088.892,
    "last_activity": 1701395290853.689,
    "legs": [
    {
    "side": "BUY",
    "price": "0.053"
    }
    ],
    "price": "0.053",
    "description": "Call 15 Dec 23 35000",
    "original_quantity": "25.3",
    "type": "LIMIT",
    "legacy_id": 50070251,
    "filled_quantity": "0",
    "id": "q_2Yv9ZpWB3Xg5tqClUyMx6Esjdlh",
    "rfq_id": 50000631,
    "client_order_id": "bcbb0fdf-3af6-4db7-9b04-00b133f3f803"
    }
    },
    "meta": {
    "seq_group": 2490988106,
    "seq_num": 12
    }
    }
    }
  • quote_book Channel, Successfully Cancelled Quote

    {
    "jsonrpc": "2.0",
    "method": "subscription",
    "params": {
    "channel": "quote_book",
    "data": {
    "kind": "REMOVED",
    "quote": {
    "legs": [
    {
    "side": "BUY",
    "price": "0.053"
    }
    ],
    "remaining_quantity": "25.3",
    "price": "0.053",
    "side": "BUY",
    "status": "CLOSED",
    "legacy_id": 50070251,
    "id": "q_2Yv9ZpWB3Xg5tqClUyMx6Esjdlh",
    "rfq_id": 50000631,
    "created": 1701395244088.892,
    "last_activity": 1701395290853.689
    }
    },
    "meta": {
    "seq_group": 80552588,
    "seq_num": 459
    }
    }
    }
  • quote_status Channel, Successful API Request

    {
    "jsonrpc": "2.0",
    "method": "subscription",
    "params": {
    "channel": "quote_status",
    "data": {
    "action_id": "4ce0a024-712b-4431-83a5-db28460c82c7",
    "kind": "cancel",
    "success": true
    },
    "meta": {
    "seq_group": 768255716,
    "seq_num": 6
    }
    }
    }