Build chat bots on Reyta over a simple HTTPS API. It mirrors the Telegram Bot API, so the methods, parameters, and JSON responses you already know work here unchanged – and an existing bot moves over by changing one line.
Introduction
The Bot API is a set of HTTPS endpoints. Each call is the base URL, then your bot token, then a method name. You send parameters; you get back JSON. There is nothing else to install on the server side – any language with an HTTP client can talk to it.
Endpoint shape
https://api.reyta.uz/bot<token>/METHOD_NAME
Every response has the same envelope: a boolean ok, and either a result on success or an error_code plus a human-readable description on failure.
That is the whole model: swap getMe for any method below, add its parameters, and read the JSON back.
Authorization
The token goes directly in the request path – there is no separate header or OAuth step. Keep it secret: anyone who has it can control the bot. If it leaks, revoke and reissue it in BotMother.
Verify a token
curl"https://api.reyta.uz/bot<token>/getMe"
Making requests
Send parameters as a query string, form-encoded body (application/x-www-form-urlencoded), or JSON (application/json). To upload a file, use multipart/form-data. Both GET and POST work for most methods.
Request with JSON body
curl"https://api.reyta.uz/bot<token>/sendMessage"\ -H"Content-Type: application/json"\ -d'{"chat_id": 987654321, "text": "Hello from Reyta"}'
Migrate from Telegram
Because the surface matches the Telegram Bot API, migration is not a rewrite – it is a configuration change. Point your library’s API root at Reyta and use a token from BotMother. Your method calls, update handling, and types stay exactly the same. Here are the one-line changes for popular libraries (grammY and Telegraf are verified against this endpoint).
To message a user or chat you need its chat_id. The simplest way to get one: send your bot a message, then read it back with getUpdates – the chat.id is in the response. Then:
sendMessage
curl"https://api.reyta.uz/bot<token>/sendMessage"\ -d"chat_id=987654321"\ -d"text=Salom! My bot is live on Reyta."\ -d"parse_mode=HTML"
Add an inline keyboard, reply to a message, or attach media with the parameters listed under each method below.
Getting updates
Receive incoming events by long polling or webhook. Pick one – they are mutually exclusive.
POST/bot<token>/getUpdates→ Array of UpdatePartial support
Poll for new updates using long polling. Returns an array of Update objects.
allowed_updates filters at read time: filtered updates are not returned, but they stay in the queue and keep counting toward pending_update_count until an offset past them is confirmed.
Parameter
Type
Required
Description
offset
Integer
Optional
Identifier of the first update to return. Set to last received update_id + 1 to confirm.
limit
Integer
Optional
Number of updates to retrieve, 1–100. Default 100.
timeout
Integer
Optional
Long-polling timeout in seconds. 0 for short polling (testing only).
allowed_updates
Array of String
Optional
List of update types to receive, e.g. ["message","callback_query"].
{"ok":true,"result":true,"description":"Webhook was set"}
POST/bot<token>/deleteWebhook→ True
Remove the webhook and switch back to getUpdates.
Parameter
Type
Required
Description
drop_pending_updates
Boolean
Optional
Discard everything queued before this call.
GET/bot<token>/getWebhookInfo→ WebhookInfo
Current webhook status, pending update count, and last error.
Sending messages
Deliver text, media, and everyday content to any chat the bot can reach.
POST/bot<token>/sendMessage→ MessagePartial support
Send a text message. Supports Markdown/HTML formatting and inline keyboards.
The reply_to_message object carries the replied message's id and chat, not its full content — fetch it by id if you need the body. link_preview_options is not echoed back.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Unique chat identifier or @username of a channel.
text
String
Yes
Message text, 1–4096 characters.
parse_mode
String
Optional
"MarkdownV2" or "HTML" for entity formatting.
reply_markup
Object
Optional
Inline keyboard, reply keyboard, or force-reply.
disable_notification
Boolean
Optional
Send silently, without a notification sound.
Request
curl"https://api.reyta.uz/bot<token>/sendMessage"\ -d"chat_id=987654321"\ -d"text=Salom! Reyta Bot API is live."\ -d"parse_mode=HTML"
Response
{"ok":true,"result":{"message_id":43,"chat":{"id":987654321,"type":"private"},"date":1783900050,"text":"Salom! Reyta Bot API is live."}}
POST/bot<token>/sendPhoto→ Message
Send a photo by file_id, HTTP URL, or multipart upload.
Copy several messages at once without a link to the original.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
from_chat_id
Integer or String
Yes
Chat the message is taken from.
message_ids
Array of Integer
Yes
JSON array of message ids.
remove_caption
Boolean
Optional
Copy without the original caption.
POST/bot<token>/forwardMessages→ Array of MessageId
Forward several messages at once, keeping the original author.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
from_chat_id
Integer or String
Yes
Chat the message is taken from.
message_ids
Array of Integer
Yes
JSON array of message ids.
disable_notification
Boolean
Optional
Deliver silently, without a notification sound.
protect_content
Boolean
Optional
Forbid forwarding and saving of the sent message.
reply_to_message_id
Integer
Optional
Send as a reply to this message.
message_thread_id
Integer
Optional
Forum topic the message belongs to.
Updating & deleting
Edit or delete messages the bot already sent. Editing by chat_id + message_id works everywhere; editing an inline message by inline_message_id is not supported yet.
POST/bot<token>/editMessageText→ Message or TruePartial support
Edit the text of a sent or inline message.
Editing by inline_message_id is not supported yet – returns 501. Editing by chat_id + message_id works.
Parameter
Type
Required
Description
text
String
Yes
New text of the message.
chat_id
Integer or String
Optional
Target chat. Required unless inline_message_id is used.
message_id
Integer
Optional
Message to edit. Required unless inline_message_id is used.
POST/bot<token>/editMessageCaption→ Message or TruePartial support
Edit the caption of a media message.
Editing by inline_message_id is not supported yet – returns 501. Editing by chat_id + message_id works.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_id
Integer
Yes
Target message.
inline_message_id
String
Optional
Identifier of an inline message.
caption
String
Optional
Caption, 0-1024 characters.
parse_mode
String
Optional
Markdown, MarkdownV2 or HTML.
reply_markup
InlineKeyboardMarkup
Optional
JSON keyboard attached to the message.
POST/bot<token>/editMessageMedia→ Message or TruePartial support
Replace the media of a message.
Works by chat_id + message_id (media via file_id, URL, or attach:// upload; the InputMedia caption replaces the message caption). Editing by inline_message_id is not supported yet.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_id
Integer
Yes
Target message.
media
Array of InputMedia
Yes
JSON array describing the album items.
inline_message_id
String
Optional
Identifier of an inline message.
reply_markup
InlineKeyboardMarkup
Optional
JSON keyboard attached to the message.
POST/bot<token>/editMessageReplyMarkup→ Message or TruePartial support
Edit only the inline keyboard of a message.
Editing by inline_message_id is not supported yet – returns 501. Editing by chat_id + message_id works.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_id
Integer
Yes
Target message.
inline_message_id
String
Optional
Identifier of an inline message.
reply_markup
InlineKeyboardMarkup
Optional
JSON keyboard attached to the message.
POST/bot<token>/editMessageLiveLocation→ Message or TruePartial support
Move an active live location.
Editing by inline_message_id is not supported yet – returns 501. Editing by chat_id + message_id works.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_id
Integer
Yes
Target message.
inline_message_id
String
Optional
Identifier of an inline message.
latitude
Float
Optional
Latitude of the location.
longitude
Float
Optional
Longitude of the location.
live_period
Integer
Optional
How long the location stays live, in seconds.
heading
Integer
Optional
Direction the user is moving in, 1-360 degrees.
proximity_alert_radius
Integer
Optional
Distance in metres for proximity alerts.
POST/bot<token>/deleteMessage→ True
Delete a message the bot sent, or any message where it is admin.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Unique identifier of the target chat, or @channelusername.
POST/bot<token>/answerInlineQuery→ TruePartial support
Answer an inline query with a list of results.
Supported result types: article, photo, gif, mpeg4_gif, video, audio, voice, document, sticker, location, venue and contact - each in both the URL and the cached (*_file_id) flavour Bot API defines. Games are not supported and return 400.
The bot's own profile: name, descriptions, command list and default administrator rights. Each of these is per-language — pass language_code to set a localized value, or omit it for the default.
GET/bot<token>/getMe→ User
Basic information about the bot. A quick way to verify your token.
POST/bot<token>/setMyCommands→ True
Set the bot's list of commands.
Parameter
Type
Required
Description
commands
Array of BotCommand
Yes
JSON array of commands, 0-100 entries.
scope
BotCommandScope
Optional
Where the commands apply. Only the default scope is honoured today.
language_code
String
Optional
Two-letter language code the commands apply to.
Request
curl"https://api.reyta.uz/bot<token>/setMyCommands"\ -d'commands=[{"command":"start","description":"Begin"},{"command":"help","description":"How it works"}]'\ -d'scope={"type":"all_private_chats"}'
Response
{"ok":true,"result":true}
GET/bot<token>/getMyCommands→ Array of BotCommand
Current list of the bot's commands.
Parameter
Type
Required
Description
scope
BotCommandScope
Optional
JSON scope: default, all_private_chats, all_group_chats, all_chat_administrators, chat, chat_administrators or chat_member.
language_code
String
Optional
Two-letter language code; empty sets the default.
POST/bot<token>/setMyName→ True
Set the bot's name.
Parameter
Type
Required
Description
name
String
Optional
Name.
language_code
String
Optional
Two-letter language code; empty sets the default.
GET/bot<token>/getMyName→ BotName
Current bot name.
Parameter
Type
Required
Description
language_code
String
Optional
Two-letter language code; empty sets the default.
POST/bot<token>/setMyDescription→ True
Set the bot's description.
Parameter
Type
Required
Description
description
String
Optional
Description text.
language_code
String
Optional
Two-letter language code; empty sets the default.
POST/bot<token>/setChatMenuButton→ TruePartial support
Change the bot's menu button in a chat.
The web_app button type is rejected with 400. Private chats only.
Parameter
Type
Required
Description
menu_button
MenuButton
Optional
JSON menu button: default or commands.
chat_id
Integer or String
Optional
Target chat: numeric id or @username.
POST/bot<token>/logOut→ True
Log out from the cloud Bot API before moving the bot to your own server.
POST/bot<token>/deleteMyCommands→ True
Delete the bot's command list for the given scope and language.
Parameter
Type
Required
Description
scope
BotCommandScope
Optional
JSON scope: default, all_private_chats, all_group_chats, all_chat_administrators, chat, chat_administrators or chat_member.
language_code
String
Optional
Two-letter language code; empty sets the default.
GET/bot<token>/getMyDescription→ BotDescription
Read the bot's description shown on an empty chat screen.
Parameter
Type
Required
Description
language_code
String
Optional
Two-letter language code; empty sets the default.
POST/bot<token>/setMyShortDescription→ True
Set the short description shown on the bot's profile page.
Set a user's emoji status using a custom emoji the bot may use.
Parameter
Type
Required
Description
user_id
Integer
Yes
Target user.
emoji_status_custom_emoji_id
String
Optional
Custom emoji to show as the user's status.
emoji_status_expiration_date
Integer
Optional
Unix time when the emoji status expires.
POST/bot<token>/close→ TruePartial support
Close the bot instance before moving it between servers.
Accepted and answers true, but is a no-op – Reyta has no local-server model to close.
Files & stickers
Download files the bot can see, and author sticker sets. A set created through the API is owned by the bot that created it.
GET/bot<token>/getFile→ File
Prepare a file for download and return a File with its path.
Parameter
Type
Required
Description
file_id
String
Yes
Identifier of the file — including sticker file_ids from getStickerSet. The response contains a file_path to download from /file/bot<token>/<file_path>.
GET/bot<token>/getCustomEmojiStickers→ Array of Sticker
Information about custom emoji stickers by id.
Parameter
Type
Required
Description
custom_emoji_ids
Array of String
Yes
JSON array of custom emoji ids.
POST/bot<token>/createNewStickerSet→ TruePartial support
Create a new sticker set owned by a user.
The set is owned by the bot that creates it, not by user_id — Reyta stamps ownership from the API caller. needs_repainting is accepted but not stored.
Parameter
Type
Required
Description
user_id
Integer
Yes
Identifies the requester. The set is owned by the calling bot.
name
String
Yes
Short name of the set, 5-64 characters: a letter first, then letters, digits and underscores.
title
String
Yes
Set title, 1-64 characters.
stickers
Array of InputSticker
Yes
JSON array, at most 50 items. Each item needs sticker (a file_id from uploadStickerFile, or attach://<field> naming a part of this request), format and emoji_list; keywords and mask_position are optional.
Move a sticker to a different position in its set.
Parameter
Type
Required
Description
sticker
String
Yes
file_id of the sticker.
position
Integer
Yes
Zero-based position in the set.
POST/bot<token>/setStickerEmojiList→ True
Replace the emoji associated with a sticker.
Parameter
Type
Required
Description
sticker
String
Yes
file_id of the sticker.
emoji_list
Array of String
Yes
JSON array of 1-20 emoji.
POST/bot<token>/setStickerKeywords→ True
Replace the search keywords of a sticker.
Parameter
Type
Required
Description
sticker
String
Yes
file_id of the sticker.
keywords
Array of String
Optional
JSON array of search keywords.
POST/bot<token>/setStickerMaskPosition→ True
Change where a mask sticker is placed on a face.
Parameter
Type
Required
Description
sticker
String
Yes
file_id of the sticker.
mask_position
MaskPosition
Optional
JSON object: point (forehead, eyes, mouth, chin), x_shift, y_shift, scale.
POST/bot<token>/uploadStickerFile→ FilePartial support
Upload a sticker file for later use in a sticker set.
The file is validated before it is stored: format, dimensions (one side 512px), TGS frame rate and duration, WebM codec. A rejected file returns 400 naming the rule it broke.
Parameter
Type
Required
Description
user_id
Integer
Yes
The user the upload is made for. In Reyta the calling bot owns every set it creates, so this only identifies the requester.
sticker
InputFile
Yes
The sticker file, uploaded as multipart/form-data.
sticker_format
String
Yes
One of static (.webp), animated (.tgs) or video (.webm).
Id of a custom emoji from the set. Both the decimal document id and the file_unique_id printed by getStickerSet are accepted. Omit to clear.
Forum topics
Manage topics in a forum supergroup. Every method here needs a supergroup with forum mode on — a channel or a basic group is rejected.
POST/bot<token>/createForumTopic→ ForumTopic
Create a topic in a forum supergroup.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Unique identifier of the target chat, or @channelusername.
name
String
Yes
Topic name, up to 128 characters.
icon_color
Integer
Optional
Icon colour as an RGB integer.
icon_custom_emoji_id
String
Optional
Custom emoji used as the topic icon.
POST/bot<token>/editForumTopic→ True
Edit name/icon of a forum topic.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_thread_id
Integer
Yes
Forum topic the message belongs to.
name
String
Optional
Name.
icon_custom_emoji_id
String
Optional
Custom emoji shown as the topic icon.
POST/bot<token>/deleteForumTopic→ True
Delete a forum topic along with its messages.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_thread_id
Integer
Yes
Forum topic the message belongs to.
POST/bot<token>/closeForumTopic→ True
Close a forum topic so no new messages can be posted.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_thread_id
Integer
Yes
Forum topic the message belongs to.
POST/bot<token>/reopenForumTopic→ True
Reopen a closed forum topic.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_thread_id
Integer
Yes
Forum topic the message belongs to.
POST/bot<token>/unpinAllForumTopicMessages→ True
Unpin every pinned message in a forum topic.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
message_thread_id
Integer
Yes
Forum topic the message belongs to.
POST/bot<token>/editGeneralForumTopic→ True
Rename the General topic of a forum.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
name
String
Yes
Name.
POST/bot<token>/closeGeneralForumTopic→ True
Close the General topic of a forum.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
POST/bot<token>/reopenGeneralForumTopic→ True
Reopen the General topic of a forum.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
POST/bot<token>/hideGeneralForumTopic→ True
Hide the General topic from the forum's topic list.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
POST/bot<token>/unhideGeneralForumTopic→ True
Show the General topic again.
Parameter
Type
Required
Description
chat_id
Integer or String
Yes
Target chat: numeric id or @username.
GET/bot<token>/getForumTopicIconStickers→ Array of StickerPartial support
List the stickers available as forum topic icons.
Reyta has no curated topic-icon pack. An operator can point the server at a custom emoji set; until then the method returns an empty array and clients show no custom-icon picker.