Commit to Quote
curl --request POST \
--url https://api.convallax.com/quote-requests/{id}/commit \
--header 'Content-Type: application/json' \
--data '
{
"wallet": "0xTrader0000000000000000000000000000000000"
}
'import requests
url = "https://api.convallax.com/quote-requests/{id}/commit"
payload = { "wallet": "0xTrader0000000000000000000000000000000000" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({wallet: '0xTrader0000000000000000000000000000000000'})
};
fetch('https://api.convallax.com/quote-requests/{id}/commit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.convallax.com/quote-requests/{id}/commit",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallet' => '0xTrader0000000000000000000000000000000000'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.convallax.com/quote-requests/{id}/commit"
payload := strings.NewReader("{\n \"wallet\": \"0xTrader0000000000000000000000000000000000\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.convallax.com/quote-requests/{id}/commit")
.header("Content-Type", "application/json")
.body("{\n \"wallet\": \"0xTrader0000000000000000000000000000000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.convallax.com/quote-requests/{id}/commit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet\": \"0xTrader0000000000000000000000000000000000\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Order signed by maker — call fill() on-chain",
"mode": "onchain",
"quote": {
"maker_id": "mm-alpha",
"quote_id": "8f3c2b1a-1d2e-4c3b-9a8f-6e5d4c3b2a1f",
"maker": "0x1234000000000000000000000000000000abcd",
"side": "buy",
"price": 0.12,
"size": 10,
"expires_in_ms": 5000
},
"execution": {
"execution_id": "e1f2a3b4-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"request_id": "req-789",
"quote_id": "8f3c2b1a-1d2e-4c3b-9a8f-6e5d4c3b2a1f",
"maker_id": "mm-alpha",
"executed_at": "2026-06-15T12:00:01.234Z"
},
"onchain": {
"settlementAddress": "0x3E583BC44157c91F8c534372A3e91c371841107A",
"coreAddress": "0x76c41a03e0993F0261bB3B1949320cA693f76faE",
"order": {
"maker": "0x1234000000000000000000000000000000abcd",
"seriesId": "98765432109876543210",
"optionAmount": "10000000",
"premiumAmount": "1200000",
"makerSelling": true,
"taker": "0xTrader0000000000000000000000000000000000",
"validUntil": 1717189320,
"nonce": 1717189200042
},
"makerSignature": "0xabcdef...",
"domain": {
"name": "ConvallaxRFQSettlement",
"version": "1",
"chainId": 80002,
"verifyingContract": "0x3E583BC44157c91F8c534372A3e91c371841107A"
},
"chainId": 80002,
"takerApproval": {
"spender": "0x3E583BC44157c91F8c534372A3e91c371841107A",
"amount": "1200000",
"reason": "premium"
}
}
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}Trading
Commit to Quote
Commit to the best quote on an open quote request. The relay selects the winner, signs an EIP-712 Order, and returns everything needed for on-chain fill().
POST
/
quote-requests
/
{id}
/
commit
Commit to Quote
curl --request POST \
--url https://api.convallax.com/quote-requests/{id}/commit \
--header 'Content-Type: application/json' \
--data '
{
"wallet": "0xTrader0000000000000000000000000000000000"
}
'import requests
url = "https://api.convallax.com/quote-requests/{id}/commit"
payload = { "wallet": "0xTrader0000000000000000000000000000000000" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({wallet: '0xTrader0000000000000000000000000000000000'})
};
fetch('https://api.convallax.com/quote-requests/{id}/commit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.convallax.com/quote-requests/{id}/commit",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallet' => '0xTrader0000000000000000000000000000000000'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.convallax.com/quote-requests/{id}/commit"
payload := strings.NewReader("{\n \"wallet\": \"0xTrader0000000000000000000000000000000000\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.convallax.com/quote-requests/{id}/commit")
.header("Content-Type", "application/json")
.body("{\n \"wallet\": \"0xTrader0000000000000000000000000000000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.convallax.com/quote-requests/{id}/commit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet\": \"0xTrader0000000000000000000000000000000000\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Order signed by maker — call fill() on-chain",
"mode": "onchain",
"quote": {
"maker_id": "mm-alpha",
"quote_id": "8f3c2b1a-1d2e-4c3b-9a8f-6e5d4c3b2a1f",
"maker": "0x1234000000000000000000000000000000abcd",
"side": "buy",
"price": 0.12,
"size": 10,
"expires_in_ms": 5000
},
"execution": {
"execution_id": "e1f2a3b4-5c6d-7e8f-9a0b-1c2d3e4f5a6b",
"request_id": "req-789",
"quote_id": "8f3c2b1a-1d2e-4c3b-9a8f-6e5d4c3b2a1f",
"maker_id": "mm-alpha",
"executed_at": "2026-06-15T12:00:01.234Z"
},
"onchain": {
"settlementAddress": "0x3E583BC44157c91F8c534372A3e91c371841107A",
"coreAddress": "0x76c41a03e0993F0261bB3B1949320cA693f76faE",
"order": {
"maker": "0x1234000000000000000000000000000000abcd",
"seriesId": "98765432109876543210",
"optionAmount": "10000000",
"premiumAmount": "1200000",
"makerSelling": true,
"taker": "0xTrader0000000000000000000000000000000000",
"validUntil": 1717189320,
"nonce": 1717189200042
},
"makerSignature": "0xabcdef...",
"domain": {
"name": "ConvallaxRFQSettlement",
"version": "1",
"chainId": 80002,
"verifyingContract": "0x3E583BC44157c91F8c534372A3e91c371841107A"
},
"chainId": 80002,
"takerApproval": {
"spender": "0x3E583BC44157c91F8c534372A3e91c371841107A",
"amount": "1200000",
"reason": "premium"
}
}
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}{
"success": false,
"error": "Quote request not found or expired"
}Commit to the best available quote on an open quote request. The relay selects the best valid quote, resolves the option
seriesId, builds the exact EIP-712 Order, and emits a quote:accepted message to the winning market maker over the post-trade WebSocket, starting a confirmation deadline (MAKER_CONFIRMATION_MS, default 10s).
Market makers are independent — the backend does not post collateral, set approvals, or sign on their behalf. The winning maker signs the order with its own wallet key and submits the signature over REST (POST /v1/mm/quotes/{quoteId}/confirm), which the backend verifies recovers to order.maker.
The successful response contains everything the taker needs to call fill() on ConvallaxRFQSettlement for atomic mint-on-fill settlement, including the single USDC approval the taker must make first (onchain.takerApproval).
Confirmation handshake. This request blocks until a maker confirms. If the winning maker misses its deadline, the backend falls back to the next-best maker’s quote. If no maker confirms in time, the request stays open and the call returns HTTP
503 so the taker can retry.If the on-chain environment is not configured, the relay returns a simulated execution response (
mode: "simulated") with no onchain block.Before calling
fill(), the taker makes exactly one USDC approval as described by onchain.takerApproval: approve takerApproval.spender for takerApproval.amount. For a long fill this is the settlement contract (premium); for a short fill it is the core contract (collateral). The maker has already pre-approved its own side.Path Parameters
The requestId returned by Create Quote Request.
Example:
"req-789"
Body
application/json
Taker wallet (checksummed). Set as taker in the order — only this wallet can call fill().
Example:
"0xTrader0000000000000000000000000000000000"
Response
Order signed by the winning maker (or simulated execution)
Example:
"Order signed by maker — call fill() on-chain"
Available options:
onchain, simulated Example:
"onchain"
A market maker quote as exposed to takers.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Everything needed for on-chain fill(). Present only when mode is "onchain".
Show child attributes
Show child attributes
Was this page helpful?
