curl --request POST \
--url http://localhost:8000/gateway/clmm/quote-position \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"connector": "<string>",
"network": "<string>",
"pool_address": "<string>",
"lower_price": 123,
"upper_price": 123,
"base_token_amount": 123,
"quote_token_amount": 123,
"slippage_pct": 123
}
'import requests
url = "http://localhost:8000/gateway/clmm/quote-position"
payload = {
"connector": "<string>",
"network": "<string>",
"pool_address": "<string>",
"lower_price": 123,
"upper_price": 123,
"base_token_amount": 123,
"quote_token_amount": 123,
"slippage_pct": 123
}
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>',
pool_address: '<string>',
lower_price: 123,
upper_price: 123,
base_token_amount: 123,
quote_token_amount: 123,
slippage_pct: 123
})
};
fetch('http://localhost:8000/gateway/clmm/quote-position', 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/clmm/quote-position",
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>',
'pool_address' => '<string>',
'lower_price' => 123,
'upper_price' => 123,
'base_token_amount' => 123,
'quote_token_amount' => 123,
'slippage_pct' => 123
]),
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/clmm/quote-position"
payload := strings.NewReader("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"pool_address\": \"<string>\",\n \"lower_price\": 123,\n \"upper_price\": 123,\n \"base_token_amount\": 123,\n \"quote_token_amount\": 123,\n \"slippage_pct\": 123\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/clmm/quote-position")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"pool_address\": \"<string>\",\n \"lower_price\": 123,\n \"upper_price\": 123,\n \"base_token_amount\": 123,\n \"quote_token_amount\": 123,\n \"slippage_pct\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8000/gateway/clmm/quote-position")
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 \"pool_address\": \"<string>\",\n \"lower_price\": 123,\n \"upper_price\": 123,\n \"base_token_amount\": 123,\n \"quote_token_amount\": 123,\n \"slippage_pct\": 123\n}"
response = http.request(request)
puts response.read_body{
"baseLimited": true,
"baseTokenAmount": "<string>",
"quoteTokenAmount": "<string>",
"baseTokenAmountMax": "<string>",
"quoteTokenAmountMax": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Quote Clmm Position
Quote a candidate CLMM position before opening or adding liquidity.
Mirrors Gateway’s GET /trading/clmm/quote-position: returns the base/quote split the pool would actually take for the given range and deposit amounts (and which side limits it), without signing or submitting anything.
curl --request POST \
--url http://localhost:8000/gateway/clmm/quote-position \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"connector": "<string>",
"network": "<string>",
"pool_address": "<string>",
"lower_price": 123,
"upper_price": 123,
"base_token_amount": 123,
"quote_token_amount": 123,
"slippage_pct": 123
}
'import requests
url = "http://localhost:8000/gateway/clmm/quote-position"
payload = {
"connector": "<string>",
"network": "<string>",
"pool_address": "<string>",
"lower_price": 123,
"upper_price": 123,
"base_token_amount": 123,
"quote_token_amount": 123,
"slippage_pct": 123
}
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>',
pool_address: '<string>',
lower_price: 123,
upper_price: 123,
base_token_amount: 123,
quote_token_amount: 123,
slippage_pct: 123
})
};
fetch('http://localhost:8000/gateway/clmm/quote-position', 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/clmm/quote-position",
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>',
'pool_address' => '<string>',
'lower_price' => 123,
'upper_price' => 123,
'base_token_amount' => 123,
'quote_token_amount' => 123,
'slippage_pct' => 123
]),
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/clmm/quote-position"
payload := strings.NewReader("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"pool_address\": \"<string>\",\n \"lower_price\": 123,\n \"upper_price\": 123,\n \"base_token_amount\": 123,\n \"quote_token_amount\": 123,\n \"slippage_pct\": 123\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/clmm/quote-position")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"connector\": \"<string>\",\n \"network\": \"<string>\",\n \"pool_address\": \"<string>\",\n \"lower_price\": 123,\n \"upper_price\": 123,\n \"base_token_amount\": 123,\n \"quote_token_amount\": 123,\n \"slippage_pct\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8000/gateway/clmm/quote-position")
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 \"pool_address\": \"<string>\",\n \"lower_price\": 123,\n \"upper_price\": 123,\n \"base_token_amount\": 123,\n \"quote_token_amount\": 123,\n \"slippage_pct\": 123\n}"
response = http.request(request)
puts response.read_body{
"baseLimited": true,
"baseTokenAmount": "<string>",
"quoteTokenAmount": "<string>",
"baseTokenAmountMax": "<string>",
"quoteTokenAmountMax": "<string>"
}{
"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 quote a candidate CLMM position before opening or adding.
Mirrors Gateway's GET /trading/clmm/quote-position: given the price range and one or both deposit amounts, returns the actual base/quote split the pool would take (and which side limits it) without signing anything.
CLMM connector (e.g., 'meteora', 'raydium', 'orca')
Network ID in 'chain-network' format (e.g., 'solana-mainnet-beta')
Pool contract address
Lower price bound
Upper price bound
Base amount to deposit (one side may be omitted)
Quote amount to deposit (one side may be omitted)
Max acceptable slippage percentage
Response
Successful Response
Gateway's position quote: the deposit split the pool would actually take.
True when the base side limits the deposit
Base amount the position would take
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Quote amount the position would take
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Base ceiling after slippage
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Quote ceiling after slippage
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$Was this page helpful?

