← Protocols
Tally
01Description

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.

02Best for
  • 01on-chain Governor voting UI
  • 02delegation dashboards
  • 03proposal indexing
  • 04multi-chain governance
  • 05treasury proposals
03Install
  • pnpm add graphql graphql-request
04Environment variables
VariableScopeDescription
TALLY_API_KEYServerAPI key from https://www.tally.xyz/user/settings used as the `Api-Key` header against https://api.tally.xyz/query.
05Prompt snippet
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.
06Gotchas
  • 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.
07Alternatives