Skip to main content

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:
  1. They tap Join on a Telegram group
  2. They receive a DM from @CanvasVerificationBot
  3. They have a short conversation — typically 3–4 messages, under 30 seconds
  4. They receive a confirmation and are admitted
Canvas does not surface USDC amounts, wallet addresses, or any crypto terminology to end users.