Tokens
Token Rewards, Fees & Config
A token's money and config over time, from the stored events: holder rewards and creator payouts, the fees charged on it, and its config changes (creator and rewards fees, the creator's revenue-share wallets, bonding, the freeze, the whitelist). Holder rewards marked distributed mix fresh fee money with recycled rewards and cannot be split: it is never the money paid in. Newest first, cursor paged (blockNumber:logIndex), with ?from=&to= in unix seconds. USD is the value at the time of each row.
Rendered from /openapi.json. Amounts are raw decimal strings in the units of the asset named beside them; USD values are USD × 1e18, null when unknown, with a usdSource. Quotes are hints: the contract is the final check.
GET
/api/v1/tokens/{address}/rewards
Token reward history. The token's reward money, newest first in chain order: holder rewards (HolderRewardsEvent: distributed = RewardsDistributed, rewards distributed to holders (fresh and recycled), claimed = RewardsClaimed, which also fires on every sell, recycled = Recycled) and creator fee payouts (creator_payout = TAXES DevTaxDistributed), each with USD at the time where stored. totals: per kind and pair asset over the from / to window (every kind, whatever ?kind= and the cursor say). distributed is not fresh funding: one RewardsDistributed amount mixes the holder-rewards part of fees with recycled rewards dripping back out of the recycle pot, and the event does not split them. Neither distributed nor distributed - recycled is the money paid in (a recycled amount drips back over time). Database only. An invite-only market (or its market token) the caller may not see answers 404, as an unknown address does (GET /api/v1/markets explains the rule).
Auth: API Key
| Param | Type | Description |
|---|---|---|
| address * | string | |
| kind | string (distributed | claimed | recycled | creator_payout) | |
| from | string | Window start, inclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed, or after `to`: 400 invalid_window. |
| to | string | Window end, exclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed: 400 invalid_window. |
| cursor | string | `blockNumber:logIndex` from `pagination.nextCursor`. Anything else answers 400 invalid_cursor. |
| limit | integer | A strict integer ("12abc" or "2.5" answer 400 bad_param); clamped to 1..100. |
| Field | Type | Description |
|---|---|---|
| token | string | |
| from | integer | null | The from bound, unix seconds; null when not given. |
| to | integer | null | The to bound, unix seconds; null when not given. |
| data | object[] | |
| pagination | Pagination | |
| totals | object[] | |
| data[].kind | string (distributed | claimed | recycled | creator_payout) | distributed: rewards distributed to holders (fresh and recycled, not split); claimed: a holder's claim (also on every sell); recycled: a flagged holder's unclaimed rewards moved to the recycle pot; creator_payout: a creator fee payout. |
| data[].account | string | null | The claimer or recycler; the creator payout's recipient; null on a distribution. |
| data[].accountIsProtocol | boolean | |
| data[].amount | RawAmount | Raw units of pairAsset. |
| data[].pairAsset | string | null | The token main's pair asset (the unit of amount); null = not known yet. |
| data[].symbol | string | null | |
| data[].decimals | integer | null | |
| data[].main | string | null | |
| data[].amountUsdE18 | UsdE18 | null | USD x 1e18 at the time; null when unknown. |
| data[].usdSource | UsdSource | null | Where a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices. |
| data[].perShare | string | null | Distributions: rewardsPerShareToday scaled 1e36 (a decimal string); null otherwise. |
| data[].txHash | string | |
| data[].logIndex | integer | |
| data[].blockNumber | integer | |
| data[].time | integer | Unix seconds (block time). |
200 Reward rows400 Invalid address (invalid_address), from / to (invalid_window), cursor (invalid_cursor), limit (bad_param) or a filter (bad_param, with `allowed`)401 Missing or invalid API key404 not_found: an invite-only market (or its market token) the caller may not see, or an unknown address.429 Rate limit exceeded503 Trading is not deployed on this network
GET
/api/v1/tokens/{address}/fees
Token fee history. The fees charged on the token (FeeEvent with token = the address), newest first in chain order, with USD at the time. Native-coin fees (token_creation, vesting_creation) are left out, as on GET /api/v1/stats/fees. totals: per category and pair asset over the from / to window (not the page). Database only. An invite-only market (or its market token) the caller may not see answers 404, as an unknown address does (GET /api/v1/markets explains the rule).
Auth: API Key
| Param | Type | Description |
|---|---|---|
| address * | string | |
| from | string | Window start, inclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed, or after `to`: 400 invalid_window. |
| to | string | Window end, exclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed: 400 invalid_window. |
| cursor | string | `blockNumber:logIndex` from `pagination.nextCursor`. Anything else answers 400 invalid_cursor. |
| limit | integer | A strict integer ("12abc" or "2.5" answer 400 bad_param); clamped to 1..100. |
| Field | Type | Description |
|---|---|---|
| token | string | |
| from | integer | null | The from bound, unix seconds; null when not given. |
| to | integer | null | The to bound, unix seconds; null when not given. |
| data | object[] | |
| pagination | Pagination | |
| totals | object[] | |
| data[].category | string | spot_trade, cross_trade, bet_market, bet_book, bet_updown, bet_input_sell, leverage_open_dex, leverage_open_fee, leverage_profit, leverage_extension, loan_exit, loan_origination, loan_increase, loan_extension, unwon_prize, consolation_haircut or other. leverage_extension is time added to a leverage position (older rows stored as loan_extension are told apart by their LoanExtended event and also read leverage_extension). |
| data[].payer | string | null | FeePaid.trader as emitted; null for unwon prize money and consolation haircuts. |
| data[].payerIsProtocol | boolean | The payer is a protocol contract (a relay). |
| data[].payerResolved | string | null | The wallet behind an unregistered relay payer (hub, vault, vesting); null otherwise. |
| data[].source | string | |
| data[].sourceRole | string | The registry role of the contract that charged the fee. |
| data[].trade | boolean | A trade fee (basePart is the base share). |
| data[].amount | RawAmount | Raw units of pairAsset. |
| data[].basePart | RawAmount | Same unit. |
| data[].creatorPaid | RawAmount | Same unit: paid out to the creator. |
| data[].creatorRedirected | RawAmount | Same unit: the creator share sent to the CEO instead. |
| data[].retained | RawAmount | Same unit: kept by the protocol. |
| data[].pairAsset | string | null | The fee's unit; null = not known yet. |
| data[].symbol | string | null | |
| data[].decimals | integer | null | |
| data[].main | string | null | |
| data[].amountUsdE18 | UsdE18 | null | USD x 1e18 at the time; null when unknown. |
| data[].usdSource | UsdSource | null | Where a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices. |
| data[].txHash | string | |
| data[].logIndex | integer | |
| data[].blockNumber | integer | |
| data[].time | integer | Unix seconds (block time). |
200 Fee rows400 Invalid address (invalid_address), from / to (invalid_window), cursor (invalid_cursor), limit (bad_param) or a filter (bad_param, with `allowed`)401 Missing or invalid API key404 not_found: an invite-only market (or its market token) the caller may not see, or an unknown address.429 Rate limit exceeded503 Trading is not deployed on this network
GET
/api/v1/tokens/{address}/events
Token config history. The token's config history from the raw event store (ChainEvent), newest first in chain order: CreatorFeeSet / RewardsFeeSet (ATaxes: the creator fee / holder-rewards fee in bps), DevShareSet (ATaxes: the creator's revenue share: `wallet` now gets `bps` of the creator fee, addDevShare; `removed` true when bps is 0, removeDevShare; the unallocated rest goes to the token's DEV), Bonded (presale complete; also lifts the freeze), FreezeLifted, WhiteListedWallet (a wallet whitelisted with a buy cap while frozen) and WhitelistRemoved. Current values: GET /api/v1/tokens/{address} and /whitelist. Database only. An invite-only market (or its market token) the caller may not see answers 404, as an unknown address does (GET /api/v1/markets explains the rule).
Auth: API Key
| Param | Type | Description |
|---|---|---|
| address * | string | |
| event | string (CreatorFeeSet | RewardsFeeSet | DevShareSet | Bonded | FreezeLifted | WhiteListedWallet | WhitelistRemoved) | |
| from | string | Window start, inclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed, or after `to`: 400 invalid_window. |
| to | string | Window end, exclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed: 400 invalid_window. |
| cursor | string | `blockNumber:logIndex` from `pagination.nextCursor`. Anything else answers 400 invalid_cursor. |
| limit | integer | A strict integer ("12abc" or "2.5" answer 400 bad_param); clamped to 1..100. |
| Field | Type | Description |
|---|---|---|
| token | string | |
| from | integer | null | The from bound, unix seconds; null when not given. |
| to | integer | null | The to bound, unix seconds; null when not given. |
| data | object[] | |
| pagination | Pagination | |
| data[].event | string (CreatorFeeSet | RewardsFeeSet | DevShareSet | Bonded | FreezeLifted | WhiteListedWallet | WhitelistRemoved) | |
| data[].bps | integer | null | CreatorFeeSet / RewardsFeeSet: the new fee in basis points; DevShareSet: the recipient's share of the creator fee in basis points (0 = removed); null otherwise. |
| data[].wallet | string | null | WhiteListedWallet / WhitelistRemoved: the wallet; DevShareSet: the revenue-share recipient; null otherwise. |
| data[].capTokens | RawAmount | null | WhiteListedWallet: the most it may buy while frozen (token wei); null otherwise. |
| data[].tag | string | null | WhiteListedWallet: the label ("Creator" on the row a new market token writes for its creator); null otherwise. |
| data[].removed | boolean | null | DevShareSet: true when the share was removed (removeDevShare emits bps 0); null otherwise. |
| data[].actor | string | The tx sender. |
| data[].emitter | string | The token, or ATaxes for the fee and revenue-share events. |
| data[].txHash | string | |
| data[].logIndex | integer | |
| data[].blockNumber | integer | |
| data[].time | integer | Unix seconds (block time). |
200 Config events400 Invalid address (invalid_address), from / to (invalid_window), cursor (invalid_cursor), limit (bad_param) or a filter (bad_param, with `allowed`)401 Missing or invalid API key404 not_found: an invite-only market (or its market token) the caller may not see, or an unknown address.429 Rate limit exceeded503 Trading is not deployed on this network