The holder count for a token
How many distinct wallets hold a non-zero balance of the token, on one chain. The number comes from the same `ChainReader` the holder gate uses, so a community that shows 1,284 holders here and refuses 0 wallets there is reading one source. A `409` means the reader in use cannot answer a census at all — an indexer is a different job from an `eth_call`, and putty does not guess a number it cannot back up. Supply a `ChainReader` whose `holderCount` is indexer-backed and the same route answers 200.
How many distinct wallets hold a non-zero balance of the token, on one chain. The number comes from the same ChainReader the holder gate uses, so a community that shows 1,284 holders here and refuses 0 wallets there is reading one source. A 409 means the reader in use cannot answer a census at all — an indexer is a different job from an eth_call, and putty does not guess a number it cannot back up. Supply a ChainReader whose holderCount is indexer-backed and the same route answers 200.
Authorization
bearerAuth A bearer token. The Account routes accept a Privy access token; the MCP transport accepts an sk- API key issued by POST /account/api-keys.
In: header
Query Parameters
The chain to count on.
Value in
- "ethereum"
- "base"
- "robinhood"
- "base-sepolia"
The token contract.
^0x[0-9a-fA-F]{40}$Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/community/holders?chain=ethereum&token=string"{ "chain": "string", "token": "string", "holders": "string", "totalSupplyRaw": "string", "decimals": 0, "symbol": "string"}Check a wallet against a community's token POST
The holder gate. Reads the wallet's `balanceOf` on the token, through the same chain client the rest of putty uses, and answers with the balance and the holder census for that token. A balance above zero passes and comes back 200. A balance of zero is **403 `not_a_holder`**, not a 200 with `verified: false` — the refusal is the product here, so it is a status a gateway can act on without parsing the body. A chain read that fails is **502 `chain_unavailable`**, which is deliberately a third outcome: a caller must be able to tell "you are not a holder" from "we could not check", and collapsing the two would show a member an error instead of a refusal. `holders` is `null` when this chain read cannot count holders — that needs an indexed transfer log, which a single node cannot answer. A `null` census still comes back 200: the balance read is what gates the chat, and losing the census does not undo it. `"0"` means counted and none, which is a different answer from `null`.
List the caller's launch countdowns GET
Every countdown schedule on the caller's bots, newest first. A schedule is a set of offsets, not a running timer: the bot holds the timestamps and posts when it passes them, so a restart does not lose a pending post. `postedAt` is the idempotency key that stops a restart from announcing the same launch twice.