curl --request GET \
--url https://api.jup.ag/swap/v2/jupiterz/global-order \
--header 'x-api-key: <api-key>'import requests
url = "https://api.jup.ag/swap/v2/jupiterz/global-order"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.jup.ag/swap/v2/jupiterz/global-order', 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.jup.ag/swap/v2/jupiterz/global-order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.jup.ag/swap/v2/jupiterz/global-order"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.jup.ag/swap/v2/jupiterz/global-order")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jup.ag/swap/v2/jupiterz/global-order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"routing": "spot",
"requestId": "629bddf3-0038-43a6-8956-f5433d6b1191",
"quoteId": "59db3e19-c7b0-4753-a8aa-206701004498",
"maker": "maker2p9zXHQ5GKdZjSxLu7BfVz8YmF9oQ7TEd1rWqw",
"provider": "MM Trading",
"swapMode": "exactIn",
"orderInfo": {
"input": {
"token": "So11111111111111111111111111111111111111112",
"startAmount": "1000000000",
"endAmount": "1000000000"
},
"output": {
"token": "So11111111111111111111111111111111111111112",
"startAmount": "1000000000",
"endAmount": "1000000000"
}
},
"transaction": "<string>",
"expireAt": "1736968572",
"error": "insufficientBalance"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}Get Global Order
Get the best RFQ quote across multiple candidate output mints
curl --request GET \
--url https://api.jup.ag/swap/v2/jupiterz/global-order \
--header 'x-api-key: <api-key>'import requests
url = "https://api.jup.ag/swap/v2/jupiterz/global-order"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.jup.ag/swap/v2/jupiterz/global-order', 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.jup.ag/swap/v2/jupiterz/global-order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.jup.ag/swap/v2/jupiterz/global-order"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.jup.ag/swap/v2/jupiterz/global-order")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jup.ag/swap/v2/jupiterz/global-order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"routing": "spot",
"requestId": "629bddf3-0038-43a6-8956-f5433d6b1191",
"quoteId": "59db3e19-c7b0-4753-a8aa-206701004498",
"maker": "maker2p9zXHQ5GKdZjSxLu7BfVz8YmF9oQ7TEd1rWqw",
"provider": "MM Trading",
"swapMode": "exactIn",
"orderInfo": {
"input": {
"token": "So11111111111111111111111111111111111111112",
"startAmount": "1000000000",
"endAmount": "1000000000"
},
"output": {
"token": "So11111111111111111111111111111111111111112",
"startAmount": "1000000000",
"endAmount": "1000000000"
}
},
"transaction": "<string>",
"expireAt": "1736968572",
"error": "insufficientBalance"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}{
"error": "No quote found",
"errorCode": "NO_QUOTE_FOUND"
}Authorizations
Get API key via https://developers.jup.ag/portal
Query Parameters
Input token mint address
Comma-separated list of candidate output token mint addresses (currently up to 3). Duplicates are ignored
Amount in the token's smallest unit, as a string.
Input amount for ExactIn, output amount for ExactOut
Taker wallet address. Required to receive a transaction in the response.
Without it the response is an indicative quote with transaction: null
RFQ protocol version
Set when the swap involves wSOL rather than native SOL
Address receiving the output tokens, when different from the taker
Address paying for Associated Token Account creation
Existing taker-owned input token account. Bypasses ATA derivation
Existing taker-owned output token account. Bypasses ATA derivation
Token account that receives your integrator fee. It must already exist
(be pre-initialised): the API does not create it. Create the associated
token account for the fee mint before requesting an order.
Must be provided together with integratorFee
Your integrator fee in basis points (max 10000).
Must be provided together with integratorTokenAccount
x <= 10000Side of the swap the integrator fee is charged on. When omitted, defaults to the
user-fixed side: input for ExactIn, output for ExactOut.
Requires integratorTokenAccount
input, output Squads V5 settings PDA address. Required for Squads vault swaps
Comma-separated signer pubkeys for Squads vault swaps. The first signer is the fee payer
Response
Quote retrieved successfully
Routing type. spot for RFQ fills
spot, onchain "spot"
Identifies this quote request. Pass it to /execute unchanged.
For /global-order, identifies the winning leg
"629bddf3-0038-43a6-8956-f5433d6b1191"
Identifies this specific quote. Pass it to /execute unchanged
"59db3e19-c7b0-4753-a8aa-206701004498"
Market maker wallet filling the order
"maker2p9zXHQ5GKdZjSxLu7BfVz8YmF9oQ7TEd1rWqw"
Name of the market maker the maker address belongs to
"MM Trading"
Swap mode of the quote
exactIn, exactOut "exactIn"
Show child attributes
Show child attributes
Base64-encoded versioned transaction for the taker to sign. The market maker
adds the final signature and submits it on-chain. null for indicative quotes
(no taker provided, or the transaction could not be built, see error)
Unix timestamp (seconds) after which the transaction is no longer valid. Sign and execute before this time
"1736968572"
Present only when taker was provided but no transaction could be built.
insufficientBalance: the taker does not hold enough of the input token.
missingAtaAccount: a token account required by the swap does not exist on-chain
insufficientBalance, missingAtaAccount Was this page helpful?
