curl --request POST \
--url http://localhost:8000/gateway/swap/execute-quote \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"connector": "<string>",
"network": "<string>",
"quote_id": "<string>",
"trading_pair": "<string>",
"side": "<string>",
"amount": 123,
"wallet_address": "<string>"
}
'import requests
url = "http://localhost:8000/gateway/swap/execute-quote"
payload = {
"connector": "<string>",
"network": "<string>",
"quote_id": "<string>",
"trading_pair": "<string>",
"side": "<string>",
"amount": 123,
"wallet_address": "<string>"
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
connector: '<string>',
network: '<string>',
quote_id: '<string>',
trading_pair: '<string>',
side: '<string>',
amount: 123,
wallet_address: '<string>'
})
};
fetch('http://localhost:8000/gateway/swap/execute-quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8000",
CURLOPT_URL => "http://localhost:8000/gateway/swap/execute-quote",
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([
'connector' => '<string>',
'network' => '<string>',
'quote_id' => '<string>',
'trading_pair' => '<string>',
'side' => '<string>',
'amount' => 123,
'wallet_address' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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 := "http://localhost:8000/gateway/swap/execute-quote"
payload := strings.NewReader("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"quote_id\": \"<string>\",\n \"trading_pair\": \"<string>\",\n \"side\": \"<string>\",\n \"amount\": 123,\n \"wallet_address\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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("http://localhost:8000/gateway/swap/execute-quote")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"quote_id\": \"<string>\",\n \"trading_pair\": \"<string>\",\n \"side\": \"<string>\",\n \"amount\": 123,\n \"wallet_address\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8000/gateway/swap/execute-quote")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"quote_id\": \"<string>\",\n \"trading_pair\": \"<string>\",\n \"side\": \"<string>\",\n \"amount\": 123,\n \"wallet_address\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"transaction_hash": "<string>",
"trading_pair": "<string>",
"side": "<string>",
"amount": "<string>",
"input_amount": "<string>",
"output_amount": "<string>",
"price": "<string>",
"status": "submitted"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Execute Swap Quote
curl --request POST \
--url http://localhost:8000/gateway/swap/execute-quote \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"connector": "<string>",
"network": "<string>",
"quote_id": "<string>",
"trading_pair": "<string>",
"side": "<string>",
"amount": 123,
"wallet_address": "<string>"
}
'import requests
url = "http://localhost:8000/gateway/swap/execute-quote"
payload = {
"connector": "<string>",
"network": "<string>",
"quote_id": "<string>",
"trading_pair": "<string>",
"side": "<string>",
"amount": 123,
"wallet_address": "<string>"
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
connector: '<string>',
network: '<string>',
quote_id: '<string>',
trading_pair: '<string>',
side: '<string>',
amount: 123,
wallet_address: '<string>'
})
};
fetch('http://localhost:8000/gateway/swap/execute-quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8000",
CURLOPT_URL => "http://localhost:8000/gateway/swap/execute-quote",
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([
'connector' => '<string>',
'network' => '<string>',
'quote_id' => '<string>',
'trading_pair' => '<string>',
'side' => '<string>',
'amount' => 123,
'wallet_address' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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 := "http://localhost:8000/gateway/swap/execute-quote"
payload := strings.NewReader("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"quote_id\": \"<string>\",\n \"trading_pair\": \"<string>\",\n \"side\": \"<string>\",\n \"amount\": 123,\n \"wallet_address\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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("http://localhost:8000/gateway/swap/execute-quote")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"quote_id\": \"<string>\",\n \"trading_pair\": \"<string>\",\n \"side\": \"<string>\",\n \"amount\": 123,\n \"wallet_address\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8000/gateway/swap/execute-quote")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"quote_id\": \"<string>\",\n \"trading_pair\": \"<string>\",\n \"side\": \"<string>\",\n \"amount\": 123,\n \"wallet_address\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"transaction_hash": "<string>",
"trading_pair": "<string>",
"side": "<string>",
"amount": "<string>",
"input_amount": "<string>",
"output_amount": "<string>",
"price": "<string>",
"status": "submitted"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Body
Request to execute a quote the caller already has.
The two-step flow โ quote, decide, then commit to that quote โ is the reason dflow, titan and 0x return a held price at all. Routing them through /swap/execute instead throws the quote away and prices again, which is what every swap on record did, because until now nothing downstream exposed Gateway's execute-quote route.
Router connector the quote came from (e.g., 'jupiter', '0x')
Network ID in 'chain-network' format (e.g., 'solana-mainnet-beta')
quote_id from a prior /swap/quote on the same connector
Trading pair the quote was for (e.g., 'SOL-USDC'). Gateway identifies the swap by quote_id alone; this is what the recorded trade is filed under.
Trade side the quote was for: 'BUY' or 'SELL'
Base-token amount the quote was for, recorded as the request
Wallet address (optional, uses default if not provided)
Response
Successful Response
Response after executing swap.
amount is what was asked for; the three fill fields are what happened. They were
missing entirely, so a caller reconciling a position against this response was
reconciling against its own intent: a BUY of 1000 tokens that delivered 951.68
answered amount: 1000 under the description "Amount swapped". Every one of these
numbers was already in hand โ the same call writes them to the swap history โ so the
only way to learn what a swap did was to execute it, discard the answer, and search
the history by transaction hash.
Transaction hash
Trading pair
Trade side
Amount REQUESTED, denominated in the base token (SELL: base sold; BUY: base wanted). This is the request echoed back, not the fill โ see input_amount / output_amount for what actually moved.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Amount actually spent, denominated in the input token (quote for BUY, base for SELL). None until the transaction confirms.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Amount actually received, denominated in the output token (base for BUY, quote for SELL). None until the transaction confirms.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Executed price in quote per base, computed from the amounts that moved. None until the transaction confirms.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Transaction status
Was this page helpful?

