---
title: "Create RFQ Batch"
method: POST
path: "/communications/rfq_batches"
tags: ["communications"]
---

# Create RFQ Batch

`POST /communications/rfq_batches`

## Request

- Base URL: `https://external-api.kalshi.com/trade-api/v2`
- URL: `https://external-api.kalshi.com/trade-api/v2/communications/rfq_batches`
- Auth: API key in header `KALSHI-ACCESS-KEY` and API key in header `KALSHI-ACCESS-SIGNATURE` and API key in header `KALSHI-ACCESS-TIMESTAMP`

Request quotes on several combos at once, for example every parlay of a round robin. Each child is an ordinary RFQ on one combo market. Makers quote the whole batch, but each child is accepted from whichever maker quotes it best on your side, so the batch may fill from several makers. Accepting takes every child or none, and the children then execute together as one fill-or-kill: nothing trades unless every child can fill in full. In the rare case that filling one child cancels a maker order another child needed, the batch closes partially executed. Name each child's combo by its market ticker, or by its legs to look up or create the combo in mve_collection_ticker. Size each child with its own contracts_fp or target_cost_dollars, or set one on the batch for every child that has none; every child must be sized the same way, by contracts or by target cost. rest_remainder must be false, and FCM members cannot create RFQ batches yet (403 rfq_batch_unavailable). Makers also see each child as an ordinary RFQ, with rfq_batch_id set, and can quote it as a single RFQ; its best quote counts toward the batch's.

## Request body

- CreateRFQBatchRequest
  - `children` CreateRFQBatchChild[], required: The combos to request quotes on, one child RFQ each. Children must be distinct combos.
    - `market_ticker` string: Ticker of an existing combo market
    - `selected_markets` TickerPair[]: Legs of the combo, at most 6, looked up or created in the request's mve_collection_ticker as POST /multivariate_event_collections/{collection_ticker} does.
      - `market_ticker` string, required: Market ticker identifier.
      - `event_ticker` string, required: Event ticker identifier.
      - `side` 'yes' | 'no', required: Side of the market (yes or no).
    - `contracts_fp` string: Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts.
    - `target_cost_dollars` string: Fixed-point US dollar string. Most request fields accept 2-4 decimal places (e.g., "0.56", "0.5600"); responses emit up to 6. Valid quote intervals for a given market are constrained by that market's price level structure.
  - `mve_collection_ticker` string: Collection in which children given by selected_markets are looked up or created. Required when any child uses selected_markets.
  - `contracts_fp` string: Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts.
  - `target_cost_dollars` string: Fixed-point US dollar string. Most request fields accept 2-4 decimal places (e.g., "0.56", "0.5600"); responses emit up to 6. Valid quote intervals for a given market are constrained by that market's price level structure.
  - `target_cost_excludes_fees` boolean: Same as on Create RFQ, applied to every child. Only valid when the children are sized by target cost.
  - `rest_remainder` boolean: Must be false. A batch executes as one fill-or-kill, so no child rests a remainder.
  - `replace_existing` boolean: Close your oldest open RFQ batches as needed so this one can be created. Single RFQs are never replaced.
  - `obscure_creator_id` boolean: Same as on Create RFQ, applied to the batch and every child.
  - `client_batch_id` string: Optional key for this batch, unique among your RFQ batches, including those closed within the last seven days. Reusing one returns HTTP 409.
  - `subtrader_id` string: The subtrader to create the RFQ batch for (FCM members only; FCM members cannot create RFQ batches yet)
  - `subaccount` integer: The subaccount number to create the RFQ batch for (direct members only; 0 for primary, 1-63 for subaccounts)

## Response `201`

RFQ batch created successfully

