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
ParamTypeDescription
address *string
kindstring (distributed | claimed | recycled | creator_payout)
fromstringWindow 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.
tostringWindow end, exclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed: 400 invalid_window.
cursorstring`blockNumber:logIndex` from `pagination.nextCursor`. Anything else answers 400 invalid_cursor.
limitintegerA strict integer ("12abc" or "2.5" answer 400 bad_param); clamped to 1..100.
FieldTypeDescription
tokenstring
frominteger | nullThe from bound, unix seconds; null when not given.
tointeger | nullThe to bound, unix seconds; null when not given.
dataobject[]
paginationPagination
totalsobject[]
data[].kindstring (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[].accountstring | nullThe claimer or recycler; the creator payout's recipient; null on a distribution.
data[].accountIsProtocolboolean
data[].amountRawAmountRaw units of pairAsset.
data[].pairAssetstring | nullThe token main's pair asset (the unit of amount); null = not known yet.
data[].symbolstring | null
data[].decimalsinteger | null
data[].mainstring | null
data[].amountUsdE18UsdE18 | nullUSD x 1e18 at the time; null when unknown.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].perSharestring | nullDistributions: rewardsPerShareToday scaled 1e36 (a decimal string); null otherwise.
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timeintegerUnix 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
ParamTypeDescription
address *string
fromstringWindow 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.
tostringWindow end, exclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed: 400 invalid_window.
cursorstring`blockNumber:logIndex` from `pagination.nextCursor`. Anything else answers 400 invalid_cursor.
limitintegerA strict integer ("12abc" or "2.5" answer 400 bad_param); clamped to 1..100.
FieldTypeDescription
tokenstring
frominteger | nullThe from bound, unix seconds; null when not given.
tointeger | nullThe to bound, unix seconds; null when not given.
dataobject[]
paginationPagination
totalsobject[]
data[].categorystringspot_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[].payerstring | nullFeePaid.trader as emitted; null for unwon prize money and consolation haircuts.
data[].payerIsProtocolbooleanThe payer is a protocol contract (a relay).
data[].payerResolvedstring | nullThe wallet behind an unregistered relay payer (hub, vault, vesting); null otherwise.
data[].sourcestring
data[].sourceRolestringThe registry role of the contract that charged the fee.
data[].tradebooleanA trade fee (basePart is the base share).
data[].amountRawAmountRaw units of pairAsset.
data[].basePartRawAmountSame unit.
data[].creatorPaidRawAmountSame unit: paid out to the creator.
data[].creatorRedirectedRawAmountSame unit: the creator share sent to the CEO instead.
data[].retainedRawAmountSame unit: kept by the protocol.
data[].pairAssetstring | nullThe fee's unit; null = not known yet.
data[].symbolstring | null
data[].decimalsinteger | null
data[].mainstring | null
data[].amountUsdE18UsdE18 | nullUSD x 1e18 at the time; null when unknown.
data[].usdSourceUsdSource | nullWhere a USD value came from; null when the value is null. Details per pair asset in GET /api/v1/prices.
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timeintegerUnix 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
ParamTypeDescription
address *string
eventstring (CreatorFeeSet | RewardsFeeSet | DevShareSet | Bonded | FreezeLifted | WhiteListedWallet | WhitelistRemoved)
fromstringWindow 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.
tostringWindow end, exclusive: unix seconds (unix ms above 1e12 and ISO dates are accepted too). Combinable with the cursor. Malformed: 400 invalid_window.
cursorstring`blockNumber:logIndex` from `pagination.nextCursor`. Anything else answers 400 invalid_cursor.
limitintegerA strict integer ("12abc" or "2.5" answer 400 bad_param); clamped to 1..100.
FieldTypeDescription
tokenstring
frominteger | nullThe from bound, unix seconds; null when not given.
tointeger | nullThe to bound, unix seconds; null when not given.
dataobject[]
paginationPagination
data[].eventstring (CreatorFeeSet | RewardsFeeSet | DevShareSet | Bonded | FreezeLifted | WhiteListedWallet | WhitelistRemoved)
data[].bpsinteger | nullCreatorFeeSet / RewardsFeeSet: the new fee in basis points; DevShareSet: the recipient's share of the creator fee in basis points (0 = removed); null otherwise.
data[].walletstring | nullWhiteListedWallet / WhitelistRemoved: the wallet; DevShareSet: the revenue-share recipient; null otherwise.
data[].capTokensRawAmount | nullWhiteListedWallet: the most it may buy while frozen (token wei); null otherwise.
data[].tagstring | nullWhiteListedWallet: the label ("Creator" on the row a new market token writes for its creator); null otherwise.
data[].removedboolean | nullDevShareSet: true when the share was removed (removeDevShare emits bps 0); null otherwise.
data[].actorstringThe tx sender.
data[].emitterstringThe token, or ATaxes for the fee and revenue-share events.
data[].txHashstring
data[].logIndexinteger
data[].blockNumberinteger
data[].timeintegerUnix 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