{"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."},"commit":{"type":"string","description":"Git SHA this API is running. Gateful merges this API's OpenAPI schemas into its own spec, so a deploy that waits only on gateful can still read schemas from the previous API release — this is what makes that observable."}},"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."},"FormerDelegatorsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FormerDelegatorItem"}},"totalCount":{"type":"integer"}},"required":["items","totalCount"],"description":"Paginated former delegators for a delegate address."},"FormerDelegatorItem":{"type":"object","properties":{"delegatorAddress":{"type":"string","format":"ethereum-address"},"amount":{"type":"string","format":"bigint","description":"Voting power the queried address lost when the delegator moved away: the share of the delegator's balance held by this address, applied to the balance at the move-away event. Encoded as a decimal string."},"redelegatedAmount":{"type":"string","format":"bigint","description":"Delegated amount at the move-away event (the delegator's value once they left the queried address), encoded as a decimal string."},"startTimestamp":{"type":"string","format":"bigint","description":"Timestamp of the first delegation event of the last delegation stint, in Unix seconds."},"endTimestamp":{"type":"string","format":"bigint","description":"Timestamp of the event where the delegator moved away, in Unix seconds."},"redelegatedTo":{"type":"string","nullable":true,"format":"ethereum-address","description":"Delegate the delegator moved to, when known. Null when the move-away event does not reference the queried address as the previous delegate."}},"required":["delegatorAddress","amount","redelegatedAmount","startTimestamp","endTimestamp","redelegatedTo"],"description":"Delegator that delegated to the queried address in the past but whose latest delegation is no longer to it."},"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. On a split delegation this is the primary delegatee: the one matching the `address` filter when the feed is filtered, otherwise the first delegatee of the event. Read `delegatees` for the full list."},"previousDelegate":{"type":"string","nullable":true,"description":"Previous delegate address, when known. Taken from the primary delegatee's row."},"amount":{"type":"string","format":"bigint","description":"Voting power delegated to `delegate`, as a decimal string. On a split delegation this is the primary delegatee's share, not the event total."},"delegatees":{"type":"array","items":{"$ref":"#/components/schemas/FeedDelegationSplit"},"description":"Every delegatee of the event, ordered by delegate address ascending. Present only when the event split voting power across more than one delegatee, as partial delegation does; absence means a single delegatee, already fully described by `delegate` and `amount`."}},"required":["kind","delegator","delegate","previousDelegate","amount"],"description":"Metadata payload for a DELEGATION feed event."},"FeedDelegationSplit":{"type":"object","properties":{"delegate":{"type":"string","description":"Delegate address."},"amount":{"type":"string","format":"bigint","description":"Voting power delegated to this delegate, as a decimal string."}},"required":["delegate","amount"],"description":"One delegatee of a delegation event that split voting power across several delegates."},"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."},"InactiveVotingPowerSummaryResponse":{"type":"object","properties":{"totalDelegatedVotingPower":{"type":"string","format":"bigint","description":"Sum of all positive delegated voting power, encoded as a decimal string."},"inactiveDelegatedVotingPower":{"type":"string","format":"bigint","description":"Delegated voting power assigned to delegates that cast zero votes on proposals within the window, encoded as a decimal string."},"inactivePercentage":{"type":"number","description":"Share of delegated voting power assigned to inactive delegates, as a percentage (0-100). Zero when no proposal existed in the window."},"totalProposals":{"type":"integer","description":"Number of proposals whose voting period falls within the window."}},"required":["totalDelegatedVotingPower","inactiveDelegatedVotingPower","inactivePercentage","totalProposals"],"description":"Summary of delegated voting power assigned to inactive delegates."},"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."},"AddressLabelsResponse":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AddressLabelItem"}}},"required":["items"],"description":"Labeled treasury and vesting addresses for the DAO."},"AddressLabelItem":{"type":"object","properties":{"address":{"type":"string","format":"ethereum-address","description":"Labeled address."},"label":{"type":"string","description":"Human-readable label for the address.","example":"Foundation Vesting Wallet"},"category":{"$ref":"#/components/schemas/AddressLabelCategory"}},"required":["address","label","category"],"description":"Known DAO-labeled address with its category."},"AddressLabelCategory":{"type":"string","enum":["treasury","vesting"],"description":"High-level category derived from the address label."},"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"}},"scoresTotal":{"type":"number","description":"Total voting power counted by Snapshot for quorum evaluation."},"quorum":{"type":"number","description":"Snapshot quorum threshold for the proposal."},"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","scoresTotal","quorum","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"},"weights":{"$ref":"#/components/schemas/SnapshotVoteWeights"},"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}},"SnapshotVoteWeights":{"type":"object","description":"Per-choice weights for weighted and quadratic votes, keyed by 1-indexed choice. Null for vote types that carry no weights."},"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"]},"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"]},"RelayerProposalResponse":{"type":"object","properties":{"transactionHash":{"type":"string"}},"required":["transactionHash"]},"RelayerProposalRequest":{"type":"object","properties":{"proposalId":{"type":"string","description":"Proposal ID as decimal string","example":"42"}},"required":["proposalId"]},"RelayerHealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"commit":{"type":"string","description":"Git SHA this relayer is running. Gateful merges this service's OpenAPI paths and schemas into its own spec, so the deploy gate uses this to tell whether the release is live here yet."}},"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":{"kind":{"type":"string","enum":["dao-api","relayer","address-enrichment","token-service","unknown"]},"status":{"type":"string","enum":["ok","down"]},"circuit":{"type":"string","enum":["CLOSED","OPEN","HALF_OPEN"]},"nextRetryIn":{"type":"integer"},"error":{"type":"string"},"commit":{"type":"string"}},"required":["kind","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":{"kind":{"type":"string","enum":["dao-api","relayer","address-enrichment","token-service","unknown"]},"status":{"type":"string","enum":["ok","down"]},"circuit":{"type":"string","enum":["CLOSED","OPEN","HALF_OPEN"]},"nextRetryIn":{"type":"integer"},"error":{"type":"string"},"commit":{"type":"string"}},"required":["kind","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}/accounts/{address}/delegators/historical":{"get":{"operationId":"formerDelegators","summary":"Get former delegators","description":"Get delegators that delegated to an account in the past but whose latest delegation is no longer to it","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":{"$ref":"#/components/schemas/OrderDirection"},"required":false,"description":"Sort direction for ordered query results.","name":"orderDirection","in":"query"}],"responses":{"200":{"description":"Returns former delegators for an account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormerDelegatorsResponse"}}}}}},"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/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":["ALL","HIGH","MEDIUM","LOW"],"description":"Filter events by relevance tier. Tiers are cumulative value floors, so LOW also returns MEDIUM and HIGH events. Use ALL to drop the floor and return every event. Defaults to MEDIUM when omitted."},"required":false,"description":"Filter events by relevance tier. Tiers are cumulative value floors, so LOW also returns MEDIUM and HIGH events. Use ALL to drop the floor and return every event. Defaults to MEDIUM when omitted.","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":"string","description":"Filter events involving this address in any role (voter, proposer, delegator, delegate, previous delegate, sender or recipient). Case-insensitive.","example":"0x1111111111111111111111111111111111111111"},"required":false,"description":"Filter events involving this address in any role (voter, proposer, delegator, delegate, previous delegate, sender or recipient). Case-insensitive.","name":"address","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":"Upper bound for proposal timestamps, in Unix seconds. Proposals that only open after this instant are excluded, so a bounded period reports the votes cast inside it instead of everything up to today.","example":1700000000},"required":false,"description":"Upper bound for proposal timestamps, in Unix seconds. Proposals that only open after this instant are excluded, so a bounded period reports the votes cast inside it instead of everything up to today.","name":"toDate","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/inactive-summary":{"get":{"operationId":"inactiveVotingPowerSummary","summary":"Get inactive delegated voting power summary","description":"Returns the share of delegated voting power assigned to delegates that cast zero votes on proposals whose voting period falls within the given time window","tags":["voting-power"],"parameters":[{"schema":{"type":"integer","description":"Inclusive lower bound for the delegate activity window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive lower bound for the delegate activity window, in Unix seconds.","name":"fromDate","in":"query"},{"schema":{"type":"integer","description":"Inclusive upper bound for the delegate activity window, in Unix seconds.","example":1700000000},"required":false,"description":"Inclusive upper bound for the delegate activity window, in Unix seconds.","name":"toDate","in":"query"}],"responses":{"200":{"description":"Successfully retrieved inactive delegated voting power summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InactiveVotingPowerSummaryResponse"}}}}}},"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}/addresses/labels":{"get":{"operationId":"addressLabels","summary":"Get labeled addresses","description":"Returns the DAO's known labeled addresses (treasury and vesting contracts)","tags":["addresses"],"responses":{"200":{"description":"Successfully retrieved labeled addresses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressLabelsResponse"}}}}}},"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}/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/queue":{"post":{"operationId":"relayQueue","summary":"Queue a succeeded proposal","description":"Broadcast the permissionless Governor queue() for a proposal in Succeeded state. The relayer pays gas. Proposal args are fetched from the Anticapture API and verified on-chain via hashProposal.","tags":["relay"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerProposalRequest"}}}},"responses":{"200":{"description":"Queue transaction submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerProposalResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"404":{"description":"Proposal not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"409":{"description":"Proposal is not in an actionable state, the simulation reverted, or the broadcast transaction reverted on-chain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"422":{"description":"Proposal data failed on-chain verification","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/execute":{"post":{"operationId":"relayExecute","summary":"Execute a queued proposal","description":"Broadcast the permissionless Governor execute() for a proposal in Queued state whose timelock eta has passed. The relayer pays gas. Proposal args are fetched from the Anticapture API and verified on-chain via hashProposal.","tags":["relay"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerProposalRequest"}}}},"responses":{"200":{"description":"Execute transaction submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerProposalResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"404":{"description":"Proposal not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"409":{"description":"Proposal is not in an actionable state, the simulation reverted, or the broadcast transaction reverted on-chain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelayerErrorResponse"}}}},"422":{"description":"Proposal data failed on-chain verification","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":[]}]}