telegram-crawler/data/web/core.telegram.org/api/giveaways.html
2024-09-23 18:02:35 +00:00

212 lines
24 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="">
<head>
<meta charset="utf-8">
<title>Giveaways</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="Telegram channel and supergroup administrators may launch giveaways to randomly distribute Telegram Premium subscriptions and other gifts among their followers, in exchange for boosts.">
<meta property="og:title" content="Giveaways">
<meta property="og:image" content="">
<meta property="og:description" content="Telegram channel and supergroup administrators may launch giveaways to randomly distribute Telegram Premium subscriptions and other gifts among their followers, in exchange for boosts.">
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png">
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
<link href="/css/telegram.css?241" rel="stylesheet" media="screen">
<style>
</style>
</head>
<body class="preload">
<div class="dev_page_wrap">
<div class="dev_page_head navbar navbar-static-top navbar-tg">
<div class="navbar-inner">
<div class="container clearfix">
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
<ul class="nav navbar-nav">
<li><a href="//telegram.org/">Home</a></li>
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
<li class="active"><a href="/api">API</a></li>
<li class=""><a href="/mtproto">Protocol</a></li>
<li class=""><a href="/schema">Schema</a></li>
</ul>
</div>
</div>
</div>
<div class="container clearfix">
<div class="dev_page">
<div id="dev_page_content_wrap" class=" ">
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/api/giveaways" >Giveaways</a></li></ul></div>
<h1 id="dev_page_title">Giveaways</h1>
<div id="dev_page_content"><!-- scroll_nav -->
<p>Telegram <a href="/api/channel">channel and supergroup</a> administrators with any set of <a href="/api/rights">rights</a> may launch giveaways to randomly distribute <a href="/api/premium">Telegram Premium</a> subscriptions and other gifts among their followers, in exchange for <a href="/api/boost">boosts</a>.</p>
<p>This functionality should only be enabled if the <a href="/api/config#giveaway-gifts-purchase-available">giveaway_gifts_purchase_available</a> config value is set to true. </p>
<p>Note that the flow described below can also be used to gift a Premium subscriptions to multiple friends, and is different from the <a href="/api/premium#gifting-telegram-premium">old gift flow</a>, which allowed gifting only one subscription with some extra limitations, not present in this flow. </p>
<p>Note that <a href="/api/links#premium-multigift-links">premium multigift links</a> lead to a page that uses the new gift flow described below. </p>
<p>Schema:</p>
<pre><code><a href='/constructor/premiumGiftCodeOption'>premiumGiftCodeOption</a>#257e962b flags:<a href='/type/%23'>#</a> users:<a href='/type/int'>int</a> months:<a href='/type/int'>int</a> store_product:flags.0?<a href='/type/string'>string</a> store_quantity:flags.1?<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/PremiumGiftCodeOption'>PremiumGiftCodeOption</a>;
<a href='/constructor/inputStorePaymentPremiumGiveaway'>inputStorePaymentPremiumGiveaway</a>#160544ca flags:<a href='/type/%23'>#</a> only_new_subscribers:flags.0?<a href='/constructor/true'>true</a> winners_are_visible:flags.3?<a href='/constructor/true'>true</a> boost_peer:<a href='/type/InputPeer'>InputPeer</a> additional_peers:flags.1?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputPeer'>InputPeer</a>&gt; countries_iso2:flags.2?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/string'>string</a>&gt; prize_description:flags.4?<a href='/type/string'>string</a> random_id:<a href='/type/long'>long</a> until_date:<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a>;
<a href='/constructor/inputStorePaymentPremiumGiftCode'>inputStorePaymentPremiumGiftCode</a>#a3805f3f flags:<a href='/type/%23'>#</a> users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputUser'>InputUser</a>&gt; boost_peer:flags.0?<a href='/type/InputPeer'>InputPeer</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a>;
<a href='/constructor/inputInvoicePremiumGiftCode'>inputInvoicePremiumGiftCode</a>#98986c0d purpose:<a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a> option:<a href='/type/PremiumGiftCodeOption'>PremiumGiftCodeOption</a> = <a href='/type/InputInvoice'>InputInvoice</a>;
<a href='/constructor/prepaidGiveaway'>prepaidGiveaway</a>#b2539d54 id:<a href='/type/long'>long</a> months:<a href='/type/int'>int</a> quantity:<a href='/type/int'>int</a> date:<a href='/type/int'>int</a> = <a href='/type/PrepaidGiveaway'>PrepaidGiveaway</a>;
<a href='/constructor/premium.boostsStatus'>premium.boostsStatus</a>#4959427a flags:<a href='/type/%23'>#</a> my_boost:flags.2?<a href='/constructor/true'>true</a> level:<a href='/type/int'>int</a> current_level_boosts:<a href='/type/int'>int</a> boosts:<a href='/type/int'>int</a> gift_boosts:flags.4?<a href='/type/int'>int</a> next_level_boosts:flags.0?<a href='/type/int'>int</a> premium_audience:flags.1?<a href='/type/StatsPercentValue'>StatsPercentValue</a> boost_url:<a href='/type/string'>string</a> prepaid_giveaways:flags.3?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PrepaidGiveaway'>PrepaidGiveaway</a>&gt; my_boost_slots:flags.2?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; = <a href='/type/premium.BoostsStatus'>premium.BoostsStatus</a>;
<a href='/constructor/messageMediaGiveaway'>messageMediaGiveaway</a>#daad85b0 flags:<a href='/type/%23'>#</a> only_new_subscribers:flags.0?<a href='/constructor/true'>true</a> winners_are_visible:flags.2?<a href='/constructor/true'>true</a> channels:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; countries_iso2:flags.1?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/string'>string</a>&gt; prize_description:flags.3?<a href='/type/string'>string</a> quantity:<a href='/type/int'>int</a> months:<a href='/type/int'>int</a> until_date:<a href='/type/int'>int</a> = <a href='/type/MessageMedia'>MessageMedia</a>;
<a href='/constructor/messageActionGiveawayLaunch'>messageActionGiveawayLaunch</a>#332ba9ed = <a href='/type/MessageAction'>MessageAction</a>;
<a href='/constructor/messageActionGiveawayResults'>messageActionGiveawayResults</a>#2a9fadc5 winners_count:<a href='/type/int'>int</a> unclaimed_count:<a href='/type/int'>int</a> = <a href='/type/MessageAction'>MessageAction</a>;
<a href='/constructor/messageActionGiftCode'>messageActionGiftCode</a>#678c2e09 flags:<a href='/type/%23'>#</a> via_giveaway:flags.0?<a href='/constructor/true'>true</a> unclaimed:flags.2?<a href='/constructor/true'>true</a> boost_peer:flags.1?<a href='/type/Peer'>Peer</a> months:<a href='/type/int'>int</a> slug:<a href='/type/string'>string</a> currency:flags.2?<a href='/type/string'>string</a> amount:flags.2?<a href='/type/long'>long</a> crypto_currency:flags.3?<a href='/type/string'>string</a> crypto_amount:flags.3?<a href='/type/long'>long</a> = <a href='/type/MessageAction'>MessageAction</a>;
<a href='/constructor/payments.giveawayInfo'>payments.giveawayInfo</a>#4367daa0 flags:<a href='/type/%23'>#</a> participating:flags.0?<a href='/constructor/true'>true</a> preparing_results:flags.3?<a href='/constructor/true'>true</a> start_date:<a href='/type/int'>int</a> joined_too_early_date:flags.1?<a href='/type/int'>int</a> admin_disallowed_chat_id:flags.2?<a href='/type/long'>long</a> disallowed_country:flags.4?<a href='/type/string'>string</a> = <a href='/type/payments.GiveawayInfo'>payments.GiveawayInfo</a>;
<a href='/constructor/payments.giveawayInfoResults'>payments.giveawayInfoResults</a>#00cd5570 flags:<a href='/type/%23'>#</a> winner:flags.0?<a href='/constructor/true'>true</a> refunded:flags.1?<a href='/constructor/true'>true</a> start_date:<a href='/type/int'>int</a> gift_code_slug:flags.0?<a href='/type/string'>string</a> finish_date:<a href='/type/int'>int</a> winners_count:<a href='/type/int'>int</a> activated_count:<a href='/type/int'>int</a> = <a href='/type/payments.GiveawayInfo'>payments.GiveawayInfo</a>;
<a href='/constructor/payments.checkedGiftCode'>payments.checkedGiftCode</a>#284a1096 flags:<a href='/type/%23'>#</a> via_giveaway:flags.2?<a href='/constructor/true'>true</a> from_id:flags.4?<a href='/type/Peer'>Peer</a> giveaway_msg_id:flags.3?<a href='/type/int'>int</a> to_id:flags.0?<a href='/type/long'>long</a> date:<a href='/type/int'>int</a> months:<a href='/type/int'>int</a> used_date:flags.1?<a href='/type/int'>int</a> chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/payments.CheckedGiftCode'>payments.CheckedGiftCode</a>;
---functions---
<a href='/method/payments.getPremiumGiftCodeOptions'>payments.getPremiumGiftCodeOptions</a>#2757ba54 flags:<a href='/type/%23'>#</a> boost_peer:flags.0?<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftCodeOption'>PremiumGiftCodeOption</a>&gt;;
<a href='/method/payments.getPaymentForm'>payments.getPaymentForm</a>#37148dbb flags:<a href='/type/%23'>#</a> invoice:<a href='/type/InputInvoice'>InputInvoice</a> theme_params:flags.0?<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;
<a href='/method/premium.getBoostsStatus'>premium.getBoostsStatus</a>#042f1f61 peer:<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/premium.BoostsStatus'>premium.BoostsStatus</a>;
<a href='/method/payments.launchPrepaidGiveaway'>payments.launchPrepaidGiveaway</a>#5ff58f20 peer:<a href='/type/InputPeer'>InputPeer</a> giveaway_id:<a href='/type/long'>long</a> purpose:<a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/payments.getGiveawayInfo'>payments.getGiveawayInfo</a>#f4239425 peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> = <a href='/type/payments.GiveawayInfo'>payments.GiveawayInfo</a>;
<a href='/method/payments.checkGiftCode'>payments.checkGiftCode</a>#8e51b4c1 slug:<a href='/type/string'>string</a> = <a href='/type/payments.CheckedGiftCode'>payments.CheckedGiftCode</a>;
<a href='/method/payments.applyGiftCode'>payments.applyGiftCode</a>#f6e26854 slug:<a href='/type/string'>string</a> = <a href='/type/Updates'>Updates</a>;</code></pre>
<p>First of all, invoke <a href="/method/payments.getPremiumGiftCodeOptions">payments.getPremiumGiftCodeOptions</a> to obtain a list of <a href="/constructor/premiumGiftCodeOption">premiumGiftCodeOption</a> constructors, containing a list of giveaway options that may be chosen by the admin, indicating the number and duration of the of <a href="/api/premium">Telegram Premium</a> subscriptions that will be gifted in the giveaway, along with their price (<code>amount</code>) in the specified <code>currency</code> (see the <a href="/constructor/premiumGiftCodeOption">constructor page »</a> for more info on these fields). </p>
<p>Once the admin has chosen a specific gift code option, invoke <a href="/method/payments.getPaymentForm">payments.getPaymentForm</a>, passing an <a href="/constructor/inputInvoicePremiumGiftCode">inputInvoicePremiumGiftCode</a>, with the chosen <a href="/constructor/premiumGiftCodeOption">premiumGiftCodeOption</a> in <code>option</code> and a <code>purpose</code> containing either:</p>
<ul>
<li><a href="/constructor/inputStorePaymentPremiumGiveaway">inputStorePaymentPremiumGiveaway</a> to create a giveaway, where Telegram will randomly select <code>option.users</code> subscribers to the channel/supergroup specified in <code>purpose.boost_peer</code> (only new subscribers starting from the giveaway creation date if the <code>purpose.only_new_subscribers</code> field is set).<br>
Additional channels/supergroups that the user must join to participate to the giveaway can be specified in <code>additional_peers</code>.<br>
The set of users that can participate to the giveaway can be restricted by passing an explicit whitelist of up to <a href="/api/config#giveaway-countries-max">giveaway_countries_max</a> countries, specified as two-letter ISO 3166-1 alpha-2 country codes in <code>countries_iso2</code>.<br>
The end date of the giveaway must be specified in <code>until_date</code>, and it must be at most <a href="/api/config#giveaway-period-max">giveaway_period_max</a> seconds in the future; at that date, Telegram will randomly choose <code>option.users</code> subscribers according to the conditions specified above, and send them a Telegram Premium giftcode as a <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a> constructor, that should be used client-side to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a>.<br>
The channel/supergroup specified in <code>boost_peer</code> will receive <a href="/api/config#giveaway-boosts-per-premium">giveaway_boosts_per_premium</a> <a href="/api/boost">boosts</a> from each user, that cannot be reassigned to another channel/supergroup for the duration of the gifted subscription. </li>
<li>or <a href="/constructor/inputStorePaymentPremiumGiftCode">inputStorePaymentPremiumGiftCode</a>, to gift <a href="/api/premium">Telegram Premium</a> subscriptions only to some specific subscribers (<code>purpose.users</code>, max <a href="/api/config#giveaway-add-peers-max">giveaway_add_peers_max</a> users) of the channel/supergroup specified in <code>purpose.boost_peer</code>, which will receive <a href="/api/config#giveaway-boosts-per-premium">giveaway_boosts_per_premium</a> <a href="/api/boost">boosts</a> from each user, that cannot be reassigned to another channel/supergroup for the duration of the gifted subscription.<br>
Users may also use this method to simply gift subscriptions to contacts by <strong>not</strong> setting the <code>boost_peer</code> field: in this case, gifting a <a href="/api/premium">Telegram Premium</a> subscription to another user will create <a href="/api/config#boosts-per-sent-gift">boosts_per_sent_gift</a> <a href="/api/boost">boost slots »</a> for us, and one boost slot for the destination user. </li>
</ul>
<p>Then, follow the <a href="/api/payments#22-getting-invoice-info-about-the-product">invoice payment flow as described in the payments documentation »</a>. </p>
<p>More alternative payment flows are also available:</p>
<ul>
<li>The Premium Bot flow, by contacting <a href="/api/config#premium-bot-username">premium_bot_username</a>, and following the inline keyboard payment flow for giveaways (the final keyboard with the prices will contain buttons with <a href="/api/links#invoice-links">invoice deep links »</a> that should be used to make the payment).</li>
<li>Payment via <a href="https://fragment.com">Fragment</a>, which also allows making larger purchases.</li>
<li>The store-based subscription flow based on <a href="/method/payments.assignAppStoreTransaction">payments.assignAppStoreTransaction</a>/<a href="/method/payments.assignPlayMarketTransaction">payments.assignPlayMarketTransaction</a>, currently not available to third-party apps. </li>
</ul>
<p>Then:</p>
<ul>
<li>
<p>If the payment was made using the <a href="/method/payments.getPaymentForm">payments.getPaymentForm</a> or <a href="/method/payments.assignAppStoreTransaction">payments.assignAppStoreTransaction</a>/<a href="/method/payments.assignPlayMarketTransaction">payments.assignPlayMarketTransaction</a> payment flows, the giveaway will launch as soon as the payment is complete.</p>
</li>
<li>
<p>Otherwise, if the <a href="/api/config#premium-bot-username">Premium bot</a> or <a href="https://fragment.com">Fragment</a> flows were used, once the payment for the giveaway is made, invoke <a href="/method/premium.getBoostsStatus">premium.getBoostsStatus</a>, passing to <code>peer</code> the ID of the channel/supergroup that we selected when paying for the giveaway, to obtain a <a href="/constructor/prepaidGiveaway">prepaidGiveaway</a> constructor in <a href="/constructor/premium.boostsStatus">premium.boostsStatus</a>.<code>prepaid_giveaways</code>, containing info about the prepaid giveaway. </p>
<p>To actually launch the giveaway for the Fragment and bot flows, invoke <a href="/method/payments.launchPrepaidGiveaway">payments.launchPrepaidGiveaway</a>, passing <a href="/constructor/prepaidGiveaway">prepaidGiveaway</a>.<code>id</code> to <code>giveaway_id</code>, the ID of the channel/supergroup to <code>peer</code> and giveaway settings in <code>purpose</code> (populated as specified above). </p>
</li>
</ul>
<p>Finally:</p>
<ul>
<li>
<p>If the payment succeeds and we're launching a giveaway using <a href="/constructor/inputStorePaymentPremiumGiveaway">inputStorePaymentPremiumGiveaway</a>: a <a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a> service message and a media message containing a <a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a> will be sent to the channel/supergroup. </p>
<p>Once the giveaway is over, a <a href="/constructor/messageActionGiveawayResults">messageActionGiveawayResults</a> will be sent to the channel/supergroup and the winners will automatically receive a <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a> service message from Telegram's service user, containing the <code>slug</code> that can be used to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a> to redeem the Premium subscription.<br>
The <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a>.<code>via_giveaway</code> flag will be set. </p>
</li>
<li>
<p>If the payment succeeds and we're simply gifting some subscriptions to specific users <a href="/constructor/inputStorePaymentPremiumGiftCode">inputStorePaymentPremiumGiftCode</a>: the specified users will automatically receive a <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a> service message from Telegram's service user, containing the <code>slug</code> that can be used to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a> to redeem the Premium subscription.<br>
The <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a>.<code>via_giveaway</code> flag will not be set. </p>
<p>Note that if the payment was made on behalf of the user (i.e. if <code>boost_peer</code> was <strong>not</strong> set), then the users to which the gift was sent will instead receive a <a href="/constructor/messageService">messageService</a> from the user that sent the gift, containing a <a href="/constructor/messageActionGiftPremium">messageActionGiftPremium</a> constructor with further info about the price and duration of the gifted Telegram Premium subscription.<br>
Clients should display this message, along with a sticker from the <a href="/constructor/inputStickerSetPremiumGifts">inputStickerSetPremiumGifts</a> <a href="/api/stickers">stickerset</a>: here's an <a href="https://telegram.org/blog/custom-emoji#gifting-telegram-premium">example</a>. </p>
</li>
</ul>
<p>The <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a>.<code>slug</code> should be used to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a>, that the user can use to redeem the subscription, or re-gift it to someone else. </p>
<p>If <code>winners_are_visible</code> flag is set while starting a giveaway, giveaway winners are public and will be listed in a <a href="/constructor/messageMediaGiveawayResults">messageMediaGiveawayResults</a> message that will be automatically sent to the channel/supergroup once the giveaway ends. </p>
<p>Any user can invoke <a href="/method/payments.checkGiftCode">payments.checkGiftCode</a> with the link's slug to obtain info about the giveaway, such as the channel/supergroup that gifted the subscription (<code>from_id</code>), and the user that originally received the gift (<code>to_id</code>).<br>
This can also be useful to channel/supergroup administrators to precisely determine the winners of a giveaway, for example if the giveaway also included some extra gifts apart from Premium subscriptions (<em>like Teslas</em>): the winners can simply send their link as undisputable proof that they won the giveaway, because the user that received the gift can be viewed in the <code>to_id</code> field returned by Telegram when invoking <a href="/method/payments.checkGiftCode">payments.checkGiftCode</a> on the slug.<br>
Another way for admins to check who received the gifts is to simply use <a href="/method/premium.getBoostsList">premium.getBoostsList</a> while the boosts received by the gifts are still active. </p>
<p>To claim the <a href="/api/premium">Telegram Premium</a> subscription, simply invoke <a href="/method/payments.applyGiftCode">payments.applyGiftCode</a>, passing the link's <code>slug</code>.</p></div>
</div>
</div>
</div>
<div class="footer_wrap">
<div class="footer_columns_wrap footer_desktop">
<div class="footer_column footer_column_telegram">
<h5>Telegram</h5>
<div class="footer_telegram_description"></div>
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
</div>
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
<ul>
<li><a href="//telegram.org/faq">FAQ</a></li>
<li><a href="//telegram.org/privacy">Privacy</a></li>
<li><a href="//telegram.org/press">Press</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
<ul>
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
<li><a href="//telegram.org/android">Android</a></li>
<li><a href="//telegram.org/dl/web">Mobile Web</a></li>
</ul>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
<ul>
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
<li><a href="//macos.telegram.org/">macOS</a></li>
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
</ul>
</div>
<div class="footer_column footer_column_platform">
<h5><a href="/">Platform</a></h5>
<ul>
<li><a href="/api">API</a></li>
<li><a href="//translations.telegram.org/">Translations</a></li>
<li><a href="//instantview.telegram.org/">Instant View</a></li>
</ul>
</div>
</div>
<div class="footer_columns_wrap footer_mobile">
<div class="footer_column">
<h5><a href="//telegram.org/faq">About</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/blog">Blog</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/apps">Apps</a></h5>
</div>
<div class="footer_column">
<h5><a href="/">Platform</a></h5>
</div>
<div class="footer_column">
<h5><a href="//telegram.org/press">Press</a></h5>
</div>
</div>
</div>
</div>
<script src="/js/main.js?47"></script>
<script src="/js/jquery.min.js?1"></script>
<script src="/js/bootstrap.min.js?1"></script>
<script>window.initDevPageNav&&initDevPageNav();
backToTopInit("Go up");
removePreloadInit();
</script>
</body>
</html>