# Signalplus RFQ (Bullish vs Deribit)

## Bullish RFQ API Migration Guide

The **Bullish RFQ API** is largely *plug-compatible* with **Deribit’s RFQ API**.\
We deliberately kept the same structures, authentication flow, and method shapes so migration work remains minimal.

> ✅ **Bottom line: it’s \~95% identical — only a few small tweaks:**
>
> * Topic string structure
> * AON-only execution
> * Quick WebSocket auth call after connect

***

### ✅ What’s the Same

#### Protocol & Authentication

* Uses the same **JSON-RPC** style.
* **HMAC signing** with timestamp and nonce concepts identical to Deribit.
* Your existing auth middleware is **fully reusable**.

#### Method Shapes

Core methods remain aligned in both **naming** and **payload structure**:

```
create_rfq
create_quote
edit_quote
cancel_quote
trade
get_trades
instrument discovery
```

#### RFQ & Quote Payloads

Concepts such as:

* `bids` / `asks`
* `maker`
* `price`
* `expiresAt`, `lastUpdatedAt`

…are **identical** between Bullish and Deribit.

***

### ⚙️ What’s Different (Migration Points)

#### 1. WebSocket Subscription Keying

| Platform    | Topic Format        | Example                           |
| ----------- | ------------------- | --------------------------------- |
| **Deribit** | topic per currency  | `block_rfq.taker.btc`             |
| **Bullish** | topic per accountId | `block_rfq.taker.{accountId}.any` |

> 🔧 **Action:** Update your topic builder logic from **currency → accountId**.

***

#### 2. Execution Instruction Scope

* Bullish supports **`AON` (All-or-None)** only.
* Deribit supported `APO` (Any-Part-Of) as well.

> 🔧 **Action:** Replace any `APO` paths with `AON`.

***

#### 3. WebSocket Authentication

* After opening the WS connection, call `private/auth` once.
* Signing inputs (key, timestamp, signature) are **identical** to REST auth.

> 🔧 **Action:** Add a one-time **auth call** immediately after connecting.

***

#### 4. Heartbeat (Optional)

Bullish exposes a lightweight `public/heartbeat` endpoint.

> 🩺 **Optional:** Ping once per minute and wire into your health-checker logic.

***

#### 5. MMP Controls

* Deribit surfaces RFQ-specific **MMP configs and events**.
* Bullish currently **does not** expose an equivalent.

> ⚠️ **Action:** Guard any Deribit-only MMP logic behind a **feature flag**.

***

### 🧭 One-Page Migration Checklist

| Task      | Action                                                                         |
| --------- | ------------------------------------------------------------------------------ |
| WS Topics | Change from `block_rfq.[role].{currency}` → `block_rfq.[role].{accountId}.any` |
| WS Auth   | Add one-time `private/auth` after connect                                      |
| Execution | Normalize `executionInstruction` to **AON**                                    |
| Signing   | Reuse existing auth/signing headers                                            |
| Heartbeat | (Optional) Integrate `public/heartbeat`                                        |
| MMP Logic | (Optional) Feature-flag Deribit-only logic                                     |
