Hosted UI and GraphQL API for on-chain governance — Governor (Bravo / OZ), Compound-style, and Arbitrum/Optimism Security Council flows. Powers the front-ends for Uniswap, Aave, Arbitrum, Compound and others.
- 01on-chain Governor voting UI
- 02delegation dashboards
- 03proposal indexing
- 04multi-chain governance
- 05treasury proposals
- pnpm add graphql graphql-request
| Variable | Scope | Description |
|---|---|---|
| TALLY_API_KEY | Server | API key from https://www.tally.xyz/user/settings used as the `Api-Key` header against https://api.tally.xyz/query. |
Use Tally's GraphQL API at `https://api.tally.xyz/query` with the `Api-Key` header for on-chain governance data. Query `governors(input: { filters: { chainId: "eip155:1" } })` to list deployments, `proposals(input: { filters: { governorId } })` for proposals, and `delegates(input: { filters: { governorId } })` for delegate leaderboards. For voting/proposing, write directly to the underlying Governor contract via wagmi/viem (`castVote`, `castVoteWithReason`, `propose`) — Tally indexes those events. Embed the Tally UI by linking to `https://www.tally.xyz/gov/<slug>` if you don't want to build a custom front-end.
- ⚑Tally is read-only at the API level — it indexes Governor events but does not submit transactions for you; voting/proposing is a direct on-chain call against the Governor contract.
- ⚑`chainId` in the API uses CAIP-2 format (`eip155:1`), not numeric chain IDs.
- ⚑Delegate vote weight comes from the token's `getPastVotes` checkpoint at the proposal's start block — users who acquire tokens after that block cannot vote on that proposal.
- ⚑Custom Governor implementations that diverge from OZ/Bravo interfaces may not index correctly; confirm with Tally support before relying on automatic detection.
- ⚑API rate limits apply per key; cache governor and proposal lists rather than re-querying on every page render.