BuzzioDocs

Bot API

Who this is for: developers with a Forge token (bzbot_…) who want to receive updates and reply as their bot.

Console: developers.buzzio.dev · Product: Bots · Workers: Worker bots

This API copies Telegram’s developer experience (token, methods, { ok, result }), not Telegram’s whole product. There is no Buzzio file CDN, no sealed-chat access, and no acting as a person.


Quick start

  1. In the app: @forge_bot/newbotService → copy bzbot_… once.
  2. On desktop: paste the token on developers.buzzio.dev.
  3. Terminal: getMe → leave getUpdates running → click Test /start on the site → sendMessage a welcome.
  4. Submit when Test passes. Approved + active plan → real users can Start.

Seed / 12-word phrase never goes on the website. The token is the bot login.


What you can do

Job Method
Check the token getMe
Poll for user messages (no public URL) getUpdates
Reply with text sendMessage
Reply with photo / video / audio / file URL you host sendPhoto / sendVideo / sendAudio / sendDocument
Push updates to your HTTPS server setWebhook
Stop webhook, return to polling deleteWebhook
See webhook status getWebhookInfo
Show / hide a typing pill sendChatAction
Inline buttons reply_markup on send, then answerCallbackQuery
Edit or delete a bot message editMessageText / editMessageCaption / editMessageMedia / editMessageReplyMarkup / deleteMessage / deleteMessages
Copy or forward in this bot DM copyMessage / forwardMessage
Composer slash list setMyCommands / getMyCommands / deleteMyCommands
Display name / bio / search subtitle setMyName / setMyDescription / setMyShortDescription
Profile photo (HTTPS URL they host) setMyProfilePhoto / removeMyProfilePhoto
Chat menu (commands or Mini App URL) setChatMenuButton / getChatMenuButton
Animation / voice / video note / sticker sendAnimation / sendVoice / sendVideoNote / sendSticker (URL or bzstk_…)
Bot-owned sticker set createNewStickerSet / getStickerSet / uploadStickerFile
Installs / stats / 7-day history / report / schedule getMyInstalls / getBotStats / getChatHistory / reportMessage / sendScheduledMessage
Location / venue / contact card sendLocation / sendVenue / sendContact
Poll, dice, album, checklist sendPoll / stopPoll / sendDice / sendMediaGroup / sendChecklist
Live photo / streaming draft / live pin sendLivePhoto / sendMessageDraft / editMessageLiveLocation
React / vanish / rich blocks / getFile setMessageReaction / ephemeral edits / sendRichMessage / getFile

You cannot: read sealed 1:1 chats, Whisper private chat, Whisper Questions, or E2E groups; upload bytes for Buzzio to host; or use a service token as a worker (and the reverse).


Base URL and auth

Host: https://developers.buzzio.dev

Telegram-style (primary):

https://developers.buzzio.dev/bot<token>/<method>

Example: https://developers.buzzio.dev/botbzbot_…/getMe

Also accepted (Bearer):

POST https://developers.buzzio.dev/v1/sendMessage
Authorization: Bearer <token>
Content-Type: application/json

Same pattern for /v1/getMe, /v1/getUpdates, and other methods.

Do not put the token in a ?token= query string (access logs). Path or Bearer only.

How to call

HTTPS. UTF-8. GET or POST.

Parameters from, in order (later wins):

  1. URL query string
  2. application/x-www-form-urlencoded
  3. application/json

Reject multipart/form-data file uploads. Outgoing media is an HTTPS URL you host, or a bzstk_… file_id from a set this bot registered. Incoming user media is a 7-day bzfile_…. Buzzio never GETs your URL (SSRF lock).


Success / error envelope

Success:

{ "ok": true, "result": { } }

Failure:

{ "ok": false, "error_code": 401, "description": "Unauthorized" }
HTTP error_code When
401 401 Bad / missing / rotated token
403 403 Shadow-banned, suspended, plan expired, user hid the bot
400 400 Bad chat_id, empty text, file bytes, bad URL
404 404 Unknown method, unknown chat_id
409 409 getUpdates while a webhook is set
429 429 Rate limit

Older /v1/sendMessage responses may also include "error": "…" alongside description for compatibility.


Two ways to receive updates

One at a time (same rule as Telegram):

                    ┌─ webhook URL set  → Buzzio POSTs Update to you
User taps Start  ───┤
                    └─ no webhook       → you poll getUpdates
Mode When Public URL?
Polling getUpdates Laptop, first bot, CI No
Webhook setWebhook Always-on server Yes (HTTPS)

