Skip to main content
POST
/
rfq
curl -X POST https://api.convallax.com/rfq \
  -H "Content-Type: application/json" \
  -d '{
    "payload": {
      "version": 2,
      "rfqId": "abc-123",
      "wallet": "0xTrader...",
      "createdAt": "2026-06-15T12:00:00.000Z",
      "market": {
        "conditionId": "0xa4ddc18895cc7b14810283ef8f113939abffd3969c6a0e37f1897110c67e6f73",
        "yesTokenId": "51508280778202349361616850684455231843716212176724253736363122559269229712002",
        "question": "Will there be a Hantavirus outbreak in 2026?"
      },
      "option": {
        "strikeBps": 50,
        "expiryMs": 1735689600000,
        "optionType": "call",
        "tauDays": 7,
        "sigmaL": 2.0,
        "currentYesPrice": 0.62,
        "isResolutionExpiry": false
      },
      "trade": {
        "side": "buy",
        "size": 10
      }
    },
    "signature": "0x...",
    "signatureEncoding": "eip712"
  }'
{
  "success": true,
  "quote": {
    "quote_id": "d4e5f6a7-...",
    "rfq_id": "abc-123",
    "side": "buy",
    "price": 0.14,
    "size": 10,
    "fairValue": 0.12,
    "spread_bps": 200,
    "greeks": { "delta": 0.45, "gamma": 0.08, "theta": -0.02, "vega": 0.15 },
    "expires_in_ms": 2000
  },
  "meta": {
    "broadcastId": "broadcast-456",
    "rfqDeadlineMs": 800,
    "makersConnected": 3,
    "quotesReceivedExternal": 2,
    "winningSource": "external",
    "winningMakerId": "mm-1"
  }
}
Submit a signed request for quote to the relay. The relay verifies the taker’s EIP-712 signature, broadcasts the RFQ to all connected market makers via WebSocket, collects competing quotes within the timeout window (default 800ms), and returns the best one. The frontend constructs a nested payload, converts it to a flat ConvallaxRFQV1 EIP-712 typed data message, and signs it with the taker’s wallet.

Request Body

payload
object
required
The RFQ payload containing nested market, option, and trade objects.
signature
string
required
EIP-712 signature from the taker wallet over the flattened ConvallaxRFQV1 typed data message.
signatureEncoding
string
required
Must be "eip712".

EIP-712 Typed Data

The relay flattens the nested payload into a ConvallaxRFQV1 EIP-712 message for signature verification. Integer fields use basis points and micro-units to avoid floating point:
{
  "primaryType": "ConvallaxRFQV1",
  "domain": {
    "name": "Convallax RFQ",
    "version": "1",
    "chainId": 80002,
    "verifyingContract": "0x0000000000000000000000000000000000000000"
  },
  "types": {
    "ConvallaxRFQV1": [
      { "name": "version", "type": "uint256" },
      { "name": "rfqId", "type": "string" },
      { "name": "wallet", "type": "address" },
      { "name": "createdAt", "type": "string" },
      { "name": "conditionId", "type": "bytes32" },
      { "name": "yesTokenId", "type": "uint256" },
      { "name": "question", "type": "string" },
      { "name": "optionType", "type": "uint8" },
      { "name": "strikeBps", "type": "uint256" },
      { "name": "expiryUnix", "type": "uint256" },
      { "name": "tauDaysBps", "type": "uint256" },
      { "name": "sigmaLBps", "type": "uint256" },
      { "name": "currentYesBps", "type": "uint256" },
      { "name": "isResolutionExpiry", "type": "uint8" },
      { "name": "tradeSide", "type": "uint8" },
      { "name": "tradeSizeMicro", "type": "uint256" }
    ]
  }
}
The flattening converts: expiryMsexpiryUnix (÷ 1000), tauDaystauDaysBps (× 10000), sigmaLsigmaLBps (× 10000), currentYesPricecurrentYesBps (× 10000), trade.sizetradeSizeMicro (× 1000000), trade.sidetradeSide (0 = buy, 1 = sell).

Response

success
boolean
Whether a valid quote was received.
quote
object
The winning quote from the best market maker.
meta
object
curl -X POST https://api.convallax.com/rfq \
  -H "Content-Type: application/json" \
  -d '{
    "payload": {
      "version": 2,
      "rfqId": "abc-123",
      "wallet": "0xTrader...",
      "createdAt": "2026-06-15T12:00:00.000Z",
      "market": {
        "conditionId": "0xa4ddc18895cc7b14810283ef8f113939abffd3969c6a0e37f1897110c67e6f73",
        "yesTokenId": "51508280778202349361616850684455231843716212176724253736363122559269229712002",
        "question": "Will there be a Hantavirus outbreak in 2026?"
      },
      "option": {
        "strikeBps": 50,
        "expiryMs": 1735689600000,
        "optionType": "call",
        "tauDays": 7,
        "sigmaL": 2.0,
        "currentYesPrice": 0.62,
        "isResolutionExpiry": false
      },
      "trade": {
        "side": "buy",
        "size": 10
      }
    },
    "signature": "0x...",
    "signatureEncoding": "eip712"
  }'
{
  "success": true,
  "quote": {
    "quote_id": "d4e5f6a7-...",
    "rfq_id": "abc-123",
    "side": "buy",
    "price": 0.14,
    "size": 10,
    "fairValue": 0.12,
    "spread_bps": 200,
    "greeks": { "delta": 0.45, "gamma": 0.08, "theta": -0.02, "vega": 0.15 },
    "expires_in_ms": 2000
  },
  "meta": {
    "broadcastId": "broadcast-456",
    "rfqDeadlineMs": 800,
    "makersConnected": 3,
    "quotesReceivedExternal": 2,
    "winningSource": "external",
    "winningMakerId": "mm-1"
  }
}