> ## Documentation Index
> Fetch the complete documentation index at: https://docs.novig.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RFQ Overview

> How Liquidity Providers respond to Novig parlay RFQs

## What is an RFQ?

A **Request for Quote (RFQ)** is the mechanism Novig uses to source parlay prices from Liquidity Providers. When a Novig user requests a parlay, Novig fans the request out to every active LP pricer over a signed webhook, picks the winning quote deterministically, and asks the winning quoter to confirm before executing the trade.

This page is the entry point for **LPs who want to receive RFQs and respond with prices**. If you're an existing LP trading single-leg orders through `/nbx/v2`, RFQs are an opt-in addition — registering does not affect your order-book activity.

<Note>
  Currently, RFQs are only generated for **multi-leg parlays**. Single-outcome bets settle through the order book, not RFQs.
</Note>

## End-to-end flow

<Steps>
  <Step title="A user requests a parlay">
    A Novig client posts a list of `outcomeIds` to Novig. Novig validates the outcomes, allocates an `rfq_id`, and persists the RFQ.
  </Step>

  <Step title="Novig fans out to every active pricer">
    For each registered LP pricer, Novig spawns an async `POST {webhook_url}/quote` carrying the RFQ body and an `X-Novig-Signature` header. Novig waits **up to 3 seconds total** for responses.
  </Step>

  <Step title="You return a price (or don't)">
    Your pricer returns `{ price, max_wager, quote_id? }`. Non-2xx responses, malformed bodies, `max_wager <= 0`, and anything that misses the 3-second window are dropped.
  </Step>

  <Step title="Novig picks a winner">
    The winner is the best price for the user. Ties are broken by larger `max_wager`.
  </Step>

  <Step title="Novig asks the winning LP to confirm">
    Once the user accepts the quote, Novig calls `POST {webhook_url}/confirm` on the winning pricer with the actual wager and the selected price. You have a fixed **1-second window** to answer. If the LP returns `{ "confirmed": true }` in time, the trade is executed; `false` — or missing the window — rejects the trade.
  </Step>
</Steps>

## What you implement

You stand up an HTTP service with **two POST endpoints** under a single base URL:

| Endpoint                  | Purpose                                        |
| ------------------------- | ---------------------------------------------- |
| `POST {base_url}/quote`   | Return a price for an RFQ                      |
| `POST {base_url}/confirm` | Approve or reject the wager before it executes |

Novig appends `/quote` and `/confirm` to whatever base URL you register, so the base may include path segments (e.g. `https://pricer.example.com/novig`).

Both endpoints receive a `X-Novig-Signature` header — see [Webhook Signing](/api-reference/rfq/signing) for verification.
