A chat platform delivers a message to the community bot
Accepts a Telegram or Discord delivery, verifies it against the bot's configured secret, and runs the command if the message was one. Unauthenticated by necessity — a delivery carries no session — so the platform's signature is the only credential and it is checked before the body is read for anything else. A delivery that is not a command is acknowledged with `applied: false` rather than refused, because both platforms retry a non-2xx and would otherwise redeliver it forever.
Accepts a Telegram or Discord delivery, verifies it against the bot's configured secret, and runs the command if the message was one. Unauthenticated by necessity — a delivery carries no session — so the platform's signature is the only credential and it is checked before the body is read for anything else. A delivery that is not a command is acknowledged with applied: false rather than refused, because both platforms retry a non-2xx and would otherwise redeliver it forever.
Path Parameters
The chat platform delivering the message.
Value in
- "telegram"
- "discord"
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/community/webhooks/telegram"{ "applied": true, "via": "string", "reply": "string"}Turn the bot's auto-posting on or off PATCH
Flips the two auto-post switches. A field that is omitted keeps its current value, so a caller turning on countdowns does not also have to repeat the Receipts setting. This is the only way either switch changes after registration: nothing else in the Kit writes them, so the value here is the value the bot acts on.
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`.