> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.paradigm.co/unified-markets/o-bv-1/migrating-from-grfq/quote-cancel-window/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 } } } ```