If a webhook is set, getUpdates returns 409 (Conflict: can't use getUpdates while webhook is active).
deleteWebhook restores polling.

Pending polling updates: keep about 24 hours, then drop. Cap about 1000 per bot; drop oldest.

Website Test /start and a real user Start use the same Update shape. A terminal bot that answers Test will answer a real user.


Platform `/start`

Buzzio owns the Start button and the start event. You own the welcome text.

Layer Owner
Start button in the app Buzzio
POSTing /start to you Buzzio
Welcome sendMessage after Start You
Other commands (/help, /weather, …) You

Do not invent a custom “type hi to begin” as the only entry — users learn one Start for every bot.


Available methods

The Bot API publishes 150 HTTP methods. Each one is documented individually — heading, “Use this method to…”, then a Parameter / Type / Required / Description table — on Bot API methods. That is the same layout as Telegram Bot API.

Console copy (searchable, one page): developers.buzzio.dev/docs/api/.

Status Names
Live Waves 0–H and J (getMe, send*, edit*, stickers, room moderation, invites, forum/channels, native ops, …)
Documented, not enabled Wave I: stories, inline queries, Mini App answers, games, logOut / close. Calls return 404.
Not in the 150 Telegram payments / Stars / invoices (404). Bot premium (setMyPremium, grantUserPremium, …) is not offered (404).

chat_id is always a string. Outgoing media is an HTTPS URL you host; Buzzio never GETs it. Incoming user media is a 7-day bzfile_…. Forum topic methods create and manage community channels (message_thread_id is the channel id).

Worker grants: Worker bots.

JSON types

Update

{
  "update_id": 17,
  "message": { }
}

update_id is a positive integer, sequential per bot (needed for offset).

Wave A also delivers callback_query when a user taps an inline button, and start_parameter on /start <payload> (also in message.text).

Wave F delivers chat_join_request when someone asks to join a room that requires approval:

{
  "chat_join_request": {
    "chat": { "id": "ohg:…", "type": "group", "title": "Mods" },
    "from": { "id": "ghost_…", "is_bot": false, "first_name": "User" },
    "date": 1710000000,
    "invite_link": { "invite_link": "https://links.buzzio.dev/join?g=…&t=…" }
  }
}

User

{
  "id": "ghost_a1b2c3",
  "is_bot": false,
  "first_name": "User"
}

You do not receive the person’s Buzzio username or avatar. id is enough to talk in this chat. first_name may be generic "User". Forge analytics stay counts-only.

Chat

{
  "id": "botdm_<botId>_<ghostId>",
  "type": "private"
}

Service-bot v1: type is always "private".

Message

{
  "message_id": "msg_…",
  "from": { "id": "ghost_…", "is_bot": false, "first_name": "User" },
  "chat": { "id": "botdm_…", "type": "private" },
  "date": 1710000000,
  "text": "/start",
  "chat_id": "botdm_…",
  "command": "start"
}
Field Why
chat.id Telegram style
chat_id Kept for playground / echo samples
command Platform Start ("start") so you cannot miss it
text "/start" or "/start <payload>"
start_parameter Present when the user opened me.buzzio.dev/<bot>?start= or buzzio://bot?u=&start=
User → bot Text, plus incoming photo/voice/file as file_id (7 days)
Bot → user media URL metadata on outgoing messages
photo / voice / … Incoming attachment fields on the Update
poll_answer User voted on a bot poll

Unix date is seconds.


Webhook POST (Buzzio → you)

When a webhook is set, Buzzio POSTs one Update (same JSON as getUpdates items):

POST https://your-server/webhook
Content-Type: application/json
X-Buzzio-Timestamp: …
X-Buzzio-Bot-Id: …
X-Buzzio-Signature: sha256=…

Verify the signature before trusting the body. Return HTTP 2xx quickly, then call sendMessage asynchronously if needed.

Probe payloads from the console may include "probe": true — ignore for real chats.


Terminal walkthrough

# 1. Token from Forge /newbot (vanishes after 5 minutes)

# 2. Who am I?
curl.exe -sS https://developers.buzzio.dev/botbzbot_TOKEN/getMe

# 3. Wait for messages (leave running)
curl.exe -sS "https://developers.buzzio.dev/botbzbot_TOKEN/getUpdates?timeout=20"

# 4. After an Update arrives:
curl.exe -sS -X POST https://developers.buzzio.dev/botbzbot_TOKEN/sendMessage `
  -H "Content-Type: application/json" `
  -d "{\"chat_id\":\"botdm_…\",\"text\":\"Hi, I am Weather Bot.\"}"

Loop in a script: offset = last update_id + 1 so you do not see the same Update twice.

Test without a public server: start the poll loop first, then click Test on the website. Buzzio queues /start; your script sendMessages the welcome; Test passes; you can Submit.

Always-on later: setWebhook with your HTTPS URL, stop polling.


What stays on the website / Forge

Still website / Forge only Why
Create bot, username Identity = Buzzio ID on the phone
Show token 5 min / reset Forge /@yourbot api reset
Submit for review ToS + review ping
Pay / renew No card on the Bot API
Staff ban Founder desk

setWebhook on the API is allowed. Console save-webhook is the same field.


Limits

Rule Value
User → bot ~30 / minute / chat
sendMessage ~60 / minute / bot
Text 4000 chars
Media HTTPS URL you host; Buzzio never fetches
getUpdates timeout 0–25 s
Polling queue ~24 h, max ~1000
Live send Approved + plan active (test chats botdm_test_* allowed while testing)
chat_id Only botdm_test_* or botdm_<thisBotId>_<ghostId> for service bots
Sealed / person ids 400

Shadow-ban / suspend: webhook paused; sendMessage 403; getUpdates empty or 403.

Abuse and quotas are keyed by owner Buzzio ID and by bot. Ban the person → their bots go offline.


Telegram mapping

Telegram Buzzio
api.telegram.org/bot<token>/METHOD developers.buzzio.dev/bot<token>/METHOD
{ "ok": true, "result": … } Same
getUpdates xor webhook Same
Integer chat ids Strings (botdm_…, ohg:…, community:…)
sendPhoto by URL Same idea; URL only, never multipart
Groups Worker token after Accept + grant
Incoming file_id 7-day hold, not a public CDN
Per-method pages Bot API methods

Intentionally not here

Item Why
bot-api.buzzio.dev hostname Nice alias; not required
Official client libraries After Wave I
Developer-hosted file CDN Cost lock: outgoing media stays URL-only
Payments / Stars / invoices Future pack; names return 404
Wave I (stories, inline, games, session) Names documented; calls return 404

Worker room grants: Worker bots. Full method tables: Bot API methods.