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
}
| Field | Type | Required | Description |
|---|---|---|---|
trade_amount | number | No | Notional trade value (USD); defaults to 0 |
order_type | string | No | taker applies the taker rate; any other value (or omitted) is treated as maker |
tier | integer | No | Tier 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_estimateis always"0.00"(placeholder for a future phase). Daily/weekly caps are not applied:tp_effectivealways equalstp_estimate, and both*_cap_statusobjects are fixed placeholders (used"0.00",remainingequal tocap).
Response Fields
| Field | Type | Description |
|---|---|---|
tp_estimate | Decimal | Raw TP estimate (2 decimals) |
tp_effective | Decimal | Currently always equal to tp_estimate — caps are not applied |
hp_estimate | Decimal | HP estimate (currently always "0.00") |
total_estimate | Decimal | tp_effective + hp_estimate |
tier | string | Tier label from the request (T1 / T2 / T3) |
role_rate | string | Tier multiplier label (1.0 / 1.5 / 2.0) — not the per-$1,000 maker/taker rate |
daily_cap_status.used | Decimal | Placeholder, always "0.00" |
daily_cap_status.cap | int | Daily TP cap constant (5,000); not enforced |
daily_cap_status.remaining | Decimal | Placeholder, always "5000.00" |
weekly_cap_status.used | Decimal | Placeholder, always "0.00" |
weekly_cap_status.cap | int | Weekly TP cap constant (25,000); not enforced |
weekly_cap_status.remaining | Decimal | Placeholder, 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.
| Trade | Role | Tier | TP |
|---|---|---|---|
| $1,000 | Maker | T1 | 1.50 |
| $5,000 | Maker | T2 | 7.50 |
| $10,000 | Taker | T3 | 12.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']}")