SettleMint
Token features

Voting Power

API reference for the DALP Voting Power token feature, including delegation mutations, delegation history, current distribution, and per-account snapshot weights at a block.

The Voting Power feature exposes each token holder's delegated governance weight on chain.

Use this page when you need API paths for direct or relayed delegations, delegation history, or the current weight distribution. For the product model, see Voting Power architecture. For operator steps, see Voting Power how-to.

Configuration

No featureConfigs entry is required. voting-power is the API identifier for this feature. It accepts no feature-specific settings at token creation time. You can omit it from featureConfigs entirely, or pass an empty object.

Mutations

EndpointBodyReturns
POST /api/v2/tokens/{tokenAddress}/features/voting-power/delegations{ "delegatee": "0x..." }An async blockchain mutation response for the updated token.
POST /api/v2/tokens/{tokenAddress}/features/voting-power/delegations/by-signature{ "delegatee": "0x...", "nonce": "0", "expiry": "1767225600", "v": 27, "r": "0x...", "s": "0x..." }An async blockchain mutation response for the updated token.

A direct delegation uses the selected wallet, which must be registered in the token identity registry. The signature-based path relays signed data; the Platform API validates the signer before queuing the transaction.

Reads

EndpointReturns
GET /api/v2/tokens/{tokenAddress}/voting-delegationsPaginated delegation lifecycle rows for Voting Power.
GET /api/v2/tokens/{tokenAddress}/voting-power/distributionCurrent voting power per delegate, ordered by latest votes, with a top-N list and an aggregated other bucket for the remaining holders.
GET /api/v2/tokens/{tokenAddress}/voting-power/snapshot-weightsPaginated per-account voting weight at a chosen block, for quorum math and reconstructing a settled vote.

To query holder balances at a snapshot timepoint, use the historical-balances endpoints. The two features answer different questions: Voting Power tracks delegated governance weight, while Historical Balances tracks token balances and total supply over time.

Current voting power distribution

The distribution read returns a current weight breakdown: the largest delegates listed individually, with every remaining delegate rolled into one aggregate. This read powers a holder-concentration view without paging through the full delegate tail.

GET /api/v2/tokens/{tokenAddress}/voting-power/distribution?topN=50

The topN query parameter sets how many top delegates to return individually. The value ranges from 1 to 200 and defaults to 50. Every delegate beyond the top set is combined into a single other bucket.

The read returns the latest recorded weight per delegate. Delegates whose current weight is zero are excluded, so the result reflects live, non-zero voting power. A holder who delegates to another address counts toward that delegate's weight rather than appearing under their own address. If the token has no Voting Power feature attached, the read returns an empty distribution rather than an error.

The response is a single object under data:

FieldMeaning
totalCount of delegates with non-zero weight, across both the top set and other.
topNThe top count applied to this response.
totalVotesTotal voting weight across all delegates, in display units.
totalVotesExactTotal voting weight in base units, for exact share and threshold math.
holdersTop delegates, ordered by current weight descending.
otherAggregate of every delegate outside the top set.

Each entry in holders reports:

FieldMeaning
accountDelegate address that carries the voting weight.
votesCurrent voting weight in display units.
votesExactCurrent voting weight in base units.

The other bucket reports:

FieldMeaning
holdersNumber of delegates aggregated into the bucket.
votesCombined weight of those delegates, in display units.
votesExactCombined weight of those delegates, in base units.

Because total and the other bucket report the full set, you can compute each top delegate's share of the whole without reading the remaining delegates. To read a single delegate's exact frozen weight at a past block, use the snapshot-weights read below.

Snapshot weights at a block

A vote weights each holder by their voting power at a fixed record date, not their current power. An auditor, scrutineer, or governance integration needs to read that frozen weight set to verify quorum, recompute a tally, or reconstruct who could vote and with how much. This read returns exactly that set for any past block.

GET /api/v2/tokens/{tokenAddress}/voting-power/snapshot-weights?block=21000000

The block query parameter is required and sets the snapshot point. For each account, the read returns the most recent voting weight recorded at or before that block. The account is the address that carries the voting weight, which is the delegate the weight resolves to: a holder who delegates to another address contributes to that delegate's weight rather than appearing under their own address. Accounts whose voting weight was zero at the snapshot are omitted, so the response lists only accounts that carried votable weight at that block. If the token had no Voting Power feature attached at the requested block, the read returns an empty result rather than an error.

Each row reports:

FieldMeaning
accountAddress the voting weight resolves to, which is the delegate.
votesVoting weight in display units.
votesExactVoting weight in base units, for exact quorum and threshold math.
asOfBlockNumberBlock at which this account's reported weight was last recorded.
asOfBlockTimestampTimestamp of that block.
asOfTxHashTransaction that recorded the weight.
asOfLogIndexLog index of that event within the transaction.

Results page with the standard collection envelope (data, meta, links) and sort by votesExact descending by default, so the largest holders surface first. Sort instead by account, asOfBlockNumber, or asOfBlockTimestamp with sortBy and sortDirection. To read one account's snapshot weight, pass filter[account]=0x...; the account filter takes a single address and matches exact equality only.

On this page