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
| Endpoint | Body | Returns |
|---|---|---|
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
| Endpoint | Returns |
|---|---|
GET /api/v2/tokens/{tokenAddress}/voting-delegations | Paginated delegation lifecycle rows for Voting Power. |
GET /api/v2/tokens/{tokenAddress}/voting-power/distribution | Current 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-weights | Paginated 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=50The 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:
| Field | Meaning |
|---|---|
total | Count of delegates with non-zero weight, across both the top set and other. |
topN | The top count applied to this response. |
totalVotes | Total voting weight across all delegates, in display units. |
totalVotesExact | Total voting weight in base units, for exact share and threshold math. |
holders | Top delegates, ordered by current weight descending. |
other | Aggregate of every delegate outside the top set. |
Each entry in holders reports:
| Field | Meaning |
|---|---|
account | Delegate address that carries the voting weight. |
votes | Current voting weight in display units. |
votesExact | Current voting weight in base units. |
The other bucket reports:
| Field | Meaning |
|---|---|
holders | Number of delegates aggregated into the bucket. |
votes | Combined weight of those delegates, in display units. |
votesExact | Combined 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=21000000The 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:
| Field | Meaning |
|---|---|
account | Address the voting weight resolves to, which is the delegate. |
votes | Voting weight in display units. |
votesExact | Voting weight in base units, for exact quorum and threshold math. |
asOfBlockNumber | Block at which this account's reported weight was last recorded. |
asOfBlockTimestamp | Timestamp of that block. |
asOfTxHash | Transaction that recorded the weight. |
asOfLogIndex | Log 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.
Related
- Historical Balances: balance checkpoints and snapshot reads.
- Voting Power architecture: the feature model and constraints.
- Voting Power how-to: operator workflow steps.
Historical balance at-block snapshot API
Reconstruct holder and total-supply balances as of a specific block across one or more tokens in the active DALP system, for audit and point-in-time reporting.
permit feature API reference
API reference for the DALP permit token feature, which enables EIP-2612 signature-based approvals on the asset.