Telegram Bot Payments are a free and open platform that allows sellers to accept payments for goods and services from Telegram users. Telegram doesn't collect payment information and takes no commission.
Note: This article is intended for bot developers and store owners. If you're looking for a general overview of Telegram Payments, check out the Telegram blog.
If you are new to Telegram bots and would like to learn how to create and set up a bot, please consult our Introduction to Bots and Bot FAQ.
Payments 2.0 were added in April 2021 with Bot API v.5.2. New features:
@ShopBot ...in any chat for an inline invoice.
Users need to update to Telegram 7.7 or higher to use Payments 2.0 (for Telegram Desktop, 2.7.2 or higher). Older mobile apps released after May 2017 support basic payments in chats with bots.
You create a bot that offers goods and services to Telegram users. Merchant bots can send specially formatted invoice messages to users, groups or channels. If your bot supports inline mode, users can also send invoices to other chats via the bot, including to one-on-one chats with other users.
Invoice messages feature a photo and description of the product along with a prominent Pay button. Tapping this button opens a special payment interface in the Telegram app. In this interface, users can choose a tip amount (if allowed by the merchant) and enter additional details like shipping info, phone number, or email address.
The bot can offer several shipping options for physical goods based on the delivery address. When ready, users enter their credit card info or choose a saved card — and pay for the product. Telegram also supports Apple Pay and Google Pay. Once the transaction is done, the merchant bot can send a receipt message with payment details, shipping and delivery information.
Detailed information and step-by-step instructions are available below.
Telegram does not process payments from users and instead relies on different payment providers around the world. It is the payment providers that handle and store all sensitive information, like credit card details. Neither Telegram nor the bot developers have access to it.
For the moment we support payments from more than 200 countries via the following payment providers:
We continue expanding this list, follow @BotNews for updates.
If you work for a company that provides services similar to standalone accounts in Stripe Connect, please let us know via @BotSupport (include the hashtag
#paymentsproviderin your message).
This section explores payments via Telegram's Bot API in more detail.
To start accepting payments, you need a Telegram bot. Use BotFather to create a bot if you don't have one already.
Now you have a merchant bot that can offer goods or services to Telegram users. Let's call it
@merchantbot in this document. The first stop is to choose and connect a payment provider, you can find the list of supported providers above.
/mybotscommand in the chat with BotFather and choose the
@merchantbotthat will be offering goods or services.
You will find the necessary methods for building your payment implementation in the Payments Section of the Bot API Manual.
While you're still developing and testing payments for your bot, use the "Stripe TEST MODE" provider. When in this mode, you can make payments without actually billing any accounts. Real cards can't be used in test mode, but you can use test cards like
4242 4242 4242 4242 (full list here). You can switch between test mode and live mode as many times as you want, but please see the live checklist before you go live.
See Bot API: Payments for the complete list of available methods and objects.
The user contacts
@merchantbot and requests to purchase something. The bot forms an invoice message with a description of the goods or service, amount to be paid, and requested shipping info. There are two ways of creating an invoice:
Use the sendInvoice method to generate an invoice and send it to a chat. The provider_token parameter is where you put the token value that you've obtained earlier via Botfather. It is possible for one merchant bot to use several different tokens for different users or different goods and services.
As of Payments 2.0, invoice messages with a pay button can be sent to chats of any type: private chats with the user, groups, or channels. The resulting invoice message will look like this:
@merchantbot supports inline mode, you can use inputInvoiceMessageContent to allow users to share invoices for your goods and services to their one-on-one chats with friends, or to their groups and channels. These invoices will have a Pay button that can be used multiple times.
As of Payments 2.0 there are two ways for handling forwarded copies of your invoices, controlled by the parameter start_parameter in the sendInvoice method.
If a single-chat invoice is sent to the chat with
@merchantbot, it can only be paid once. If a single-chat invoice is sent to any other chat, it can be paid many times by many users.
To get a better understanding of how this works, try toggling the "Pay from Forwards" parameter when creating invoices with our demo @ShopBot.
Regardless of whether or not the Pay button is available in an invoice, the merchant bot always has the power to decide whether or not to accept new payments for a particular invoice.
If the max_tip_amount parameter is set to above
0, users can add a tip to their payment. You can use the parameter suggested_tip_amounts to suggest particular amounts that you feel will be relevant for the invoice.
The user specifies shipping information or other info requested by the bot. This could be the user's full name, an email address, a phone number in international format, or a full postal address for delivery.
If a shipping address was requested and you included the parameter is_flexible, the Bot API will send an Update with a shipping_query field to the bot. The bot must respond using answerShippingQuery either with a list of possible delivery options and the relevant delivery prices, or with an error (for example, if delivery to the specified address is not possible).
Tip: It is recommended that the merchant bot confirms availability of the goods/services at this step – to let the user know in case they are no longer available. This is especially important if you are using multi-chat, inline or single-chat, multi-use invoices.
The user selects a delivery option from the list (the overall amount to be paid may change at this point) and proceeds to checkout.
The user enters their payment information and presses the final pay button. At this moment the Bot API sends an Update with the field pre_checkout_query to the bot that contains all the available information about the order. Your bot must reply using answerPrecheckoutQuery within 10 seconds after receiving this update or the transaction is canceled.
The bot may return an error if it can't process the order for any reason. We highly recommend specifying a reason for failure to complete the order in human readable form (e.g. "Sorry, we're all out of rubber ducks! Would you be interested in a cast iron bear instead?"). Telegram will display this reason to the user.
Warning: As of Payments 2.0, it is critical to make sure your bot only accepts multiple payments when the order can be processed correctly. This is especially important if you are using multi-chat, inline or single-chat, multi-use invoices.
In case the bot confirms the order, Telegram requests the payment provider to complete the transaction. If the payment information was entered correctly and the payment goes through, the API will send a receipt message of the type successful_payment from the user. Once your bot receives this message, it should proceed with delivering the goods or services purchased by the user.
If the invoice message was sent in the chat with
@merchantbot, it becomes a Receipt in the UI for the user — they can open this receipt at any time and see all the details of the transaction:
If the message was sent to any other chat, the Pay button remains and can be used again. It is up to the merchant bot whether to actually accept multiple payments.
Once you've tested everything and confirmed that your payments implementation works, you're ready to switch to LIVE MODE. To do this, go to BotFather > /mybots > select
@merchantbot > Bot Settings / Payments and enable Stripe LIVE MODE. You will get a token that has the string
:LIVE: in the middle, e.g.
123:LIVE:XXXX. Do not give this token to any third parties!
Before your merchant bot goes into live mode, please ensure the following:
If you work for a company that provides services similar to standalone accounts in Stripe Connect, please let us know via @BotSupport (kindly include the hashtag
#paymentsprovider in your message).
Telegram does not charge any commission for using the Payments API. Note though, that most payment providers will have their own commissions. For example, Stripe in the US charges 2.9% + 30¢ per successful card charge (see the Stripe website for more details on pricing).
Yes. If you are not a developer, you will need to either hire someone to make a bot for you (recommended), or use a bot created by a third-party company. We advise extreme caution when using services of bots that process payments for you – Telegram doesn't maintain any such bots and doesn't endorse any of the third-party bots offering these services.
Telegram does not impose any limits on what products or services your bot can offer. But please note that you must comply with the rules of the payments provider you choose in our system. E.g., Stripe has a special page for prohibited businesses – you may want to consult that one before you start selling harvested organs.
Special Note: Due to Apple's limitations, bot developers are currently not allowed to accept payments for digital goods and virtual services from iOS users.
Telegram acts as a messenger between the paying user, the bot developer, and their chosen payment system. The user sends their credit card details directly to the payment system. Then the payment system's response and the shipping details entered by the user are passed to the bot developer so that they can process the order.
Since Telegram doesn‘t process the payments, we don’t store and can‘t access any sensitive data. Due to this structure, it is impossible for Telegram to handle complaints or cashbacks – any disputed payments are the responsibility of the bot developers, payment providers, and banks that participated in the exchange.
You are welcome to study the MTProto payment documentation.
Telegram payments currently support the currencies listed below (here's a JSON version in case you need it).
If you're using Stripe as the payments provider, supported currencies may vary depending on the country you have specified in your Stripe account (more info).
The minimum and maximum amounts for each of the currencies roughly correspond to the limit of
US$ 1-10000. The amount must be expressed in 12 digits or less, so the maximum value will be correspondingly lower for some lower-value currencies. Note that for each currency except USD these limits depend on exchange rates and may change over time (plan ahead for this when you implement limits in your code).
|Code||Title||Min amount||Max amount|
|AED||United Arab Emirates Dirham||AED 3.67||AED 36,727.01|
|AMD||Armenian Dram||388.48 AMD||3,884,801.18 AMD|
|ARS||Argentine Peso||ARS 204,53||ARS 2.045.314,29|
|AZN||Azerbaijani Manat||1,69 AZN||16 987,60 AZN|
|BAM||Bosnia & Herzegovina Convertible Mark||1,82 BAM||18.266,21 BAM|
|BDT||Bangladeshi Taka||BDT 105.28||BDT 1,052,847.86|
|BGN||Bulgarian Lev||1,82 BGN||18 227,45 BGN|
|BOB||Bolivian Boliviano||BOB 6,90||BOB 69.045,71|
|BRL||Brazilian Real||R$ 5,23||R$ 52.385,04|
|BYN||Belarusian ruble||2,52 BYN||25 240,96 BYN|
|CHF||Swiss Franc||0.92 CHF||9'289.80 CHF|
|CLP||Chilean Peso||CLP 826||CLP 8.260.801|
|CNY||Chinese Renminbi Yuan||CN¥6.87||CN¥68,786.01|
|COP||Colombian Peso||COP 4.816,97||COP 48.169.800,00|
|CRC||Costa Rican Colón||CRC541,69||CRC5.416.915,72|
|CZK||Czech Koruna||22,37 CZK||223 728,03 CZK|
|DKK||Danish Krone||6,94 DKK||69441,99 DKK|
|DZD||Algerian Dinar||DZD 135.81||DZD 1,358,174.29|
|EGP||Egyptian Pound||EGP 30.90||EGP 309,075.65|
|EUR||Euro||0,93 €||9 327,40 €|
|GEL||Georgian Lari||2,57 GEL||25 749,97 GEL|
|HKD||Hong Kong Dollar||HK$7.84||HK$78,413.95|
|HNL||Honduran Lempira||HNL 24.66||HNL 246,637.78|
|HRK||Croatian Kuna||7,01 HRK||70.182,74 HRK|
|HUF||Hungarian Forint||368,26 HUF||3 682 630,25 HUF|
|ILS||Israeli New Sheqel||₪ 3.66||₪ 36,671.30|
|ISK||Icelandic Króna||140 ISK||1.400.100 ISK|
|KGS||Kyrgyzstani Som||87-41 KGS||874 197-30 KGS|
|KRW||South Korean Won||₩1,306||₩13,064,750|
|KZT||Kazakhstani Tenge||KZT464-67||KZT4 646 729-74|
|LBP||Lebanese Pound||LBP 15,009.43||LBP 150,094,327.29|
|LKR||Sri Lankan Rupee||LKR 345.00||LKR 3,450,092.23|
|MAD||Moroccan Dirham||MAD 10.35||MAD 103,574.23|
|MDL||Moldovan Leu||18.63 MDL||186,357.10 MDL|
|MNT||Mongolian Tögrög||MNT3 532,35||MNT35 323 595,61|
|MVR||Maldivian Rufiyaa||15.39 MVR||153,985.93 MVR|
|NIO||Nicaraguan Córdoba||NIO 36.57||NIO 365,736.91|
|NOK||Norwegian Krone||NOK 10,64||NOK 106 416,20|
|NZD||New Zealand Dollar||NZ$1.60||NZ$16,003.20|
|PAB||Panamanian Balboa||PAB 0.99||PAB 9,999.81|
|PEN||Peruvian Nuevo Sol||PEN 3.79||PEN 37,901.60|
|PLN||Polish Złoty||4,38 PLN||43 891,50 PLN|
|PYG||Paraguayan Guaraní||PYG 7.207||PYG 72.072.997|
|QAR||Qatari Riyal||QAR 3.64||QAR 36,409.69|
|RON||Romanian Leu||4,59 RON||45.914,98 RON|
|RSD||Serbian Dinar||109,39 RSD||1.093.978,35 RSD|
|RUB||Russian Ruble||80,45 RUB||804 562,21 RUB|
|SAR||Saudi Riyal||SAR 3.75||SAR 37,567.73|
|SEK||Swedish Krona||10,36 SEK||103.688,35 SEK|
|TJS||Tajikistani Somoni||10;93 TJS||109 398;35 TJS|
|TRY||Turkish Lira||19,01 TRY||190.124,70 TRY|
|TTD||Trinidad and Tobago Dollar||TTD6.78||TTD67,859.61|
|TWD||New Taiwan Dollar||NT$30.51||NT$305,154.98|
|UAH||Ukrainian Hryvnia||36,93UAH||369 334,65UAH|
|USD||United States Dollar||$1.00||$10,000.00|
|UYU||Uruguayan Peso||UYU 39,69||UYU 396.927,32|
|UZS||Uzbekistani Som||11 377,33 UZS||113 773 377,85 UZS|
|VND||Vietnamese Đồng||23.585 ₫||235.850.000 ₫|
|YER||Yemeni Rial||YER 250.30||YER 2,503,011.75|
|ZAR||South African Rand||ZAR 18.51||ZAR 185,183.02|