Available

Telegram Bot Verification

Prove that a business controls a specific Telegram bot. One API call with the bot's token: we ask Telegram which bot the token belongs to, and the answer carries a signed proof.

Proof Holdingsproof.holdings · verification api
AttestationNº 2026-0130
subject@your_bot
channelTelegram · bot token
challengevalidated via getMe with the token
received14:52:18 UTC
verdictOwnership provenonly the bot's owner holds a working token
Mintedph_ctl_5d0c…f76 · ES256
How It Works

One call, checked against Telegram itself

§ 01

Send the Username and Token

One API call carries the bot's username and its token. There is no second step.

§ 02

We Ask Telegram

We call Telegram's getMe with the token. The username in our answer is the one Telegram returns — not the one in your request — and it must match the bot you named.

§ 03

The Proof Is in the Answer

If it matches, the same response carries the proof token. We use the token once, to ask Telegram which bot it belongs to, and don't store it.

API Integration

Integrate Telegram bot verification in minutes

1. Verify the bot

# One call: the token is used once, for Telegram's getMe, and not stored.
curl -X POST https://api.proof.holdings/api/v1/verifications \
  -H "Authorization: Bearer pk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "telegram_bot",
    "channel": "telegram_bot_token",
    "identifier": "@your_bot",
    "bot_token": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
  }'

2. Check the proof

# Anyone can check the proof later — no API key needed
curl -X POST https://api.proof.holdings/api/v1/proofs/validate \
  -H "Content-Type: application/json" \
  -d '{"token": "PROOF_TOKEN"}'

Response Example

{
  "id": "507f1f77bcf86cd799439011",
  "type": "telegram_bot",
  "channel": "telegram_bot_token",
  "status": "verified",
  "identifier": "@your_bot",
  "verified_data": {
    "bot_id": 123456,
    "bot_username": "your_bot",
    "bot_name": "Your Bot",
    "can_join_groups": true,
    "supports_inline": false
  },
  "proof_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...",
  "proof_expires_at": "2027-03-15T10:51:30Z",
  "created_at": "2026-03-15T10:51:30Z"
}