curl --request GET \
--url https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates', 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.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"account": "<string>",
"active_referral_discount": 123,
"daily_user_volume": [
{
"date": "<string>",
"maker_volume": "<string>",
"taker_volume": "<string>",
"volume": "<string>"
}
],
"fee_schedule": {
"maker": 123,
"referral_discount": 123,
"taker": 123,
"tiers": {
"market_maker": [
{
"maker": 123,
"maker_fraction_threshold": "<string>"
}
],
"vip": [
{
"maker": 123,
"taker": 123,
"volume_threshold": "<string>"
}
]
}
},
"fee_tier": 1,
"perp": {
"active_referral_discount": 123,
"daily_user_volume": [
{
"date": "<string>",
"maker_volume": "<string>",
"taker_volume": "<string>",
"volume": "<string>"
}
],
"fee_schedule": {
"maker": 123,
"referral_discount": 123,
"taker": 123,
"tiers": {
"market_maker": [
{
"maker": 123,
"maker_fraction_threshold": "<string>"
}
],
"vip": [
{
"maker": 123,
"taker": 123,
"volume_threshold": "<string>"
}
]
}
},
"fee_tier": 1,
"total_window_volume_usd": "<string>",
"user_maker_rate": 123,
"user_taker_rate": 123
},
"spot": {
"active_referral_discount": 123,
"daily_user_volume": [
{
"date": "<string>",
"maker_volume": "<string>",
"taker_volume": "<string>",
"volume": "<string>"
}
],
"fee_schedule": {
"maker": 123,
"referral_discount": 123,
"taker": 123,
"tiers": {
"market_maker": [
{
"maker": 123,
"maker_fraction_threshold": "<string>"
}
],
"vip": [
{
"maker": 123,
"taker": 123,
"volume_threshold": "<string>"
}
]
}
},
"fee_tier": 1,
"total_window_volume_usd": "<string>",
"user_maker_rate": 123,
"user_taker_rate": 123
},
"user_maker_rate": 123,
"user_taker_rate": 123,
"volume_weights": {
"perp": 1,
"spot": 4
},
"weighted_volume_usd": "<string>"
}Get user fees and fee schedule
Returns the user’s current maker/taker fee rates, fee tier based on the on-chain fee window, the full fee schedule for all VIP tiers, and daily volume history for that same window.
Fee rates are decimal numbers where 0.000450 = 0.045%. Volume values are in whole USD. Volume data has up to 5-minute delay (MV refresh interval). The current on-chain fee window includes today plus the previous 30 UTC calendar days.
curl --request GET \
--url https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates', 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.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mainnet.aptoslabs.com/decibel/api/v1/user_fee_rates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"account": "<string>",
"active_referral_discount": 123,
"daily_user_volume": [
{
"date": "<string>",
"maker_volume": "<string>",
"taker_volume": "<string>",
"volume": "<string>"
}
],
"fee_schedule": {
"maker": 123,
"referral_discount": 123,
"taker": 123,
"tiers": {
"market_maker": [
{
"maker": 123,
"maker_fraction_threshold": "<string>"
}
],
"vip": [
{
"maker": 123,
"taker": 123,
"volume_threshold": "<string>"
}
]
}
},
"fee_tier": 1,
"perp": {
"active_referral_discount": 123,
"daily_user_volume": [
{
"date": "<string>",
"maker_volume": "<string>",
"taker_volume": "<string>",
"volume": "<string>"
}
],
"fee_schedule": {
"maker": 123,
"referral_discount": 123,
"taker": 123,
"tiers": {
"market_maker": [
{
"maker": 123,
"maker_fraction_threshold": "<string>"
}
],
"vip": [
{
"maker": 123,
"taker": 123,
"volume_threshold": "<string>"
}
]
}
},
"fee_tier": 1,
"total_window_volume_usd": "<string>",
"user_maker_rate": 123,
"user_taker_rate": 123
},
"spot": {
"active_referral_discount": 123,
"daily_user_volume": [
{
"date": "<string>",
"maker_volume": "<string>",
"taker_volume": "<string>",
"volume": "<string>"
}
],
"fee_schedule": {
"maker": 123,
"referral_discount": 123,
"taker": 123,
"tiers": {
"market_maker": [
{
"maker": 123,
"maker_fraction_threshold": "<string>"
}
],
"vip": [
{
"maker": 123,
"taker": 123,
"volume_threshold": "<string>"
}
]
}
},
"fee_tier": 1,
"total_window_volume_usd": "<string>",
"user_maker_rate": 123,
"user_taker_rate": 123
},
"user_maker_rate": 123,
"user_taker_rate": 123,
"volume_weights": {
"perp": 1,
"spot": 4
},
"weighted_volume_usd": "<string>"
}Authorizations
Bearer token from Geomi. See Authentication for setup instructions.
Query Parameters
User account address (user query alias is also accepted)
Response
User fee information retrieved
Response for GET /api/v1/user_fee_rates?account=<address>.
Returns the user's current fee tier, effective rates (after referral discount), the full fee schedule, and their fee-window daily volume history.
Tier semantics mirror on-chain: BOTH products key off the same weighted
cross-product volume
perp_volume x volume_weights.perp + spot_volume x volume_weights.spot
against one shared threshold ladder (unified_fees_config), and differ
only in their rate ladders. Each product block carries its own fee_tier,
which are equal in practice but kept separate so a future per-product
ladder does not become a breaking change.
The top-level fields (fee_tier, daily_user_volume, fee_schedule,
user_taker_rate, user_maker_rate, active_referral_discount) remain
PERP-ONLY for backward compatibility; new consumers should read
perp / spot explicitly.
The queried account address
DEPRECATED, use perp.active_referral_discount. Active PERP referral
discount fraction.
DEPRECATED, use perp.daily_user_volume. Daily PERP volume breakdown
for the current on-chain fee window (ascending date order). Serialized
verbatim twice, so this is the largest single item of duplicated payload.
Show child attributes
Show child attributes
DEPRECATED, use perp.fee_schedule. PERP fee schedule.
Show child attributes
Show child attributes
DEPRECATED, use perp.fee_tier. PERP fee tier index (0 = base tier).
x >= 0Perp-side fee state (tier, rates, ladder, raw volume history)
Show child attributes
Show child attributes
Spot-side fee state (tier, rates, ladder, raw volume history)
Show child attributes
Show child attributes
DEPRECATED, use perp.user_maker_rate. User's effective PERP maker rate.
DEPRECATED, use perp.user_taker_rate. User's effective PERP taker rate.
The multipliers used to compute weighted_volume_usd
Show child attributes
Show child attributes
Weighted cross-product volume driving BOTH perp.fee_tier and
spot.fee_tier (USD, whole-dollar integer string)

