Skip to main content
This walkthrough provides a comprehensive guide to using the Block RFQ API.

Overview

Block RFQ enables institutional traders to:
  • Request quotes for large block trades
  • Receive competitive quotes from multiple market makers
  • Execute trades at negotiated prices
  • Manage allocations across multiple accounts
The Block RFQ system operates with two primary roles:
  • Taker: The user who creates the RFQ and requests quotes
  • Maker: The market maker who provides quotes in response to RFQs

Prerequisites

Before using the Block RFQ API, ensure you have:
  1. API Access: An API key with appropriate scopes:
    • block_rfq:read - Read-only access to Block RFQ information, quotes, and available makers
    • block_rfq:read_write - Full access to create and quote Block RFQs
  2. Account Setup: Your account must be configured for Block RFQ trading

Block RFQ Workflow

1. Creating a Block RFQ (Taker)

The taker creates a Block RFQ using the private/create_block_rfq method. This method allows you to:
  • Specify the instruments and quantities for each leg of the trade
  • Set optional hedge legs
  • Target specific makers or make it available to all makers
  • Add a label for identification
  • Configure pre-allocation across multiple accounts
Example Request:
{
  "method": "private/create_block_rfq",
  "params": {
    "legs": [
      {
        "instrument_name": "BTC-PERPETUAL",
        "amount": 100,
        "side": "buy"
      }
    ],
    "makers": ["maker1", "maker2"],
    "label": "My Block RFQ"
  }
}
Key Parameters:
  • legs: Array of trade legs, each specifying instrument, amount, and side
  • makers: Optional list of specific maker aliases to target (omit for all makers)
  • label: Optional user-defined label (max 64 characters)
  • trade_allocations: Optional pre-allocation across accounts
  • hedge: Optional hedge leg configuration
  • disclosed: Whether the RFQ is non-anonymous (taker and maker aliases visible)

2. Receiving RFQ Notifications (Maker)

Makers receive notifications about new Block RFQs through WebSocket subscriptions:
  • block_rfq.maker.{currency} - Notifications when new Block RFQs are created
  • block_rfq.maker.quotes.{currency} - Notifications about the state of your quotes
Example Subscription:
{
  "method": "public/subscribe",
  "params": {
    "channels": ["block_rfq.maker.BTC"]
  }
}

3. Adding Quotes (Maker)

Makers respond to Block RFQs by adding quotes using private/add_block_rfq_quote:
{
  "method": "private/add_block_rfq_quote",
  "params": {
    "block_rfq_id": 123,
    "price": 50000,
    "amount": 100
  }
}
Makers can:

4. Viewing RFQ State (Taker)

Takers can monitor their Block RFQs using: Note: After Block RFQ creation, there’s a 5-second grace period during which the taker cannot see quotes or trade the Block RFQ.

5. Accepting Quotes (Taker)

Once the taker has reviewed the quotes, they can accept a Block RFQ using private/accept_block_rfq:
{
  "method": "private/accept_block_rfq",
  "params": {
    "block_rfq_id": 123
  }
}

6. Canceling Block RFQs

Both takers and makers can cancel Block RFQs:
  • Taker: Use private/cancel_block_rfq to cancel their own RFQ
  • Maker: Quotes are automatically canceled when the RFQ is filled, expired, or canceled

Block RFQ States

Block RFQs can be in one of the following states:
  • open - The RFQ is active and accepting quotes
  • filled - The RFQ has been accepted and executed
  • cancelled - The RFQ was canceled by the taker
  • expired - The RFQ expired without being filled

Pre-Allocation

Block RFQ supports pre-allocation, allowing takers to split the total amount between different (sub)accounts. Each allocation must specify:
  • user_id (for direct allocation) or client_info (for broker allocation)
  • amount - The allocated amount
  • fee - Optional fee for the allocation
Example:
{
  "trade_allocations": [
    {
      "user_id": 12345,
      "amount": 50,
      "fee": 0.001
    },
    {
      "user_id": 67890,
      "amount": 50,
      "fee": 0.001
    }
  ]
}

Market Maker Protection (MMP)

Block RFQ supports Market Maker Protection (MMP) to prevent quote manipulation. MMP can be configured separately for Block RFQ quoting and operates independently from normal order/quote MMP triggers. See Market Maker Protection for more details on configuring MMP for Block RFQ.

Subscriptions

Block RFQ provides several WebSocket subscription channels:

For Makers

  • block_rfq.maker.{currency} - New Block RFQ notifications
  • block_rfq.maker.quotes.{currency} - Quote state notifications

For Takers

  • block_rfq.taker.{currency} - Block RFQ state notifications (includes trades if filled)

Public

  • block_rfq.trades.{currency} - Recent Block RFQ trade notifications

Rate Limits

The following Block RFQ methods have specific rate limits: See Rate Limits for detailed information.

Error Handling

Common Block RFQ errors include:
  • too_many_quotes_per_block_rfq - Number of quotes for single block RFQ exceeded
  • too_many_quotes_per_block_rfq_side - Number of quotes per single block RFQ side exceeded
  • too_many_open_block_rfqs - Number of open block RFQs by taker exceeds configured max amount
  • account_quote_limit_crossed - Block RFQ quote limits set for the account were crossed
  • inverse_future_cross_trading - Placed block RFQ quote would cross trade inverse futures with block RFQ quote limits
See Error Codes for a complete list of error codes.

Best Practices

  1. Monitor Subscriptions: Subscribe to relevant Block RFQ channels to receive real-time updates
  2. Quote Management: Regularly review and update your quotes to remain competitive
  3. Error Handling: Implement proper error handling for rate limits and validation errors
  4. Pre-Allocation: Use pre-allocation to efficiently distribute large trades across accounts
  5. MMP Configuration: Configure MMP appropriately to protect against quote manipulation