> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.paradigm.co/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.paradigm.co/_mcp/server.

# 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"

> **Info**
>
> 💡 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

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

  ```jsx
  {
    "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

  ```jsx
  {
    "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

  ```jsx
  {
    "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
      }
    }
  }
  ```