跳到主要内容

Simulate Points

Pre-calculates the points a trade would earn without writing any data.

POST /v1/points/simulate

No authentication required; the caller's own tier/balances are never consulted. There are no query parameters.

Request Body​

{
"trade_amount": 5000.00,
"order_type": "maker",
"tier": 2
}
FieldTypeRequiredDescription
trade_amountnumberNoNotional trade value (USD); defaults to 0
order_typestringNotaker applies the taker rate; any other value (or omitted) is treated as maker
tierintegerNoTier label to echo back (1 / 2 / 3); defaults to 1 and out-of-range values are clamped. Only affects the tier and role_rate fields — it does not change the estimate

The body must be a JSON object ({} is accepted). A non-JSON Content-Type is rejected with 415; malformed JSON with 400 / 422.

Response​

{
"tp_estimate": "7.50",
"tp_effective": "7.50",
"hp_estimate": "0.00",
"total_estimate": "7.50",
"tier": "T2",
"role_rate": "1.5",
"daily_cap_status": {
"used": "0.00",
"cap": 5000,
"remaining": "5000.00"
},
"weekly_cap_status": {
"used": "0.00",
"cap": 25000,
"remaining": "25000.00"
}
}

hp_estimate is always "0.00" (placeholder for a future phase). Daily/weekly caps are not applied: tp_effective always equals tp_estimate, and both *_cap_status objects are fixed placeholders (used "0.00", remaining equal to cap).

Response Fields​

FieldTypeDescription
tp_estimateDecimalRaw TP estimate (2 decimals)
tp_effectiveDecimalCurrently always equal to tp_estimate — caps are not applied
hp_estimateDecimalHP estimate (currently always "0.00")
total_estimateDecimaltp_effective + hp_estimate
tierstringTier label from the request (T1 / T2 / T3)
role_ratestringTier multiplier label (1.0 / 1.5 / 2.0) — not the per-$1,000 maker/taker rate
daily_cap_status.usedDecimalPlaceholder, always "0.00"
daily_cap_status.capintDaily TP cap constant (5,000); not enforced
daily_cap_status.remainingDecimalPlaceholder, always "5000.00"
weekly_cap_status.usedDecimalPlaceholder, always "0.00"
weekly_cap_status.capintWeekly TP cap constant (25,000); not enforced
weekly_cap_status.remainingDecimalPlaceholder, always "25000.00"

TP Calculation​

TP_estimate = trade_amount × 0.0015 (maker — any order_type other than "taker")
= trade_amount × 0.0012 (taker)
TP_effective = TP_estimate (caps not applied)

The simulator uses a flat maker/taker rate (equivalent to 1.5 / 1.2 TP per $1,000) regardless of tier. This differs from the per-tier rate table the accrual pipeline actually applies to real fills (see Overview), so the simulated figure is only an approximation.

TradeRoleTierTP
$1,000MakerT11.50
$5,000MakerT27.50
$10,000TakerT312.00

Code Examples​

Python​

import requests

BASE_URL = "https://api.rocky.exchange"

resp = requests.post(
f"{BASE_URL}/v1/points/simulate",
json={"trade_amount": 5000.00, "order_type": "maker", "tier": 2},
)
data = resp.json()

print(f"Estimated TP: {data['tp_estimate']} → effective: {data['tp_effective']}")
print(f"Daily cap remaining: {data['daily_cap_status']['remaining']}")