- CreateRFQBatchResponse
  - `rfq_batch` RFQBatch, required
    - `id` string, required: UUID of the RFQ batch. Preserve the exact returned string.
    - `creator_id` string, required: Public communications ID of the batch creator, obscured for other users like RFQ.creator_id when obscure_creator_id was set. It is revealed once a child RFQ executes.
    - `status` 'open' | 'accepted' | 'closed', required: Status of an RFQ batch. An open batch takes batch quotes; an accepted batch is waiting for its winning makers to confirm or is executing; a closed batch is finished.
    - `created_ts` string, date-time, required: Timestamp when the RFQ batch was created
    - `accepted_ts` string, date-time: Timestamp when a batch quote on the batch was accepted
    - `closed_ts` string, date-time: Timestamp when the RFQ batch closed
    - `rfqs` RFQ[], required: The child RFQs, in the order they were requested
      - `id` string, required: UUID of the RFQ. Preserve the exact returned string.
      - `creator_id` string, required: Public communications ID of the RFQ creator (pseudonymous). When obscure_creator_id is enabled, other users receive the shared placeholder "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" (SHA-256 of empty input). The creator sees their normal ID. After successful quote execution, subsequent RFQ responses show the normal public communications ID to all viewers.
      - `market_ticker` string, required: The ticker of the market this RFQ is for
      - `contracts_fp` string, required: Fixed-point contract count string (2 decimals, e.g., "10.00"; referred to as "fp" in field names). Requests accept 0-2 decimal places (e.g., "10", "10.0", "10.00"); responses always emit 2 decimals. Fractional contract values (e.g., "2.50") are supported; the minimum granularity is 0.01 contracts.
      - `target_cost_dollars` string: Fixed-point US dollar string. Most request fields accept 2-4 decimal places (e.g., "0.56", "0.5600"); responses emit up to 6. Valid quote intervals for a given market are constrained by that market's price level structure.
      - `target_cost_excludes_fees` boolean: True when the target cost is principal-only and quote sizes are computed without reserving taker fees (fees are charged on top).
      - `status` 'open' | 'closed', required: Current status of the RFQ (open, closed)
      - `created_ts` string, date-time, required: Timestamp when the RFQ was created
      - `mve_collection_ticker` string: Ticker of the MVE collection this market belongs to
      - `mve_selected_legs` MveSelectedLeg[]: Selected legs for the MVE collection
        - `event_ticker` string: Unique identifier for the selected event
        - `market_ticker` string: Unique identifier for the selected market
        - `side` string: The side of the selected market
        - `yes_settlement_value_dollars` string: Fixed-point US dollar string. Most request fields accept 2-4 decimal places (e.g., "0.56", "0.5600"); responses emit up to 6. Valid quote intervals for a given market are constrained by that market's price level structure.
      - `rest_remainder` boolean: Whether to rest the remainder of the RFQ after execution
      - `cancellation_reason` string: Reason for RFQ cancellation if cancelled
      - `creator_user_id` string: User ID of the RFQ creator (private field)
      - `creator_subaccount` integer: Subaccount number of the RFQ creator (visible when the caller is the RFQ creator)
      - `cancelled_ts` string, date-time: Timestamp when the RFQ was cancelled
      - `updated_ts` string, date-time: Timestamp when the RFQ was last updated
      - `rfq_batch_id` string: Identifier of the RFQ batch this RFQ is a child of. Omitted for an RFQ outside a batch. A child can be quoted like a single RFQ, with the differences described in [Request for Quote](/getting_started/rfqs#rfq-batch-children).
    - `updated_ts` string, date-time: Timestamp when the RFQ batch was last updated (visible to the batch creator)
    - `close_reason` string: Why the RFQ batch closed, for example executed, execution failed, or cancelled. A batch closes partially executed only in the rare case that filling one child cancelled a maker order another child needed (visible to the batch creator)
    - `client_batch_id` string: The client_batch_id given at creation (visible to the batch creator)
    - `creator_user_id` string: User ID of the batch creator (private field)
    - `creator_subaccount` integer: Subaccount number of the batch creator (visible to the batch creator)

## Other responses

- `400`: Bad request - invalid input
- `401`: Unauthorized - authentication required
- `403`: Forbidden - insufficient permissions
- `409`: Conflict - resource already exists or cannot be modified
- `500`: Internal server error

## Changes

- **2026-10-26** `c3b2035a5d57`: 1 info
  - added the optional property `rfq_batch/rfqs/items/rfq_batch_id` to the response with the `201` status
- **2026-10-25** `fb86c72f185d`: 2 info
  - added the new optional request property `children/items/contracts_fp`
  - added the new optional request property `children/items/target_cost_dollars`
- **2026-10-21** `f060c10fe3ab`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/kalshi/apis/kalshi-trade-api-manual-endpoints/changes/communications/rfq_batches/post.md)

---

[API](https://skmtc.dev/kalshi/apis/kalshi-trade-api-manual-endpoints.md) - [All operations](https://skmtc.dev/kalshi/apis/kalshi-trade-api-manual-endpoints/llms.txt) - [OpenAPI document](https://skmtc.dev/kalshi/apis/kalshi-trade-api-manual-endpoints/revisions/e6691cdd1915?raw)
