Setup
Two parties register before any verification can run: the group owner and the advertiser. Both use@CanvasVerificationBot directly.
1
Group owner registers
The group owner DMs
@CanvasVerificationBot with their group link, topic, Base wallet address, and price per verification (default: $0.10 USDC). Canvas writes the group to Postgres.2
Bot is added as admin
The group owner adds
@CanvasVerificationBot as admin with two permissions: restrict members and send messages. No other permissions are required.3
Advertiser funds a campaign
The advertiser selects groups by topic and member count, sets a bid per verification, and locks USDC into the Canvas escrow contract on Base. Budget draws down as completions pass Kimi scoring.
Per-verification flow
Runs automatically on every new join attempt to a registered group.1
Join detected
Telegram fires a webhook to the Canvas agent server on Railway. The server checks Postgres: group registered, active campaign budget present.
2
User restricted and DMed
The bot restricts the new member from posting and opens a DM. The Canvas agent sends an opening message generated from the advertiser brief and group topic.
3
Conversation runs
The user exchanges 2–4 messages with the agent. If a response is thin or evasive, the agent sends a follow-up. Maximum 3 agent turns. Each conversation is generated dynamically from the brief — no two users see the same opener.
4
Response recorded
On the user’s final turn, the agent server records the attempt and full transcript in Postgres and queues it for scoring. Every attempt is captured regardless of the outcome.
5
Kimi scores the transcript
The full conversation transcript goes to Kimi. Kimi returns a score between 0 and 1 based on response entropy, contextual coherence, engagement trajectory, and timing.
6
Pass: admitted, payout accrued
Score ≥ threshold → the user accepts the group rules, is unrestricted, and is admitted. The payout is accrued at the locked bid price and settled on-chain via
releasePayout in the payout batch.7
Fail: re-prompt or deny
Score below threshold → user gets one re-prompt with a different question from the same brief. Second failure → user denied, 24-hour cooldown applied. No payout on either failure.
8
Advertiser notified
Advertiser receives: transcript, Kimi score, group context, payout transaction hash, remaining budget.
What the user sees
From the user’s side:- They tap Join on a Telegram group
- They receive a DM from
@CanvasVerificationBot - They have a short conversation — typically 3–4 messages, under 30 seconds
- They receive a confirmation and are admitted