Get Fee Rate
Retrieve the authenticated wallet's current fee tier, 14-day trading volume, wallet-effective maker/taker rates, and the complete public fee schedule.
Endpoint
POST https://papi.synthetix.io/v1/tradeRequest
Request Format
{
"params": {
"action": "getFeeRate",
"subAccountId": "1867542890123456789"
},
"signature": {
"v": 28,
"r": "0x19480589384695193600abcdef19480589384695193600abcdef19480589384695193600abcdef19480589384695193600abcdef",
"s": "0xabcdef19480589384695193600abcdef19480589384695193600abcdef19480589384695193600abcdef19480589384695193600"
}
}Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
params | object | Yes | Request parameters wrapper |
params.action | string | Yes | Must be "getFeeRate" |
params.subAccountId | string | Yes | SubAccount ID to query |
| Parameter | Type | Required | Description |
|---|---|---|---|
nonce | uint64 | Yes* | Positive integer nonce (must be incrementing and unique per request) |
signature | object | Yes | EIP-712 signature object |
expiresAfter | uint64 | No | Unix milliseconds expiration timestamp (5x rate limit on stale cancels) |
:::info Common Parameters
These are top-level request parameters. The subAccountId parameter is specified within the params object (see each endpoint's parameter table).
:::
:::info SubAccountAction Endpoints
Endpoints using SubAccountAction signing (getPositions, getOpenOrders, getOrderHistory, getTrades, getFundingPayments, getSubAccount, getSubAccounts, getDelegatedSigners, getBalanceUpdates, getWithdrawableAmounts, getFeeRate, getSnaxpotEpochTickets) do not require the nonce parameter. Only signature and optional expiresAfter are needed.
:::
Response
Success Response
{
"status": "ok",
"response": {
"volume14d": "5500000.00",
"currentTier": {
"tierId": "tier_2",
"tierLevel": 2,
"tierName": "Tier 2",
"tierType": "volume",
"minTradeVolume": "5000000",
"makerFeeRate": "0.00016",
"takerFeeRate": "0.0004"
},
"makerFeeRate": "0.000144",
"takerFeeRate": "0.00036",
"referralDiscountApplied": true,
"referralDiscount": "0.9",
"tiers": [
{
"tierId": "tier_0",
"tierLevel": 0,
"tierName": "Regular User",
"minTradeVolume": "0",
"makerFeeRate": "0.0002",
"takerFeeRate": "0.0005"
},
{
"tierId": "tier_2",
"tierLevel": 2,
"tierName": "Tier 2",
"minTradeVolume": "5000000",
"makerFeeRate": "0.00016",
"takerFeeRate": "0.0004"
}
]
},
"request_id": "5ccf215d37e3ae6d",
"timestamp": 1735689900000
}Response Fields
| Field | Type | Description |
|---|---|---|
volume14d | string | Wallet's 14-day rolling trading volume in USDT |
currentTier | object | Wallet's active tier with raw schedule rates |
currentTier.tierId | string | Stable tier identifier |
currentTier.tierLevel | integer | null | Tier position in the schedule; null for custom tiers |
currentTier.tierName | string | Human-readable tier name |
currentTier.tierType | string | Tier category (for example "volume" or "custom") |
currentTier.minTradeVolume | string | Minimum rolling volume required for the tier |
currentTier.makerFeeRate | string | Raw schedule maker fee rate for this tier |
currentTier.takerFeeRate | string | Raw schedule taker fee rate for this tier |
makerFeeRate | string | Wallet-effective maker fee rate currently charged (after any referral discount) |
takerFeeRate | string | Wallet-effective taker fee rate currently charged (after any referral discount) |
referralDiscountApplied | boolean | true when the subaccount has an active referral discount reflected in makerFeeRate/takerFeeRate |
referralDiscount | string | Discount multiplier applied (for example "0.9" = 10% discount); "0" when no discount is active |
tiers | array | Complete fee schedule with raw schedule rates |
Tier Object (tiers[])
| Field | Type | Description |
|---|---|---|
tierId | string | Stable tier identifier |
tierLevel | integer | Tier position in the schedule |
tierName | string | Human-readable tier name |
minTradeVolume | string | Minimum rolling volume required for the tier |
makerFeeRate | string | Maker fee rate for this tier |
takerFeeRate | string | Taker fee rate for this tier |
Implementation Notes
- Uses
SubAccountActionEIP-712 signing withaction: "getFeeRate" subAccountIdbelongs inparams; signexpiresAfterinside the EIP-712SubAccountActionmessage (commonly"0"for no expiry). A top-levelexpiresAfterthat does not match the signed message will fail authenticationcurrentTierandtiersalways show raw schedule rates without wallet-specific adjustmentstierTypeis present oncurrentTieronly; items intiers[]do not includetierTypemakerFeeRateandtakerFeeRateat the response root reflect the rates the wallet is actually charged, including any active referral discountcurrentTier.tierLevelisnullfor custom tiers and an integer for volume tiers- Fee rates are decimal strings (for example
"0.0005"= 0.05%) - When
referralDiscountAppliedistrue,referralDiscountis the multiplier applied to the tier rates (for example"0.9"means rates are reduced by 10%) - When no referral discount is active,
referralDiscountAppliedisfalseandreferralDiscountis"0" - Also available via WebSocket POST on
/v1/ws/trade; see Get Fee Rate (WebSocket) - For public tier configuration without authentication, use Get Tiers
Signing
All trading methods are signed using EIP-712. Each successful trading request will contain:
- A piece of structured data that includes the sender address
- A signature of the hash of that structured data, signed by the sender
For detailed information on EIP-712 signing, see EIP-712 Signing.
Nonce Management
The nonce system prevents replay attacks and ensures order uniqueness:
- Use any positive integer as nonce
- Each nonce must be greater than the previous one (incrementing)
Date.now()is a convenient option, not a requirement- If nonce conflicts occur, increment by 1 and retry
:::note SubAccountAction Exception
SubAccountAction endpoints (getPositions, getOpenOrders, getOrderHistory, getTrades, getFundingPayments, getSubAccount, getSubAccounts, getDelegatedSigners, getBalanceUpdates, getWithdrawableAmounts, getFeeRate, getSnaxpotEpochTickets) do not require a nonce. Only the signature and optional expiresAfter parameters are needed.
:::
| Error Code | Description | Retryable |
|---|---|---|
UNAUTHORIZED | EIP-712 signature validation failed | No |
VALIDATION_ERROR | Request validation failed | No |
MISSING_REQUIRED_FIELD | Required field is missing | No |
INVALID_FORMAT | Field format is invalid | No |
INVALID_VALUE | Invalid parameter value | No |
RATE_LIMIT_EXCEEDED | Too many requests in time window | Yes |
INSUFFICIENT_MARGIN | Not enough margin for trade | No |
ORDER_NOT_FOUND | Order does not exist | No |
OPERATION_TIMEOUT | Operation timed out | Yes |
Related Endpoints
- Get Tiers — Public tier configuration
- Get Subaccount — Subaccount-level
feeRatessnapshot - Get Trades — Per-trade
feeRateon executions - Trading Fees — Fee schedule overview