Skip to main content

BotFather step-by-step: create a Bot and get its token

Step-by-step BotFather guide: send /start and /newbot, set the display name and username, copy the token, verify it with getMe, and configure the Bot profile.

First, get the token

For your first Bot, follow /start → /newbot → display name → username → token. Then verify it with getMe. Profile and welcome-message settings can wait until the token works.


Overview

BotFather is the operator console for bots. API description methods mirror the default (non-localized) profile — see core.mp.net/bots.

Where to open BotFather

  • Contacts → under Saved groups / the Robots entry, or

  • Search for BotFather in MPChat and open the chat.

Create a Bot and get its token on your phone

The shortest path

Send /start → send /newbot → enter the Bot's display name → enter a unique username → copy the token.

Complete the following steps in the BotFather chat on the MPChat mobile app. Commands begin with the English slash /; send each command as its own message.

  1. Open BotFather. In MPChat on your phone, go to Contacts → Bots below Saved Groups, or search for BotFather in MPChat. Make sure the chat title is BotFather before continuing.

  2. Start BotFather. You send: tap Start, or send /start. Expected result: BotFather replies with its command menu. If nothing happens, make sure you used the English slash and sent the command to BotFather rather than to your own Bot.

  3. Create a Bot. You send: /newbot as a separate message. Expected result: BotFather asks what to call the Bot. Enter the display name users will see, for example My Shop Assistant. This is not the username. If the flow stops, return to BotFather and send /newbot again; do not send the display name and username in one message.

  4. Set the username. Expected result: BotFather asks for a username. Enter a unique name using English letters, digits, or underscores, without the leading @, for example my_shop_helper_bot. Follow the prompt if it requires the username to end in bot. invalid means the format is not accepted; change the characters or suffix. already taken means someone already uses it; add a brand abbreviation or digits and try again.

  5. Copy the token immediately. After the username is accepted, BotFather sends a success message and a line containing the Bot token. Copy that complete line; do not copy the username, the t.me/... Bot link, or surrounding punctuation. A token is a long credential, commonly shaped like 123456789:AA.... Seeing the token means the Bot was created successfully.

  6. Verify before developing. If you only needed the token, you may stop here after storing it safely. To test it, continue with First Bot test: mobile + Windows/macOS for guided Windows/macOS steps, or use the Developer quickstart if you are comfortable with a terminal. Call getMe and confirm that ok is true and result.username is the username you just created. A 401 Unauthorized response usually means the token is incomplete, invalid, or revoked. See token safety and rotation for secure storage and what to do if it leaks.

Protect the token

The token controls the Bot. Do not post it in chats, screenshots, source code, issue trackers, or public logs. If it is exposed, revoke or rotate it in BotFather before using the Bot again.

The required part is complete

The remaining profile, description, and welcome-image settings are optional. You can skip them the first time and return after the token passes getMe.

about vs description (semantics)

Field

Meaning

about / short description

Bot blurb shown in profile-style surfaces (API: short description, ≤120).

description

Welcome text: centered at the top of the chat and on the Start screen (API description, ≤512 including line breaks).

Set description (BotFather + API)

  • BotFather chat: follow the Description prompts for the selected bot.

  • API: setMyDescription with description (omit/empty clears). Read back with getMyDescription.

  • Short blurb: setMyShortDescription / getMyShortDescription (short_description ≤120).

  • Localized language_code profiles are not supported; non-empty language codes return 400.

  • Plain text, URLs, and emoji are fine. If unset, both UI surfaces stay empty.

  • BotFather may reject over-length input with: Sorry the description you provided is invalid. A description may not exceed 512 characters (line breaks included).

curl --silent --show-error -X POST "https://call.mp.net/bot/setMyDescription" \
-H "Authorization: Bearer ${MPCHAT_BOT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"description":"A helpful MPChat bot."}'

Description Picture (BotFather)

  • Shown under the description. States: has a description GIF / has a description photo / no description picture.

  • Use Edit Description Picture to upload or change media; /empty clears it in the BotFather flow.

  • Success toast example: Success! Description media updated. You will be able to see the changes within a few minutes.

  • Photo: 640×360. GIF: 320×180 / 640×360 / 960×540. Wrong size is rejected with BotFather error text.

  • When present, picture and welcome text share one bubble (image above text); long text can scroll.

Username rules

  • Invalid names surface as Bot_Username_Invalid / Sorry, this username is invalid. (keep separate from other policy errors).

  • After a bot is deleted, its username stays locked for 30 days before release.

Reserved /start

/start is a platform-reserved command. It highlights even if you never list it in setMyCommands.

Related

Source of truth

Description APIs and limits: core.mp.net/bots.

Did this answer your question?