{"openapi":"3.1.0","info":{"title":"Anticapture Gateful REST API","version":"1.0.0"},"components":{"schemas":{"DaoHealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded","error"]},"database":{"type":"string","enum":["ok","error"]},"chain":{"type":"object","properties":{"head":{"type":["integer","null"]}},"required":["head"]},"indexer":{"type":"object","properties":{"lastEventTimestamp":{"type":["integer","null"]},"lagSeconds":{"type":["integer","null"]},"fresh":{"type":"boolean"}},"required":["lastEventTimestamp","lagSeconds","fresh"]},"circuit":{"type":"object","properties":{"state":{"type":"string","enum":["CLOSED","OPEN","HALF_OPEN"]},"nextRetryIn":{"type":"integer"}},"required":["state"]}},"required":["status","database","chain","indexer","circuit"]},"LivenessResponse":{"type":"object","properties":{"database":{"type":"string","enum":["ok","error"],"description":"Database connectivity status."}},"required":["database"]},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded","error"],"description":"Overall health: ok when fresh, degraded when indexer is lagging, error when the database is unreachable."},"database":{"type":"string","enum":["ok","error"],"description":"Database connectivity status."},"chain":{"type":"object","properties":{"head":{"type":"integer","nullable":true,"description":"Latest block number reported by the RPC, or null if the RPC call failed."}},"required":["head"],"description":"On-chain state observed by this DAO API."},"indexer":{"type":"object","properties":{"lastEventTimestamp":{"type":"integer","nullable":true,"description":"Unix timestamp (seconds) of the most recent indexed event, or null if no events have been recorded."},"lagSeconds":{"type":"integer","nullable":true,"description":"Seconds between now and lastEventTimestamp, or null if the indexer hasn't produced any events."},"fresh":{"type":"boolean","description":"True when lagSeconds is within the freshness threshold (300s)."}},"required":["lastEventTimestamp","lagSeconds","fresh"],"description":"Indexer freshness signals derived from app tables."}},"required":["status","database","chain","indexer"]},"DelegationsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DelegationItem"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"],"description":"Paginated historical delegations response."},"DelegationItem":{"type":"object","properties":{"delegatorAddress":{"type":"string","format":"ethereum-address"},"delegateAddress":{"type":"string","format":"ethereum-address"},"amount":{"type":"string","format":"bigint"},"timestamp":{"type":"string","format":"bigint"},"transactionHash":{"type":"string"}},"required":["delegatorAddress","delegateAddress","amount","timestamp","transactionHash"],"description":"Single delegation transfer event in the historical delegation feed."},"OrderDirection":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Sort direction for ordered query results."},"DelegatorsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DelegatorItem"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"],"description":"Paginated delegators for a delegate address."},"DelegatorItem":{"type":"object","properties":{"delegatorAddress":{"type":"string"},"amount":{"type":"string","format":"bigint"},"timestamp":{"type":"string","format":"bigint"}},"required":["delegatorAddress","amount","timestamp"],"description":"Aggregated delegation amount and latest timestamp for one delegator."},"TreasuryResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TreasuryItem"}},"totalCount":{"type":"integer","description":"Total number of items"}},"required":["items","totalCount"],"description":"Paginated treasury time-series response."},"TreasuryItem":{"type":"object","properties":{"value":{"type":"number","description":"Treasury value in USD"},"date":{"type":"number","description":"Unix timestamp in milliseconds"}},"required":["value","date"],"description":"Single treasury time-series datapoint."},"DaysWindow":{"type":"string","enum":["7d","30d","90d","180d","365d"],"default":"365d"},"TokenHistoricalPriceResponse":{"type":"array","items":{"$ref":"#/components/schemas/TokenHistoricalPriceItem"},"description":"Historical token price points ordered by timestamp."},"TokenHistoricalPriceItem":{"type":"object","properties":{"price":{"type":"string","description":"Historical price value as a decimal string.","example":"0.1234"},"timestamp":{"type":"integer","description":"Unix timestamp in seconds.","example":1704067200}},"required":["price","timestamp"]},"TokenPropertiesResponse":{"allOf":[{"$ref":"#/components/schemas/TokenProperties"},{"type":"object","properties":{"price":{"type":"string"}},"required":["price"]}],"description":"Token properties enriched with the current token price."},"TokenProperties":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"decimals":{"type":"integer","description":"Token decimals.","example":18},"totalSupply":{"type":"string","format":"bigint"},"delegatedSupply":{"type":"string","format":"bigint"},"cexSupply":{"type":"string","format":"bigint"},"dexSupply":{"type":"string","format":"bigint"},"lendingSupply":{"type":"string","format":"bigint"},"circulatingSupply":{"type":"string","format":"bigint"},"nonCirculatingSupply":{"type":"string","format":"bigint"},"treasury":{"type":"string","format":"bigint"}},"required":["id","name","decimals","totalSupply","delegatedSupply","cexSupply","dexSupply","lendingSupply","circulatingSupply","nonCirculatingSupply","treasury"],"description":"Core token supply and treasury attributes for the active DAO token."},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message","example":"Proposal not found"},"message":{"type":"string","description":"Optional implementation detail or validation context for the error.","example":"Validation error: Expected number, received string"}},"required":["error"],"description":"Generic error payload returned by the API."},"FeedResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FeedItem"}},"totalCount":{"type":"integer","description":"Total number of matching feed events.","example":128}},"required":["items","totalCount"],"description":"Paginated governance activity feed response."},"FeedItem":{"type":"object","properties":{"txHash":{"type":"string","description":"Transaction hash."},"logIndex":{"type":"integer","description":"Log index within the transaction receipt."},"type":{"$ref":"#/components/schemas/FeedEventType"},"value":{"type":"string","format":"bigint","description":"Optional event value encoded as a decimal string when applicable."},"timestamp":{"type":"integer","description":"Event timestamp in Unix seconds.","example":1704067200},"relevance":{"$ref":"#/components/schemas/FeedRelevance"},"metadata":{"$ref":"#/components/schemas/FeedMetadata"}},"required":["txHash","logIndex","type","timestamp","relevance","metadata"],"description":"Single event in the governance activity feed."},"FeedEventType":{"type":"string","enum":["VOTE","PROPOSAL","DELEGATION","TRANSFER","PROPOSAL_EXTENDED"],"description":"Filter events by governance activity type."},"FeedRelevance":{"type":"string","enum":["HIGH","MEDIUM","LOW"],"description":"Filter events by relevance tier."},"FeedMetadata":{"oneOf":[{"$ref":"#/components/schemas/FeedVoteMetadata"},{"$ref":"#/components/schemas/FeedProposalMetadata"},{"$ref":"#/components/schemas/FeedProposalExtendedMetadata"},{"$ref":"#/components/schemas/FeedTransferMetadata"},{"$ref":"#/components/schemas/FeedDelegationMetadata"},{"nullable":true}],"description":"Type-specific metadata for the feed event. Narrow by the `kind` discriminator."},"FeedVoteMetadata":{"type":"object","properties":{"kind":{"type":"string","enum":["VOTE"],"description":"Discriminator identifying the metadata variant."},"voter":{"type":"string","description":"Voter address."},"reason":{"type":"string","nullable":true,"description":"Vote reason, when provided."},"support":{"type":"integer","description":"Vote support: 0 = against, 1 = for, 2 = abstain."},"votingPower":{"type":"string","format":"bigint","description":"Voter voting power, as a decimal string."},"proposalId":{"type":"string","description":"Proposal voted on."},"title":{"type":"string","description":"Proposal title, when known."}},"required":["kind","voter","reason","support","votingPower","proposalId"],"description":"Metadata payload for a VOTE feed event."},"FeedProposalMetadata":{"type":"object","properties":{"kind":{"type":"string","enum":["PROPOSAL"],"description":"Discriminator identifying the metadata variant."},"id":{"type":"string","description":"Proposal ID."},"proposer":{"type":"string","description":"Proposer address."},"votingPower":{"type":"string","format":"bigint","description":"Proposer voting power at proposal creation, as a decimal string."},"title":{"type":"string","description":"Proposal title."}},"required":["kind","id","proposer","votingPower","title"],"description":"Metadata payload for a PROPOSAL feed event."},"FeedProposalExtendedMetadata":{"type":"object","properties":{"kind":{"type":"string","enum":["PROPOSAL_EXTENDED"],"description":"Discriminator identifying the metadata variant."},"id":{"type":"string","description":"Proposal ID."},"title":{"type":"string","description":"Proposal title."},"endBlock":{"type":"integer","description":"New end block after the extension."},"endTimestamp":{"type":"string","format":"bigint","description":"New proposal end timestamp in Unix seconds, as a decimal string."},"proposer":{"type":"string","description":"Proposer address."}},"required":["kind","id","title","endBlock","endTimestamp","proposer"],"description":"Metadata payload for a PROPOSAL_EXTENDED feed event."},"FeedTransferMetadata":{"type":"object","properties":{"kind":{"type":"string","enum":["TRANSFER"],"description":"Discriminator identifying the metadata variant."},"from":{"type":"string","description":"Sender address."},"to":{"type":"string","description":"Recipient address."},"amount":{"type":"string","format":"bigint","description":"Transferred amount, as a decimal string."}},"required":["kind","from","to","amount"],"description":"Metadata payload for a TRANSFER feed event."},"FeedDelegationMetadata":{"type":"object","properties":{"kind":{"type":"string","enum":["DELEGATION"],"description":"Discriminator identifying the metadata variant."},"delegator":{"type":"string","description":"Delegator address."},"delegate":{"type":"string","description":"New delegate address."},"previousDelegate":{"type":"string","nullable":true,"description":"Previous delegate address, when known."},"amount":{"type":"string","format":"bigint","description":"Delegated voting power, as a decimal string."}},"required":["kind","delegator","delegate","previousDelegate","amount"],"description":"Metadata payload for a DELEGATION feed event."},"FeedEventTypeList":{"type":"array","items":{"type":"string","enum":["VOTE","PROPOSAL","DELEGATION","TRANSFER","PROPOSAL_EXTENDED"]},"description":"Filter events by governance activity type. Pass repeated query params or a comma-delimited list.","example":["VOTE"]},"EventRelevanceThresholdResponse":{"type":"object","properties":{"threshold":{"type":"string","format":"bigint","description":"Threshold value encoded as a decimal string.","example":"1000000000000000000"}},"required":["threshold"],"description":"Resolved threshold for a feed event type and relevance level."},"SupplyComparisonResponse":{"type":"object","properties":{"previousValue":{"type":"string","format":"bigint","description":"Supply value at the start of the comparison window, encoded as a decimal string (raw token base units)."},"currentValue":{"type":"string","format":"bigint","description":"Supply value at the end of the comparison window, encoded as a decimal string (raw token base units)."},"changeRate":{"type":"number","description":"Fractional ratio between current and previous values (0.0523 = +5.23%, -0.10 = -10%). Reported with 6 decimals; 0 when previousValue is 0."},"rawDelta":{"type":"string","format":"bigint","description":"Signed bigint delta as a decimal string: currentValue - previousValue."}},"required":["previousValue","currentValue","changeRate","rawDelta"],"description":"Supply metric comparison between current and previous periods."},"ActiveSupplyResponse":{"type":"object","properties":{"activeSupply":{"type":"string","format":"bigint","description":"Active token supply encoded as a decimal string.","example":"1000000000000000000000000"}},"required":["activeSupply"],"description":"Active token supply for the selected comparison window."},"ProposalsComparisonResponse":{"type":"object","properties":{"currentProposalsLaunched":{"type":"integer","description":"Number of proposals launched in the current period.","example":8},"oldProposalsLaunched":{"type":"integer","description":"Number of proposals launched in the comparison period.","example":5},"changeRate":{"type":"number","description":"Fractional ratio between current and previous periods (0.0523 = +5.23%, -0.10 = -10%). Reported with 6 decimals; 0 when the previous period is empty.","example":0.6},"rawDelta":{"type":"integer","description":"Signed integer delta: currentProposalsLaunched - oldProposalsLaunched.","example":3}},"required":["currentProposalsLaunched","oldProposalsLaunched","changeRate","rawDelta"],"description":"Proposal launch comparison between two adjacent time windows."},"VotesComparisonResponse":{"type":"object","properties":{"currentVotes":{"type":"integer","description":"Number of votes cast in the current period.","example":128},"oldVotes":{"type":"integer","description":"Number of votes cast in the comparison period.","example":96},"changeRate":{"type":"number","description":"Fractional ratio between current and previous periods (0.0523 = +5.23%, -0.10 = -10%). Reported with 6 decimals; 0 when the previous period is empty.","example":0.33},"rawDelta":{"type":"integer","description":"Signed integer delta: currentVotes - oldVotes.","example":32}},"required":["currentVotes","oldVotes","changeRate","rawDelta"],"description":"Vote-count comparison between two adjacent time windows."},"AverageTurnoutComparisonResponse":{"type":"object","properties":{"currentAverageTurnout":{"type":"string","description":"Average turnout for the current period encoded as a string.","example":"120000000000000000"},"oldAverageTurnout":{"type":"string","description":"Average turnout for the previous period encoded as a string.","example":"90000000000000000"},"changeRate":{"type":"number","description":"Fractional ratio between current and previous periods (0.0523 = +5.23%, -0.10 = -10%). Reported with 6 decimals; 0 when the previous period is empty.","example":0.333333},"rawDelta":{"type":"string","format":"bigint","description":"Signed bigint delta as a decimal string: currentAverageTurnout - oldAverageTurnout.","example":"30000000000000000"}},"required":["currentAverageTurnout","oldAverageTurnout","changeRate","rawDelta"],"description":"Average turnout comparison between two adjacent time windows."},"ProposalActivityResponse":{"type":"object","properties":{"address":{"type":"string","format":"ethereum-address","description":"Delegate address."},"totalProposals":{"type":"integer","description":"Total proposals reviewed in the dataset."},"votedProposals":{"type":"integer","description":"Number of proposals the delegate voted on."},"neverVoted":{"type":"boolean","description":"Whether the delegate never cast a vote."},"winRate":{"type":"number","description":"Share of proposals where the delegate sided with outcome."},"yesRate":{"type":"number","description":"Share of delegate votes cast in support."},"avgTimeBeforeEnd":{"type":"number","description":"Average seconds between the delegate vote and proposal end time."},"proposals":{"type":"array","items":{"$ref":"#/components/schemas/ProposalActivityItem"}}},"required":["address","totalProposals","votedProposals","neverVoted","winRate","yesRate","avgTimeBeforeEnd","proposals"],"description":"Delegate proposal activity metrics and proposal-by-proposal history."},"ProposalActivityItem":{"type":"object","properties":{"proposal":{"$ref":"#/components/schemas/ProposalActivityProposal"},"userVote":{"$ref":"#/components/schemas/ProposalActivityUserVote"}},"required":["proposal","userVote"],"description":"Combined proposal and delegate vote context for one activity row."},"ProposalActivityProposal":{"type":"object","properties":{"id":{"type":"string","description":"Onchain proposal identifier."},"daoId":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\")."},"proposerAccountId":{"type":"string","format":"ethereum-address","description":"Address that created the proposal."},"title":{"type":"string","description":"Proposal title."},"description":{"type":"string","description":"Proposal body."},"startBlock":{"type":"number","description":"Start block number."},"endBlock":{"type":"number","description":"End block number."},"timestamp":{"type":"string","nullable":true,"description":"Proposal creation timestamp in Unix seconds as a string.","example":"1704067200"},"status":{"type":"string","description":"Current proposal status."},"forVotes":{"type":"string","format":"bigint","description":"Votes cast in favor, encoded as a decimal string."},"againstVotes":{"type":"string","format":"bigint","description":"Votes cast against, encoded as a decimal string."},"abstainVotes":{"type":"string","format":"bigint","description":"Abstain votes, encoded as a decimal string."}},"required":["id","daoId","proposerAccountId","title","description","startBlock","endBlock","status","forVotes","againstVotes","abstainVotes"],"description":"Proposal snapshot included in the delegate activity response."},"ProposalActivityUserVote":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Vote identifier."},"voterAccountId":{"type":"string","format":"ethereum-address","description":"Address that cast the vote."},"proposalId":{"type":"string","description":"Related proposal ID."},"support":{"$ref":"#/components/schemas/VoteSupport"},"votingPower":{"type":"string","format":"bigint","description":"Voting power used by the delegate, encoded as a string."},"reason":{"type":"string","nullable":true,"description":"Optional vote rationale."},"timestamp":{"type":"string","nullable":true,"description":"Vote timestamp in Unix seconds as a string.","example":"1704067200"}},"required":["id","voterAccountId","proposalId","support","reason"],"description":"Vote cast by the requested delegate for a given proposal."},"VoteSupport":{"type":"string","description":"Governance vote direction.","example":"1"},"OnchainProposalsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OnchainProposal"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"]},"OnchainProposal":{"oneOf":[{"$ref":"#/components/schemas/OnchainFullProposal"},{"$ref":"#/components/schemas/OnchainLeanProposal"}],"discriminator":{"propertyName":"variant","mapping":{"full":"#/components/schemas/OnchainFullProposal","lean":"#/components/schemas/OnchainLeanProposal"}},"description":"Onchain proposal. Narrow by the `variant` discriminator: `full` includes the execution payload and description; `lean` omits them."},"OnchainFullProposal":{"type":"object","properties":{"id":{"type":"string","description":"Onchain proposal identifier."},"daoId":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\")."},"txHash":{"type":"string","description":"Proposal creation transaction hash."},"proposerAccountId":{"type":"string","format":"ethereum-address","description":"Address that created the proposal."},"title":{"type":"string","description":"Proposal title."},"startBlock":{"type":"integer","description":"Start block number."},"endBlock":{"type":"integer","description":"End block number."},"timestamp":{"type":"integer","description":"Proposal creation timestamp in Unix seconds."},"status":{"type":"string","description":"Current proposal status."},"forVotes":{"type":"string","format":"bigint","description":"Votes cast in favor, encoded as a decimal string."},"againstVotes":{"type":"string","format":"bigint","description":"Votes cast against, encoded as a decimal string."},"abstainVotes":{"type":"string","format":"bigint","description":"Abstain votes, encoded as a decimal string."},"startTimestamp":{"type":"integer","description":"Proposal start timestamp in Unix seconds."},"endTimestamp":{"type":"integer","description":"Proposal end timestamp in Unix seconds."},"queuedTimestamp":{"type":"integer","nullable":true,"description":"Timestamp (Unix seconds) when the proposal was queued, or null if it never was."},"executedTimestamp":{"type":"integer","nullable":true,"description":"Timestamp (Unix seconds) when the proposal was executed, or null if it never was."},"queuedTxHash":{"type":"string","nullable":true,"description":"Transaction hash of the queue event, or null if the proposal was never queued."},"executedTxHash":{"type":"string","nullable":true,"description":"Transaction hash of the execute event, or null if the proposal was never executed."},"quorum":{"type":"string","format":"bigint","description":"Required quorum encoded as a decimal string."},"proposalType":{"type":"integer","nullable":true,"description":"Optional proposal type discriminator."},"variant":{"type":"string","enum":["full"],"description":"Discriminator. `full` when the execution payload and proposal description are included."},"description":{"type":"string","description":"Proposal body."},"calldatas":{"type":"array","items":{"type":"string"},"description":"Encoded calldata payloads executed by the proposal."},"values":{"type":"array","items":{"type":"string","format":"bigint"},"description":"ETH values attached to each call, encoded as strings."},"targets":{"type":"array","items":{"type":"string","format":"ethereum-address"},"description":"Contract targets invoked by the proposal."}},"required":["id","daoId","txHash","proposerAccountId","title","startBlock","endBlock","timestamp","status","forVotes","againstVotes","abstainVotes","startTimestamp","endTimestamp","queuedTimestamp","executedTimestamp","queuedTxHash","executedTxHash","quorum","proposalType","variant","description","calldatas","values","targets"],"description":"Full onchain proposal, returned when the request does not set `lean=true`."},"OnchainLeanProposal":{"type":"object","properties":{"id":{"type":"string","description":"Onchain proposal identifier."},"daoId":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\")."},"txHash":{"type":"string","description":"Proposal creation transaction hash."},"proposerAccountId":{"type":"string","format":"ethereum-address","description":"Address that created the proposal."},"title":{"type":"string","description":"Proposal title."},"startBlock":{"type":"integer","description":"Start block number."},"endBlock":{"type":"integer","description":"End block number."},"timestamp":{"type":"integer","description":"Proposal creation timestamp in Unix seconds."},"status":{"type":"string","description":"Current proposal status."},"forVotes":{"type":"string","format":"bigint","description":"Votes cast in favor, encoded as a decimal string."},"againstVotes":{"type":"string","format":"bigint","description":"Votes cast against, encoded as a decimal string."},"abstainVotes":{"type":"string","format":"bigint","description":"Abstain votes, encoded as a decimal string."},"startTimestamp":{"type":"integer","description":"Proposal start timestamp in Unix seconds."},"endTimestamp":{"type":"integer","description":"Proposal end timestamp in Unix seconds."},"queuedTimestamp":{"type":"integer","nullable":true,"description":"Timestamp (Unix seconds) when the proposal was queued, or null if it never was."},"executedTimestamp":{"type":"integer","nullable":true,"description":"Timestamp (Unix seconds) when the proposal was executed, or null if it never was."},"queuedTxHash":{"type":"string","nullable":true,"description":"Transaction hash of the queue event, or null if the proposal was never queued."},"executedTxHash":{"type":"string","nullable":true,"description":"Transaction hash of the execute event, or null if the proposal was never executed."},"quorum":{"type":"string","format":"bigint","description":"Required quorum encoded as a decimal string."},"proposalType":{"type":"integer","nullable":true,"description":"Optional proposal type discriminator."},"variant":{"type":"string","enum":["lean"],"description":"Discriminator. `lean` when the execution payload (calldatas/values/targets) and proposal description are omitted to reduce response size."}},"required":["id","daoId","txHash","proposerAccountId","title","startBlock","endBlock","timestamp","status","forVotes","againstVotes","abstainVotes","startTimestamp","endTimestamp","queuedTimestamp","executedTimestamp","queuedTxHash","executedTxHash","quorum","proposalType","variant"],"description":"Lean onchain proposal, returned when the request sets `lean=true`. Omits calldatas/values/targets and the proposal description."},"OnchainProposalStatusList":{"type":"array","items":{"type":"string","enum":["PENDING","ACTIVE","CANCELED","DEFEATED","SUCCEEDED","QUEUED","EXPIRED","PENDING_EXECUTION","EXECUTED","VETOED","NO_QUORUM"]},"description":"Proposal status filter. Pass repeated query params or a comma-delimited list.","example":["ACTIVE"]},"HistoricalBalancesResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/HistoricalBalance"}},"totalCount":{"type":"integer","description":"Total number of matching historical balance rows."}},"required":["items","totalCount"],"description":"Paginated historical balance records for one account."},"HistoricalBalance":{"type":"object","properties":{"transactionHash":{"type":"string","description":"Transaction hash."},"daoId":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\")."},"accountId":{"type":"string","format":"ethereum-address","description":"Account address."},"balance":{"type":"string","format":"bigint","description":"Account balance after the historical event."},"delta":{"type":"string","format":"bigint","description":"Balance change introduced by the historical event."},"timestamp":{"type":"string","format":"bigint","description":"Event timestamp in Unix seconds as a string.","example":"1704067200"},"logIndex":{"type":"integer","description":"Log index within the transaction receipt."},"transfer":{"$ref":"#/components/schemas/HistoricalBalanceTransfer"}},"required":["transactionHash","daoId","accountId","balance","delta","timestamp","logIndex","transfer"],"description":"Single historical balance record enriched with transfer context."},"HistoricalBalanceTransfer":{"type":"object","properties":{"value":{"type":"string","format":"bigint","description":"Transferred amount encoded as a decimal string."},"from":{"type":"string","format":"ethereum-address","description":"Sender address."},"to":{"type":"string","format":"ethereum-address","description":"Recipient address."}},"required":["value","from","to"],"description":"Transfer event associated with a historical balance row."},"LastUpdateResponse":{"type":"object","properties":{"lastUpdate":{"type":"string","description":"Latest refresh time in ISO-8601 format.","example":"2026-03-24T12:00:00.000Z"}},"required":["lastUpdate"],"description":"Response payload describing the latest update time for a chart."},"DelegationPercentageResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DelegationPercentageItem"}},"totalCount":{"type":"integer","description":"Total number of matching day buckets across the requested window (ignores skip/limit)."}},"required":["items","totalCount"]},"DelegationPercentageItem":{"type":"object","properties":{"date":{"type":"string","description":"Unix day bucket represented as a timestamp string.","example":"1704067200"},"high":{"type":"string","description":"Delegation percentage value for the day bucket.","example":"42.75"}},"required":["date","high"]},"HistoricalVotingPowersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/HistoricalVotingPower"}},"totalCount":{"type":"integer","description":"Total number of matching historical voting power rows."}},"required":["items","totalCount"],"description":"Paginated historical voting power records."},"HistoricalVotingPower":{"type":"object","properties":{"transactionHash":{"type":"string","description":"Transaction hash."},"daoId":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\")."},"accountId":{"type":"string","format":"ethereum-address","description":"Account address."},"votingPower":{"type":"string","format":"bigint","description":"Voting power after the event, encoded as a decimal string."},"delta":{"type":"string","format":"bigint","description":"Voting power change introduced by the event."},"timestamp":{"type":"string","format":"bigint","description":"Event timestamp in Unix seconds as a string.","example":"1704067200"},"logIndex":{"type":"integer","description":"Log index within the transaction receipt."},"delegation":{"$ref":"#/components/schemas/HistoricalVotingPowerDelegation"},"transfer":{"$ref":"#/components/schemas/HistoricalVotingPowerTransfer"}},"required":["transactionHash","daoId","accountId","votingPower","delta","timestamp","logIndex","delegation","transfer"],"description":"Single historical voting power record enriched with delegation and transfer context."},"HistoricalVotingPowerDelegation":{"type":"object","nullable":true,"properties":{"from":{"type":"string","format":"ethereum-address"},"value":{"type":"string","format":"bigint"},"to":{"type":"string","format":"ethereum-address"},"previousDelegate":{"type":"string","nullable":true,"format":"ethereum-address"}},"required":["from","value","to","previousDelegate"],"description":"Delegation event associated with a historical voting power row."},"HistoricalVotingPowerTransfer":{"type":"object","nullable":true,"properties":{"value":{"type":"string","format":"bigint"},"from":{"type":"string","format":"ethereum-address"},"to":{"type":"string","format":"ethereum-address"}},"required":["value","from","to"],"description":"Transfer event associated with a historical voting power row."},"VotingPowerVariationsResponse":{"type":"object","properties":{"period":{"$ref":"#/components/schemas/PeriodResponse"},"items":{"type":"array","items":{"$ref":"#/components/schemas/VotingPowerVariation"}}},"required":["period","items"],"description":"List of voting power variations for multiple accounts in the selected period."},"PeriodResponse":{"type":"object","properties":{"startTimestamp":{"type":"string"},"endTimestamp":{"type":"string"}},"required":["startTimestamp","endTimestamp"],"description":"Inclusive time period represented as ISO-8601 timestamps."},"VotingPowerVariation":{"type":"object","properties":{"accountId":{"type":"string","format":"ethereum-address","description":"Account address."},"previousVotingPower":{"type":"string","format":"bigint","description":"Voting power at the start of the comparison window."},"currentVotingPower":{"type":"string","format":"bigint","description":"Voting power at the end of the comparison window."},"absoluteChange":{"type":"string","format":"bigint","description":"Absolute voting power change encoded as a decimal string."},"percentageChange":{"type":"string","description":"Relative voting power change as a decimal string (e.g. \"5.23\"). Set to the sentinel \"NO BASELINE\" when the previous voting power is zero."}},"required":["accountId","previousVotingPower","currentVotingPower","absoluteChange","percentageChange"],"description":"Voting power delta for a single account across two timestamps."},"VotingPowerVariationsByAccountIdResponse":{"type":"object","properties":{"period":{"$ref":"#/components/schemas/PeriodResponse"},"data":{"$ref":"#/components/schemas/VotingPowerVariation"}},"required":["period","data"],"description":"Voting power variation response for a single account."},"VotingPowersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/VotingPower"}},"totalCount":{"type":"integer","description":"Total number of matching voting power rows."}},"required":["items","totalCount"],"description":"Paginated current voting power records."},"VotingPower":{"type":"object","properties":{"accountId":{"type":"string","format":"ethereum-address","description":"Account address."},"votingPower":{"type":"string","format":"bigint","description":"Current voting power encoded as a decimal string."},"votesCount":{"type":"integer","description":"Total votes cast by the account."},"proposalsCount":{"type":"integer","description":"Total proposals created by the account."},"delegationsCount":{"type":"integer","description":"Total delegations associated with the account."},"balance":{"type":"string","format":"bigint","description":"Current token balance encoded as a decimal string."},"variation":{"$ref":"#/components/schemas/VotingPowerVariationField"}},"required":["accountId","votingPower","votesCount","proposalsCount","delegationsCount","variation"],"description":"Current voting power snapshot for one account."},"VotingPowerVariationField":{"type":"object","properties":{"absoluteChange":{"type":"string","format":"bigint"},"percentageChange":{"type":"string"}},"required":["absoluteChange","percentageChange"],"description":"Embedded voting power delta metadata for a current voting power row."},"AccountBalanceVariationsResponse":{"type":"object","properties":{"period":{"$ref":"#/components/schemas/PeriodResponse"},"items":{"type":"array","items":{"$ref":"#/components/schemas/AccountBalanceVariation"}}},"required":["period","items"],"description":"List of balance variations for multiple accounts in the selected period."},"AccountBalanceVariation":{"type":"object","properties":{"accountId":{"type":"string","format":"ethereum-address","description":"Account address."},"previousBalance":{"type":"string","format":"bigint","description":"Balance at the start of the comparison window."},"currentBalance":{"type":"string","format":"bigint","description":"Balance at the end of the comparison window."},"absoluteChange":{"type":"string","format":"bigint","description":"Absolute balance change encoded as a decimal string."},"percentageChange":{"type":"string","description":"Relative balance change as a decimal string (e.g. \"5.23\"). Set to the sentinel \"NO BASELINE\" when the previous balance is zero."}},"required":["accountId","previousBalance","currentBalance","absoluteChange","percentageChange"],"description":"Balance delta for a single account across two timestamps."},"AccountBalanceVariationsByAccountIdResponse":{"type":"object","properties":{"period":{"$ref":"#/components/schemas/PeriodResponse"},"data":{"$ref":"#/components/schemas/AccountBalanceVariation"}},"required":["period","data"],"description":"Balance variation response for a single account."},"AccountBalancesWithVariationResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AccountBalanceWithVariation"}},"period":{"$ref":"#/components/schemas/PeriodResponse"},"totalCount":{"type":"integer"}},"required":["items","period","totalCount"]},"AccountBalanceWithVariation":{"type":"object","properties":{"address":{"type":"string","format":"ethereum-address"},"balance":{"type":"string","format":"bigint"},"tokenId":{"type":"string","format":"ethereum-address"},"delegate":{"type":"string","format":"ethereum-address"},"variation":{"$ref":"#/components/schemas/AccountBalanceVariation"}},"required":["address","balance","tokenId","delegate","variation"]},"AccountBalanceWithVariationResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/AccountBalanceWithVariation"},"period":{"$ref":"#/components/schemas/PeriodResponse"}},"required":["data","period"]},"AccountInteractionsResponse":{"type":"object","properties":{"period":{"$ref":"#/components/schemas/PeriodResponse"},"totalCount":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/AccountInteraction"}}},"required":["period","totalCount","items"],"description":"Paginated list of account interaction aggregates."},"AccountInteraction":{"type":"object","properties":{"accountId":{"type":"string","format":"ethereum-address","description":"Counterparty account ID."},"amountTransferred":{"type":"string","format":"bigint","description":"Net amount transferred between the requested account and the counterparty."},"totalVolume":{"type":"string","format":"bigint","description":"Gross transfer volume between the requested account and the counterparty."},"transferCount":{"type":"string","format":"bigint","description":"Number of transfers observed for the interaction pair."}},"required":["accountId","amountTransferred","totalVolume","transferCount"],"description":"Aggregated interaction metrics between the requested account and another account."},"TransfersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Transfer"}},"totalCount":{"type":"integer","description":"Total number of matching transfers."}},"required":["items","totalCount"]},"Transfer":{"type":"object","properties":{"transactionHash":{"type":"string","description":"Transaction hash."},"daoId":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\")."},"tokenId":{"type":"string","format":"ethereum-address","description":"Token contract address."},"amount":{"type":"string","format":"bigint","description":"Transferred amount encoded as a decimal string."},"fromAccountId":{"type":"string","format":"ethereum-address","description":"Sender address."},"toAccountId":{"type":"string","format":"ethereum-address","description":"Recipient address."},"timestamp":{"type":"string","format":"bigint","description":"Transfer timestamp in Unix seconds as a string.","example":"1704067200"},"logIndex":{"type":"integer","description":"Log index within the transaction receipt."},"isCex":{"type":"boolean","description":"Whether the transfer touched a centralized exchange."},"isDex":{"type":"boolean","description":"Whether the transfer touched a decentralized exchange."},"isLending":{"type":"boolean","description":"Whether the transfer touched a lending protocol."},"isTotal":{"type":"boolean","description":"Whether the transfer affects total-supply accounting."}},"required":["transactionHash","daoId","tokenId","amount","fromAccountId","toAccountId","timestamp","logIndex","isCex","isDex","isLending","isTotal"]},"OnchainVotesResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OnchainVote"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"]},"OnchainVote":{"type":"object","properties":{"voterAddress":{"type":"string","format":"ethereum-address"},"transactionHash":{"type":"string"},"proposalId":{"type":"string"},"support":{"$ref":"#/components/schemas/VoteSupport"},"votingPower":{"type":"string","format":"bigint","description":"Voting power encoded as a decimal string."},"reason":{"type":"string","nullable":true},"timestamp":{"type":"integer","description":"Vote timestamp in Unix seconds."},"proposalTitle":{"type":"string","nullable":true}},"required":["voterAddress","transactionHash","proposalId","votingPower","timestamp"]},"VotersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Voter"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"],"description":"Paginated voter or non-voter records for a proposal."},"Voter":{"type":"object","properties":{"voter":{"type":"string","format":"ethereum-address"},"votingPower":{"type":"string","format":"bigint"},"lastVoteTimestamp":{"type":"number"},"votingPowerVariation":{"type":"string","format":"bigint"}},"required":["voter","votingPower","lastVoteTimestamp","votingPowerVariation"],"description":"Voter or non-voter record associated with a proposal."},"DaoResponse":{"type":"object","properties":{"id":{"type":"string","description":"DAO identifier (uppercase, e.g. \"ENS\").","example":"ENS"},"chainId":{"type":"integer"},"quorum":{"type":"string","format":"bigint"},"proposalThreshold":{"type":"string","format":"bigint"},"votingDelay":{"type":"string","format":"bigint"},"votingPeriod":{"type":"string","format":"bigint"},"timelockDelay":{"type":"string","format":"bigint"},"supportsCalldataReview":{"type":"boolean"},"supportsOffchainData":{"type":"boolean"}},"required":["id","chainId","quorum","proposalThreshold","votingDelay","votingPeriod","timelockDelay","supportsCalldataReview","supportsOffchainData"],"description":"Current governance parameters and feature flags for the active DAO."},"TokenMetricsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TokenMetricItem"}},"pageInfo":{"$ref":"#/components/schemas/PageInfo"}},"required":["items","pageInfo"]},"TokenMetricItem":{"type":"object","properties":{"date":{"type":"string","description":"Unix day bucket represented as a timestamp string.","example":"1704067200"},"high":{"type":"string","format":"bigint","description":"Highest observed value for the period.","example":"14250000000000000000"},"volume":{"type":"string","format":"bigint","description":"Total volume observed for the period.","example":"1200500000000000000000"}},"required":["date","high","volume"]},"PageInfo":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Whether more items are available."},"hasPreviousPage":{"type":"boolean","description":"Whether earlier items are available."},"endDate":{"type":"string","nullable":true,"description":"End cursor for the current page."},"startDate":{"type":"string","nullable":true,"description":"Start cursor for the current page."}},"required":["hasNextPage","hasPreviousPage","endDate","startDate"]},"OffchainProposalsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OffchainProposal"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"]},"OffchainProposal":{"type":"object","properties":{"id":{"type":"string","description":"Snapshot proposal identifier."},"spaceId":{"type":"string","description":"Snapshot space identifier."},"author":{"type":"string","description":"Address or ENS of the author."},"title":{"type":"string","description":"Proposal title."},"body":{"type":"string","description":"Proposal body. Omitted when the request sets `lean=true`."},"discussion":{"type":"string","description":"Discussion URL or thread reference."},"type":{"type":"string","description":"Snapshot proposal type."},"start":{"type":"integer","description":"Voting start timestamp in Unix seconds."},"end":{"type":"integer","description":"Voting end timestamp in Unix seconds."},"state":{"type":"string","description":"Current Snapshot proposal state."},"created":{"type":"integer","description":"Creation timestamp in Unix seconds."},"updated":{"type":"integer","description":"Last update timestamp in Unix seconds."},"link":{"type":"string","description":"Canonical Snapshot proposal URL."},"flagged":{"type":"boolean","description":"Whether the proposal was flagged by Snapshot."},"scores":{"type":"array","items":{"type":"number"}},"choices":{"type":"array","items":{"type":"string"}},"network":{"type":"string"},"snapshot":{"type":"number","nullable":true},"strategies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"network":{"type":"string"},"params":{"type":"object","additionalProperties":{"nullable":true}}},"required":["name","network","params"]}}},"required":["id","spaceId","author","title","discussion","type","start","end","state","created","updated","link","flagged","scores","choices","network","snapshot","strategies"]},"OffchainProposalStatusList":{"type":"array","items":{"type":"string","enum":["active","closed","pending"]},"description":"Snapshot proposal state filter. Pass repeated query params or a comma-delimited list.","example":["active"]},"OffchainVotesResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OffchainVote"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"]},"OffchainVote":{"type":"object","properties":{"voter":{"type":"string","format":"ethereum-address"},"proposalId":{"type":"string"},"choice":{"$ref":"#/components/schemas/SnapshotVoteChoice"},"vp":{"type":"number","nullable":true},"reason":{"type":"string"},"created":{"type":"integer"},"proposalTitle":{"type":"string","nullable":true}},"required":["voter","proposalId","vp","reason","created","proposalTitle"]},"SnapshotVoteChoice":{"type":"array","items":{"type":"string","nullable":false}},"OffchainVotersResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OffchainNonVoter"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"]},"OffchainNonVoter":{"type":"object","properties":{"voter":{"type":"string","format":"ethereum-address"},"votingPower":{"type":"string","format":"bigint"}},"required":["voter","votingPower"]},"DraftProposalList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DraftProposal"}}},"required":["items"]},"DraftProposal":{"type":"object","properties":{"id":{"type":"string"},"daoId":{"type":"string"},"author":{"type":"string","format":"ethereum-address"},"title":{"type":"string"},"discussionUrl":{"type":"string"},"body":{"type":"string"},"actions":{"type":"array","items":{"$ref":"#/components/schemas/DraftAction"}},"createdAt":{"type":"string","format":"bigint","description":"Creation timestamp in Unix milliseconds, as a decimal string."},"updatedAt":{"type":"string","format":"bigint","description":"Last-updated timestamp in Unix milliseconds, as a decimal string."}},"required":["id","daoId","author","title","discussionUrl","body","actions","createdAt","updatedAt"]},"DraftAction":{"type":"object","additionalProperties":{"nullable":true},"description":"A single proposal action encoded as a JSON object."},"CreateDraftBody":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Client-generated UUID for the draft."},"address":{"type":"string"},"title":{"type":"string","default":""},"discussionUrl":{"type":"string","default":""},"body":{"type":"string","default":""},"actions":{"type":"array","items":{"$ref":"#/components/schemas/DraftAction"},"default":[]}},"required":["id","address"]},"UpdateDraftBody":{"type":"object","properties":{"address":{"type":"string"},"title":{"type":"string"},"discussionUrl":{"type":"string"},"body":{"type":"string"},"actions":{"type":"array","items":{"$ref":"#/components/schemas/DraftAction"}}},"required":["address"]},"RevenueActionsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueActionsItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Monthly action counts by category (Registration, Renewal, Premium)."},"RevenueActionsItem":{"type":"object","properties":{"date":{"type":"integer","description":"Month start (Unix timestamp in seconds, UTC)."},"category":{"$ref":"#/components/schemas/RevenueActionCategory"},"actions":{"type":"integer","description":"Number of actions of this category in the given month."}},"required":["date","category","actions"],"description":"Single revenue actions datapoint."},"RevenueActionCategory":{"type":"string","enum":["Registration","Renewal","Premium"],"description":"Category of ENS revenue-generating action."},"RevenueActiveNamesResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueActiveNamesItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Monthly net change and cumulative count of active .eth names."},"RevenueActiveNamesItem":{"type":"object","properties":{"date":{"type":"integer","description":"Month start (Unix timestamp in seconds, UTC)."},"netChange":{"type":"number","description":"Net change in active .eth names for the month."},"cumulativeActive":{"type":"number","description":"Cumulative count of active .eth names as of the month."}},"required":["date","netChange","cumulativeActive"],"description":"Single active-names datapoint."},"RevenueNewWalletsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueNewWalletsItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Monthly new-wallet counts and the cumulative wallet total for ENS."},"RevenueNewWalletsItem":{"type":"object","properties":{"date":{"type":"integer","description":"Month start (Unix timestamp in seconds, UTC)."},"newWallets":{"type":"number","description":"New wallets that interacted with ENS in the given month."},"cumulativeWallets":{"type":"number","description":"Cumulative count of ENS wallets as of the given month."}},"required":["date","newWallets","cumulativeWallets"],"description":"Single new-wallets datapoint."},"RevenueRenewalFunnelResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueRenewalFunnelItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Renewal funnel per expiry month: terms expiring, renewed, churned, and renewal rate."},"RevenueRenewalFunnelItem":{"type":"object","properties":{"date":{"type":"integer","description":"Expiry month start (Unix timestamp in seconds, UTC)."},"termsExpiring":{"type":"number","description":"Total .eth terms expiring in the given month."},"renewedCount":{"type":"number","description":"Number of expiring terms that were renewed."},"churnedCount":{"type":"number","description":"Number of expiring terms that were not renewed."},"renewalRatePct":{"type":"number","description":"Renewal rate for the month, as a percentage (0-100)."}},"required":["date","termsExpiring","renewedCount","churnedCount","renewalRatePct"],"description":"Single renewal-funnel datapoint keyed by expiry month."},"RevenueTotalsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueTotalsItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Monthly ENS revenue totals split into registration, premium, and renewal, in both USD and ETH."},"RevenueTotalsItem":{"type":"object","properties":{"date":{"type":"integer","description":"Month start (Unix timestamp in seconds, UTC)."},"registrationUsd":{"type":"number","description":"USD revenue from new .eth registrations in the month."},"premiumUsd":{"type":"number","description":"USD revenue from temporary premium auctions in the given month."},"renewalUsd":{"type":"number","description":"USD revenue from .eth renewals in the given month."},"totalUsd":{"type":"number","description":"Total USD revenue for the month (upstream sum; not recomputed)."},"registrationEth":{"type":"number","description":"ETH revenue from new .eth registrations in the month."},"premiumEth":{"type":"number","description":"ETH revenue from temporary premium auctions in the given month."},"renewalEth":{"type":"number","description":"ETH revenue from .eth renewals in the given month."}},"required":["date","registrationUsd","premiumUsd","renewalUsd","totalUsd","registrationEth","premiumEth","renewalEth"],"description":"Single revenue-totals datapoint."},"RevenueByCategoryResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueByCategoryItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Monthly ENS revenue split by category (Registration vs Renewal) in USD and ETH, sourced from the Steakhouse accounting ledger."},"RevenueByCategoryItem":{"type":"object","properties":{"date":{"type":"integer","description":"Month start (Unix timestamp in seconds, UTC)."},"category":{"$ref":"#/components/schemas/RevenueByCategoryCategory"},"revenueUsd":{"type":"number","description":"USD revenue for the category in the given month."},"revenueEth":{"type":"number","description":"ETH revenue for the category in the given month."}},"required":["date","category","revenueUsd","revenueEth"],"description":"Single revenue-by-category datapoint."},"RevenueByCategoryCategory":{"type":"string","enum":["Registration","Renewal"],"description":"Revenue category as reported by the Steakhouse accounting ledger."},"RevenueRenewalTenureResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RevenueRenewalTenureItem"}},"totalCount":{"type":"integer","description":"Total number of items returned."}},"required":["items","totalCount"],"description":"Per expiry month, count of names in each tenure bucket (0/1/2/3+ renewals) and the total renewals in that bucket."},"RevenueRenewalTenureItem":{"type":"object","properties":{"date":{"type":"integer","description":"Expiry month start (Unix timestamp in seconds, UTC)."},"tenureBucket":{"$ref":"#/components/schemas/RevenueRenewalTenureBucket"},"names":{"type":"integer","description":"Count of names in this tenure bucket for the expiry month."},"totalRenewalsInBucket":{"type":"integer","description":"Total renewals contributed by names in this bucket."}},"required":["date","tenureBucket","names","totalRenewalsInBucket"],"description":"Single renewal-tenure datapoint keyed by expiry month."},"RevenueRenewalTenureBucket":{"type":"string","enum":["0 renewals (one-shot)","1 renewal","2 renewals","3+ renewals"],"description":"Tenure bucket label as returned by Dune."},"RelayerVoteResponse":{"type":"object","properties":{"transactionHash":{"type":"string"},"voter":{"type":"string"}},"required":["transactionHash","voter"]},"RelayerErrorResponse":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}},"required":["error","code"]},"RelayerVoteRequest":{"type":"object","properties":{"proposalId":{"type":"string","description":"Proposal ID as decimal string","example":"42"},"support":{"type":"integer","minimum":0,"maximum":2,"description":"0=against, 1=for, 2=abstain"},"v":{"type":"integer","minimum":0,"maximum":255},"r":{"type":"string"},"s":{"type":"string"}},"required":["proposalId","support","v","r","s"]},"RelayerDelegateResponse":{"type":"object","properties":{"transactionHash":{"type":"string"},"delegator":{"type":"string"}},"required":["transactionHash","delegator"]},"RelayerDelegateRequest":{"type":"object","properties":{"delegatee":{"type":"string"},"nonce":{"type":"string","description":"Delegation nonce as decimal string","example":"0"},"expiry":{"type":"string","description":"Signature expiry timestamp as decimal string","example":"1718000000"},"v":{"type":"integer","minimum":0,"maximum":255},"r":{"type":"string"},"s":{"type":"string"}},"required":["delegatee","nonce","expiry","v","r","s"]},"RelayerHealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]}},"required":["status"]},"RelayerConfigResponse":{"type":"object","properties":{"minVotingPower":{"type":"string","format":"bigint","description":"Minimum voting power required to relay, as a decimal string (uint256)."},"limits":{"type":"object","properties":{"vote":{"type":"integer","minimum":0},"delegation":{"type":"integer","minimum":0}},"required":["vote","delegation"],"description":"Maximum number of relays per address per calendar month (UTC), per operation."}},"required":["minVotingPower","limits"]},"RelayerRateLimitResponse":{"type":"object","properties":{"address":{"type":"string","description":"EIP-55 checksummed Ethereum address."},"vote":{"type":"object","properties":{"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0}},"required":["used","remaining","limit"]},"delegation":{"type":"object","properties":{"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":0}},"required":["used","remaining","limit"]},"resetsAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of the next UTC month start."}},"required":["address","vote","delegation","resetsAt"]},"RelayerBalanceResponse":{"type":"object","properties":{"hasEnoughBalance":{"type":"boolean","description":"True when the relayer wallet's native balance is at or above the configured threshold."},"balanceWei":{"type":"string","format":"bigint","description":"Current native balance of the relayer wallet, as a decimal string (uint256, in wei)."},"thresholdWei":{"type":"string","format":"bigint","description":"Minimum native balance the relayer must hold to be considered funded, as a decimal string (uint256, in wei)."}},"required":["hasEnoughBalance","balanceWei","thresholdWei"]}},"parameters":{},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/health":{"get":{"operationId":"gatewayHealth","summary":"Gateway health and upstream dependency states","description":"Returns 200 only when every configured DAO API, relayer, address enrichment, and token service upstream responds to /health.","tags":["system"],"responses":{"200":{"description":"Gateway and every configured upstream are healthy.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"commit":{"type":"string"},"upstreams":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"string","enum":["ok","down"]},"circuit":{"type":"string","enum":["CLOSED","OPEN","HALF_OPEN"]},"nextRetryIn":{"type":"integer"},"error":{"type":"string"}},"required":["status","circuit"]}}},"required":["status","upstreams"]}}}},"503":{"description":"At least one configured upstream is unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"commit":{"type":"string"},"upstreams":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"string","enum":["ok","down"]},"circuit":{"type":"string","enum":["CLOSED","OPEN","HALF_OPEN"]},"nextRetryIn":{"type":"integer"},"error":{"type":"string"}},"required":["status","circuit"]}}},"required":["status","upstreams"]}}}}}}},"/{dao}/health":{"get":{"parameters":[{"schema":{"type":"string","description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."},"required":true,"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\").","name":"dao","in":"path"}],"responses":{"200":{"description":"Per-DAO health snapshot — database, chain head, indexer freshness, and gateway circuit-breaker state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaoHealthResponse"}}}},"404":{"description":"DAO not configured.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Upstream DAO API unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaoHealthResponse"}}}}}}},"/daos":{"get":{"operationId":"daos","summary":"List of all configured DAOs","description":"Returns every DAO configured on the gateway along with its governance parameters and supported capabilities.","tags":["governance"],"responses":{"200":{"description":"List of all configured DAOs","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chainId":{"type":"number"},"quorum":{"type":"string"},"proposalThreshold":{"type":"string"},"votingDelay":{"type":"string"},"votingPeriod":{"type":"string"},"timelockDelay":{"type":"string"},"supportsCalldataReview":{"type":"boolean"},"supportsOffchainData":{"type":"boolean"}},"required":["id","chainId","quorum","proposalThreshold","votingDelay","votingPeriod","timelockDelay","supportsCalldataReview","supportsOffchainData"]}},"totalCount":{"type":"number"}},"required":["items","totalCount"]}}}}}}},"/aggregations/average-delegation-percentage":{"get":{"operationId":"averageDelegationPercentage","summary":"Average delegation percentage across all DAOs","description":"Returns the delegated-supply percentage averaged across all configured DAOs, bucketed by day over the requested period.","tags":["governance"],"parameters":[{"schema":{"type":["number","null"],"description":"Start date (Unix timestamp)"},"required":false,"description":"Start date (Unix timestamp)","name":"startDate","in":"query"},{"schema":{"type":["number","null"],"description":"End date (Unix timestamp)"},"required":false,"description":"End date (Unix timestamp)","name":"endDate","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"required":false,"name":"orderDirection","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Number of day buckets to skip before returning results."},"required":false,"description":"Number of day buckets to skip before returning results.","name":"skip","in":"query"},{"schema":{"type":["number","null"],"default":10},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Average delegation percentage across all DAOs","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"high":{"type":"string"}},"required":["date","high"]}},"totalCount":{"type":"number"},"pageInfo":{"type":"object","properties":{"hasNextPage":{"type":"boolean"},"hasPreviousPage":{"type":"boolean"},"endDate":{"type":["string","null"]},"startDate":{"type":["string","null"]}},"required":["hasNextPage","hasPreviousPage","endDate","startDate"]}},"required":["items","totalCount","pageInfo"]}}}}}}},"/{dao}/accounts/{address}/delegations/historical":{"get":{"operationId":"historicalDelegations","summary":"Get historical delegations","description":"Get historical delegations for an account, with optional filtering and sorting","tags":["delegations","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"delegateAddressIn","in":"query"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"fromValue","in":"query"},{"schema":{"type":"string"},"required":false,"name":"toValue","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Returns historical delegations for an account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegationsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/delegations":{"get":{"operationId":"delegations","summary":"Get delegations","description":"Get current delegations for an account","tags":["delegations"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Returns delegations for an account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegationsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/delegators":{"get":{"operationId":"delegators","summary":"Get delegators","description":"Get current delegators of an account with voting power","tags":["delegations","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["amount","timestamp"],"default":"amount"},"required":false,"name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Returns current delegators for an account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/treasury/liquid":{"get":{"operationId":"getLiquidTreasury","summary":"Get liquid treasury data","description":"Get historical Liquid Treasury (treasury without DAO tokens) from external providers (DefiLlama/Dune)","tags":["treasury"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Returns liquid treasury history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreasuryResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/treasury/dao-token":{"get":{"operationId":"getDaoTokenTreasury","summary":"Get DAO token treasury data","description":"Get historical DAO Token Treasury value (governance token quantity × token price)","tags":["treasury"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Returns DAO token treasury history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreasuryResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/treasury/total":{"get":{"operationId":"getTotalTreasury","summary":"Get total treasury data","description":"Get historical Total Treasury (liquid treasury + DAO token treasury)","tags":["treasury"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Returns total treasury history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TreasuryResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/token/historical-data":{"get":{"operationId":"historicalTokenData","summary":"Get historical token data","description":"Get historical market data for a specific token","tags":["tokens","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"}],"responses":{"200":{"description":"Returns the historical market data for the token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenHistoricalPriceResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/token":{"get":{"operationId":"token","summary":"Get token properties","description":"Get property data for a specific token","tags":["tokens"],"parameters":[{"schema":{"type":"string","enum":["eth","usd"],"default":"usd","description":"Currency to use when fetching token price data.","example":"usd"},"required":false,"description":"Currency to use when fetching token price data.","name":"currency","in":"query"}],"responses":{"200":{"description":"Returns data concerning token-specific values and attributes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPropertiesResponse"}}}},"404":{"description":"Token not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/feed/events":{"get":{"operationId":"feedEvents","summary":"Get feed events","description":"Returns a paginated list of governance feed events, optionally filtered by type and relevance.","tags":["feed","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of feed events to skip before collecting results.","example":0},"required":false,"description":"Number of feed events to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of feed events to return.","example":10},"required":false,"description":"Maximum number of feed events to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","value"],"default":"timestamp","description":"Field used to sort feed events.","example":"timestamp"},"required":false,"description":"Field used to sort feed events.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"string","enum":["HIGH","MEDIUM","LOW"],"description":"Filter events by relevance tier."},"required":false,"description":"Filter events by relevance tier.","name":"relevance","in":"query"},{"schema":{"$ref":"#/components/schemas/FeedEventTypeList"},"required":false,"description":"Filter events by governance activity type. Pass repeated query params or a comma-delimited list.","name":"type","in":"query"},{"schema":{"type":"integer","description":"Earliest event timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest event timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest event timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest event timestamp, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved feed events","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/event-relevance/threshold":{"get":{"operationId":"getEventRelevanceThreshold","summary":"Get event relevance threshold","description":"Returns the minimum value at which a feed event of the given type qualifies for the requested relevance level.","tags":["feed"],"parameters":[{"schema":{"$ref":"#/components/schemas/FeedEventType"},"required":true,"description":"Filter events by governance activity type.","name":"type","in":"query"},{"schema":{"$ref":"#/components/schemas/FeedRelevance"},"required":true,"description":"Filter events by relevance tier.","name":"relevance","in":"query"}],"responses":{"200":{"description":"Successfully retrieved threshold","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventRelevanceThresholdResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/total-supply/compare":{"get":{"operationId":"compareTotalSupply","summary":"Compare total supply between periods","description":"Returns the total supply for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"total supply comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/delegated-supply/compare":{"get":{"operationId":"compareDelegatedSupply","summary":"Compare delegated supply between periods","description":"Returns the delegated supply for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"delegated supply comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/circulating-supply/compare":{"get":{"operationId":"compareCirculatingSupply","summary":"Compare circulating supply between periods","description":"Returns the circulating supply for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"circulating supply comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/treasury/compare":{"get":{"operationId":"compareTreasury","summary":"Compare treasury between periods","description":"Returns the treasury for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"treasury comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/cex-supply/compare":{"get":{"operationId":"compareCexSupply","summary":"Compare cex supply between periods","description":"Returns the cex supply for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"cex supply comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/dex-supply/compare":{"get":{"operationId":"compareDexSupply","summary":"Compare dex supply between periods","description":"Returns the dex supply for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"dex supply comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/lending-supply/compare":{"get":{"operationId":"compareLendingSupply","summary":"Compare lending supply between periods","description":"Returns the lending supply for the current period versus the previous one, with the change rate and raw delta.","tags":["tokens"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"lending supply comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/active-supply/compare":{"get":{"operationId":"compareActiveSupply","summary":"Compare active token supply between time periods","description":"Returns the active token supply (supply held by accounts that participated in governance) for the given period.","tags":["governance"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"Active supply value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveSupplyResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals/compare":{"get":{"operationId":"compareProposals","summary":"Compare number of proposals between time periods","description":"Returns the number of proposals launched in the current period versus the previous one, with the change rate and raw delta.","tags":["governance"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"Proposal comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalsComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/votes/compare":{"get":{"operationId":"compareVotes","summary":"Compare number of votes between time periods","description":"Returns the number of votes cast in the current period versus the previous one, with the change rate and raw delta.","tags":["governance"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"Vote comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotesComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/average-turnout/compare":{"get":{"operationId":"compareAverageTurnout","summary":"Compare average turnout between time periods","description":"Returns the average proposal turnout in the current period versus the previous one, with the change rate and raw delta.","tags":["governance"],"parameters":[{"schema":{"$ref":"#/components/schemas/DaysWindow"},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"Average turnout comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AverageTurnoutComparisonResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals-activity":{"get":{"operationId":"proposalsActivity","summary":"Get proposals activity for delegate","description":"Returns proposal activity data including voting history, win rates, and detailed proposal information for the specified delegate within the given time window","tags":["proposals","skip-pagination"],"parameters":[{"schema":{"type":"string","description":"Delegate address whose proposal activity is being queried.","example":"0x1111111111111111111111111111111111111111"},"required":true,"description":"Delegate address whose proposal activity is being queried.","name":"address","in":"query"},{"schema":{"type":"integer","description":"Lower bound for proposal timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Lower bound for proposal timestamps, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Number of proposal activity records to skip.","example":0},"required":false,"description":"Number of proposal activity records to skip.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of proposal activity records to return.","example":10},"required":false,"description":"Maximum number of proposal activity records to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","votingPower","voteTiming"],"default":"timestamp","description":"Field used to sort proposal activity results.","example":"timestamp"},"required":false,"description":"Field used to sort proposal activity results.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"string","enum":["yes","no","abstain","no_vote"],"description":"Optional vote filter. Use yes, no, abstain, or no-vote to narrow the result set.","example":"yes"},"required":false,"description":"Optional vote filter. Use yes, no, abstain, or no-vote to narrow the result set.","name":"userVoteFilter","in":"query"}],"responses":{"200":{"description":"Successfully retrieved proposals activity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalActivityResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals":{"get":{"operationId":"proposals","summary":"Get proposals","description":"Returns a list of proposals. Pass `lean=true` to omit calldatas/values/targets and the proposal description, reducing payload size.","tags":["proposals","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"$ref":"#/components/schemas/OnchainProposalStatusList"},"required":false,"description":"Proposal status filter. Pass repeated query params or a comma-delimited list.","name":"status","in":"query"},{"schema":{"type":"integer","description":"Earliest proposal timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest proposal timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest proposal end timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest proposal end timestamp, in Unix seconds.","name":"fromEndDate","in":"query"},{"schema":{"type":"boolean","nullable":true,"default":true,"description":"Whether optimistic proposals should be included.","example":false},"required":false,"description":"Whether optimistic proposals should be included.","name":"includeOptimisticProposals","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["0","1","true","false"]}],"default":false,"description":"When true, omit execution-payload fields (calldatas, values, targets) and the proposal description to reduce response size. Defaults to false. Accepts true/false/1/0.","example":false},"required":false,"description":"When true, omit execution-payload fields (calldatas, values, targets) and the proposal description to reduce response size. Defaults to false. Accepts true/false/1/0.","name":"lean","in":"query"}],"responses":{"200":{"description":"Successfully retrieved proposals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnchainProposalsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals/search":{"get":{"operationId":"searchProposals","summary":"Search proposals","description":"Returns proposals whose title or identifier partially matches the query. Pass `lean=true` to omit calldatas/values/targets and the proposal description.","tags":["proposals","skip-pagination"],"parameters":[{"schema":{"type":"string","minLength":1,"description":"Partial proposal identifier or title to search for.","example":"test"},"required":true,"description":"Partial proposal identifier or title to search for.","name":"query","in":"query"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["0","1","true","false"]}],"default":false,"description":"When true, omit execution-payload fields (calldatas, values, targets) and the proposal description to reduce response size. Defaults to false. Accepts true/false/1/0.","example":false},"required":false,"description":"When true, omit execution-payload fields (calldatas, values, targets) and the proposal description to reduce response size. Defaults to false. Accepts true/false/1/0.","name":"lean","in":"query"}],"responses":{"200":{"description":"Successfully retrieved matching proposals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnchainProposalsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals/{id}":{"get":{"operationId":"proposal","summary":"Get a proposal by ID","description":"Returns a single proposal by its ID. Pass `lean=true` to omit calldatas/values/targets and the proposal description.","tags":["proposals"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Onchain proposal identifier.","example":"proposal-1","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["0","1","true","false"]}],"default":false,"description":"When true, omit execution-payload fields (calldatas, values, targets) and the proposal description to reduce response size. Defaults to false. Accepts true/false/1/0.","example":false},"required":false,"description":"When true, omit execution-payload fields (calldatas, values, targets) and the proposal description to reduce response size. Defaults to false. Accepts true/false/1/0.","name":"lean","in":"query"}],"responses":{"200":{"description":"Successfully retrieved proposal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnchainProposal"}}}},"404":{"description":"Proposal not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/balances/historical":{"get":{"operationId":"historicalBalances","summary":"Get historical token balances","description":"Returns historical balance deltas for one account, enriched with the transfer that caused each change.","tags":["account-balances","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Number of historical balance rows to skip.","example":0},"required":false,"description":"Number of historical balance rows to skip.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of historical balance rows to return.","example":10},"required":false,"description":"Maximum number of historical balance rows to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","delta"],"default":"timestamp","description":"Field used to sort historical balance rows.","example":"timestamp"},"required":false,"description":"Field used to sort historical balance rows.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"integer","description":"Inclusive lower bound for historical balance timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for historical balance timestamps, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for historical balance timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for historical balance timestamps, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"string","description":"Minimum balance delta encoded as a decimal string."},"required":false,"description":"Minimum balance delta encoded as a decimal string.","name":"fromValue","in":"query"},{"schema":{"type":"string","description":"Maximum balance delta encoded as a decimal string."},"required":false,"description":"Maximum balance delta encoded as a decimal string.","name":"toValue","in":"query"},{"schema":{"type":"string","description":"Filter to transfers sent from this address (matches the sender of the transfer that caused the balance change)."},"required":false,"description":"Filter to transfers sent from this address (matches the sender of the transfer that caused the balance change).","name":"from","in":"query"},{"schema":{"type":"string","description":"Filter to transfers received by this address (matches the recipient of the transfer that caused the balance change)."},"required":false,"description":"Filter to transfers received by this address (matches the recipient of the transfer that caused the balance change).","name":"to","in":"query"}],"responses":{"200":{"description":"Successfully retrieved historical balances","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoricalBalancesResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/last-update":{"get":{"operationId":"lastUpdate","summary":"Get the last update time","description":"Returns the timestamp of the most recent data update for the requested chart.","tags":["metrics"],"parameters":[{"schema":{"type":"string","enum":["cost_comparison","attack_profitability","token_distribution"],"description":"Chart identifier whose freshness timestamp should be returned.","example":"token_distribution"},"required":true,"description":"Chart identifier whose freshness timestamp should be returned.","name":"chart","in":"query"}],"responses":{"200":{"description":"Last update time","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LastUpdateResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/delegation-percentage":{"get":{"operationId":"delegationPercentageByDay","summary":"Get delegation percentage day buckets with forward-fill","description":"Returns the delegated-supply percentage bucketed by day, forward-filling days without new data with the last known value.","tags":["metrics"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the day-bucket window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the day-bucket window, in Unix seconds.","name":"startDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the day-bucket window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the day-bucket window, in Unix seconds.","name":"endDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"integer","description":"Number of day buckets to skip before returning results.","example":0},"required":false,"description":"Number of day buckets to skip before returning results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of day buckets to return.","example":"365"},"required":false,"description":"Maximum number of day buckets to return.","name":"limit","in":"query"}],"responses":{"200":{"description":"Delegation percentage data with pagination","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegationPercentageResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/voting-powers/historical":{"get":{"operationId":"historicalVotingPowerByAccountId","summary":"Get voting power changes by account","description":"Returns a list of voting power changes for a specific account","tags":["voting-power","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Number of historical voting power rows to skip.","example":0},"required":false,"description":"Number of historical voting power rows to skip.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of historical voting power rows to return.","example":10},"required":false,"description":"Maximum number of historical voting power rows to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","delta"],"default":"timestamp","description":"Field used to sort historical voting power rows.","example":"timestamp"},"required":false,"description":"Field used to sort historical voting power rows.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"integer","description":"Inclusive lower bound for voting power timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for voting power timestamps, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for voting power timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for voting power timestamps, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"string","description":"Minimum voting power delta encoded as a decimal string."},"required":false,"description":"Minimum voting power delta encoded as a decimal string.","name":"fromValue","in":"query"},{"schema":{"type":"string","description":"Maximum voting power delta encoded as a decimal string."},"required":false,"description":"Maximum voting power delta encoded as a decimal string.","name":"toValue","in":"query"}],"responses":{"200":{"description":"Successfully retrieved voting power changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoricalVotingPowersResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/voting-powers/historical":{"get":{"operationId":"historicalVotingPower","summary":"Get voting power changes","description":"Returns a list of voting power changes.","tags":["voting-power","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of historical voting power rows to skip.","example":0},"required":false,"description":"Number of historical voting power rows to skip.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of historical voting power rows to return.","example":10},"required":false,"description":"Maximum number of historical voting power rows to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","delta"],"default":"timestamp","description":"Field used to sort historical voting power rows.","example":"timestamp"},"required":false,"description":"Field used to sort historical voting power rows.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"integer","description":"Inclusive lower bound for voting power timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for voting power timestamps, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for voting power timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for voting power timestamps, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"string","description":"Minimum voting power delta encoded as a decimal string."},"required":false,"description":"Minimum voting power delta encoded as a decimal string.","name":"fromValue","in":"query"},{"schema":{"type":"string","description":"Maximum voting power delta encoded as a decimal string."},"required":false,"description":"Maximum voting power delta encoded as a decimal string.","name":"toValue","in":"query"},{"schema":{"type":"string","description":"Optional account address used to scope the historical voting power results."},"required":false,"description":"Optional account address used to scope the historical voting power results.","name":"address","in":"query"}],"responses":{"200":{"description":"Successfully retrieved voting power changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoricalVotingPowersResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/voting-powers/variations":{"get":{"operationId":"votingPowerVariations","summary":"Get voting power changes within a time frame for the given addresses","description":"Returns a mapping of the voting power changes within a time frame for the given addresses","tags":["voting-power","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Maximum number of voting power variation rows to return.","example":20},"required":false,"description":"Maximum number of voting power variation rows to return.","name":"limit","in":"query"},{"schema":{"type":"integer","description":"Number of voting power variation rows to skip.","example":0},"required":false,"description":"Number of voting power variation rows to skip.","name":"skip","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more account addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more account addresses. Pass repeated query params or a comma-delimited list.","name":"addresses","in":"query"},{"schema":{"type":"integer","description":"Inclusive lower bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the comparison window, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the comparison window, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved voting power changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotingPowerVariationsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/voting-powers/variations":{"get":{"operationId":"votingPowerVariationsByAccountId","summary":"Get top changes in voting power for a given period for a single account","description":"Returns the changes to voting power by period and account ID","tags":["voting-power"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Inclusive lower bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the comparison window, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the comparison window, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved voting power changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotingPowerVariationsByAccountIdResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/voting-powers":{"get":{"operationId":"votingPowers","summary":"Get voting powers","description":"Returns sorted and paginated account voting power records","tags":["voting-power","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Maximum number of current voting power rows to return.","example":20},"required":false,"description":"Maximum number of current voting power rows to return.","name":"limit","in":"query"},{"schema":{"type":"integer","description":"Number of current voting power rows to skip.","example":0},"required":false,"description":"Number of current voting power rows to skip.","name":"skip","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"string","enum":["votingPower","delegationsCount","variation","signedVariation","total","balance"],"default":"votingPower"},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more account addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more account addresses. Pass repeated query params or a comma-delimited list.","name":"addresses","in":"query"},{"schema":{"type":"string","description":"Minimum voting power encoded as a decimal string."},"required":false,"description":"Minimum voting power encoded as a decimal string.","name":"fromValue","in":"query"},{"schema":{"type":"string","description":"Maximum voting power encoded as a decimal string."},"required":false,"description":"Maximum voting power encoded as a decimal string.","name":"toValue","in":"query"},{"schema":{"type":"integer","description":"Inclusive lower bound for variation enrichment, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for variation enrichment, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for variation enrichment, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for variation enrichment, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved voting power changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotingPowersResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/voting-powers/{address}":{"get":{"operationId":"votingPowerByAccountId","summary":"Get account powers","description":"Returns voting power information for a specific address (account)","tags":["voting-power"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Inclusive lower bound for variation enrichment, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for variation enrichment, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for variation enrichment, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for variation enrichment, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved voting power changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotingPower"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/balances/variations":{"get":{"operationId":"accountBalanceVariations","summary":"Get variations in account balances for a given period","description":"Returns the largest account balance variations, keyed by account address","tags":["account-balances","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the comparison window, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the comparison window, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"integer","description":"Maximum number of account balance variations to return.","example":20},"required":false,"description":"Maximum number of account balance variations to return.","name":"limit","in":"query"},{"schema":{"type":"integer","description":"Number of account balance variations to skip.","example":0},"required":false,"description":"Number of account balance variations to skip.","name":"skip","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more account addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more account addresses. Pass repeated query params or a comma-delimited list.","name":"addresses","in":"query"}],"responses":{"200":{"description":"Successfully retrieved account balance variations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalanceVariationsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/balances/variations":{"get":{"operationId":"accountBalanceVariationsByAccountId","summary":"Get changes in balance for a given period for a single account","description":"Returns the changes to balance by period and account ID","tags":["account-balances"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Inclusive lower bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the comparison window, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the comparison window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the comparison window, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved account balance variations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalanceVariationsByAccountIdResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/balances":{"get":{"operationId":"accountBalances","summary":"Get account balance records","description":"Returns sorted and paginated account balance records","tags":["account-balances","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for balance history filters, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for balance history filters, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for balance history filters, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for balance history filters, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"string","enum":["balance","variation","signedVariation"],"default":"balance"},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"boolean","nullable":true,"default":false,"description":"Whether DAO-owned addresses should be excluded from the results.","example":false},"required":false,"description":"Whether DAO-owned addresses should be excluded from the results.","name":"excludeDaoAddresses","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"addresses","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more delegate addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more delegate addresses. Pass repeated query params or a comma-delimited list.","name":"delegates","in":"query"},{"schema":{"type":"string","description":"Minimum balance encoded as a decimal string."},"required":false,"description":"Minimum balance encoded as a decimal string.","name":"fromValue","in":"query"},{"schema":{"type":"string","description":"Maximum balance encoded as a decimal string."},"required":false,"description":"Maximum balance encoded as a decimal string.","name":"toValue","in":"query"}],"responses":{"200":{"description":"Successfully retrieved account balances","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalancesWithVariationResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/balances":{"get":{"operationId":"accountBalanceByAccountId","summary":"Get account balance","description":"Returns account balance information for a specific address","tags":["account-balances"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Wallet address whose balance is being queried.","example":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","name":"address","in":"path"},{"schema":{"type":"integer","description":"Inclusive lower bound for the returned balance period, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the returned balance period, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the returned balance period, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the returned balance period, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved account balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalanceWithVariationResponse"}}}},"404":{"description":"Account not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/balances/{address}/interactions":{"get":{"operationId":"accountInteractions","summary":"Get top interactions between accounts for a given period","description":"Returns a mapping of the largest interactions between accounts.\nPositive amounts signify net token transfers FROM `<address>`, whilst negative amounts refer to net transfers TO `<address>`","tags":["account-balances","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"},{"schema":{"type":"integer","description":"Inclusive lower bound for transfer timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for transfer timestamps, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for transfer timestamps, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for transfer timestamps, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"integer","description":"Maximum number of interaction rows to return.","example":20},"required":false,"description":"Maximum number of interaction rows to return.","name":"limit","in":"query"},{"schema":{"type":"integer","description":"Number of interaction rows to skip.","example":0},"required":false,"description":"Number of interaction rows to skip.","name":"skip","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"string","description":"Minimum net amount transferred, encoded as a decimal string."},"required":false,"description":"Minimum net amount transferred, encoded as a decimal string.","name":"minAmount","in":"query"},{"schema":{"type":"string","description":"Maximum net amount transferred, encoded as a decimal string."},"required":false,"description":"Maximum net amount transferred, encoded as a decimal string.","name":"maxAmount","in":"query"},{"schema":{"type":"string","enum":["volume","count"],"default":"count","description":"Field used to sort interaction rows.","example":"count"},"required":false,"description":"Field used to sort interaction rows.","name":"orderBy","in":"query"},{"schema":{"type":"string","description":"Optional counterparty address used to narrow the results."},"required":false,"description":"Optional counterparty address used to narrow the results.","name":"filterAddress","in":"query"}],"responses":{"200":{"description":"Successfully retrieved account interactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInteractionsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/accounts/{address}/transfers":{"get":{"operationId":"transfers","summary":"Get transfers","description":"Get transfers of a given address","tags":["transfers","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Wallet address whose transfers are being queried.","example":"0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","name":"address","in":"path"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","amount"],"default":"timestamp","description":"Field used to sort transfers.","example":"timestamp"},"required":false,"description":"Field used to sort transfers.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","description":"Earliest transfer timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest transfer timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest transfer timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest transfer timestamp, in Unix seconds.","name":"toDate","in":"query"},{"schema":{"type":"string","description":"Minimum transfer amount encoded as a decimal string."},"required":false,"description":"Minimum transfer amount encoded as a decimal string.","name":"fromValue","in":"query"},{"schema":{"type":"string","description":"Maximum transfer amount encoded as a decimal string."},"required":false,"description":"Maximum transfer amount encoded as a decimal string.","name":"toValue","in":"query"}],"responses":{"200":{"description":"Returns transfers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransfersResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals/{id}/votes":{"get":{"operationId":"votesByProposalId","summary":"List of votes for a given proposal","description":"Returns a paginated list of votes cast on a specific proposal","tags":["proposals","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Onchain proposal identifier.","example":"proposal-1","name":"id","in":"path"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list.","name":"voterAddressIn","in":"query"},{"schema":{"type":"string","enum":["timestamp","votingPower"],"default":"timestamp","description":"Sort votes by timestamp or voting power.","example":"timestamp"},"required":false,"description":"Sort votes by timestamp or voting power.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"$ref":"#/components/schemas/VoteSupport"},"required":false,"description":"Governance vote direction.","name":"support","in":"query"},{"schema":{"type":"integer","description":"Earliest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest vote timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest vote timestamp, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved votes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnchainVotesResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/votes":{"get":{"operationId":"votes","summary":"Get all votes","description":"Get all votes ordered by timestamp or voting power","tags":["votes","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list.","name":"voterAddressIn","in":"query"},{"schema":{"type":"string","enum":["timestamp","votingPower"],"default":"timestamp","description":"Sort votes by timestamp or voting power.","example":"timestamp"},"required":false,"description":"Sort votes by timestamp or voting power.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"$ref":"#/components/schemas/VoteSupport"},"required":false,"description":"Governance vote direction.","name":"support","in":"query"},{"schema":{"type":"integer","description":"Earliest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest vote timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest vote timestamp, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Returns votes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnchainVotesResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposals/{id}/non-voters":{"get":{"operationId":"proposalNonVoters","summary":"Get a proposal non-voters","description":"Returns the active delegates that did not vote on a given proposal","tags":["proposals","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Onchain proposal identifier.","example":"proposal-1","name":"id","in":"path"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"addresses","in":"query"}],"responses":{"200":{"description":"Successfully retrieved proposal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VotersResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/dao":{"get":{"operationId":"dao","summary":"Get DAO governance parameters","description":"Returns current governance parameters for this DAO","tags":["governance"],"responses":{"200":{"description":"DAO governance parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DaoResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["aave","comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/token-metrics":{"get":{"operationId":"tokenMetrics","summary":"Get token related metrics","description":"Returns token related metrics for a single metric type.","tags":["metrics","skip-pagination"],"parameters":[{"schema":{"type":"string","enum":["TOTAL_SUPPLY","DELEGATED_SUPPLY","CEX_SUPPLY","DEX_SUPPLY","LENDING_SUPPLY","CIRCULATING_SUPPLY","TREASURY"],"description":"Metric family to query.","example":"TOTAL_SUPPLY"},"required":true,"description":"Metric family to query.","name":"metricType","in":"query"},{"schema":{"type":"integer","description":"Inclusive lower bound as a Unix timestamp in seconds.","example":1704067200},"required":false,"description":"Inclusive lower bound as a Unix timestamp in seconds.","name":"startDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound as a Unix timestamp in seconds.","example":1706745600},"required":false,"description":"Inclusive upper bound as a Unix timestamp in seconds.","name":"endDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"}],"responses":{"200":{"description":"Token metrics data keyed by metric type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenMetricsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/offchain/proposals":{"get":{"operationId":"offchainProposals","summary":"Get offchain proposals","description":"Returns a list of offchain (Snapshot) proposals. Pass `lean=true` to omit the markdown `body` and reduce payload size.","tags":["offchain","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"$ref":"#/components/schemas/OffchainProposalStatusList"},"required":false,"description":"Snapshot proposal state filter. Pass repeated query params or a comma-delimited list.","name":"status","in":"query"},{"schema":{"type":"integer","description":"Earliest proposal creation timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest proposal creation timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest proposal creation timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest proposal creation timestamp, in Unix seconds.","name":"endDate","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["0","1","true","false"]}],"default":false,"description":"When true, omit the proposal `body` to reduce response size. Defaults to false. Accepts true/false/1/0.","example":false},"required":false,"description":"When true, omit the proposal `body` to reduce response size. Defaults to false. Accepts true/false/1/0.","name":"lean","in":"query"}],"responses":{"200":{"description":"Successfully retrieved offchain proposals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainProposalsResponse"}}}},"400":{"description":"Offchain data not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/offchain/proposals/search":{"get":{"operationId":"offchainSearchProposals","summary":"Search offchain proposals","description":"Returns offchain proposals whose title or identifier partially matches the query. Pass `lean=true` to omit the `body`.","tags":["offchain","skip-pagination"],"parameters":[{"schema":{"type":"string","minLength":1,"description":"Partial Snapshot proposal identifier or title to search for.","example":"test"},"required":true,"description":"Partial Snapshot proposal identifier or title to search for.","name":"query","in":"query"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["0","1","true","false"]}],"default":false,"description":"When true, omit the proposal `body` to reduce response size. Defaults to false. Accepts true/false/1/0.","example":false},"required":false,"description":"When true, omit the proposal `body` to reduce response size. Defaults to false. Accepts true/false/1/0.","name":"lean","in":"query"}],"responses":{"200":{"description":"Successfully retrieved matching offchain proposals","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainProposalsResponse"}}}},"400":{"description":"Offchain data not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/offchain/proposals/{id}":{"get":{"operationId":"offchainProposalById","summary":"Get an offchain proposal by ID","description":"Returns a single offchain (Snapshot) proposal by its ID. Pass `lean=true` to omit the `body`.","tags":["offchain"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Snapshot proposal identifier.","example":"proposal-1","name":"id","in":"path"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["0","1","true","false"]}],"default":false,"description":"When true, omit the proposal `body` to reduce response size. Defaults to false. Accepts true/false/1/0.","example":false},"required":false,"description":"When true, omit the proposal `body` to reduce response size. Defaults to false. Accepts true/false/1/0.","name":"lean","in":"query"}],"responses":{"200":{"description":"Successfully retrieved offchain proposal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainProposal"}}}},"400":{"description":"Offchain data not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Proposal not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/offchain/votes":{"get":{"operationId":"votesOffchain","summary":"Get offchain votes","description":"Returns a list of offchain (Snapshot) votes","tags":["offchain","skip-pagination"],"parameters":[{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","votingPower"],"default":"timestamp","description":"Sort votes by timestamp or voting power.","example":"timestamp"},"required":false,"description":"Sort votes by timestamp or voting power.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list.","name":"voterAddresses","in":"query"},{"schema":{"type":"integer","description":"Earliest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest vote timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest vote timestamp, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved offchain votes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainVotesResponse"}}}},"400":{"description":"Offchain data not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/offchain/proposals/{id}/votes":{"get":{"operationId":"votesOffchainByProposalId","summary":"Get offchain votes for a proposal","description":"Returns a paginated list of offchain (Snapshot) votes for a specific proposal","tags":["offchain","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"description":"Snapshot proposal identifier.","example":"proposal-1","name":"id","in":"path"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"type":"string","enum":["timestamp","votingPower"],"default":"timestamp","description":"Sort votes by timestamp or voting power.","example":"timestamp"},"required":false,"description":"Sort votes by timestamp or voting power.","name":"orderBy","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"array","items":{"type":"string"},"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list."},"required":false,"description":"Filter by one or more voter addresses. Pass repeated query params or a comma-delimited list.","name":"voterAddresses","in":"query"},{"schema":{"type":"integer","description":"Earliest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Earliest vote timestamp, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Latest vote timestamp, in Unix seconds.","example":1700000000},"required":false,"description":"Latest vote timestamp, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved offchain votes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainVotesResponse"}}}},"400":{"description":"Offchain data not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/offchain/proposals/{id}/non-voters":{"get":{"operationId":"offchainProposalNonVoters","summary":"Get offchain proposal non-voters","description":"Returns the active delegates that did not vote on a given offchain proposal","tags":["offchain","skip-pagination"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","description":"Number of records to skip before collecting results.","example":0},"required":false,"description":"Number of records to skip before collecting results.","name":"skip","in":"query"},{"schema":{"type":"integer","description":"Maximum number of records to return.","example":10},"required":false,"description":"Maximum number of records to return.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"},{"schema":{"type":"array","items":{"type":"string"}},"required":false,"name":"addresses","in":"query"}],"responses":{"200":{"description":"Successfully retrieved non-voters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainVotersResponse"}}}},"400":{"description":"Offchain data not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Proposal not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["comp","ens","fluid","gtc","lil_nouns","nouns","obol","scr","shu","torn","uni"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposal/drafts":{"get":{"operationId":"getDraftProposals","summary":"List draft proposals for an address","tags":["proposals"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"query"}],"responses":{"200":{"description":"Draft proposals owned by the given address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftProposalList"}}}}}},"post":{"operationId":"createDraftProposal","summary":"Create a draft proposal","tags":["proposals"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraftBody"}}}},"responses":{"201":{"description":"The created draft proposal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftProposal"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["torn"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/proposal/drafts/{id}":{"get":{"operationId":"getDraftProposal","summary":"Get a draft proposal by ID","description":"Public endpoint — anyone with the ID can view the draft, enabling sharing.","tags":["proposals"],"parameters":[{"schema":{"type":"string","description":"UUID of the draft."},"required":true,"description":"UUID of the draft.","name":"id","in":"path"}],"responses":{"200":{"description":"The requested draft proposal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftProposal"}}}},"404":{"description":"Draft not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"operationId":"updateDraftProposal","summary":"Update a draft proposal","description":"Only the original author (matched by address) can update a draft.","tags":["proposals"],"parameters":[{"schema":{"type":"string","description":"UUID of the draft."},"required":true,"description":"UUID of the draft.","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDraftBody"}}}},"responses":{"200":{"description":"The updated draft proposal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftProposal"}}}},"404":{"description":"Draft not found or address does not match author","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"operationId":"deleteDraftProposal","summary":"Delete a draft proposal","description":"Only the original author (matched by address) can delete a draft.","tags":["proposals"],"parameters":[{"schema":{"type":"string","description":"UUID of the draft."},"required":true,"description":"UUID of the draft.","name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"address","in":"query"}],"responses":{"204":{"description":"Draft deleted"},"404":{"description":"Draft not found or address does not match author","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["torn"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/actions":{"get":{"operationId":"getRevenueActions","summary":"Get monthly ENS action counts by category","description":"Monthly action counts by category (Registration, Renewal, Premium).","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Monthly action counts by category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueActionsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/active-names":{"get":{"operationId":"getRevenueActiveNames","summary":"Get monthly net change and cumulative active .eth names","description":"Monthly net change and cumulative count of active .eth names.","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Monthly net change and cumulative count of active .eth names","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueActiveNamesResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/new-wallets":{"get":{"operationId":"getRevenueNewWallets","summary":"Get monthly new-wallet counts and cumulative wallet total","description":"Monthly new-wallet counts and the cumulative wallet total for ENS.","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Monthly new-wallet counts and the cumulative wallet total","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueNewWalletsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/renewal-funnel":{"get":{"operationId":"getRevenueRenewalFunnel","summary":"Get monthly renewal funnel keyed by expiry month","description":"Renewal funnel per expiry month: terms expiring, renewed, churned, and renewal rate.","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Renewal funnel per expiry month: terms expiring, renewed, churned, and renewal rate.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueRenewalFunnelResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/totals":{"get":{"operationId":"getRevenueTotals","summary":"Get monthly ENS revenue totals in USD and ETH","description":"Monthly ENS revenue totals split into registration, premium, and renewal, in both USD and ETH.","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Monthly ENS revenue totals in USD and ETH","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueTotalsResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/by-category":{"get":{"operationId":"getRevenueByCategory","summary":"Get monthly ENS revenue split by category (Steakhouse ledger)","description":"Monthly ENS revenue split by category (Registration vs Renewal) in USD and ETH, sourced from the Steakhouse accounting ledger.","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Monthly ENS revenue split by category in USD and ETH","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueByCategoryResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/revenue/renewal-tenure":{"get":{"operationId":"getRevenueRenewalTenure","summary":"Get monthly renewal tenure distribution per expiry month","description":"Per expiry month, count of names in each tenure bucket (0/1/2/3+ renewals) and the total renewals in that bucket.","tags":["revenue"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the data range, as a Unix timestamp in seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the data range, as a Unix timestamp in seconds.","name":"toDate","in":"query"},{"schema":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Per expiry month, count of names in each tenure bucket and total renewals in that bucket","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueRenewalTenureResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/address-enrichment/address/{address}":{"get":{"operationId":"getAddress","summary":"Get enriched data for an address","description":"Returns label information from Arkham, ENS data, and whether the address is an EOA or contract. Arkham data is stored permanently. ENS data is cached with a configurable TTL.","tags":["address"],"parameters":[{"schema":{"type":"string","description":"Ethereum address (checksummed or lowercase)","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Successfully retrieved address enrichment data","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"EIP-55 checksummed Ethereum address","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"isContract":{"type":"boolean","description":"Whether the address is a smart contract (true) or an externally-owned account (false)","example":false},"arkham":{"type":"object","nullable":true,"properties":{"entity":{"type":"string","nullable":true,"description":"Human-readable name of the entity that owns the address according to Arkham Intelligence","example":"Vitalik Buterin"},"entityType":{"type":"string","nullable":true,"description":"Category of the entity (e.g. 'individual', 'exchange', 'protocol', 'fund')","example":"individual"},"label":{"type":"string","nullable":true,"description":"Fine-grained label for the specific address within the entity","example":"Vitalik Buterin: Personal Wallet"},"twitter":{"type":"string","nullable":true,"description":"Twitter/X handle associated with the entity, without '@'","example":"VitalikButerin"}},"required":["entity","entityType","label","twitter"],"description":"Arkham Intelligence label data. null when no data is available for the address."},"ens":{"type":"object","nullable":true,"properties":{"name":{"type":"string","nullable":true,"description":"Primary ENS name reverse-resolved for this address","example":"vitalik.eth"},"avatar":{"type":"string","nullable":true,"description":"URL of the ENS avatar image","example":"https://metadata.ens.domains/mainnet/avatar/vitalik.eth"},"banner":{"type":"string","nullable":true,"description":"URL of the ENS profile banner image","example":null},"twitter":{"type":"string","nullable":true,"description":"Twitter/X handle from the ENS 'com.twitter' text record, without '@'","example":"VitalikButerin"},"telegram":{"type":"string","nullable":true,"description":"Telegram handle from the ENS 'org.telegram' text record, without '@'","example":null},"email":{"type":"string","nullable":true,"description":"Email address from the ENS 'email' text record","example":null},"github":{"type":"string","nullable":true,"description":"GitHub handle from the ENS 'com.github' text record, without '@'","example":"vbuterin"}},"required":["name","avatar","banner","twitter","telegram","email","github"],"description":"ENS (Ethereum Name Service) data, including social text records. null when no ENS name is registered for the address. Cached with a configurable TTL."},"efp":{"type":"object","nullable":true,"properties":{"followers":{"type":"number","nullable":true,"description":"Number of EFP (Ethereum Follow Protocol) followers","example":5426},"following":{"type":"number","nullable":true,"description":"Number of accounts this address follows on EFP","example":10}},"required":["followers","following"],"description":"EFP (Ethereum Follow Protocol) stats. Returned independently of whether the address has a primary ENS name. null when no EFP data is available. Cached with a configurable TTL."}},"required":["address","isContract","arkham","ens","efp"]}}}},"502":{"description":"Upstream enrichment provider failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/address-enrichment/addresses":{"get":{"operationId":"getAddresses","summary":"Get enriched data for multiple addresses","description":"Returns label information from Arkham, ENS data, and address type for multiple addresses. Maximum 100 addresses per request. Arkham data is stored permanently. ENS data is cached with a configurable TTL.","tags":["address"],"parameters":[{"schema":{"type":"array","items":{"type":"string","format":"ethereum-address"},"minItems":1,"maxItems":100,"description":"One or more Ethereum addresses to enrich. Can be passed as a repeated query parameter or a single value. Maximum 100 addresses per request.","example":["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"]},"required":true,"name":"addresses","in":"query"}],"responses":{"200":{"description":"Successfully retrieved batch enrichment data","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"EIP-55 checksummed Ethereum address","example":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"},"isContract":{"type":"boolean","description":"Whether the address is a smart contract (true) or an externally-owned account (false)","example":false},"arkham":{"type":"object","nullable":true,"properties":{"entity":{"type":"string","nullable":true,"description":"Human-readable name of the entity that owns the address according to Arkham Intelligence","example":"Vitalik Buterin"},"entityType":{"type":"string","nullable":true,"description":"Category of the entity (e.g. 'individual', 'exchange', 'protocol', 'fund')","example":"individual"},"label":{"type":"string","nullable":true,"description":"Fine-grained label for the specific address within the entity","example":"Vitalik Buterin: Personal Wallet"},"twitter":{"type":"string","nullable":true,"description":"Twitter/X handle associated with the entity, without '@'","example":"VitalikButerin"}},"required":["entity","entityType","label","twitter"],"description":"Arkham Intelligence label data. null when no data is available for the address."},"ens":{"type":"object","nullable":true,"properties":{"name":{"type":"string","nullable":true,"description":"Primary ENS name reverse-resolved for this address","example":"vitalik.eth"},"avatar":{"type":"string","nullable":true,"description":"URL of the ENS avatar image","example":"https://metadata.ens.domains/mainnet/avatar/vitalik.eth"},"banner":{"type":"string","nullable":true,"description":"URL of the ENS profile banner image","example":null},"twitter":{"type":"string","nullable":true,"description":"Twitter/X handle from the ENS 'com.twitter' text record, without '@'","example":"VitalikButerin"},"telegram":{"type":"string","nullable":true,"description":"Telegram handle from the ENS 'org.telegram' text record, without '@'","example":null},"email":{"type":"string","nullable":true,"description":"Email address from the ENS 'email' text record","example":null},"github":{"type":"string","nullable":true,"description":"GitHub handle from the ENS 'com.github' text record, without '@'","example":"vbuterin"}},"required":["name","avatar","banner","twitter","telegram","email","github"],"description":"ENS (Ethereum Name Service) data, including social text records. null when no ENS name is registered for the address. Cached with a configurable TTL."},"efp":{"type":"object","nullable":true,"properties":{"followers":{"type":"number","nullable":true,"description":"Number of EFP (Ethereum Follow Protocol) followers","example":5426},"following":{"type":"number","nullable":true,"description":"Number of accounts this address follows on EFP","example":10}},"required":["followers","following"],"description":"EFP (Ethereum Follow Protocol) stats. Returned independently of whether the address has a primary ENS name. null when no EFP data is available. Cached with a configurable TTL."}},"required":["address","isContract","arkham","ens","efp"]},"description":"Enrichment results for each successfully resolved address. Addresses that failed to resolve are omitted."}},"required":["results"]}}}}}}},"/{dao}/relay/vote":{"post":{"operationId":"relayVote","summary":"Relay a gasless vote","description":"Submit an EIP-712 signed vote on behalf of a user. The relayer pays gas.","tags":["relay"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerVoteRequest"}}}},"responses":{"200":{"description":"Vote transaction submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerVoteResponse"}}}},"400":{"description":"Validation or eligibility error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"503":{"description":"Relayer unavailable (low balance)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/relay/delegate":{"post":{"operationId":"relayDelegate","summary":"Relay a gasless delegation","description":"Submit an EIP-712 signed delegation on behalf of a user. The relayer pays gas.","tags":["relay"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerDelegateRequest"}}}},"responses":{"200":{"description":"Delegation transaction submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerDelegateResponse"}}}},"400":{"description":"Validation or eligibility error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"503":{"description":"Relayer unavailable (low balance)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/relay/config":{"get":{"operationId":"getConfig","summary":"Public relayer configuration","description":"Returns the static configuration values the dashboard needs to render eligibility hints.","tags":["system"],"responses":{"200":{"description":"Relayer configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerConfigResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/relay/rate-limit/{address}":{"get":{"operationId":"getRateLimit","summary":"Per-address relay usage for the current UTC month","description":"Returns the number of relay calls already used and remaining for the given address, split by operation. Reads do not consume the rate limit.","tags":["system"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Current usage and remaining quota","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerRateLimitResponse"}}}},"400":{"description":"Invalid address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"503":{"description":"Rate limiter storage is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]},"/{dao}/relay/balance":{"get":{"operationId":"getRelayerBalance","summary":"Relayer wallet funding status","description":"Returns the relayer wallet's current native balance and whether it meets the configured threshold. Lets the dashboard hide or warn about gasless actions before users sign a request.","tags":["system"],"responses":{"200":{"description":"Relayer balance status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerBalanceResponse"}}}},"500":{"description":"Failed to read on-chain balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}}}},"parameters":[{"name":"dao","in":"path","required":true,"schema":{"type":"string","enum":["ens"]},"description":"DAO identifier (case-insensitive at runtime; the typed contract is lowercase, e.g. \"ens\")."}]}},"webhooks":{},"security":[{"bearerAuth":[]}]}