{"id":265468,"date":"2024-10-30T09:21:38","date_gmt":"2024-10-30T08:21:38","guid":{"rendered":"https:\/\/www.unipile.com\/?p=265468"},"modified":"2026-08-13T15:16:05","modified_gmt":"2026-08-13T13:16:05","slug":"como-obter-a-api-do-telegram-o-guia-passo-a-passo-definitivo","status":"publish","type":"post","link":"https:\/\/www.unipile.com\/br\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/","title":{"rendered":"Como Obter Acesso \u00e0 API do Telegram: api_id, api_hash e Tokens de Bot"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; fullwidth=&#8221;off&#8221; specialty=&#8221;off&#8221; background_color=&#8221;transparent&#8221; _builder_version=&#8221;4.27.4&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.27.4&#8243; background_color=&#8221;transparent&#8221; width=&#8221;100%&#8221; max_width=&#8221;100%&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.4&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; global_colors_info=&#8221;{}&#8221;]<br \/>\n<!--\n  TOC CANONIQUE UNIPILE : copi\u00e9 tel quel depuis \/Users\/m1\/Unipile\/articles\/_templates\/toc-canonique.html\n  Seuls labels, anchors, nombre d'entr\u00e9es et tag \"Best\" adapt\u00e9s. CSS\/JS\/classes\/ID intouch\u00e9s.\n  Additif wpautop en bas (r\u00e8gle reference_wp_divi_push.md du 2026-08-06).\n  MAJ densification (5 nouvelles sections 09a-09e) : colonnes r\u00e9\u00e9quilibr\u00e9es 3\/3\/3\/4, labels adapt\u00e9s,\n  5 nouvelles entr\u00e9es + anchors, ancien contenu 03-11 non modifi\u00e9, positions en base pr\u00e9serv\u00e9es.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#unipile-toc,\n#unipile-toc *,\n#unipile-toc *::before,\n#unipile-toc *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n  float: none !important;\n}\n#unipile-toc {\n  all: initial !important;\n  display: block !important;\n  max-width: 1100px !important;\n  margin: 0 auto !important;\n  padding: 0 !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n}\n#unipile-toc .utc-card {\n  background: #ffffff !important;\n  border-radius: 16px !important;\n  border: 1px solid #e5e7eb !important;\n  padding: 32px !important;\n  box-shadow: 0 2px 12px rgba(15, 39, 54, 0.04) !important;\n}\n#unipile-toc .utc-header {\n  display: flex !important;\n  align-items: center !important;\n  justify-content: space-between !important;\n  gap: 12px !important;\n  margin-bottom: 24px !important;\n  padding-bottom: 20px !important;\n  border-bottom: 1px solid #e5e7eb !important;\n}\n#unipile-toc .utc-header-left {\n  display: flex !important;\n  align-items: center !important;\n  gap: 12px !important;\n}\n#unipile-toc .utc-icon-box {\n  width: 36px !important;\n  height: 36px !important;\n  background: rgba(59, 185, 139, 0.12) !important;\n  border-radius: 8px !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  flex-shrink: 0 !important;\n}\n#unipile-toc .utc-icon-box svg {\n  width: 18px !important;\n  height: 18px !important;\n  stroke: #3BB98B !important;\n  fill: none !important;\n  stroke-width: 2.2 !important;\n  stroke-linecap: round !important;\n  stroke-linejoin: round !important;\n}\n#unipile-toc .utc-title {\n  font-family: 'Poppins', sans-serif !important;\n  font-size: 15px !important;\n  font-weight: 700 !important;\n  color: #0f2736 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 0.5px !important;\n}\n#unipile-toc .utc-toggle {\n  display: none !important;\n  align-items: center !important;\n  gap: 6px !important;\n  background: transparent !important;\n  cursor: pointer !important;\n  font-size: 13px !important;\n  font-weight: 600 !important;\n  color: #3BB98B !important;\n  padding: 6px 10px !important;\n  border-radius: 6px !important;\n  transition: background 0.2s ease !important;\n}\n#unipile-toc .utc-toggle svg {\n  width: 14px !important;\n  height: 14px !important;\n  stroke: #3BB98B !important;\n  fill: none !important;\n  stroke-width: 2.5 !important;\n  stroke-linecap: round !important;\n  stroke-linejoin: round !important;\n  transition: transform 0.3s ease !important;\n}\n#unipile-toc.utc-collapsed .utc-toggle svg {\n  transform: rotate(-90deg) !important;\n}\n#unipile-toc .utc-grid {\n  display: grid !important;\n  grid-template-columns: repeat(4, 1fr) !important;\n  gap: 0 !important;\n}\n#unipile-toc .utc-col {\n  padding: 0 24px !important;\n  border-left: 1px solid #e5e7eb !important;\n}\n#unipile-toc .utc-col:first-child {\n  padding-left: 0 !important;\n  border-left: none !important;\n}\n#unipile-toc .utc-col:last-child {\n  padding-right: 0 !important;\n}\n#unipile-toc .utc-col-label {\n  font-size: 11px !important;\n  font-weight: 700 !important;\n  color: #94a3b8 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 0.8px !important;\n  margin-bottom: 14px !important;\n  display: block !important;\n}\n#unipile-toc .utc-link-list {\n  display: flex !important;\n  flex-direction: column !important;\n  gap: 10px !important;\n}\n#unipile-toc .utc-link {\n  display: flex !important;\n  align-items: flex-start !important;\n  gap: 10px !important;\n  cursor: pointer !important;\n  transition: all 0.2s ease !important;\n  text-decoration: none !important;\n  padding: 4px 0 !important;\n}\n#unipile-toc .utc-num {\n  width: 18px !important;\n  height: 18px !important;\n  flex-shrink: 0 !important;\n  background: #f4f5f7 !important;\n  border-radius: 4px !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  font-size: 10px !important;\n  font-weight: 700 !important;\n  color: #94a3b8 !important;\n  transition: all 0.2s ease !important;\n  margin-top: 1px !important;\n}\n#unipile-toc .utc-num.utc-num-faq {\n  font-size: 8px !important;\n  letter-spacing: 0.2px !important;\n}\n#unipile-toc .utc-link-text {\n  font-size: 13px !important;\n  font-weight: 500 !important;\n  color: #383838 !important;\n  line-height: 1.45 !important;\n  transition: color 0.2s ease !important;\n  flex: 1 !important;\n}\n#unipile-toc .utc-link:hover .utc-num {\n  background: rgba(59, 185, 139, 0.15) !important;\n  color: #3BB98B !important;\n}\n#unipile-toc .utc-link:hover .utc-link-text {\n  color: #0f2736 !important;\n}\n#unipile-toc .utc-link.utc-active .utc-num {\n  background: #3BB98B !important;\n  color: #ffffff !important;\n}\n#unipile-toc .utc-link.utc-active .utc-link-text {\n  color: #0f2736 !important;\n  font-weight: 600 !important;\n}\n#unipile-toc .utc-link.utc-read .utc-num {\n  background: rgba(59, 185, 139, 0.15) !important;\n  color: #3BB98B !important;\n}\n#unipile-toc .utc-tag-best {\n  display: inline-block !important;\n  font-size: 9px !important;\n  font-weight: 700 !important;\n  color: #ffffff !important;\n  background: #3BB98B !important;\n  padding: 2px 6px !important;\n  border-radius: 4px !important;\n  text-transform: uppercase !important;\n  letter-spacing: 0.5px !important;\n  margin-left: 6px !important;\n  vertical-align: middle !important;\n}<\/p>\n<p>@media (max-width: 1000px) {\n  #unipile-toc .utc-grid {\n    grid-template-columns: repeat(2, 1fr) !important;\n    gap: 24px 0 !important;\n  }\n  #unipile-toc .utc-col {\n    padding: 0 20px !important;\n  }\n  #unipile-toc .utc-col:nth-child(2n+1) {\n    padding-left: 0 !important;\n    border-left: none !important;\n  }\n  #unipile-toc .utc-col:nth-child(2n) {\n    padding-right: 0 !important;\n  }\n}<\/p>\n<p>@media (max-width: 700px) {\n  #unipile-toc .utc-card {\n    padding: 22px !important;\n  }\n  #unipile-toc .utc-header {\n    margin-bottom: 0 !important;\n    padding-bottom: 0 !important;\n    border-bottom: none !important;\n  }\n  #unipile-toc .utc-toggle {\n    display: flex !important;\n  }\n  #unipile-toc .utc-grid {\n    grid-template-columns: 1fr !important;\n    gap: 22px !important;\n    max-height: 2000px !important;\n    overflow: hidden !important;\n    transition: max-height 0.4s ease, margin-top 0.3s ease, padding-top 0.3s ease !important;\n    margin-top: 22px !important;\n    padding-top: 22px !important;\n    border-top: 1px solid #e5e7eb !important;\n  }\n  #unipile-toc.utc-collapsed .utc-grid {\n    max-height: 0 !important;\n    margin-top: 0 !important;\n    padding-top: 0 !important;\n    border-top: none !important;\n  }\n  #unipile-toc .utc-col {\n    padding: 0 !important;\n    border-left: none !important;\n    border-top: 1px solid #e5e7eb !important;\n    padding-top: 18px !important;\n  }\n  #unipile-toc .utc-col:first-child {\n    border-top: none !important;\n    padding-top: 0 !important;\n  }\n}\n\/* Additif wpautop (r\u00e8gle reference_wp_divi_push.md 2026-08-06) : ne touche pas au reste du template *\/\n#unipile-toc br { display: none !important; }\n\/* Additif responsive (audit mobile obligatoire) : ne touche pas au reste du template *\/\n#unipile-toc { overflow-x: hidden !important; }\n<\/style>\n<div id=\"unipile-toc\">\n<div class=\"utc-card\">\n<div class=\"utc-header\">\n<div class=\"utc-header-left\">\n<div class=\"utc-icon-box\">\n          <svg viewBox=\"0 0 24 24\">\n            <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"\/>\n            <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"\/>\n            <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"\/>\n            <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"\/>\n            <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"\/>\n            <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"\/>\n          <\/svg>\n        <\/div>\n<p>        <span class=\"utc-title\">Table of Contents<\/span>\n      <\/div>\n<p>      <button type=\"button\" class=\"utc-toggle\" aria-label=\"Toggle table of contents\"><br \/>\n        <span class=\"utc-toggle-label\">Hide<\/span><br \/>\n        <svg viewBox=\"0 0 24 24\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg><br \/>\n      <\/button>\n    <\/div>\n<div class=\"utc-grid\">\n      <!-- COLUMN 1 --><\/p>\n<div class=\"utc-col\">\n        <span class=\"utc-col-label\">Getting your credentials<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tg-three-apis\"><br \/>\n            <span class=\"utc-num\">01<\/span><br \/>\n            <span class=\"utc-link-text\">Which Telegram API do you need<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-api-id-hash\"><br \/>\n            <span class=\"utc-num\">02<\/span><br \/>\n            <span class=\"utc-link-text\">Get your api_id and api_hash<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-botfather\"><br \/>\n            <span class=\"utc-num\">03<\/span><br \/>\n            <span class=\"utc-link-text\">Get a bot token from BotFather<\/span><br \/>\n          <\/a>\n        <\/div>\n<\/p><\/div>\n<p>      <!-- COLUMN 2 --><\/p>\n<div class=\"utc-col\">\n        <span class=\"utc-col-label\">Authentication &amp; comparison<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tg-qr-login\"><br \/>\n            <span class=\"utc-num\">04<\/span><br \/>\n            <span class=\"utc-link-text\">Log in with a QR code (Devices flow)<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-phone-2fa\"><br \/>\n            <span class=\"utc-num\">05<\/span><br \/>\n            <span class=\"utc-link-text\">Phone number sign-in and the 2FA wall<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-comparison\"><br \/>\n            <span class=\"utc-num\">06<\/span><br \/>\n            <span class=\"utc-link-text\">What each API lets you do<\/span><br \/>\n          <\/a>\n        <\/div>\n<\/p><\/div>\n<p>      <!-- COLUMN 3 --><\/p>\n<div class=\"utc-col\">\n        <span class=\"utc-col-label\">Limits &amp; reliability<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tg-free-limits\"><br \/>\n            <span class=\"utc-num\">07<\/span><br \/>\n            <span class=\"utc-link-text\">It&#8217;s free, here&#8217;s where it breaks<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-rate-limits\"><br \/>\n            <span class=\"utc-num\">08<\/span><br \/>\n            <span class=\"utc-link-text\">Sending limits, in numbers<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-error-table\"><br \/>\n            <span class=\"utc-num\">09<\/span><br \/>\n            <span class=\"utc-link-text\">Errors you need to know<\/span><br \/>\n          <\/a>\n        <\/div>\n<\/p><\/div>\n<p>      <!-- COLUMN 4 --><\/p>\n<div class=\"utc-col\">\n        <span class=\"utc-col-label\">Use cases &amp; Unipile<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tg-use-cases\"><br \/>\n            <span class=\"utc-num\">10<\/span><br \/>\n            <span class=\"utc-link-text\">CRM and ATS use cases<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-mtproto-libraries\"><br \/>\n            <span class=\"utc-num\">11<\/span><br \/>\n            <span class=\"utc-link-text\">Choosing an MTProto library<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-unipile-connect\"><br \/>\n            <span class=\"utc-num\">12<\/span><br \/>\n            <span class=\"utc-link-text\">Connect an existing account<span class=\"utc-tag-best\">Best<\/span><\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tg-faq\"><br \/>\n            <span class=\"utc-num utc-num-faq\">FAQ<\/span><br \/>\n            <span class=\"utc-link-text\">Frequently Asked Questions<\/span><br \/>\n          <\/a>\n        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var toc = document.getElementById('unipile-toc');\n  if (!toc) return;<\/p>\n<p>  var toggleBtn = toc.querySelector('.utc-toggle');\n  var toggleLabel = toc.querySelector('.utc-toggle-label');\n  if (toggleBtn) {\n    toggleBtn.addEventListener('click', function(){\n      var isCollapsed = toc.classList.toggle('utc-collapsed');\n      if (toggleLabel) toggleLabel.textContent = isCollapsed ? 'Show' : 'Hide';\n    });\n    if (window.innerWidth <= 700) {\n      toc.classList.add('utc-collapsed');\n      if (toggleLabel) toggleLabel.textContent = 'Show';\n    }\n  }\n\n  var links = toc.querySelectorAll('.utc-link');\n  links.forEach(function(link){\n    link.addEventListener('click', function(e){\n      var href = link.getAttribute('href');\n      if (!href || href.charAt(0) !== '#') return;\n      var target = document.getElementById(href.substring(1));\n      if (target) {\n        e.preventDefault();\n        var offset = 80;\n        var top = target.getBoundingClientRect().top + window.pageYOffset - offset;\n        window.scrollTo({ top: top, behavior: 'smooth' });\n      }\n    });\n  });\n\n  var sectionIds = [];\n  links.forEach(function(link){\n    var href = link.getAttribute('href');\n    if (href &#038;&#038; href.charAt(0) === '#') sectionIds.push(href.substring(1));\n  });\n\n  function updateActive(){\n    var scrollY = window.pageYOffset + 120;\n    var activeId = null;\n    var readIds = [];\n    sectionIds.forEach(function(id){\n      var el = document.getElementById(id);\n      if (el) {\n        var top = el.getBoundingClientRect().top + window.pageYOffset;\n        if (top <= scrollY) {\n          activeId = id;\n          readIds.push(id);\n        }\n      }\n    });\n    links.forEach(function(link){\n      var href = link.getAttribute('href');\n      var id = href ? href.substring(1) : '';\n      link.classList.remove('utc-active', 'utc-read');\n      if (id === activeId) {\n        link.classList.add('utc-active');\n      } else if (readIds.indexOf(id) !== -1) {\n        link.classList.add('utc-read');\n      }\n    });\n  }\n\n  if ('IntersectionObserver' in window) {\n    var observer = new IntersectionObserver(function(){\n      updateActive();\n    }, { rootMargin: '-120px 0px -60% 0px' });\n    sectionIds.forEach(function(id){\n      var el = document.getElementById(id);\n      if (el) observer.observe(el);\n    });\n  }\n  window.addEventListener('scroll', updateActive, { passive: true });\n  updateActive();\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  HERO : #upl-tg-hero, prefix tgh-\n  Badge + H1 (SLOT) + description + CTA. AUCUNE ligne meta, AUCUNE chip mots-cl\u00e9s.\n  H1 d\u00e9pend du pr\u00e9-flight SERP, voir SLOTS-OUVERTS.md.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-hero,\n#upl-tg-hero *,\n#upl-tg-hero *::before,\n#upl-tg-hero *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-hero { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-hero br { display: none !important; }\n#upl-tg-hero p { display: contents !important; }\n#upl-tg-hero .tgh-wrap {\n  max-width: 1160px !important;\n  margin: 0 auto !important;\n  padding: 60px 24px 40px !important;\n  display: grid !important;\n  grid-template-columns: 1.05fr 0.95fr !important;\n  gap: 56px !important;\n  align-items: center !important;\n}\n#upl-tg-hero .tgh-badge {\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n  background: rgba(59, 185, 139, 0.12) !important;\n  color: #2aaa7e !important;\n  padding: 6px 14px !important;\n  border-radius: 20px !important;\n  font-size: 12px !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 0.5px !important;\n  width: fit-content !important;\n  margin-bottom: 20px !important;\n}\n#upl-tg-hero .tgh-badge .tgh-dot {\n  width: 7px !important;\n  height: 7px !important;\n  background: #3BB98B !important;\n  border-radius: 50% !important;\n  flex-shrink: 0 !important;\n  display: block !important;\n}\n#upl-tg-hero h1 {\n  font-family: 'Poppins', sans-serif !important;\n  font-size: 44px !important;\n  font-weight: 700 !important;\n  color: #0f2736 !important;\n  line-height: 1.18 !important;\n  margin-bottom: 20px !important;\n}\n#upl-tg-hero h1 .tgh-accent { color: #3BB98B !important; }\n#upl-tg-hero .tgh-desc {\n  font-size: 17px !important;\n  line-height: 1.8 !important;\n  color: #383838 !important;\n  margin-bottom: 32px !important;\n  display: block !important;\n}\n#upl-tg-hero .tgh-actions {\n  display: flex !important;\n  align-items: center !important;\n  gap: 14px !important;\n  flex-wrap: wrap !important;\n}\n#upl-tg-hero .tgh-cta-primary {\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n  background: #DDDF4C !important;\n  color: #0f2736 !important;\n  padding: 14px 28px !important;\n  border-radius: 8px !important;\n  font-size: 0.95rem !important;\n  font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important;\n  transition: all 0.3s ease !important;\n  cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-hero .tgh-cta-primary:hover { transform: translateY(-5px) !important; }\n#upl-tg-hero .tgh-cta-primary svg {\n  width: 16px !important; height: 16px !important;\n  stroke: currentColor !important; fill: none !important;\n  stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important;\n}\n#upl-tg-hero .tgh-cta-secondary {\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n  background: transparent !important;\n  color: #0f2736 !important;\n  padding: 12px 24px !important;\n  border-radius: 8px !important;\n  border: 2px solid #0f2736 !important;\n  font-size: 0.95rem !important;\n  font-weight: 600 !important;\n  transition: all 0.3s ease !important;\n  cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-hero .tgh-cta-secondary:hover { background: #0f2736 !important; color: #ffffff !important; }<\/p>\n<p>\/* Code mockup *\/\n#upl-tg-hero .tgh-code-wrapper {\n  border-radius: 14px !important;\n  overflow: hidden !important;\n  background: #0d1117 !important;\n  box-shadow: 0 20px 50px rgba(15, 39, 54, 0.18) !important;\n}\n#upl-tg-hero .tgh-editor-bar {\n  background: #161b22 !important;\n  padding: 12px 18px !important;\n  display: flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n  border-bottom: 1px solid rgba(255,255,255,0.06) !important;\n}\n#upl-tg-hero .tgh-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tg-hero .tgh-dot-r { background: #ff5f57 !important; }\n#upl-tg-hero .tgh-dot-y { background: #febc2e !important; }\n#upl-tg-hero .tgh-dot-g { background: #28c840 !important; }\n#upl-tg-hero .tgh-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tg-hero .tgh-pre { padding: 22px 24px !important; font-size: 13.5px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tg-hero .tgh-pre code { font-family: 'Courier New', monospace !important; white-space: pre !important; display: block !important; }\n#upl-tg-hero .tgh-c { color: #8b949e !important; }\n#upl-tg-hero .tgh-k { color: #ff7b72 !important; }\n#upl-tg-hero .tgh-fn { color: #d2a8ff !important; }\n#upl-tg-hero .tgh-s { color: #a5d6ff !important; }\n#upl-tg-hero .tgh-w { color: #e6edf3 !important; }\n#upl-tg-hero .tgh-editor-ok {\n  background: rgba(59, 185, 139, 0.1) !important;\n  border-top: 1px solid rgba(59, 185, 139, 0.25) !important;\n  color: #3BB98B !important;\n  padding: 11px 24px !important;\n  font-size: 12.5px !important;\n  font-family: 'Courier New', monospace !important;\n  display: flex !important;\n  align-items: center !important;\n  gap: 8px !important;\n}\n#upl-tg-hero .tgh-editor-ok svg { width: 14px !important; height: 14px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.5 !important; flex-shrink: 0 !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-hero .tgh-wrap { grid-template-columns: 1fr !important; gap: 36px !important; padding: 44px 20px 32px !important; }\n  #upl-tg-hero h1 { font-size: 34px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-hero .tgh-wrap { padding: 36px 16px 28px !important; }\n  #upl-tg-hero h1 { font-size: 28px !important; }\n  #upl-tg-hero .tgh-desc { font-size: 15.5px !important; }\n  #upl-tg-hero .tgh-actions { width: 100% !important; gap: 10px !important; }\n  #upl-tg-hero .tgh-cta-primary, #upl-tg-hero .tgh-cta-secondary { width: 100% !important; justify-content: center !important; }\n  #upl-tg-hero .tgh-pre { font-size: 12px !important; padding: 18px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-hero h1 { font-size: 26px !important; }\n}\n<\/style>\n<div id=\"upl-tg-hero\">\n<div class=\"tgh-wrap\">\n<div class=\"tgh-col-content\">\n<div class=\"tgh-badge\"><span class=\"tgh-dot\"><\/span><span>Telegram API guide<\/span><\/div>\n<h1><span>How to Get Telegram API Access: api_id, api_hash and Bot Tokens<\/span><\/h1>\n<div class=\"tgh-desc\">The <strong>Telegram API<\/strong> is not one API, it is three: the Bot API, the Client API (MTProto), and the Gateway API. This guide shows you exactly where to get your credentials, what <code>api_id<\/code>, <code>api_hash<\/code> and a BotFather bot token each unlock, and the third option most guides skip: connecting an existing Telegram user account through Unipile without writing a single line of MTProto code.<\/div>\n<div class=\"tgh-actions\">\n        <a class=\"tgh-cta-primary\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a><br \/>\n        <a class=\"tgh-cta-secondary\" href=\"https:\/\/developer.unipile.com\/docs\/getting-started\" target=\"_blank\" rel=\"noopener\"><span>See the docs<\/span><\/a>\n      <\/div>\n<\/p><\/div>\n<div class=\"tgh-col-mockup\">\n<div class=\"tgh-code-wrapper\">\n<div class=\"tgh-editor-bar\">\n          <span class=\"tgh-dot2 tgh-dot-r\"><\/span><span class=\"tgh-dot2 tgh-dot-y\"><\/span><span class=\"tgh-dot2 tgh-dot-g\"><\/span><br \/>\n          <span class=\"tgh-filename\">hosted-auth.js<\/span>\n        <\/div>\n<div class=\"tgh-pre\"><code><span class=\"tgh-c\">\/\/ Connect an existing Telegram user account<\/span>&#10;<span class=\"tgh-c\">\/\/ No api_id \/ api_hash to manage yourself<\/span>&#10;<span class=\"tgh-k\">const<\/span> <span class=\"tgh-w\">link<\/span> <span class=\"tgh-w\">=<\/span> <span class=\"tgh-k\">await<\/span> <span class=\"tgh-fn\">unipile<\/span><span class=\"tgh-w\">.<\/span><span class=\"tgh-fn\">hostedAuth<\/span><span class=\"tgh-w\">.<\/span><span class=\"tgh-fn\">create<\/span><span class=\"tgh-w\">({<\/span>&#10;&nbsp;&nbsp;<span class=\"tgh-w\">providers:<\/span> <span class=\"tgh-w\">[<\/span><span class=\"tgh-s\">\"TELEGRAM\"<\/span><span class=\"tgh-w\">],<\/span>&#10;&nbsp;&nbsp;<span class=\"tgh-w\">expiresOn:<\/span> <span class=\"tgh-s\">\"2026-12-31T23:59:59.000Z\"<\/span>&#10;<span class=\"tgh-w\">});<\/span>&#10;&#10;<span class=\"tgh-c\">\/\/ User logs in with QR code or their session<\/span>&#10;<span class=\"tgh-c\">\/\/ Account status becomes \"connected\"<\/span><\/code><\/div>\n<div class=\"tgh-editor-ok\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>account.status: \"connected\"<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-hero');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 1 : #upl-tg-three-apis, prefix t3a-\n  The 3 Telegram APIs and which one you need. Decision cards + teaser CTA.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-three-apis,\n#upl-tg-three-apis *,\n#upl-tg-three-apis *::before,\n#upl-tg-three-apis *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-three-apis { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-three-apis br { display: none !important; }\n#upl-tg-three-apis p { display: contents !important; }\n#upl-tg-three-apis .t3a-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-three-apis .t3a-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-three-apis .t3a-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(59, 185, 139, 0.12) !important; color: #2aaa7e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-three-apis .t3a-badge .t3a-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-three-apis h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-three-apis .t3a-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }\n#upl-tg-three-apis .t3a-grid { display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 20px !important; margin-bottom: 28px !important; }\n#upl-tg-three-apis .t3a-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; padding: 26px !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; display: flex !important; flex-direction: column !important; }\n#upl-tg-three-apis .t3a-icon { width: 44px !important; height: 44px !important; border-radius: 10px !important; background: rgba(34,158,217,0.12) !important; display: flex !important; align-items: center !important; justify-content: center !important; margin-bottom: 16px !important; }\n#upl-tg-three-apis .t3a-icon svg { width: 22px !important; height: 22px !important; stroke: #229ED9 !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tg-three-apis .t3a-card h3 { font-family: 'Poppins', sans-serif !important; font-size: 18px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tg-three-apis .t3a-question { font-size: 14.5px !important; color: #64748b !important; line-height: 1.6 !important; margin-bottom: 14px !important; display: block !important; }\n#upl-tg-three-apis .t3a-req {\n  display: inline-flex !important; align-items: center !important; gap: 6px !important;\n  background: #f4f5f7 !important; color: #0f2736 !important; padding: 5px 10px !important;\n  border-radius: 6px !important; font-size: 12px !important; font-weight: 600 !important;\n  width: fit-content !important; margin-bottom: 16px !important;\n}\n#upl-tg-three-apis .t3a-list { list-style: none !important; display: flex !important; flex-direction: column !important; gap: 8px !important; margin-top: auto !important; }\n#upl-tg-three-apis .t3a-list li { display: flex !important; align-items: flex-start !important; gap: 8px !important; font-size: 13.5px !important; color: #383838 !important; line-height: 1.5 !important; }\n#upl-tg-three-apis .t3a-list svg { width: 15px !important; height: 15px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }<\/p>\n<p>#upl-tg-three-apis .t3a-teaser {\n  background: #0f2736 !important; border-radius: 16px !important; padding: 28px 30px !important;\n  display: flex !important; align-items: center !important; justify-content: space-between !important;\n  gap: 24px !important; flex-wrap: wrap !important;\n}\n#upl-tg-three-apis .t3a-teaser-text { flex: 1 1 380px !important; }\n#upl-tg-three-apis .t3a-teaser-eyebrow { color: #3BB98B !important; font-size: 12px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tg-three-apis .t3a-teaser-title { font-family: 'Poppins', sans-serif !important; font-size: 20px !important; font-weight: 700 !important; color: #ffffff !important; line-height: 1.35 !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tg-three-apis .t3a-teaser-desc { color: rgba(255,255,255,0.75) !important; font-size: 14.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-three-apis .t3a-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 26px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important; flex-shrink: 0 !important;\n}\n#upl-tg-three-apis .t3a-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-three-apis .t3a-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-three-apis .t3a-wrap { padding: 50px 20px !important; }\n  #upl-tg-three-apis h2 { font-size: 28px !important; }\n  #upl-tg-three-apis .t3a-grid { grid-template-columns: 1fr !important; gap: 16px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-three-apis .t3a-wrap { padding: 40px 16px !important; }\n  #upl-tg-three-apis h2 { font-size: 26px !important; }\n  #upl-tg-three-apis .t3a-teaser { flex-direction: column !important; align-items: flex-start !important; padding: 22px !important; }\n  #upl-tg-three-apis .t3a-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-three-apis h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-three-apis\">\n<div class=\"t3a-wrap\">\n    <span id=\"tg-three-apis\" class=\"t3a-anchor\"><\/span><\/p>\n<div class=\"t3a-badge\"><span class=\"t3a-dot\"><\/span><span>Getting started<\/span><\/div>\n<h2>The 3 Telegram APIs, and which one you need<\/h2>\n<div class=\"t3a-intro\">Most guides talk about \"the Telegram API\" as if it were a single thing. It is not. Telegram ships three distinct APIs, each with its own credentials, its own rules and its own limits. Picking the wrong one is the fastest way to waste a week building against the wrong door.<\/div>\n<div class=\"t3a-grid\">\n<div class=\"t3a-card\">\n<div class=\"t3a-icon\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"10\" rx=\"2\"\/><circle cx=\"12\" cy=\"5\" r=\"2\"\/><path d=\"M12 7v4\"\/><line x1=\"8\" y1=\"16\" x2=\"8\" y2=\"16\"\/><line x1=\"16\" y1=\"16\" x2=\"16\" y2=\"16\"\/><\/svg><\/div>\n<h3>Bot API<\/h3>\n<div class=\"t3a-question\">Do you need an automated bot that reacts to commands and messages?<\/div>\n<div class=\"t3a-req\">Needs: a bot token from BotFather<\/div>\n<ul class=\"t3a-list\">\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>HTTP API, no MTProto knowledge required<\/span><\/li>\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Acts as a bot account, not a human<\/span><\/li>\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Free to use<\/span><\/li>\n<\/ul><\/div>\n<div class=\"t3a-card\">\n<div class=\"t3a-icon\"><svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 3\"\/><\/svg><\/div>\n<h3>Client API (MTProto)<\/h3>\n<div class=\"t3a-question\">Do you need to build a full client that acts as a real Telegram user?<\/div>\n<div class=\"t3a-req\">Needs: api_id + api_hash from my.telegram.org<\/div>\n<ul class=\"t3a-list\">\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Raw MTProto protocol, you implement the client<\/span><\/li>\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Acts as a real user account<\/span><\/li>\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Free, one api_id per phone number<\/span><\/li>\n<\/ul><\/div>\n<div class=\"t3a-card\">\n<div class=\"t3a-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M22 2 11 13\"\/><path d=\"M22 2 15 22l-4-9-9-4 20-7z\"\/><\/svg><\/div>\n<h3>Gateway API<\/h3>\n<div class=\"t3a-question\">Do you only need to send verification codes for phone number authentication?<\/div>\n<div class=\"t3a-req\">Needs: a Gateway API account<\/div>\n<ul class=\"t3a-list\">\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>OTP delivery only, not general messaging<\/span><\/li>\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Launched separately from Bot API and Client API<\/span><\/li>\n<li><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Out of scope for this guide<\/span><\/li>\n<\/ul><\/div>\n<\/p><\/div>\n<div class=\"t3a-teaser\">\n<div class=\"t3a-teaser-text\">\n        <span class=\"t3a-teaser-eyebrow\">None of these fit<\/span><br \/>\n        <span class=\"t3a-teaser-title\">Skip building your own MTProto client<\/span><br \/>\n        <span class=\"t3a-teaser-desc\">Unipile connects an existing Telegram user account through Telegram's own Devices feature, QR code login or Hosted Auth. No api_id, no api_hash, no bot limitations.<\/span>\n      <\/div>\n<p>      <a class=\"t3a-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build it with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-three-apis');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 2 : #upl-tg-apiid, prefix taid-\n  Get api_id and api_hash via my.telegram.org, section \"API development tools\".\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-apiid,\n#upl-tg-apiid *,\n#upl-tg-apiid *::before,\n#upl-tg-apiid *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-apiid { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-apiid br { display: none !important; }\n#upl-tg-apiid p { display: contents !important; }\n#upl-tg-apiid .taid-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-apiid .taid-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-apiid .taid-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-apiid .taid-badge .taid-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-apiid h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-apiid .taid-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tg-apiid .taid-grid { display: grid !important; grid-template-columns: 1.1fr 0.9fr !important; gap: 40px !important; align-items: start !important; }<\/p>\n<p>#upl-tg-apiid .taid-steps { display: flex !important; flex-direction: column !important; gap: 14px !important; margin-bottom: 24px !important; }\n#upl-tg-apiid .taid-step { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 20px 22px !important; display: flex !important; gap: 16px !important; }\n#upl-tg-apiid .taid-num { width: 32px !important; height: 32px !important; min-width: 32px !important; border-radius: 8px !important; background: rgba(221,223,76,0.18) !important; color: #8a8c2e !important; display: flex !important; align-items: center !important; justify-content: center !important; font-family: 'Poppins', sans-serif !important; font-size: 13px !important; font-weight: 700 !important; }\n#upl-tg-apiid .taid-step-title { font-family: 'Poppins', sans-serif !important; font-size: 15.5px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 4px !important; display: block !important; }\n#upl-tg-apiid .taid-step-desc { font-size: 14.5px !important; color: #64748b !important; line-height: 1.6 !important; display: block !important; }\n#upl-tg-apiid .taid-step-desc code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 13px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-apiid .taid-warn { background: #0f2736 !important; border-radius: 14px !important; border-left: 4px solid #3BB98B !important; padding: 22px 24px !important; display: flex !important; gap: 14px !important; }\n#upl-tg-apiid .taid-warn svg { width: 22px !important; height: 22px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-apiid .taid-warn-title { color: #3BB98B !important; font-size: 12px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 6px !important; display: block !important; }\n#upl-tg-apiid .taid-warn-text { color: rgba(255,255,255,0.85) !important; font-size: 14.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-apiid .taid-warn-text strong { color: #ffffff !important; font-weight: 700 !important; }<\/p>\n<p>#upl-tg-apiid .taid-code-wrapper { border-radius: 14px !important; overflow: hidden !important; background: #0d1117 !important; margin-bottom: 20px !important; }\n#upl-tg-apiid .taid-editor-bar { background: #161b22 !important; padding: 12px 18px !important; display: flex !important; align-items: center !important; gap: 8px !important; border-bottom: 1px solid rgba(255,255,255,0.06) !important; }\n#upl-tg-apiid .taid-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tg-apiid .taid-dot-r { background: #ff5f57 !important; }\n#upl-tg-apiid .taid-dot-y { background: #febc2e !important; }\n#upl-tg-apiid .taid-dot-g { background: #28c840 !important; }\n#upl-tg-apiid .taid-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tg-apiid .taid-pre { padding: 20px 22px !important; font-size: 13px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tg-apiid .taid-pre code { font-family: 'Courier New', monospace !important; white-space: pre !important; display: block !important; }\n#upl-tg-apiid .taid-c { color: #8b949e !important; }\n#upl-tg-apiid .taid-w { color: #e6edf3 !important; }\n#upl-tg-apiid .taid-s { color: #a5d6ff !important; }<\/p>\n<p>#upl-tg-apiid .taid-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 12px 22px !important;\n  border-radius: 8px !important; font-size: 0.9rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important; width: 100% !important; justify-content: center !important;\n}\n#upl-tg-apiid .taid-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-apiid .taid-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-apiid .taid-wrap { padding: 50px 20px !important; }\n  #upl-tg-apiid h2 { font-size: 28px !important; }\n  #upl-tg-apiid .taid-grid { grid-template-columns: 1fr !important; gap: 28px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-apiid .taid-wrap { padding: 40px 16px !important; }\n  #upl-tg-apiid h2 { font-size: 26px !important; }\n  #upl-tg-apiid .taid-step { padding: 16px !important; gap: 12px !important; }\n  #upl-tg-apiid .taid-pre { font-size: 11.5px !important; padding: 16px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-apiid h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-apiid\">\n<div class=\"taid-wrap\">\n    <span id=\"tg-api-id-hash\" class=\"taid-anchor\"><\/span><\/p>\n<div class=\"taid-badge\"><span class=\"taid-dot\"><\/span><span>Client API \/ MTProto<\/span><\/div>\n<h2>Get your Telegram API credentials: api_id and api_hash<\/h2>\n<div class=\"taid-intro\">This is the real \"get Telegram API\" path most people search for and never find documented plainly: <strong>my.telegram.org<\/strong>, section <strong>API development tools<\/strong>. Here is the exact walk, end to end.<\/div>\n<div class=\"taid-grid\">\n<div>\n<div class=\"taid-steps\">\n<div class=\"taid-step\">\n<div class=\"taid-num\">1<\/div>\n<div>\n              <span class=\"taid-step-title\">Go to my.telegram.org and log in<\/span><br \/>\n              <span class=\"taid-step-desc\">You need an active Telegram account, verified with the same phone number you will authenticate with. Enter your phone number and the login code sent to your Telegram app.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"taid-step\">\n<div class=\"taid-num\">2<\/div>\n<div>\n              <span class=\"taid-step-title\">Open \"API development tools\"<\/span><br \/>\n              <span class=\"taid-step-desc\">This section lives under your my.telegram.org account settings. It is the only official place where Telegram issues Client API credentials.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"taid-step\">\n<div class=\"taid-num\">3<\/div>\n<div>\n              <span class=\"taid-step-title\">Fill in the app form<\/span><br \/>\n              <span class=\"taid-step-desc\">App title, short name and platform. These fields describe the application that will use MTProto, they do not need to match a public product name.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"taid-step\">\n<div class=\"taid-num\">4<\/div>\n<div>\n              <span class=\"taid-step-title\">Get your api_id and api_hash<\/span><br \/>\n              <span class=\"taid-step-desc\">Telegram issues the pair immediately. <code>api_id<\/code> is a numeric identifier, <code>api_hash<\/code> is the matching secret. Store both like any other credential, they authenticate your MTProto client against Telegram's servers.<\/span>\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"taid-warn\">\n          <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg><\/p>\n<div>\n            <span class=\"taid-warn-title\">One constraint to plan around<\/span><br \/>\n            <span class=\"taid-warn-text\">A phone number can hold <strong>only one api_id<\/strong>. If you need several apps or several environments, you need several phone numbers, or you reuse the same api_id across your codebase. There is no self-service way to issue a second api_id on the same number.<\/span>\n          <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div>\n<div class=\"taid-code-wrapper\">\n<div class=\"taid-editor-bar\">\n            <span class=\"taid-dot2 taid-dot-r\"><\/span><span class=\"taid-dot2 taid-dot-y\"><\/span><span class=\"taid-dot2 taid-dot-g\"><\/span><br \/>\n            <span class=\"taid-filename\">.env<\/span>\n          <\/div>\n<div class=\"taid-pre\"><code><span class=\"taid-c\"># From my.telegram.org, API development tools<\/span>&#10;<span class=\"taid-w\">TELEGRAM_API_ID<\/span><span class=\"taid-w\">=<\/span><span class=\"taid-s\">1234567<\/span>&#10;<span class=\"taid-w\">TELEGRAM_API_HASH<\/span><span class=\"taid-w\">=<\/span><span class=\"taid-s\">0123456789abcdef0123456789abcdef<\/span>&#10;&#10;<span class=\"taid-c\"># One api_id per phone number, store it securely<\/span><\/code><\/div>\n<\/p><\/div>\n<p>        <a class=\"taid-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build your account connection with Unipile instead<\/span><\/a>\n      <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-apiid');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 3 : #upl-tg-botfather, prefix tbf-\n  Get a bot token from BotFather (the other path, Bot API).\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-botfather,\n#upl-tg-botfather *,\n#upl-tg-botfather *::before,\n#upl-tg-botfather *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-botfather { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-botfather br { display: none !important; }\n#upl-tg-botfather p { display: contents !important; }\n#upl-tg-botfather .tbf-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-botfather .tbf-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-botfather .tbf-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-botfather .tbf-badge .tbf-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-botfather h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-botfather .tbf-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tg-botfather .tbf-grid { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 32px !important; align-items: start !important; }<\/p>\n<p>#upl-tg-botfather .tbf-steps { display: flex !important; flex-direction: column !important; gap: 14px !important; }\n#upl-tg-botfather .tbf-step { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px 20px !important; display: flex !important; gap: 14px !important; align-items: flex-start !important; }\n#upl-tg-botfather .tbf-num { width: 30px !important; height: 30px !important; min-width: 30px !important; border-radius: 8px !important; background: rgba(221,223,76,0.18) !important; color: #8a8c2e !important; display: flex !important; align-items: center !important; justify-content: center !important; font-family: 'Poppins', sans-serif !important; font-size: 12.5px !important; font-weight: 700 !important; }\n#upl-tg-botfather .tbf-step-title { font-family: 'Poppins', sans-serif !important; font-size: 15px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 4px !important; display: block !important; }\n#upl-tg-botfather .tbf-step-desc { font-size: 14px !important; color: #64748b !important; line-height: 1.6 !important; display: block !important; }\n#upl-tg-botfather .tbf-step-desc code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-botfather .tbf-note { margin-top: 18px !important; display: flex !important; align-items: flex-start !important; gap: 10px !important; background: #f4f5f7 !important; border-radius: 10px !important; padding: 14px 16px !important; }\n#upl-tg-botfather .tbf-note svg { width: 16px !important; height: 16px !important; stroke: #64748b !important; fill: none !important; stroke-width: 2 !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-botfather .tbf-note span { font-size: 13px !important; color: #64748b !important; line-height: 1.6 !important; display: block !important; }\n#upl-tg-botfather .tbf-note strong { color: #0f2736 !important; font-weight: 700 !important; }<\/p>\n<p>#upl-tg-botfather .tbf-code-wrapper { border-radius: 14px !important; overflow: hidden !important; background: #0d1117 !important; margin-bottom: 20px !important; }\n#upl-tg-botfather .tbf-editor-bar { background: #161b22 !important; padding: 12px 18px !important; display: flex !important; align-items: center !important; gap: 8px !important; border-bottom: 1px solid rgba(255,255,255,0.06) !important; }\n#upl-tg-botfather .tbf-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tg-botfather .tbf-dot-r { background: #ff5f57 !important; }\n#upl-tg-botfather .tbf-dot-y { background: #febc2e !important; }\n#upl-tg-botfather .tbf-dot-g { background: #28c840 !important; }\n#upl-tg-botfather .tbf-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tg-botfather .tbf-pre { padding: 20px 22px !important; font-size: 13px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tg-botfather .tbf-pre code { font-family: 'Courier New', monospace !important; white-space: pre !important; display: block !important; }\n#upl-tg-botfather .tbf-c { color: #8b949e !important; }\n#upl-tg-botfather .tbf-w { color: #e6edf3 !important; }\n#upl-tg-botfather .tbf-s { color: #a5d6ff !important; }\n#upl-tg-botfather .tbf-fn { color: #d2a8ff !important; }<\/p>\n<p>#upl-tg-botfather .tbf-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 12px 22px !important;\n  border-radius: 8px !important; font-size: 0.9rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important; width: 100% !important; justify-content: center !important;\n}\n#upl-tg-botfather .tbf-cta:hover { transform: translateY(-5px) !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-botfather .tbf-wrap { padding: 50px 20px !important; }\n  #upl-tg-botfather h2 { font-size: 28px !important; }\n  #upl-tg-botfather .tbf-grid { grid-template-columns: 1fr !important; gap: 24px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-botfather .tbf-wrap { padding: 40px 16px !important; }\n  #upl-tg-botfather h2 { font-size: 26px !important; }\n  #upl-tg-botfather .tbf-step { padding: 14px !important; gap: 10px !important; }\n  #upl-tg-botfather .tbf-pre { font-size: 11.5px !important; padding: 16px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-botfather h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-botfather\">\n<div class=\"tbf-wrap\">\n    <span id=\"tg-botfather\" class=\"tbf-anchor\"><\/span><\/p>\n<div class=\"tbf-badge\"><span class=\"tbf-dot\"><\/span><span>Bot API<\/span><\/div>\n<h2>Get a bot token via BotFather<\/h2>\n<div class=\"tbf-intro\">The other path into the Telegram API needs no my.telegram.org account, no api_id, no api_hash. It runs entirely inside a chat with Telegram's own bot, <strong>@BotFather<\/strong>.<\/div>\n<div class=\"tbf-grid\">\n<div>\n<div class=\"tbf-steps\">\n<div class=\"tbf-step\">\n<div class=\"tbf-num\">1<\/div>\n<div>\n              <span class=\"tbf-step-title\">Open a chat with @BotFather<\/span><br \/>\n              <span class=\"tbf-step-desc\">Search \"BotFather\" inside Telegram. It is the official bot Telegram uses to issue and manage every other bot on the platform.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tbf-step\">\n<div class=\"tbf-num\">2<\/div>\n<div>\n              <span class=\"tbf-step-title\">Send <code>\/newbot<\/code><\/span><br \/>\n              <span class=\"tbf-step-desc\">BotFather walks you through creating a new bot directly in the chat, no dashboard, no form.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tbf-step\">\n<div class=\"tbf-num\">3<\/div>\n<div>\n              <span class=\"tbf-step-title\">Choose a name and a username<\/span><br \/>\n              <span class=\"tbf-step-desc\">The display name can be anything. The username must be unique and end in <code>bot<\/code>, for example <code>my_support_bot<\/code>.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tbf-step\">\n<div class=\"tbf-num\">4<\/div>\n<div>\n              <span class=\"tbf-step-title\">Copy the bot token<\/span><br \/>\n              <span class=\"tbf-step-desc\">BotFather replies with your token immediately. Keep it secret, it authenticates every Bot API call your bot makes.<\/span>\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbf-note\">\n          <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg><br \/>\n          <span>The current Bot API is <strong>version 10.2<\/strong>, published July 14, 2026 (source: core.telegram.org\/bots\/api). Every bot token works against this same versioned HTTP API.<\/span>\n        <\/div>\n<\/p><\/div>\n<div>\n<div class=\"tbf-code-wrapper\">\n<div class=\"tbf-editor-bar\">\n            <span class=\"tbf-dot2 tbf-dot-r\"><\/span><span class=\"tbf-dot2 tbf-dot-y\"><\/span><span class=\"tbf-dot2 tbf-dot-g\"><\/span><br \/>\n            <span class=\"tbf-filename\">terminal<\/span>\n          <\/div>\n<div class=\"tbf-pre\"><code><span class=\"tbf-c\"># Test your bot token against the Bot API<\/span>&#10;<span class=\"tbf-fn\">curl<\/span> <span class=\"tbf-s\">\"https:\/\/api.telegram.org\/bot&lt;YOUR_TOKEN&gt;\/getMe\"<\/span>&#10;&#10;<span class=\"tbf-c\"># Sample response<\/span>&#10;<span class=\"tbf-w\">{<\/span>&#10;&nbsp;&nbsp;<span class=\"tbf-w\">\"ok\":<\/span> <span class=\"tbf-w\">true,<\/span>&#10;&nbsp;&nbsp;<span class=\"tbf-w\">\"result\":<\/span> <span class=\"tbf-w\">{<\/span>&#10;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"tbf-w\">\"id\":<\/span> <span class=\"tbf-w\">123456789,<\/span>&#10;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"tbf-w\">\"is_bot\":<\/span> <span class=\"tbf-w\">true,<\/span>&#10;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"tbf-w\">\"username\":<\/span> <span class=\"tbf-s\">\"my_support_bot\"<\/span>&#10;&nbsp;&nbsp;<span class=\"tbf-w\">}<\/span>&#10;<span class=\"tbf-w\">}<\/span><\/code><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-botfather');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 4 : #upl-tg-comparison, prefix tcmp-\n  Comparison table: Bot API \/ Client API (MTProto) \/ Gateway API \/ Unipile.\n  Table on desktop, stacked cards on mobile (<768px) to avoid horizontal scroll.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-comparison,\n#upl-tg-comparison *,\n#upl-tg-comparison *::before,\n#upl-tg-comparison *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-comparison { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-comparison br { display: none !important; }\n#upl-tg-comparison p { display: contents !important; }\n#upl-tg-comparison .tcmp-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-comparison .tcmp-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-comparison .tcmp-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(59, 185, 139, 0.12) !important; color: #2aaa7e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-comparison .tcmp-badge .tcmp-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-comparison h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-comparison .tcmp-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 32px !important; display: block !important; }<\/p>\n<p>\/* Desktop table *\/\n#upl-tg-comparison .tcmp-table-wrap { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; overflow: hidden !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; display: block !important; }\n#upl-tg-comparison table { width: 100% !important; border-collapse: collapse !important; }\n#upl-tg-comparison thead tr { background: #0f2736 !important; }\n#upl-tg-comparison thead th { color: #ffffff !important; font-family: 'Poppins', sans-serif !important; font-size: 13px !important; font-weight: 700 !important; text-align: left !important; padding: 16px 18px !important; }\n#upl-tg-comparison thead th:first-child { width: 22% !important; }\n#upl-tg-comparison tbody tr { border-top: 1px solid #e5e7eb !important; }\n#upl-tg-comparison tbody tr:nth-child(even) { background: #f8fafc !important; }\n#upl-tg-comparison tbody td { padding: 14px 18px !important; font-size: 13.5px !important; color: #383838 !important; line-height: 1.55 !important; vertical-align: top !important; }\n#upl-tg-comparison tbody td:first-child { font-weight: 700 !important; color: #0f2736 !important; }\n#upl-tg-comparison .tcmp-yes { color: #2aaa7e !important; font-weight: 600 !important; }\n#upl-tg-comparison .tcmp-no { color: #94a3b8 !important; }\n#upl-tg-comparison .tcmp-best { background: rgba(59,185,139,0.06) !important; }<\/p>\n<p>\/* Mobile cards, hidden by default *\/\n#upl-tg-comparison .tcmp-cards { display: none !important; }\n#upl-tg-comparison .tcmp-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px !important; margin-bottom: 14px !important; }\n#upl-tg-comparison .tcmp-card-title { font-family: 'Poppins', sans-serif !important; font-size: 16px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 12px !important; display: block !important; padding-bottom: 10px !important; border-bottom: 1px solid #e5e7eb !important; }\n#upl-tg-comparison .tcmp-card-row { display: flex !important; justify-content: space-between !important; gap: 12px !important; padding: 6px 0 !important; font-size: 13px !important; }\n#upl-tg-comparison .tcmp-card-row-label { color: #64748b !important; font-weight: 600 !important; flex-shrink: 0 !important; }\n#upl-tg-comparison .tcmp-card-row-val { color: #383838 !important; text-align: right !important; }<\/p>\n<p>#upl-tg-comparison .tcmp-footnote { margin-top: 20px !important; background: #f4f5f7 !important; border-radius: 12px !important; padding: 18px 20px !important; }\n#upl-tg-comparison .tcmp-footnote-title { font-size: 12px !important; font-weight: 700 !important; color: #0f2736 !important; text-transform: uppercase !important; letter-spacing: 0.4px !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tg-comparison .tcmp-footnote-text { font-size: 13.5px !important; color: #64748b !important; line-height: 1.7 !important; display: block !important; }<\/p>\n<p>#upl-tg-comparison .tcmp-cta-row { margin-top: 28px !important; display: flex !important; justify-content: center !important; }\n#upl-tg-comparison .tcmp-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 28px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-comparison .tcmp-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-comparison .tcmp-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-comparison .tcmp-wrap { padding: 50px 20px !important; }\n  #upl-tg-comparison h2 { font-size: 28px !important; }\n}\n@media (max-width: 768px) {\n  #upl-tg-comparison .tcmp-table-wrap { display: none !important; }\n  #upl-tg-comparison .tcmp-cards { display: block !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-comparison .tcmp-wrap { padding: 40px 16px !important; }\n  #upl-tg-comparison h2 { font-size: 26px !important; }\n  #upl-tg-comparison .tcmp-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-comparison h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-comparison\">\n<div class=\"tcmp-wrap\">\n    <span id=\"tg-comparison\" class=\"tcmp-anchor\"><\/span><\/p>\n<div class=\"tcmp-badge\"><span class=\"tcmp-dot\"><\/span><span>Comparison<\/span><\/div>\n<h2>What each Telegram API actually lets you do<\/h2>\n<div class=\"tcmp-intro\">Four ways to touch Telegram, four very different sets of permissions. Here is what each one connects to, what credentials it needs, and where it stops.<\/div>\n<div class=\"tcmp-table-wrap\">\n<table>\n<thead>\n<tr>\n<th>Criteria<\/th>\n<th>Bot API<\/th>\n<th>Client API (MTProto)<\/th>\n<th>Gateway API<\/th>\n<th>Unipile<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>What you connect<\/td>\n<td>A bot account<\/td>\n<td>A real user account you build the client for<\/td>\n<td>Nothing, OTP delivery only<\/td>\n<td>An existing real user account<\/td>\n<\/tr>\n<tr>\n<td>Credentials needed<\/td>\n<td>Bot token from BotFather<\/td>\n<td>api_id + api_hash from my.telegram.org<\/td>\n<td>Gateway API account<\/td>\n<td>QR code login or Hosted Auth (<code>providers: \"TELEGRAM\"<\/code>)<\/td>\n<\/tr>\n<tr>\n<td>Sends\/receives as a human account<\/td>\n<td class=\"tcmp-no\">No, acts as a bot<\/td>\n<td class=\"tcmp-yes\">Yes<\/td>\n<td class=\"tcmp-no\">No<\/td>\n<td class=\"tcmp-yes\">Yes<\/td>\n<\/tr>\n<tr>\n<td>MTProto implementation<\/td>\n<td class=\"tcmp-no\">Not needed, HTTP only<\/td>\n<td class=\"tcmp-no\">You build it yourself<\/td>\n<td class=\"tcmp-no\">Not applicable<\/td>\n<td class=\"tcmp-yes\">Handled by Unipile<\/td>\n<\/tr>\n<tr>\n<td>Group participant management<\/td>\n<td>Limited to bot permissions<\/td>\n<td>Full, if you build it<\/td>\n<td class=\"tcmp-no\">Not applicable<\/td>\n<td>Get, add, remove participants<\/td>\n<\/tr>\n<tr class=\"tcmp-best\">\n<td>Setup complexity<\/td>\n<td>Low<\/td>\n<td>High, you own the MTProto client<\/td>\n<td>Low<\/td>\n<td class=\"tcmp-yes\">Low, no MTProto to maintain<\/td>\n<\/tr>\n<tr>\n<td>Cost<\/td>\n<td class=\"tcmp-yes\">Free<\/td>\n<td class=\"tcmp-yes\">Free<\/td>\n<td>Not covered in this guide<\/td>\n<td>Included in your Unipile plan<\/td>\n<\/tr>\n<tr>\n<td>Ban risk on abuse<\/td>\n<td>Token revocation<\/td>\n<td>Permanent ban on flooding\/spam<\/td>\n<td>Not applicable<\/td>\n<td>Mitigated with Unipile's rate-limit guidance<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<div class=\"tcmp-cards\">\n<div class=\"tcmp-card\">\n        <span class=\"tcmp-card-title\">Bot API<\/span><\/p>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Connects<\/span><span class=\"tcmp-card-row-val\">A bot account<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Credentials<\/span><span class=\"tcmp-card-row-val\">Bot token (BotFather)<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Acts as human<\/span><span class=\"tcmp-card-row-val\">No<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Setup<\/span><span class=\"tcmp-card-row-val\">Low<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Cost<\/span><span class=\"tcmp-card-row-val\">Free<\/span><\/div>\n<\/p><\/div>\n<div class=\"tcmp-card\">\n        <span class=\"tcmp-card-title\">Client API (MTProto)<\/span><\/p>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Connects<\/span><span class=\"tcmp-card-row-val\">A real user account (DIY client)<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Credentials<\/span><span class=\"tcmp-card-row-val\">api_id + api_hash<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Acts as human<\/span><span class=\"tcmp-card-row-val\">Yes<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Setup<\/span><span class=\"tcmp-card-row-val\">High, MTProto self-built<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Cost<\/span><span class=\"tcmp-card-row-val\">Free<\/span><\/div>\n<\/p><\/div>\n<div class=\"tcmp-card\">\n        <span class=\"tcmp-card-title\">Gateway API<\/span><\/p>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Connects<\/span><span class=\"tcmp-card-row-val\">Nothing, OTP delivery only<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Credentials<\/span><span class=\"tcmp-card-row-val\">Gateway API account<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Setup<\/span><span class=\"tcmp-card-row-val\">Low<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Scope<\/span><span class=\"tcmp-card-row-val\">Out of this guide<\/span><\/div>\n<\/p><\/div>\n<div class=\"tcmp-card\" style=\"border-color:#3BB98B!important;\">\n        <span class=\"tcmp-card-title\">Unipile<\/span><\/p>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Connects<\/span><span class=\"tcmp-card-row-val\">An existing real user account<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Credentials<\/span><span class=\"tcmp-card-row-val\">QR code or Hosted Auth<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Acts as human<\/span><span class=\"tcmp-card-row-val\">Yes<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Setup<\/span><span class=\"tcmp-card-row-val\">Low, no MTProto to maintain<\/span><\/div>\n<div class=\"tcmp-card-row\"><span class=\"tcmp-card-row-label\">Groups<\/span><span class=\"tcmp-card-row-val\">Get \/ add \/ remove participants<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tcmp-footnote\">\n      <span class=\"tcmp-footnote-title\">What Unipile does not cover on Telegram<\/span><br \/>\n      <span class=\"tcmp-footnote-text\">Channels, communities and broadcasts, chat theme, secret chats, contact \/ location \/ poll \/ event attachments, group administration (approve, promote, revoke), chat deletion, archiving, and voice or video calls. Unipile connects the account, it does not replicate every Telegram client feature.<\/span>\n    <\/div>\n<div class=\"tcmp-cta-row\">\n      <a class=\"tcmp-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build your Telegram integration with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-comparison');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 5 : #upl-tg-free-limits, prefix tfb-\n  It's free, here's where it breaks: flooding\/spam = permanent ban, unofficial clients monitored.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-free-limits,\n#upl-tg-free-limits *,\n#upl-tg-free-limits *::before,\n#upl-tg-free-limits *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-free-limits { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-free-limits br { display: none !important; }\n#upl-tg-free-limits p { display: contents !important; }\n#upl-tg-free-limits .tfb-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-free-limits .tfb-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-free-limits .tfb-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-free-limits .tfb-badge .tfb-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-free-limits h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-free-limits .tfb-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tg-free-limits .tfb-grid { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 20px !important; margin-bottom: 24px !important; }\n#upl-tg-free-limits .tfb-card { background: #0f2736 !important; border-radius: 16px !important; border-left: 4px solid #3BB98B !important; padding: 24px 26px !important; }\n#upl-tg-free-limits .tfb-card-icon { width: 40px !important; height: 40px !important; border-radius: 10px !important; background: rgba(59,185,139,0.15) !important; display: flex !important; align-items: center !important; justify-content: center !important; margin-bottom: 14px !important; }\n#upl-tg-free-limits .tfb-card-icon svg { width: 20px !important; height: 20px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tg-free-limits .tfb-card-title { font-family: 'Poppins', sans-serif !important; font-size: 16.5px !important; font-weight: 700 !important; color: #ffffff !important; margin-bottom: 10px !important; display: block !important; }\n#upl-tg-free-limits .tfb-card-text { font-size: 14px !important; color: rgba(255,255,255,0.75) !important; line-height: 1.7 !important; display: block !important; }\n#upl-tg-free-limits .tfb-card-text strong { color: #ffffff !important; font-weight: 700 !important; }<\/p>\n<p>#upl-tg-free-limits .tfb-reco { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; padding: 26px !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; }\n#upl-tg-free-limits .tfb-reco-title { font-family: 'Poppins', sans-serif !important; font-size: 16px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 14px !important; display: block !important; }\n#upl-tg-free-limits .tfb-reco-list { display: flex !important; flex-direction: column !important; gap: 10px !important; margin-bottom: 22px !important; }\n#upl-tg-free-limits .tfb-reco-item { display: flex !important; align-items: flex-start !important; gap: 10px !important; font-size: 14.5px !important; color: #383838 !important; line-height: 1.6 !important; }\n#upl-tg-free-limits .tfb-reco-item svg { width: 16px !important; height: 16px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }<\/p>\n<p>#upl-tg-free-limits .tfb-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 13px 24px !important;\n  border-radius: 8px !important; font-size: 0.9rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-free-limits .tfb-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-free-limits .tfb-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-free-limits .tfb-wrap { padding: 50px 20px !important; }\n  #upl-tg-free-limits h2 { font-size: 28px !important; }\n  #upl-tg-free-limits .tfb-grid { grid-template-columns: 1fr !important; gap: 16px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-free-limits .tfb-wrap { padding: 40px 16px !important; }\n  #upl-tg-free-limits h2 { font-size: 26px !important; }\n  #upl-tg-free-limits .tfb-card { padding: 20px !important; }\n  #upl-tg-free-limits .tfb-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-free-limits h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-free-limits\">\n<div class=\"tfb-wrap\">\n    <span id=\"tg-free-limits\" class=\"tfb-anchor\"><\/span><\/p>\n<div class=\"tfb-badge\"><span class=\"tfb-dot\"><\/span><span>Pricing &amp; limits<\/span><\/div>\n<h2>It's free. Here's where it breaks.<\/h2>\n<div class=\"tfb-intro\">Both the Bot API and the Telegram API (MTProto) are free to use. There is no invoice, no per-message fee, no paid tier gating credentials. The catch is not money, it is behavior.<\/div>\n<div class=\"tfb-grid\">\n<div class=\"tfb-card\">\n<div class=\"tfb-card-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg><\/div>\n<p>        <span class=\"tfb-card-title\">Flooding, spam and fake counters<\/span><br \/>\n        <span class=\"tfb-card-text\">Sending too fast, mass-messaging unrelated users, or artificially inflating view and reaction counters are the fastest way to trigger a <strong>permanent ban<\/strong>, on both the Bot API and the Client API.<\/span>\n      <\/div>\n<div class=\"tfb-card\">\n<div class=\"tfb-card-icon\"><svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"3\"\/><path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\"\/><\/svg><\/div>\n<p>        <span class=\"tfb-card-title\">Unofficial clients are watched<\/span><br \/>\n        <span class=\"tfb-card-text\">Any client built with your own api_id and api_hash is <strong>automatically placed under observation<\/strong> by Telegram's systems. Unusual patterns get flagged faster than on the official apps.<\/span>\n      <\/div>\n<\/p><\/div>\n<div class=\"tfb-reco\">\n      <span class=\"tfb-reco-title\">Unipile's own guidance to stay under the radar<\/span><\/p>\n<div class=\"tfb-reco-list\">\n<div class=\"tfb-reco-item\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Avoid brand-new Telegram accounts for automation, warm them up like any other channel<\/span><\/div>\n<div class=\"tfb-reco-item\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Ramp up message volume progressively instead of starting at full throughput<\/span><\/div>\n<div class=\"tfb-reco-item\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Keep at least 10 to 20 seconds between messages sent from the same account<\/span><\/div>\n<\/p><\/div>\n<p>      <a class=\"tfb-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build safer messaging flows with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-free-limits');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 6 : #upl-tg-unipile-connect, prefix tux-\n  The third way: connect an existing Telegram user account through Unipile (differentiator).\n  Internal links: \/telegram-api-send-message-a-comprehensive-guide\/ + \/communication-api\/messaging-api\/telegram-api\/\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-unipile-connect,\n#upl-tg-unipile-connect *,\n#upl-tg-unipile-connect *::before,\n#upl-tg-unipile-connect *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-unipile-connect { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-unipile-connect br { display: none !important; }\n#upl-tg-unipile-connect p { display: contents !important; }\n#upl-tg-unipile-connect .tux-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-unipile-connect .tux-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-unipile-connect .tux-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(59, 185, 139, 0.12) !important; color: #2aaa7e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-unipile-connect .tux-badge .tux-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-unipile-connect h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-unipile-connect .tux-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tg-unipile-connect .tux-grid { display: grid !important; grid-template-columns: 1.05fr 0.95fr !important; gap: 40px !important; align-items: start !important; margin-bottom: 30px !important; }<\/p>\n<p>#upl-tg-unipile-connect .tux-para { font-size: 15.5px !important; color: #383838 !important; line-height: 1.8 !important; margin-bottom: 18px !important; display: block !important; }\n#upl-tg-unipile-connect .tux-para strong { color: #0f2736 !important; font-weight: 700 !important; }\n#upl-tg-unipile-connect .tux-para a { color: #2aaa7e !important; text-decoration: underline !important; }\n#upl-tg-unipile-connect .tux-para code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 13.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-unipile-connect .tux-checklist { display: flex !important; flex-direction: column !important; gap: 10px !important; margin: 20px 0 24px !important; }\n#upl-tg-unipile-connect .tux-check { display: flex !important; align-items: flex-start !important; gap: 10px !important; font-size: 14.5px !important; color: #383838 !important; line-height: 1.6 !important; }\n#upl-tg-unipile-connect .tux-check svg { width: 16px !important; height: 16px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-unipile-connect .tux-check-no svg { stroke: #94a3b8 !important; }\n#upl-tg-unipile-connect .tux-check-no span { color: #64748b !important; }<\/p>\n<p>#upl-tg-unipile-connect .tux-links-row { display: flex !important; gap: 12px !important; flex-wrap: wrap !important; margin-bottom: 24px !important; }\n#upl-tg-unipile-connect .tux-link-chip { display: inline-flex !important; align-items: center !important; gap: 6px !important; background: #f4f5f7 !important; color: #0f2736 !important; padding: 8px 14px !important; border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; text-decoration: none !important; }\n#upl-tg-unipile-connect .tux-link-chip svg { width: 13px !important; height: 13px !important; stroke: #2aaa7e !important; fill: none !important; stroke-width: 2.5 !important; }<\/p>\n<p>#upl-tg-unipile-connect .tux-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 28px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-unipile-connect .tux-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-unipile-connect .tux-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>\/* Mockup *\/\n#upl-tg-unipile-connect .tux-mockup { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; overflow: hidden !important; box-shadow: 0 12px 32px rgba(15,39,54,0.08) !important; }\n#upl-tg-unipile-connect .tux-mockup-bar { background: #0f2736 !important; padding: 14px 18px !important; display: flex !important; align-items: center !important; gap: 8px !important; }\n#upl-tg-unipile-connect .tux-mockup-dot { width: 10px !important; height: 10px !important; border-radius: 50% !important; background: rgba(255,255,255,0.3) !important; }\n#upl-tg-unipile-connect .tux-mockup-title { color: #ffffff !important; font-size: 13px !important; font-weight: 600 !important; margin-left: 6px !important; }\n#upl-tg-unipile-connect .tux-mockup-body { padding: 24px !important; }\n#upl-tg-unipile-connect .tux-mockup-row { display: flex !important; align-items: center !important; justify-content: space-between !important; padding: 14px 0 !important; border-bottom: 1px solid #f0f1f3 !important; }\n#upl-tg-unipile-connect .tux-mockup-row:last-child { border-bottom: none !important; }\n#upl-tg-unipile-connect .tux-mockup-label { font-size: 13px !important; color: #64748b !important; }\n#upl-tg-unipile-connect .tux-mockup-val { font-size: 13px !important; font-weight: 700 !important; color: #0f2736 !important; }\n#upl-tg-unipile-connect .tux-status-pill { display: inline-flex !important; align-items: center !important; gap: 6px !important; background: rgba(59,185,139,0.12) !important; color: #2aaa7e !important; padding: 4px 10px !important; border-radius: 12px !important; font-size: 12px !important; font-weight: 700 !important; }\n#upl-tg-unipile-connect .tux-status-pill.tux-status-off { background: #f4f5f7 !important; color: #94a3b8 !important; }\n#upl-tg-unipile-connect .tux-status-dot { width: 6px !important; height: 6px !important; background: #3BB98B !important; border-radius: 50% !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-unipile-connect .tux-wrap { padding: 50px 20px !important; }\n  #upl-tg-unipile-connect h2 { font-size: 28px !important; }\n  #upl-tg-unipile-connect .tux-grid { grid-template-columns: 1fr !important; gap: 28px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-unipile-connect .tux-wrap { padding: 40px 16px !important; }\n  #upl-tg-unipile-connect h2 { font-size: 26px !important; }\n  #upl-tg-unipile-connect .tux-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-unipile-connect h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-unipile-connect\">\n<div class=\"tux-wrap\">\n    <span id=\"tg-unipile-connect\" class=\"tux-anchor\"><\/span><\/p>\n<div class=\"tux-badge\"><span class=\"tux-dot\"><\/span><span>The Unipile approach<\/span><\/div>\n<h2>The third way: connect an existing Telegram account<\/h2>\n<div class=\"tux-intro\">Neither the Bot API nor a self-built MTProto client. Unipile's Telegram API connects an <strong>existing Telegram user account<\/strong>, through Telegram's own <strong>Devices<\/strong> feature, the same mechanism that lets you use Telegram on a new phone or a desktop app.<\/div>\n<div class=\"tux-grid\">\n<div>\n<div class=\"tux-para\">Login happens through a <strong>QR code scan<\/strong>, or through <strong>Hosted Auth<\/strong> with <code>providers: \"TELEGRAM\"<\/code> if you want a white-labelled connection flow inside your own product. Once connected, the account behaves as itself: it is not a bot, and it did not need an api_id or an api_hash issued from my.telegram.org.<\/div>\n<div class=\"tux-para\">This matters because it removes the two hardest parts of building on the Telegram API yourself: implementing MTProto, and managing sessions and reconnections when a device gets removed. If the Unipile device is removed from the account's Telegram sessions, Unipile detects it and the account status simply moves to <code>disconnected<\/code>, ready to be reconnected.<\/div>\n<div class=\"tux-checklist\">\n<div class=\"tux-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Send and receive direct messages as the real account<\/span><\/div>\n<div class=\"tux-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Manage group participants: get, add, remove<\/span><\/div>\n<div class=\"tux-check tux-check-no\"><svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><span>No channels, communities or broadcasts<\/span><\/div>\n<div class=\"tux-check tux-check-no\"><svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><span>No group administration (approve, promote, revoke), no voice or video calls<\/span><\/div>\n<\/p><\/div>\n<div class=\"tux-links-row\">\n          <a class=\"tux-link-chip\" href=\"\/telegram-api-send-message-a-comprehensive-guide\/\"><svg viewBox=\"0 0 24 24\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"\/><polygon points=\"22 2 15 22 11 13 2 9 22 2\"\/><\/svg><span>How to send a Telegram message with the API<\/span><\/a><br \/>\n          <a class=\"tux-link-chip\" href=\"\/communication-api\/messaging-api\/telegram-api\/\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"\/><\/svg><span>Unipile Telegram API product page<\/span><\/a>\n        <\/div>\n<p>        <a class=\"tux-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Start building with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n      <\/div>\n<div>\n<div class=\"tux-mockup\">\n<div class=\"tux-mockup-bar\">\n            <span class=\"tux-mockup-dot\"><\/span><span class=\"tux-mockup-dot\"><\/span><span class=\"tux-mockup-dot\"><\/span><br \/>\n            <span class=\"tux-mockup-title\">Linked account<\/span>\n          <\/div>\n<div class=\"tux-mockup-body\">\n<div class=\"tux-mockup-row\"><span class=\"tux-mockup-label\">Provider<\/span><span class=\"tux-mockup-val\">TELEGRAM<\/span><\/div>\n<div class=\"tux-mockup-row\"><span class=\"tux-mockup-label\">Auth method<\/span><span class=\"tux-mockup-val\">QR code \/ Hosted Auth<\/span><\/div>\n<div class=\"tux-mockup-row\"><span class=\"tux-mockup-label\">Status<\/span><span class=\"tux-status-pill\"><span class=\"tux-status-dot\"><\/span><span>connected<\/span><\/span><\/div>\n<div class=\"tux-mockup-row\"><span class=\"tux-mockup-label\">Device removed from Telegram<\/span><span class=\"tux-status-pill tux-status-off\"><span>disconnected<\/span><\/span><\/div>\n<div class=\"tux-mockup-row\"><span class=\"tux-mockup-label\">Resync supported<\/span><span class=\"tux-mockup-val\">Yes<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-unipile-connect');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 7 : #upl-tg-use-cases, prefix tuc-\n  CRM and ATS use cases for the Telegram API (via Unipile linked accounts).\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-use-cases,\n#upl-tg-use-cases *,\n#upl-tg-use-cases *::before,\n#upl-tg-use-cases *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-use-cases { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-use-cases br { display: none !important; }\n#upl-tg-use-cases p { display: contents !important; }\n#upl-tg-use-cases .tuc-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-use-cases .tuc-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-use-cases .tuc-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(59, 185, 139, 0.12) !important; color: #2aaa7e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-use-cases .tuc-badge .tuc-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-use-cases h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-use-cases .tuc-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tg-use-cases .tuc-grid { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 24px !important; }\n#upl-tg-use-cases .tuc-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; padding: 28px !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; }\n#upl-tg-use-cases .tuc-icon { width: 48px !important; height: 48px !important; border-radius: 12px !important; background: rgba(59,185,139,0.12) !important; display: flex !important; align-items: center !important; justify-content: center !important; margin-bottom: 18px !important; }\n#upl-tg-use-cases .tuc-icon svg { width: 24px !important; height: 24px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tg-use-cases .tuc-card h3 { font-family: 'Poppins', sans-serif !important; font-size: 19px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 10px !important; display: block !important; }\n#upl-tg-use-cases .tuc-card-text { font-size: 14.5px !important; color: #64748b !important; line-height: 1.75 !important; margin-bottom: 16px !important; display: block !important; }\n#upl-tg-use-cases .tuc-tags { display: flex !important; gap: 8px !important; flex-wrap: wrap !important; }\n#upl-tg-use-cases .tuc-tag { background: #f4f5f7 !important; color: #0f2736 !important; padding: 5px 11px !important; border-radius: 6px !important; font-size: 12px !important; font-weight: 600 !important; }<\/p>\n<p>#upl-tg-use-cases .tuc-cta-row { margin-top: 28px !important; display: flex !important; justify-content: center !important; }\n#upl-tg-use-cases .tuc-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 28px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-use-cases .tuc-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-use-cases .tuc-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-use-cases .tuc-wrap { padding: 50px 20px !important; }\n  #upl-tg-use-cases h2 { font-size: 28px !important; }\n  #upl-tg-use-cases .tuc-grid { grid-template-columns: 1fr !important; gap: 16px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-use-cases .tuc-wrap { padding: 40px 16px !important; }\n  #upl-tg-use-cases h2 { font-size: 26px !important; }\n  #upl-tg-use-cases .tuc-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-use-cases h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-use-cases\">\n<div class=\"tuc-wrap\">\n    <span id=\"tg-use-cases\" class=\"tuc-anchor\"><\/span><\/p>\n<div class=\"tuc-badge\"><span class=\"tuc-dot\"><\/span><span>Use cases<\/span><\/div>\n<h2>CRM and ATS use cases for the Telegram API<\/h2>\n<div class=\"tuc-intro\">Once a Telegram account is connected as a real linked account, not a bot, two use cases show up repeatedly across Unipile customers: sales teams centralizing conversations, and recruiters reaching candidates where they already are.<\/div>\n<div class=\"tuc-grid\">\n<div class=\"tuc-card\">\n<div class=\"tuc-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg><\/div>\n<h3>CRM: unify Telegram conversations<\/h3>\n<div class=\"tuc-card-text\">Sales and support teams that already talk to leads and customers on Telegram do not want a separate app for it. By connecting the account through Unipile, every Telegram thread lands in the same inbox as email, LinkedIn or WhatsApp conversations, attached to the right contact record in the CRM.<\/div>\n<div class=\"tuc-tags\"><span class=\"tuc-tag\">Unified inbox<\/span><span class=\"tuc-tag\">Linked accounts<\/span><span class=\"tuc-tag\">Contact sync<\/span><\/div>\n<\/p><\/div>\n<div class=\"tuc-card\">\n<div class=\"tuc-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><line x1=\"19\" y1=\"8\" x2=\"19\" y2=\"14\"\/><line x1=\"22\" y1=\"11\" x2=\"16\" y2=\"11\"\/><\/svg><\/div>\n<h3>ATS: reach candidates on Telegram<\/h3>\n<div class=\"tuc-card-text\">In regions where Telegram is a primary messaging channel, recruiters connect their own Telegram account to reach candidates directly from the ATS, keep the full message history against the candidate profile, and hand off conversations between recruiters without losing context.<\/div>\n<div class=\"tuc-tags\"><span class=\"tuc-tag\">Candidate outreach<\/span><span class=\"tuc-tag\">Message history<\/span><span class=\"tuc-tag\">Team handoff<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-use-cases');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 8 (NEW) : #upl-tg-qr-login, prefix tql-\n  QR code login flow, the Devices mechanism (auth.exportLoginToken \/ auth.importLoginToken).\n  Source: core.telegram.org\/api\/qr-login, consulted August 11, 2026.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-qr-login,\n#upl-tg-qr-login *,\n#upl-tg-qr-login *::before,\n#upl-tg-qr-login *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-qr-login { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-qr-login br { display: none !important; }\n#upl-tg-qr-login p { display: contents !important; }\n#upl-tg-qr-login .tql-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-qr-login .tql-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-qr-login .tql-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-qr-login .tql-badge .tql-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-qr-login h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-qr-login .tql-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }\n#upl-tg-qr-login .tql-intro code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 14.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-qr-login .tql-grid { display: grid !important; grid-template-columns: 1.1fr 0.9fr !important; gap: 40px !important; align-items: start !important; }<\/p>\n<p>#upl-tg-qr-login .tql-steps { display: flex !important; flex-direction: column !important; gap: 14px !important; }\n#upl-tg-qr-login .tql-step { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px 20px !important; display: flex !important; gap: 14px !important; align-items: flex-start !important; }\n#upl-tg-qr-login .tql-num { width: 30px !important; height: 30px !important; min-width: 30px !important; border-radius: 8px !important; background: rgba(221,223,76,0.18) !important; color: #8a8c2e !important; display: flex !important; align-items: center !important; justify-content: center !important; font-family: 'Poppins', sans-serif !important; font-size: 12.5px !important; font-weight: 700 !important; }\n#upl-tg-qr-login .tql-step-title { font-family: 'Poppins', sans-serif !important; font-size: 15px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 4px !important; display: block !important; }\n#upl-tg-qr-login .tql-step-desc { font-size: 14px !important; color: #64748b !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-qr-login .tql-step-desc code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-qr-login .tql-code-wrapper { border-radius: 14px !important; overflow: hidden !important; background: #0d1117 !important; margin-bottom: 18px !important; }\n#upl-tg-qr-login .tql-editor-bar { background: #161b22 !important; padding: 12px 18px !important; display: flex !important; align-items: center !important; gap: 8px !important; border-bottom: 1px solid rgba(255,255,255,0.06) !important; }\n#upl-tg-qr-login .tql-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tg-qr-login .tql-dot-r { background: #ff5f57 !important; }\n#upl-tg-qr-login .tql-dot-y { background: #febc2e !important; }\n#upl-tg-qr-login .tql-dot-g { background: #28c840 !important; }\n#upl-tg-qr-login .tql-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tg-qr-login .tql-pre { padding: 18px 20px !important; font-size: 12.5px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tg-qr-login .tql-pre code { font-family: 'Courier New', monospace !important; white-space: pre !important; display: block !important; }\n#upl-tg-qr-login .tql-c { color: #8b949e !important; }\n#upl-tg-qr-login .tql-w { color: #e6edf3 !important; }\n#upl-tg-qr-login .tql-s { color: #a5d6ff !important; }\n#upl-tg-qr-login .tql-fn { color: #d2a8ff !important; }<\/p>\n<p>#upl-tg-qr-login .tql-warn { background: #0f2736 !important; border-radius: 14px !important; border-left: 4px solid #3BB98B !important; padding: 20px 22px !important; display: flex !important; gap: 12px !important; margin-bottom: 20px !important; }\n#upl-tg-qr-login .tql-warn svg { width: 20px !important; height: 20px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-qr-login .tql-warn-title { color: #3BB98B !important; font-size: 11.5px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 6px !important; display: block !important; }\n#upl-tg-qr-login .tql-warn-text { color: rgba(255,255,255,0.85) !important; font-size: 13.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-qr-login .tql-warn-text strong { color: #ffffff !important; font-weight: 700 !important; }\n#upl-tg-qr-login .tql-warn-text code { font-family: 'Courier New', monospace !important; background: rgba(255,255,255,0.1) !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12px !important; color: #ffffff !important; }<\/p>\n<p>#upl-tg-qr-login .tql-errors { display: flex !important; flex-wrap: wrap !important; gap: 8px !important; margin-bottom: 22px !important; }\n#upl-tg-qr-login .tql-error-pill { background: #f4f5f7 !important; color: #0f2736 !important; padding: 5px 11px !important; border-radius: 6px !important; font-size: 12px !important; font-weight: 600 !important; font-family: 'Courier New', monospace !important; }<\/p>\n<p>#upl-tg-qr-login .tql-outro { font-size: 15.5px !important; color: #383838 !important; line-height: 1.8 !important; margin-bottom: 22px !important; display: block !important; }\n#upl-tg-qr-login .tql-outro strong { color: #0f2736 !important; font-weight: 700 !important; }<\/p>\n<p>#upl-tg-qr-login .tql-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 28px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-qr-login .tql-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-qr-login .tql-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-qr-login .tql-wrap { padding: 50px 20px !important; }\n  #upl-tg-qr-login h2 { font-size: 28px !important; }\n  #upl-tg-qr-login .tql-grid { grid-template-columns: 1fr !important; gap: 28px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-qr-login .tql-wrap { padding: 40px 16px !important; }\n  #upl-tg-qr-login h2 { font-size: 26px !important; }\n  #upl-tg-qr-login .tql-step { padding: 14px !important; gap: 10px !important; }\n  #upl-tg-qr-login .tql-pre { font-size: 11px !important; padding: 16px !important; }\n  #upl-tg-qr-login .tql-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-qr-login h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-qr-login\">\n<div class=\"tql-wrap\">\n    <span id=\"tg-qr-login\" class=\"tql-anchor\"><\/span><\/p>\n<div class=\"tql-badge\"><span class=\"tql-dot\"><\/span><span>Client API \/ MTProto<\/span><\/div>\n<h2>Log in with a QR code: the Devices flow, step by step<\/h2>\n<div class=\"tql-intro\">QR code login is the mechanism behind Telegram's <strong>Devices<\/strong> feature, the same one you use to add Telegram Desktop or Telegram Web to your account. It is also the flow Unipile operates on your behalf when it connects an existing Telegram user account. If you build it yourself, you are implementing a two-sided handshake between the device that already trusts the account and the device asking to join it, not a single request\/response call. Here is exactly what happens between the two apps, method by method.<\/div>\n<div class=\"tql-grid\">\n<div>\n<div class=\"tql-steps\">\n<div class=\"tql-step\">\n<div class=\"tql-num\">1<\/div>\n<div>\n              <span class=\"tql-step-title\">Request a login token<\/span><br \/>\n              <span class=\"tql-step-desc\">The device that wants to log in calls <code>auth.exportLoginToken<\/code>. Telegram answers with an <code>auth.loginToken<\/code>: a binary token plus an expiration, generally <strong>30 seconds<\/strong>.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tql-step\">\n<div class=\"tql-num\">2<\/div>\n<div>\n              <span class=\"tql-step-title\">Encode it into a QR code<\/span><br \/>\n              <span class=\"tql-step-desc\">The token is encoded in <strong>base64url<\/strong> and placed inside a <code>tg:\/\/login?token=&lt;base64url&gt;<\/code> URL. That URL is what gets rendered on screen as a scannable QR code.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tql-step\">\n<div class=\"tql-num\">3<\/div>\n<div>\n              <span class=\"tql-step-title\">Scan from an already logged-in app<\/span><br \/>\n              <span class=\"tql-step-desc\">The Telegram app that is already authenticated scans the code and calls <code>auth.acceptLoginToken<\/code> with the decoded token.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tql-step\">\n<div class=\"tql-num\">4<\/div>\n<div>\n              <span class=\"tql-step-title\">Poll for the outcome<\/span><br \/>\n              <span class=\"tql-step-desc\">The device that is logging in receives an <code>updateLoginToken<\/code> update, then calls <code>auth.exportLoginToken<\/code> again to fetch the result of the scan.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tql-step\">\n<div class=\"tql-num\">5<\/div>\n<div>\n              <span class=\"tql-step-title\">Confirm, or migrate data center<\/span><br \/>\n              <span class=\"tql-step-desc\">If the data center matches, Telegram returns <code>auth.loginTokenSuccess<\/code>, the login is done. If it does not match, the response is <code>auth.loginTokenMigrateTo<\/code>, and the client must call <code>auth.importLoginToken<\/code> with the same token against the indicated data center.<\/span>\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div>\n<div class=\"tql-code-wrapper\">\n<div class=\"tql-editor-bar\">\n            <span class=\"tql-dot2 tql-dot-r\"><\/span><span class=\"tql-dot2 tql-dot-y\"><\/span><span class=\"tql-dot2 tql-dot-g\"><\/span><br \/>\n            <span class=\"tql-filename\">qr-login-flow<\/span>\n          <\/div>\n<div class=\"tql-pre\"><code><span class=\"tql-c\">\/\/ Device requesting the login<\/span>&#10;<span class=\"tql-fn\">auth.exportLoginToken<\/span><span class=\"tql-w\">(api_id, api_hash)<\/span>&#10;<span class=\"tql-c\">\/\/ -&gt; auth.loginToken { token, expires }<\/span>&#10;&#10;<span class=\"tql-c\">\/\/ Rendered as a QR code<\/span>&#10;<span class=\"tql-w\">tg:\/\/login?token=<\/span><span class=\"tql-s\">&lt;base64url(token)&gt;<\/span>&#10;&#10;<span class=\"tql-c\">\/\/ Already-authenticated device scans it<\/span>&#10;<span class=\"tql-fn\">auth.acceptLoginToken<\/span><span class=\"tql-w\">(token)<\/span>&#10;&#10;<span class=\"tql-c\">\/\/ Logging-in device polls again<\/span>&#10;<span class=\"tql-fn\">auth.exportLoginToken<\/span><span class=\"tql-w\">()<\/span>&#10;<span class=\"tql-c\">\/\/ -&gt; auth.loginTokenSuccess<\/span>&#10;<span class=\"tql-c\">\/\/ or auth.loginTokenMigrateTo { dc_id }<\/span><\/code><\/div>\n<\/p><\/div>\n<div class=\"tql-warn\">\n          <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg><\/p>\n<div>\n            <span class=\"tql-warn-title\">Short window, plan the retry<\/span><br \/>\n            <span class=\"tql-warn-text\">The token is generally valid for only <strong>30 seconds<\/strong>. If it expires before it is scanned, the client needs to call <code>auth.exportLoginToken<\/code> again and render a new code, not just retry the old one.<\/span>\n          <\/div>\n<\/p><\/div>\n<div class=\"tql-errors\">\n          <span class=\"tql-error-pill\">AUTH_TOKEN_INVALID<\/span><br \/>\n          <span class=\"tql-error-pill\">AUTH_TOKEN_EXPIRED<\/span><br \/>\n          <span class=\"tql-error-pill\">AUTH_TOKEN_ALREADY_ACCEPTED<\/span>\n        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tql-outro\">This is precisely the exchange Unipile runs on your behalf when you connect a Telegram account through its <strong>Devices<\/strong> integration: the QR code, the token exchange, the data center handling, and the retry when a token expires. You call one endpoint, Unipile operates the MTProto conversation described above, including the case where the account being connected lives on a different data center than the one your app first talked to. That data center handling is easy to miss when you build the flow from scratch, because it only shows up for a subset of accounts, and it silently breaks logins for the ones it affects if the <code>auth.loginTokenMigrateTo<\/code> branch is not handled.<\/div>\n<p>    <a class=\"tql-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build your QR login flow with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n  <\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-qr-login');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 9 (NEW) : #upl-tg-phone-2fa, prefix tp2-\n  Phone number sign-in, SESSION_PASSWORD_NEEDED wall, SRP finish.\n  Source: core.telegram.org\/api\/auth, consulted August 11, 2026.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-phone-2fa,\n#upl-tg-phone-2fa *,\n#upl-tg-phone-2fa *::before,\n#upl-tg-phone-2fa *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-phone-2fa { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-phone-2fa br { display: none !important; }\n#upl-tg-phone-2fa p { display: contents !important; }\n#upl-tg-phone-2fa .tp2-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-phone-2fa .tp2-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-phone-2fa .tp2-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-phone-2fa .tp2-badge .tp2-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-phone-2fa h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-phone-2fa .tp2-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-intro code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 14.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-phone-2fa .tp2-grid { display: grid !important; grid-template-columns: 1.1fr 0.9fr !important; gap: 40px !important; align-items: start !important; }<\/p>\n<p>#upl-tg-phone-2fa .tp2-steps { display: flex !important; flex-direction: column !important; gap: 14px !important; }\n#upl-tg-phone-2fa .tp2-step { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px 20px !important; display: flex !important; gap: 14px !important; align-items: flex-start !important; }\n#upl-tg-phone-2fa .tp2-step.tp2-step-wall { border-color: #DDDF4C !important; background: rgba(221,223,76,0.06) !important; }\n#upl-tg-phone-2fa .tp2-num { width: 30px !important; height: 30px !important; min-width: 30px !important; border-radius: 8px !important; background: rgba(221,223,76,0.18) !important; color: #8a8c2e !important; display: flex !important; align-items: center !important; justify-content: center !important; font-family: 'Poppins', sans-serif !important; font-size: 12.5px !important; font-weight: 700 !important; }\n#upl-tg-phone-2fa .tp2-step-title { font-family: 'Poppins', sans-serif !important; font-size: 15px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 4px !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-step-desc { font-size: 14px !important; color: #64748b !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-step-desc code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-phone-2fa .tp2-warn { background: #0f2736 !important; border-radius: 14px !important; border-left: 4px solid #3BB98B !important; padding: 22px 24px !important; display: flex !important; gap: 14px !important; margin-bottom: 20px !important; }\n#upl-tg-phone-2fa .tp2-warn svg { width: 22px !important; height: 22px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-phone-2fa .tp2-warn-title { color: #3BB98B !important; font-size: 12px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 6px !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-warn-text { color: rgba(255,255,255,0.85) !important; font-size: 14px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-warn-text strong { color: #ffffff !important; font-weight: 700 !important; }\n#upl-tg-phone-2fa .tp2-warn-text a { color: #3BB98B !important; text-decoration: underline !important; }<\/p>\n<p>#upl-tg-phone-2fa .tp2-errors-title { font-size: 12px !important; font-weight: 700 !important; color: #0f2736 !important; text-transform: uppercase !important; letter-spacing: 0.4px !important; margin-bottom: 10px !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-errors { display: flex !important; flex-wrap: wrap !important; gap: 8px !important; margin-bottom: 24px !important; }\n#upl-tg-phone-2fa .tp2-error-pill { background: #f4f5f7 !important; color: #0f2736 !important; padding: 5px 11px !important; border-radius: 6px !important; font-size: 11.5px !important; font-weight: 600 !important; font-family: 'Courier New', monospace !important; }<\/p>\n<p>#upl-tg-phone-2fa .tp2-outro { font-size: 15.5px !important; color: #383838 !important; line-height: 1.8 !important; display: block !important; }\n#upl-tg-phone-2fa .tp2-outro strong { color: #0f2736 !important; font-weight: 700 !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-phone-2fa .tp2-wrap { padding: 50px 20px !important; }\n  #upl-tg-phone-2fa h2 { font-size: 28px !important; }\n  #upl-tg-phone-2fa .tp2-grid { grid-template-columns: 1fr !important; gap: 28px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-phone-2fa .tp2-wrap { padding: 40px 16px !important; }\n  #upl-tg-phone-2fa h2 { font-size: 26px !important; }\n  #upl-tg-phone-2fa .tp2-step { padding: 14px !important; gap: 10px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-phone-2fa h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-phone-2fa\">\n<div class=\"tp2-wrap\">\n    <span id=\"tg-phone-2fa\" class=\"tp2-anchor\"><\/span><\/p>\n<div class=\"tp2-badge\"><span class=\"tp2-dot\"><\/span><span>Client API \/ MTProto<\/span><\/div>\n<h2>Log in by phone number, and the 2FA wall<\/h2>\n<div class=\"tp2-intro\">The classic phone-number sign-in is where most home-built Telegram clients get stuck. Not because it is complex, but because the flow silently branches the moment two-factor authentication is turned on, and the branch is not optional. A client that only implements the happy path (send code, validate code, done) works fine against a test account and then fails in production the first time it meets a real user with a cloud password enabled.<\/div>\n<div class=\"tp2-grid\">\n<div>\n<div class=\"tp2-steps\">\n<div class=\"tp2-step\">\n<div class=\"tp2-num\">1<\/div>\n<div>\n              <span class=\"tp2-step-title\">Send the login code<\/span><br \/>\n              <span class=\"tp2-step-desc\"><code>auth.sendCode<\/code> sends the code to the phone number and returns an <code>auth.sentCode<\/code> object containing a <code>phone_code_hash<\/code>, required for the next call.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tp2-step\">\n<div class=\"tp2-num\">2<\/div>\n<div>\n              <span class=\"tp2-step-title\">Validate the code<\/span><br \/>\n              <span class=\"tp2-step-desc\"><code>auth.signIn<\/code> checks the code against the <code>phone_code_hash<\/code>. If the phone number has no account yet, Telegram returns <code>auth.authorizationSignUpRequired<\/code> instead of an authorization.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tp2-step tp2-step-wall\">\n<div class=\"tp2-num\">3<\/div>\n<div>\n              <span class=\"tp2-step-title\">Hit the 2FA wall<\/span><br \/>\n              <span class=\"tp2-step-desc\">If two-factor authentication is enabled on the account, <code>auth.signIn<\/code> answers with a <strong>400 error: SESSION_PASSWORD_NEEDED<\/strong>. This is the expected response for any account with a cloud password, not a failure to handle as an exception.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tp2-step\">\n<div class=\"tp2-num\">4<\/div>\n<div>\n              <span class=\"tp2-step-title\">Clear it with SRP<\/span><br \/>\n              <span class=\"tp2-step-desc\">Finishing the login means running the SRP protocol: build an <code>InputCheckPasswordSRP<\/code> object from the account's password parameters, then call <code>auth.checkPassword<\/code>. Success returns an <code>auth.authorization<\/code>; a wrong password returns <code>PASSWORD_HASH_INVALID<\/code>.<\/span>\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div>\n<div class=\"tp2-warn\">\n          <svg viewBox=\"0 0 24 24\"><path d=\"M13.73 21a2 2 0 0 1-3.46 0\"\/><path d=\"M18.63 13A17.89 17.89 0 0 1 18 8\"\/><path d=\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\"\/><path d=\"M18 8a6 6 0 0 0-9.33-5\"\/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"\/><\/svg><\/p>\n<div>\n            <span class=\"tp2-warn-title\">Only official apps get Firebase SMS<\/span><br \/>\n            <span class=\"tp2-warn-text\">Only Telegram's own official mobile applications are allowed to use <strong>Firebase-based SMS code delivery<\/strong>. Third-party applications have to route the code through another delivery channel, or write to <a href=\"mailto:sms@telegram.org\">sms@telegram.org<\/a> to discuss access.<\/span>\n          <\/div>\n<\/p><\/div>\n<p>        <span class=\"tp2-errors-title\">Errors to expect on this path<\/span><\/p>\n<div class=\"tp2-errors\">\n          <span class=\"tp2-error-pill\">SESSION_PASSWORD_NEEDED<\/span><br \/>\n          <span class=\"tp2-error-pill\">PASSWORD_HASH_INVALID<\/span><br \/>\n          <span class=\"tp2-error-pill\">auth.authorizationSignUpRequired<\/span>\n        <\/div>\n<div class=\"tp2-outro\">Unipile's Telegram integration runs this entire branch for you: code delivery, the <strong>SESSION_PASSWORD_NEEDED<\/strong> check, and the SRP exchange when a cloud password is set, whether the account connects through a phone number, a QR code, or <strong>Hosted Auth<\/strong>. That includes the SMS delivery restriction above: because third-party applications cannot lean on Firebase-based delivery, this is one of the places where owning the phone-number flow yourself adds real operational weight, not just code, before you have sent a single message.<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 10 (NEW) : #upl-tg-rate-limits, prefix trl-\n  Sending limits in numbers. Bot API documented ceilings + paid broadcasts + cross-link to section 5 (account-side guidance).\n  Source: core.telegram.org\/bots\/faq, consulted August 11, 2026.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-rate-limits,\n#upl-tg-rate-limits *,\n#upl-tg-rate-limits *::before,\n#upl-tg-rate-limits *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-rate-limits { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-rate-limits br { display: none !important; }\n#upl-tg-rate-limits p { display: contents !important; }\n#upl-tg-rate-limits .trl-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-rate-limits .trl-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-rate-limits .trl-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-rate-limits .trl-badge .trl-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-rate-limits h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-rate-limits .trl-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 32px !important; display: block !important; }<\/p>\n<p>#upl-tg-rate-limits .trl-stats { display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: 16px !important; margin-bottom: 28px !important; }\n#upl-tg-rate-limits .trl-stat { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 20px 18px !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; }\n#upl-tg-rate-limits .trl-stat-num { font-family: 'Poppins', sans-serif !important; font-size: 24px !important; font-weight: 800 !important; color: #0f2736 !important; margin-bottom: 6px !important; display: block !important; }\n#upl-tg-rate-limits .trl-stat-label { font-size: 12.5px !important; color: #64748b !important; line-height: 1.5 !important; display: block !important; }\n#upl-tg-rate-limits .trl-stat.trl-stat-warn .trl-stat-num { color: #b45309 !important; }<\/p>\n<p>#upl-tg-rate-limits .trl-broadcast { background: #0f2736 !important; border-radius: 16px !important; padding: 26px 28px !important; margin-bottom: 22px !important; }\n#upl-tg-rate-limits .trl-broadcast-title { font-family: 'Poppins', sans-serif !important; font-size: 16.5px !important; font-weight: 700 !important; color: #ffffff !important; margin-bottom: 10px !important; display: block !important; }\n#upl-tg-rate-limits .trl-broadcast-text { font-size: 14px !important; color: rgba(255,255,255,0.75) !important; line-height: 1.75 !important; margin-bottom: 18px !important; display: block !important; }\n#upl-tg-rate-limits .trl-broadcast-text strong { color: #ffffff !important; font-weight: 700 !important; }\n#upl-tg-rate-limits .trl-cond-row { display: flex !important; gap: 12px !important; flex-wrap: wrap !important; }\n#upl-tg-rate-limits .trl-cond { display: inline-flex !important; align-items: center !important; gap: 8px !important; background: rgba(255,255,255,0.08) !important; color: #ffffff !important; padding: 8px 14px !important; border-radius: 8px !important; font-size: 13px !important; font-weight: 600 !important; }\n#upl-tg-rate-limits .trl-cond svg { width: 14px !important; height: 14px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; }<\/p>\n<p>#upl-tg-rate-limits .trl-para { font-size: 15.5px !important; color: #383838 !important; line-height: 1.8 !important; margin-bottom: 20px !important; display: block !important; }\n#upl-tg-rate-limits .trl-para strong { color: #0f2736 !important; font-weight: 700 !important; }\n#upl-tg-rate-limits .trl-para a { color: #2aaa7e !important; text-decoration: underline !important; font-weight: 600 !important; }\n#upl-tg-rate-limits .trl-para code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 13.5px !important; color: #0f2736 !important; }\n#upl-tg-rate-limits .trl-crosslink { display: flex !important; align-items: center !important; gap: 12px !important; background: #f4f5f7 !important; border-radius: 12px !important; padding: 16px 20px !important; }\n#upl-tg-rate-limits .trl-crosslink svg { width: 18px !important; height: 18px !important; stroke: #2aaa7e !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; }\n#upl-tg-rate-limits .trl-crosslink span { font-size: 13.5px !important; color: #383838 !important; line-height: 1.6 !important; }\n#upl-tg-rate-limits .trl-crosslink a { color: #2aaa7e !important; text-decoration: underline !important; font-weight: 600 !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-rate-limits .trl-wrap { padding: 50px 20px !important; }\n  #upl-tg-rate-limits h2 { font-size: 28px !important; }\n  #upl-tg-rate-limits .trl-stats { grid-template-columns: repeat(2, 1fr) !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-rate-limits .trl-wrap { padding: 40px 16px !important; }\n  #upl-tg-rate-limits h2 { font-size: 26px !important; }\n  #upl-tg-rate-limits .trl-stats { grid-template-columns: 1fr 1fr !important; gap: 12px !important; }\n  #upl-tg-rate-limits .trl-broadcast { padding: 20px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-rate-limits h2 { font-size: 24px !important; }\n  #upl-tg-rate-limits .trl-stats { grid-template-columns: 1fr !important; }\n}\n<\/style>\n<div id=\"upl-tg-rate-limits\">\n<div class=\"trl-wrap\">\n    <span id=\"tg-rate-limits\" class=\"trl-anchor\"><\/span><\/p>\n<div class=\"trl-badge\"><span class=\"trl-dot\"><\/span><span>Sending limits<\/span><\/div>\n<h2>Telegram API rate limits, in numbers<\/h2>\n<div class=\"trl-intro\">Section 5 covered the behavior that gets accounts banned. Here are the actual documented ceilings on the Bot API side, and what it costs to raise them.<\/div>\n<div class=\"trl-stats\">\n<div class=\"trl-stat\">\n        <span class=\"trl-stat-num\">1\/sec<\/span><br \/>\n        <span class=\"trl-stat-label\">Maximum messages to the same individual chat<\/span>\n      <\/div>\n<div class=\"trl-stat\">\n        <span class=\"trl-stat-num\">20\/min<\/span><br \/>\n        <span class=\"trl-stat-label\">Maximum messages inside a single group<\/span>\n      <\/div>\n<div class=\"trl-stat\">\n        <span class=\"trl-stat-num\">~30\/sec<\/span><br \/>\n        <span class=\"trl-stat-label\">Approximate ceiling for broadcasting across different chats<\/span>\n      <\/div>\n<div class=\"trl-stat trl-stat-warn\">\n        <span class=\"trl-stat-num\">429<\/span><br \/>\n        <span class=\"trl-stat-label\">Error returned once any of these limits is crossed<\/span>\n      <\/div>\n<\/p><\/div>\n<div class=\"trl-broadcast\">\n      <span class=\"trl-broadcast-title\">Paid broadcasts raise the ceiling, with two conditions<\/span><\/p>\n<div class=\"trl-broadcast-text\">Bots can enable <strong>paid broadcasts<\/strong> through BotFather, which raises the sending ceiling up to <strong>1,000 messages per second<\/strong>. Messages sent above the free threshold cost <strong>0.1 Telegram Star<\/strong> each. It is gated behind two account-level requirements, both need to be met at the same time.<\/div>\n<div class=\"trl-cond-row\">\n        <span class=\"trl-cond\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>100,000 Stars balance<\/span><\/span><br \/>\n        <span class=\"trl-cond\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>100,000 monthly active users<\/span><\/span>\n      <\/div>\n<\/p><\/div>\n<div class=\"trl-para\">Cross the individual, group or broadcast ceiling above and the Bot API answers with the <strong>429<\/strong> status covered in the <a href=\"#tg-error-table\">error reference<\/a> below, alongside the <code>420 FLOOD<\/code> and <code>FLOOD_WAIT_X<\/code> codes used on the MTProto side. Both mechanisms exist for the same reason: to make you slow down before Telegram decides to slow you down for you.<\/div>\n<div class=\"trl-crosslink\">\n      <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg><br \/>\n      <span>These numbers are Bot API specific. For a connected <strong>user account<\/strong>, there is no published ceiling, only Unipile's own pacing guidance covered in <a href=\"#tg-free-limits\">it's free, here's where it breaks<\/a>: warm up new accounts, ramp up progressively, keep at least 10 to 20 seconds between messages.<\/span>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 11 (NEW) : #upl-tg-error-table, prefix tet-\n  MTProto error codes reference table + API_ID_PUBLISHED_FLOOD.\n  Sources: core.telegram.org\/api\/errors and core.telegram.org\/api\/obtaining_api_id, consulted August 11, 2026.\n  Table on desktop, stacked cards on mobile (<768px), same pattern as the comparison table section.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-error-table,\n#upl-tg-error-table *,\n#upl-tg-error-table *::before,\n#upl-tg-error-table *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-error-table { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-error-table br { display: none !important; }\n#upl-tg-error-table p { display: contents !important; }\n#upl-tg-error-table .tet-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-error-table .tet-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-error-table .tet-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(221, 223, 76, 0.18) !important; color: #8a8c2e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-error-table .tet-badge .tet-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-error-table h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-error-table .tet-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 32px !important; display: block !important; }\n#upl-tg-error-table .tet-intro code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 14.5px !important; color: #0f2736 !important; }<\/p>\n<p>\/* Desktop table *\/\n#upl-tg-error-table .tet-table-wrap { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; overflow: hidden !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; display: block !important; }\n#upl-tg-error-table table { width: 100% !important; border-collapse: collapse !important; }\n#upl-tg-error-table thead tr { background: #0f2736 !important; }\n#upl-tg-error-table thead th { color: #ffffff !important; font-family: 'Poppins', sans-serif !important; font-size: 13px !important; font-weight: 700 !important; text-align: left !important; padding: 16px 18px !important; }\n#upl-tg-error-table thead th:first-child { width: 26% !important; }\n#upl-tg-error-table tbody tr { border-top: 1px solid #e5e7eb !important; }\n#upl-tg-error-table tbody tr:nth-child(even) { background: #f8fafc !important; }\n#upl-tg-error-table tbody td { padding: 14px 18px !important; font-size: 13.5px !important; color: #383838 !important; line-height: 1.6 !important; vertical-align: top !important; }\n#upl-tg-error-table tbody td:first-child { font-weight: 700 !important; color: #0f2736 !important; font-family: 'Courier New', monospace !important; font-size: 13px !important; }\n#upl-tg-error-table tbody td code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #0f2736 !important; }<\/p>\n<p>\/* Mobile cards, hidden by default *\/\n#upl-tg-error-table .tet-cards { display: none !important; }\n#upl-tg-error-table .tet-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px !important; margin-bottom: 14px !important; }\n#upl-tg-error-table .tet-card-title { font-family: 'Courier New', monospace !important; font-size: 14px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 10px !important; display: block !important; padding-bottom: 10px !important; border-bottom: 1px solid #e5e7eb !important; }\n#upl-tg-error-table .tet-card-text { font-size: 13.5px !important; color: #383838 !important; line-height: 1.6 !important; display: block !important; }\n#upl-tg-error-table .tet-card-text code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #0f2736 !important; }<\/p>\n<p>#upl-tg-error-table .tet-callout { margin-top: 20px !important; background: #0f2736 !important; border-radius: 14px !important; border-left: 4px solid #3BB98B !important; padding: 20px 22px !important; display: flex !important; gap: 14px !important; }\n#upl-tg-error-table .tet-callout svg { width: 20px !important; height: 20px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-error-table .tet-callout-title { color: #3BB98B !important; font-size: 11.5px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 6px !important; display: block !important; }\n#upl-tg-error-table .tet-callout-text { color: rgba(255,255,255,0.85) !important; font-size: 13.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-error-table .tet-callout-text strong { color: #ffffff !important; font-weight: 700 !important; }\n#upl-tg-error-table .tet-callout-text code { font-family: 'Courier New', monospace !important; background: rgba(255,255,255,0.1) !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12px !important; color: #ffffff !important; }\n#upl-tg-error-table .tet-para { font-size: 15.5px !important; color: #383838 !important; line-height: 1.8 !important; margin-top: 20px !important; display: block !important; }\n#upl-tg-error-table .tet-para strong { color: #0f2736 !important; font-weight: 700 !important; }\n#upl-tg-error-table .tet-para code { font-family: 'Courier New', monospace !important; background: #f4f5f7 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 13.5px !important; color: #0f2736 !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-error-table .tet-wrap { padding: 50px 20px !important; }\n  #upl-tg-error-table h2 { font-size: 28px !important; }\n}\n@media (max-width: 768px) {\n  #upl-tg-error-table .tet-table-wrap { display: none !important; }\n  #upl-tg-error-table .tet-cards { display: block !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-error-table .tet-wrap { padding: 40px 16px !important; }\n  #upl-tg-error-table h2 { font-size: 26px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-error-table h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-error-table\">\n<div class=\"tet-wrap\">\n    <span id=\"tg-error-table\" class=\"tet-anchor\"><\/span><\/p>\n<div class=\"tet-badge\"><span class=\"tet-dot\"><\/span><span>Error reference<\/span><\/div>\n<h2>Telegram API errors you need to know<\/h2>\n<div class=\"tet-intro\">MTProto errors follow the same three-digit shape as the HTTP status codes most developers already recognize, paired with a short machine-readable string. Here is the reference table, plus one error that only shows up for your end users, not for you. Knowing this list before you ship matters more than after: several of these codes, <code>303<\/code> and <code>420<\/code> in particular, are not exceptional failures, they are part of the normal operating conditions of an MTProto client and need to be handled in the code path, not logged and ignored.<\/div>\n<div class=\"tet-table-wrap\">\n<table>\n<thead>\n<tr>\n<th>Code<\/th>\n<th>Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>303 SEE_OTHER<\/td>\n<td>The request must be repeated, targeting a different data center.<\/td>\n<\/tr>\n<tr>\n<td>400 BAD_REQUEST<\/td>\n<td>The query contains errors. <code>API_ID_INVALID<\/code> is a common example of this code.<\/td>\n<\/tr>\n<tr>\n<td>401 UNAUTHORIZED<\/td>\n<td>The method requires a feature that is reserved to authorized users.<\/td>\n<\/tr>\n<tr>\n<td>403 FORBIDDEN<\/td>\n<td>Privacy violation, for example trying to write to a user who has blocked you.<\/td>\n<\/tr>\n<tr>\n<td>404 NOT_FOUND<\/td>\n<td>The requested object or method does not exist.<\/td>\n<\/tr>\n<tr>\n<td>420 FLOOD \/ FLOOD_WAIT_X<\/td>\n<td>The maximum number of allowed calls was exceeded, wait X seconds before retrying.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<div class=\"tet-cards\">\n<div class=\"tet-card\"><span class=\"tet-card-title\">303 SEE_OTHER<\/span><span class=\"tet-card-text\">The request must be repeated, targeting a different data center.<\/span><\/div>\n<div class=\"tet-card\"><span class=\"tet-card-title\">400 BAD_REQUEST<\/span><span class=\"tet-card-text\">The query contains errors. <code>API_ID_INVALID<\/code> is a common example of this code.<\/span><\/div>\n<div class=\"tet-card\"><span class=\"tet-card-title\">401 UNAUTHORIZED<\/span><span class=\"tet-card-text\">The method requires a feature that is reserved to authorized users.<\/span><\/div>\n<div class=\"tet-card\"><span class=\"tet-card-title\">403 FORBIDDEN<\/span><span class=\"tet-card-text\">Privacy violation, for example trying to write to a user who has blocked you.<\/span><\/div>\n<div class=\"tet-card\"><span class=\"tet-card-title\">404 NOT_FOUND<\/span><span class=\"tet-card-text\">The requested object or method does not exist.<\/span><\/div>\n<div class=\"tet-card\"><span class=\"tet-card-title\">420 FLOOD \/ FLOOD_WAIT_X<\/span><span class=\"tet-card-text\">The maximum number of allowed calls was exceeded, wait X seconds before retrying.<\/span><\/div>\n<\/p><\/div>\n<div class=\"tet-callout\">\n      <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg><\/p>\n<div>\n        <span class=\"tet-callout-title\">One more, on the end-user side<\/span><br \/>\n        <span class=\"tet-callout-text\"><code>API_ID_PUBLISHED_FLOOD<\/code> shows up for your end users when a published application reuses the example <code>api_id<\/code> shipped inside open-source sample code instead of requesting its own. Every application you publish needs its own <code>api_id<\/code> and <code>api_hash<\/code> from my.telegram.org.<\/span>\n      <\/div>\n<\/p><\/div>\n<div class=\"tet-para\">A client built directly on the Client API (MTProto) needs to handle every one of these codes itself: retry against the correct data center on <strong>303<\/strong>, back off on <strong>420<\/strong>, and treat <strong>401<\/strong> and <strong>403<\/strong> as signals about account state rather than generic failures. Connecting an existing account through Unipile moves that error handling behind a single linked-account status, instead of a set of MTProto codes your own code needs to interpret correctly on every call.<\/div>\n<\/p><\/div>\n<\/div>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  SECTION 12 (NEW) : #upl-tg-libraries, prefix tlib-\n  Choosing an MTProto library, honest and qualitative, no invented versions\/benchmarks\/popularity data.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-libraries,\n#upl-tg-libraries *,\n#upl-tg-libraries *::before,\n#upl-tg-libraries *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-libraries { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-libraries br { display: none !important; }\n#upl-tg-libraries p { display: contents !important; }\n#upl-tg-libraries .tlib-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tg-libraries .tlib-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tg-libraries .tlib-badge {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: rgba(59, 185, 139, 0.12) !important; color: #2aaa7e !important;\n  padding: 6px 14px !important; border-radius: 20px !important; font-size: 12px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important;\n  width: fit-content !important; margin-bottom: 18px !important;\n}\n#upl-tg-libraries .tlib-badge .tlib-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tg-libraries h2 { font-family: 'Poppins', sans-serif !important; font-size: 35px !important; font-weight: 700 !important; color: #0f2736 !important; line-height: 1.2 !important; margin-bottom: 16px !important; }\n#upl-tg-libraries .tlib-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 32px !important; display: block !important; }<\/p>\n<p>#upl-tg-libraries .tlib-grid { display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: 16px !important; margin-bottom: 28px !important; }\n#upl-tg-libraries .tlib-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 22px 20px !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; }\n#upl-tg-libraries .tlib-card-lang { display: inline-block !important; background: #f4f5f7 !important; color: #64748b !important; padding: 3px 9px !important; border-radius: 5px !important; font-size: 11px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.4px !important; margin-bottom: 12px !important; }\n#upl-tg-libraries .tlib-card h3 { font-family: 'Poppins', sans-serif !important; font-size: 16.5px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 10px !important; display: block !important; }\n#upl-tg-libraries .tlib-card-text { font-size: 13.5px !important; color: #64748b !important; line-height: 1.65 !important; display: block !important; }<\/p>\n<p>#upl-tg-libraries .tlib-para { font-size: 15.5px !important; color: #383838 !important; line-height: 1.8 !important; margin-bottom: 28px !important; display: block !important; }\n#upl-tg-libraries .tlib-para strong { color: #0f2736 !important; font-weight: 700 !important; }\n#upl-tg-libraries .tlib-split { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 24px !important; margin-bottom: 30px !important; }\n#upl-tg-libraries .tlib-col-title { font-family: 'Poppins', sans-serif !important; font-size: 15px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 14px !important; display: block !important; }\n#upl-tg-libraries .tlib-checklist { display: flex !important; flex-direction: column !important; gap: 10px !important; }\n#upl-tg-libraries .tlib-check { display: flex !important; align-items: flex-start !important; gap: 10px !important; font-size: 14px !important; color: #383838 !important; line-height: 1.6 !important; }\n#upl-tg-libraries .tlib-check svg { width: 16px !important; height: 16px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; flex-shrink: 0 !important; margin-top: 2px !important; }\n#upl-tg-libraries .tlib-check-no svg { stroke: #94a3b8 !important; }\n#upl-tg-libraries .tlib-check-no span { color: #64748b !important; }<\/p>\n<p>#upl-tg-libraries .tlib-teaser {\n  background: #0f2736 !important; border-radius: 16px !important; padding: 28px 30px !important;\n  display: flex !important; align-items: center !important; justify-content: space-between !important;\n  gap: 24px !important; flex-wrap: wrap !important;\n}\n#upl-tg-libraries .tlib-teaser-text { flex: 1 1 380px !important; }\n#upl-tg-libraries .tlib-teaser-eyebrow { color: #3BB98B !important; font-size: 12px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tg-libraries .tlib-teaser-title { font-family: 'Poppins', sans-serif !important; font-size: 20px !important; font-weight: 700 !important; color: #ffffff !important; line-height: 1.35 !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tg-libraries .tlib-teaser-desc { color: rgba(255,255,255,0.75) !important; font-size: 14.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tg-libraries .tlib-cta {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 26px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important; flex-shrink: 0 !important;\n}\n#upl-tg-libraries .tlib-cta:hover { transform: translateY(-5px) !important; }\n#upl-tg-libraries .tlib-cta svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-libraries .tlib-wrap { padding: 50px 20px !important; }\n  #upl-tg-libraries h2 { font-size: 28px !important; }\n  #upl-tg-libraries .tlib-grid { grid-template-columns: 1fr 1fr !important; }\n  #upl-tg-libraries .tlib-split { grid-template-columns: 1fr !important; gap: 20px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-libraries .tlib-wrap { padding: 40px 16px !important; }\n  #upl-tg-libraries h2 { font-size: 26px !important; }\n  #upl-tg-libraries .tlib-grid { grid-template-columns: 1fr !important; }\n  #upl-tg-libraries .tlib-teaser { flex-direction: column !important; align-items: flex-start !important; padding: 22px !important; }\n  #upl-tg-libraries .tlib-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-libraries h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tg-libraries\">\n<div class=\"tlib-wrap\">\n    <span id=\"tg-mtproto-libraries\" class=\"tlib-anchor\"><\/span><\/p>\n<div class=\"tlib-badge\"><span class=\"tlib-dot\"><\/span><span>Client API \/ MTProto<\/span><\/div>\n<h2>Choosing an MTProto library, and what it will not do for you<\/h2>\n<div class=\"tlib-intro\">If you decide to build the Client API path yourself, you are not implementing MTProto from a spec sheet. A handful of libraries already speak the protocol, so the client itself is rarely the hard part. Picking one only solves part of the problem, and the part it solves is usually the smaller one.<\/div>\n<div class=\"tlib-grid\">\n<div class=\"tlib-card\">\n        <span class=\"tlib-card-lang\">Python<\/span><\/p>\n<h3>Telethon<\/h3>\n<div class=\"tlib-card-text\">A pure-Python MTProto implementation, built around async\/await, with a client API that reads close to plain Python rather than raw protocol calls.<\/div>\n<\/p><\/div>\n<div class=\"tlib-card\">\n        <span class=\"tlib-card-lang\">Python<\/span><\/p>\n<h3>Pyrogram<\/h3>\n<div class=\"tlib-card-text\">Another Python MTProto client, with its own take on session handling and a client surface designed to feel more like a conventional SDK than a protocol library.<\/div>\n<\/p><\/div>\n<div class=\"tlib-card\">\n        <span class=\"tlib-card-lang\">Node.js<\/span><\/p>\n<h3>GramJS<\/h3>\n<div class=\"tlib-card-text\">The closest equivalent to Telethon for JavaScript and TypeScript codebases, implementing the same MTProto conversation for a Node.js runtime.<\/div>\n<\/p><\/div>\n<div class=\"tlib-card\">\n        <span class=\"tlib-card-lang\">Official<\/span><\/p>\n<h3>TDLib<\/h3>\n<div class=\"tlib-card-text\">Telegram's own official library, written in C++, with bindings exposed for several languages. It implements the full MTProto stack the way Telegram's own apps do.<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tlib-para\">Which one fits usually comes down to the stack you already run rather than a feature comparison: a Python backend points toward <strong>Telethon<\/strong> or <strong>Pyrogram<\/strong>, a Node.js or TypeScript backend points toward <strong>GramJS<\/strong>, and a team that wants to stay as close as possible to Telegram's own official apps points toward <strong>TDLib<\/strong> and its bindings. None of that choice removes the second half of the work below.<\/div>\n<div class=\"tlib-split\">\n<div>\n        <span class=\"tlib-col-title\">What a library gives you<\/span><\/p>\n<div class=\"tlib-checklist\">\n<div class=\"tlib-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>The MTProto encryption layer and the raw method calls<\/span><\/div>\n<div class=\"tlib-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Update handling for incoming events from Telegram's servers<\/span><\/div>\n<div class=\"tlib-check\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>A client-side API to call auth, messaging and account methods<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div>\n        <span class=\"tlib-col-title\">What you still build yourself<\/span><\/p>\n<div class=\"tlib-checklist\">\n<div class=\"tlib-check tlib-check-no\"><svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><span>Persisting sessions reliably across restarts and deployments<\/span><\/div>\n<div class=\"tlib-check tlib-check-no\"><svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><span>Handling the SESSION_PASSWORD_NEEDED and SRP flow end to end for your users<\/span><\/div>\n<div class=\"tlib-check tlib-check-no\"><svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><span>Reconnecting gracefully and tracking account status when a device is removed<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tlib-teaser\">\n<div class=\"tlib-teaser-text\">\n        <span class=\"tlib-teaser-eyebrow\">Or skip the client entirely<\/span><br \/>\n        <span class=\"tlib-teaser-title\">Unipile already runs the MTProto client for you<\/span><br \/>\n        <span class=\"tlib-teaser-desc\">Session persistence, the 2FA wall, reconnection and account lifecycle are handled behind one API. You connect an existing Telegram account, you do not maintain a library.<\/span>\n      <\/div>\n<p>      <a class=\"tlib-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build with Unipile instead<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-libraries');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  FAQ CANONIQUE UNIPILE : copi\u00e9 tel quel depuis \/Users\/m1\/Unipile\/articles\/_templates\/faq-canonique.html\n  Prefix : tg-faq \u2192 id upl-tg-faq-faq. Anchor : faq-telegram-api.\n  Questions issues des requetes-questions reelles du GSC Unipile (fenetre 2026-05-09 au 2026-08-07).\n  Additif wpautop en bas (r\u00e8gle reference_wp_divi_push.md du 2026-08-06).\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@600;700&#038;display=swap\" rel=\"stylesheet\"><span id=\"tg-faq\" class=\"upl-tg-faq-faq-anchor\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><\/p>\n<style>\n#upl-tg-faq-faq { font-family:'Inter',sans-serif; padding:80px 20px; max-width:900px; margin:0 auto; background:transparent!important; }\n#upl-tg-faq-faq *, #upl-tg-faq-faq *::before, #upl-tg-faq-faq *::after { margin:0!important; padding:0!important; box-sizing:border-box!important; }\n#upl-tg-faq-faq .upl-faq-header { text-align:center!important; margin-bottom:60px!important; }\n#upl-tg-faq-faq .upl-faq-title { font-family:'Poppins',sans-serif!important; font-size:clamp(32px,5vw,38px)!important; font-weight:700!important; color:#0f2736!important; margin-bottom:16px!important; line-height:1.2!important; }\n#upl-tg-faq-faq .upl-faq-subtitle { font-size:17px!important; color:#383838!important; max-width:700px!important; margin:0 auto!important; line-height:1.6!important; }\n#upl-tg-faq-faq .upl-faq-list { display:flex!important; flex-direction:column!important; gap:12px!important; }\n#upl-tg-faq-faq .upl-faq-item { background:#ffffff!important; border:1px solid #e5e7eb!important; border-radius:16px!important; overflow:hidden!important; transition:all 0.3s ease!important; }\n#upl-tg-faq-faq .upl-faq-item:hover { border-color:#3BB98B!important; box-shadow:0 4px 20px rgba(59,185,139,0.08)!important; }\n#upl-tg-faq-faq .upl-faq-item.active { border-color:#3BB98B!important; box-shadow:0 8px 30px rgba(59,185,139,0.12)!important; }\n#upl-tg-faq-faq .upl-faq-question { width:100%!important; display:flex!important; align-items:flex-start!important; justify-content:space-between!important; gap:20px!important; padding:24px 28px!important; background:transparent!important; border:none!important; cursor:pointer!important; text-align:left!important; }\n#upl-tg-faq-faq .upl-faq-question-content { display:flex!important; align-items:flex-start!important; gap:16px!important; flex:1!important; }\n#upl-tg-faq-faq .upl-faq-number { flex-shrink:0!important; padding:6px 12px!important; background:rgba(59,185,139,0.12)!important; color:#3BB98B!important; border-radius:20px!important; font-size:0.8rem!important; font-weight:600!important; }\n#upl-tg-faq-faq .upl-faq-item.active .upl-faq-number { background:rgba(59,185,139,0.2)!important; color:#2a9d6e!important; }\n#upl-tg-faq-faq .upl-faq-question-text { font-family:'Poppins',sans-serif!important; font-size:1.1rem!important; font-weight:600!important; color:#0f2736!important; line-height:1.4!important; padding-top:4px!important; }\n#upl-tg-faq-faq .upl-faq-icon { flex-shrink:0!important; width:36px!important; height:36px!important; background:#f4f5f7!important; border-radius:50%!important; display:flex!important; align-items:center!important; justify-content:center!important; transition:all 0.3s ease!important; margin-top:2px!important; }\n#upl-tg-faq-faq .upl-faq-icon svg { width:18px!important; height:18px!important; color:#64748b!important; transition:all 0.3s ease!important; }\n#upl-tg-faq-faq .upl-faq-item:hover .upl-faq-icon { background:rgba(59,185,139,0.1)!important; }\n#upl-tg-faq-faq .upl-faq-item:hover .upl-faq-icon svg { color:#3BB98B!important; }\n#upl-tg-faq-faq .upl-faq-item.active .upl-faq-icon { background:#3BB98B!important; transform:rotate(45deg)!important; }\n#upl-tg-faq-faq .upl-faq-item.active .upl-faq-icon svg { color:#ffffff!important; }\n#upl-tg-faq-faq .upl-faq-answer { max-height:0!important; overflow:hidden!important; transition:max-height 0.4s ease!important; }\n#upl-tg-faq-faq .upl-faq-item.active .upl-faq-answer { max-height:600px!important; }\n#upl-tg-faq-faq .upl-faq-answer-content { padding:0 28px 28px 76px!important; color:#475569!important; font-size:1rem!important; line-height:1.7!important; }\n#upl-tg-faq-faq .upl-faq-answer-content strong { color:#0f2736!important; font-weight:600!important; }\n#upl-tg-faq-faq .upl-faq-answer-content a { color:#3BB98B!important; text-decoration:underline!important; }\n#upl-tg-faq-faq .upl-faq-answer-content code { font-family:monospace!important; background:#f1f5f9!important; padding:2px 6px!important; border-radius:3px!important; font-size:0.85em!important; }\n#upl-tg-faq-faq .upl-faq-cta { margin-top:50px!important; display:flex!important; align-items:center!important; justify-content:space-between!important; gap:20px!important; padding:20px 28px!important; background:#ffffff!important; border:1px solid #e5e7eb!important; border-radius:12px!important; }\n#upl-tg-faq-faq .upl-faq-cta-text { color:#475569!important; font-size:1rem!important; }\n#upl-tg-faq-faq .upl-faq-cta-button { display:inline-flex!important; align-items:center!important; gap:10px!important; background:#DDDF4C!important; color:#0F2836!important; padding:13px 20px!important; border-radius:8px!important; text-decoration:none!important; font-weight:700!important; font-size:1rem!important; border:none!important; cursor:pointer!important; white-space:nowrap!important; }\n#upl-tg-faq-faq .upl-faq-cta-button:hover { transform:translateY(-2px)!important; }\n@media (max-width:768px) {\n  #upl-tg-faq-faq { padding:60px 16px!important; }\n  #upl-tg-faq-faq .upl-faq-answer-content { padding:0 20px 20px 20px!important; }\n  #upl-tg-faq-faq .upl-faq-question { padding:18px 20px!important; }\n  #upl-tg-faq-faq .upl-faq-cta { flex-direction:column!important; align-items:flex-start!important; }\n}\n\/* Additif wpautop (r\u00e8gle reference_wp_divi_push.md 2026-08-06) : ne touche pas au reste du template *\/\n#upl-tg-faq-faq br { display: none !important; }\n\/* Additif responsive (audit mobile obligatoire) : ne touche pas au reste du template *\/\n#upl-tg-faq-faq { overflow-x: hidden !important; }\n<\/style>\n<section id=\"upl-tg-faq-faq\">\n<div class=\"upl-faq-header\">\n<h2 class=\"upl-faq-title\">Telegram API: Frequently Asked Questions<\/h2>\n<pee class=\"upl-faq-subtitle\">Straight answers on api_id, api_hash, BotFather bot tokens and connecting an existing Telegram account with Unipile.<\/pee>\n  <\/div>\n<div class=\"upl-faq-list\">\n<div class=\"upl-faq-item active\">\n      <button class=\"upl-faq-question\" aria-expanded=\"true\"><\/p>\n<div class=\"upl-faq-question-content\">\n          <span class=\"upl-faq-number\">01<\/span><br \/>\n          <span class=\"upl-faq-question-text\">What is the Telegram API?<\/span>\n        <\/div>\n<div class=\"upl-faq-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>\n        <\/div>\n<p>      <\/button><\/p>\n<div class=\"upl-faq-answer\">\n<div class=\"upl-faq-answer-content\">\n<div>Telegram does not have one API, it has three. The Bot API is an HTTP interface for bot accounts. The Telegram API, also called the Client API, runs on the MTProto protocol and is what full Telegram clients are built on. The Gateway API only sends verification codes. Which one you need depends on whether you are automating a bot or acting as a real user account.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-item\">\n      <button class=\"upl-faq-question\" aria-expanded=\"false\"><\/p>\n<div class=\"upl-faq-question-content\">\n          <span class=\"upl-faq-number\">02<\/span><br \/>\n          <span class=\"upl-faq-question-text\">How do I get a Telegram API key?<\/span>\n        <\/div>\n<div class=\"upl-faq-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>\n        <\/div>\n<p>      <\/button><\/p>\n<div class=\"upl-faq-answer\">\n<div class=\"upl-faq-answer-content\">\n<div>There is no single Telegram API key. For the Client API you sign in at my.telegram.org, open API development tools, and fill the form to receive an api_id and an api_hash. For the Bot API you message BotFather inside Telegram and it returns a bot token. Note that Telegram allows only one api_id per phone number.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-item\">\n      <button class=\"upl-faq-question\" aria-expanded=\"false\"><\/p>\n<div class=\"upl-faq-question-content\">\n          <span class=\"upl-faq-number\">03<\/span><br \/>\n          <span class=\"upl-faq-question-text\">Is the Telegram API free?<\/span>\n        <\/div>\n<div class=\"upl-faq-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>\n        <\/div>\n<p>      <\/button><\/p>\n<div class=\"upl-faq-answer\">\n<div class=\"upl-faq-answer-content\">\n<div>Yes. Telegram states that both the Bot API and the Telegram API are usable free of charge, with no per-message fee. The real cost sits in the infrastructure you run, the session handling, and the risk of a ban if you send aggressively.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-item\">\n      <button class=\"upl-faq-question\" aria-expanded=\"false\"><\/p>\n<div class=\"upl-faq-question-content\">\n          <span class=\"upl-faq-number\">04<\/span><br \/>\n          <span class=\"upl-faq-question-text\">How does the Telegram API work?<\/span>\n        <\/div>\n<div class=\"upl-faq-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>\n        <\/div>\n<p>      <\/button><\/p>\n<div class=\"upl-faq-answer\">\n<div class=\"upl-faq-answer-content\">\n<div>The Bot API is a plain HTTPS interface: you call methods like sendMessage against api.telegram.org with your bot token. The Client API is a binary MTProto protocol, which is why most developers use a library such as Telethon, Pyrogram or GramJS rather than implementing it themselves.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-item\">\n      <button class=\"upl-faq-question\" aria-expanded=\"false\"><\/p>\n<div class=\"upl-faq-question-content\">\n          <span class=\"upl-faq-number\">05<\/span><br \/>\n          <span class=\"upl-faq-question-text\">What is the latest version of the Telegram Bot API?<\/span>\n        <\/div>\n<div class=\"upl-faq-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>\n        <\/div>\n<p>      <\/button><\/p>\n<div class=\"upl-faq-answer\">\n<div class=\"upl-faq-answer-content\">\n<div>Bot API 10.2, published on July 14, 2026. It followed 10.1 on June 11, 2026 and 10.0 on May 8, 2026.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-item\">\n      <button class=\"upl-faq-question\" aria-expanded=\"false\"><\/p>\n<div class=\"upl-faq-question-content\">\n          <span class=\"upl-faq-number\">06<\/span><br \/>\n          <span class=\"upl-faq-question-text\">Can I use the Telegram API without building an MTProto client?<\/span>\n        <\/div>\n<div class=\"upl-faq-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>\n        <\/div>\n<p>      <\/button><\/p>\n<div class=\"upl-faq-answer\">\n<div class=\"upl-faq-answer-content\">\n<div>Yes. You can connect an existing Telegram account through Telegram's own Devices feature, which is how Unipile links accounts, using a QR code login or a hosted authentication flow. You get user-account access without implementing MTProto, session storage or two-factor handling yourself.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-cta\">\n    <pee class=\"upl-faq-cta-text\">Still have questions? Our team is here to help.<\/pee>\n    <span class=\"upl-faq-cta-button\" onclick=\"if(window.$crisp){$crisp.push(['do','chat:open'])}\"><span>Talk to an expert<\/span><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/span>\n  <\/div>\n<\/section>\n<p><script>\n(function(){\n  function initFaq(){\n    var faq=document.getElementById('upl-tg-faq-faq');\n    if(!faq)return;\n    faq.querySelectorAll('.upl-faq-question').forEach(function(btn){\n      btn.addEventListener('click',function(){\n        var item=btn.closest('.upl-faq-item');\n        var isActive=item.classList.contains('active');\n        faq.querySelectorAll('.upl-faq-item').forEach(function(i){i.classList.remove('active');i.querySelector('.upl-faq-question').setAttribute('aria-expanded','false');});\n        if(!isActive){item.classList.add('active');btn.setAttribute('aria-expanded','true');}\n      });\n    });\n    faq.addEventListener('click',function(e){\n      var el=e.target.closest('[data-upl-link]');\n      if(!el)return;\n      e.preventDefault();\n      window.open(el.getAttribute('data-upl-link'),el.getAttribute('data-upl-target')||'_blank');\n    });\n  }\n  if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initFaq);}else{initFaq();}\n})();\n<\/script><\/p>\n<p><script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"What is the Telegram API?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Telegram does not have one API, it has three. The Bot API is an HTTP interface for bot accounts. The Telegram API, also called the Client API, runs on the MTProto protocol and is what full Telegram clients are built on. The Gateway API only sends verification codes. Which one you need depends on whether you are automating a bot or acting as a real user account.\"}}, {\"@type\": \"Question\", \"name\": \"How do I get a Telegram API key?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"There is no single Telegram API key. For the Client API you sign in at my.telegram.org, open API development tools, and fill the form to receive an api_id and an api_hash. For the Bot API you message BotFather inside Telegram and it returns a bot token. Note that Telegram allows only one api_id per phone number.\"}}, {\"@type\": \"Question\", \"name\": \"Is the Telegram API free?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Telegram states that both the Bot API and the Telegram API are usable free of charge, with no per-message fee. The real cost sits in the infrastructure you run, the session handling, and the risk of a ban if you send aggressively.\"}}, {\"@type\": \"Question\", \"name\": \"How does the Telegram API work?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The Bot API is a plain HTTPS interface: you call methods like sendMessage against api.telegram.org with your bot token. The Client API is a binary MTProto protocol, which is why most developers use a library such as Telethon, Pyrogram or GramJS rather than implementing it themselves.\"}}, {\"@type\": \"Question\", \"name\": \"What is the latest version of the Telegram Bot API?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Bot API 10.2, published on July 14, 2026. It followed 10.1 on June 11, 2026 and 10.0 on May 8, 2026.\"}}, {\"@type\": \"Question\", \"name\": \"Can I use the Telegram API without building an MTProto client?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. You can connect an existing Telegram account through Telegram's own Devices feature, which is how Unipile links accounts, using a QR code login or a hosted authentication flow. You get user-account access without implementing MTProto, session storage or two-factor handling yourself.\"}}]}<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" fullwidth=\"off\" specialty=\"off\" background_color=\"transparent\" _builder_version=\"4.27.4\" custom_padding=\"0px||0px||false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.4\" background_color=\"transparent\" width=\"100%\" max_width=\"100%\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.4\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.4\" global_colors_info=\"{}\"]<br \/>\n<!--\n  FINAL CTA STRIP : #upl-tg-final-cta, prefix tfc-\n  Dark card CTA + maillage interne final. La SECTION Divi reste transparente, seule la card interne est dark.\n-->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@700;800&#038;display=swap\" rel=\"stylesheet\">\n<style>\n#upl-tg-final-cta,\n#upl-tg-final-cta *,\n#upl-tg-final-cta *::before,\n#upl-tg-final-cta *::after {\n  margin: 0 !important;\n  padding: 0 !important;\n  box-sizing: border-box !important;\n  border: none !important;\n  outline: none !important;\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;\n  line-height: normal !important;\n  letter-spacing: normal !important;\n  text-transform: none !important;\n  text-decoration: none !important;\n  list-style: none !important;\n  background: transparent !important;\n}\n#upl-tg-final-cta { display: block !important; overflow-x: hidden !important; max-width: 100% !important; }\n#upl-tg-final-cta br { display: none !important; }\n#upl-tg-final-cta p { display: contents !important; }\n#upl-tg-final-cta .tfc-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 50px 24px 80px !important; }\n#upl-tg-final-cta .tfc-card { background: #0f2736 !important; border-radius: 20px !important; padding: 48px !important; text-align: center !important; }\n#upl-tg-final-cta .tfc-eyebrow { color: #3BB98B !important; font-size: 12px !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.5px !important; margin-bottom: 14px !important; display: block !important; }\n#upl-tg-final-cta h2 { font-family: 'Poppins', sans-serif !important; font-size: 32px !important; font-weight: 700 !important; color: #ffffff !important; line-height: 1.25 !important; margin: 0 0 14px !important; }\n#upl-tg-final-cta .tfc-desc { color: rgba(255,255,255,0.75) !important; font-size: 15.5px !important; line-height: 1.75 !important; margin: 0 0 30px !important; display: block !important; }\n#upl-tg-final-cta .tfc-actions { display: flex !important; align-items: center !important; justify-content: center !important; gap: 14px !important; flex-wrap: wrap !important; margin-bottom: 26px !important; }\n#upl-tg-final-cta .tfc-cta-primary {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: #DDDF4C !important; color: #0f2736 !important; padding: 14px 28px !important;\n  border-radius: 8px !important; font-size: 0.95rem !important; font-weight: 600 !important;\n  border: 2px solid #DDDF4C !important; transition: all 0.3s ease !important; cursor: pointer !important;\n  white-space: nowrap !important;\n}\n#upl-tg-final-cta .tfc-cta-primary:hover { transform: translateY(-5px) !important; }\n#upl-tg-final-cta .tfc-cta-primary svg { width: 15px !important; height: 15px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tg-final-cta .tfc-cta-secondary {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: transparent !important; color: #ffffff !important; padding: 12px 24px !important;\n  border-radius: 8px !important; border: 2px solid rgba(255,255,255,0.3) !important;\n  font-size: 0.95rem !important; font-weight: 600 !important; transition: all 0.3s ease !important;\n  cursor: pointer !important; white-space: nowrap !important;\n}\n#upl-tg-final-cta .tfc-cta-secondary:hover { border-color: #ffffff !important; }\n#upl-tg-final-cta .tfc-links { display: flex !important; align-items: center !important; justify-content: center !important; gap: 20px !important; flex-wrap: wrap !important; padding-top: 22px !important; border-top: 1px solid rgba(255,255,255,0.1) !important; }\n#upl-tg-final-cta .tfc-links a { color: rgba(255,255,255,0.65) !important; font-size: 13.5px !important; text-decoration: underline !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tg-final-cta .tfc-wrap { padding: 40px 20px 60px !important; }\n  #upl-tg-final-cta .tfc-card { padding: 36px 24px !important; }\n  #upl-tg-final-cta h2 { font-size: 28px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tg-final-cta .tfc-wrap { padding: 32px 16px 48px !important; }\n  #upl-tg-final-cta .tfc-card { padding: 30px 20px !important; }\n  #upl-tg-final-cta h2 { font-size: 26px !important; }\n  #upl-tg-final-cta .tfc-actions { flex-direction: column !important; width: 100% !important; }\n  #upl-tg-final-cta .tfc-cta-primary, #upl-tg-final-cta .tfc-cta-secondary { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tg-final-cta h2 { font-size: 24px !important; }\n}<\/p>\n<p>#unipile-toc a{text-decoration:none!important;color:inherit!important}\n#unipile-toc a:hover{text-decoration:none!important}\n#upl-tg-apiid a{text-decoration:none!important;color:inherit!important}\n#upl-tg-apiid a:hover{text-decoration:none!important}\n#upl-tg-botfather a{text-decoration:none!important;color:inherit!important}\n#upl-tg-botfather a:hover{text-decoration:none!important}\n#upl-tg-comparison a{text-decoration:none!important;color:inherit!important}\n#upl-tg-comparison a:hover{text-decoration:none!important}\n#upl-tg-error-table a{text-decoration:none!important;color:inherit!important}\n#upl-tg-error-table a:hover{text-decoration:none!important}\n#upl-tg-faq-faq a{text-decoration:none!important;color:inherit!important}\n#upl-tg-faq-faq a:hover{text-decoration:none!important}\n#upl-tg-final-cta a{text-decoration:none!important;color:inherit!important}\n#upl-tg-final-cta a:hover{text-decoration:none!important}\n#upl-tg-free-limits a{text-decoration:none!important;color:inherit!important}\n#upl-tg-free-limits a:hover{text-decoration:none!important}\n#upl-tg-hero a{text-decoration:none!important;color:inherit!important}\n#upl-tg-hero a:hover{text-decoration:none!important}\n#upl-tg-libraries a{text-decoration:none!important;color:inherit!important}\n#upl-tg-libraries a:hover{text-decoration:none!important}\n#upl-tg-phone-2fa a{text-decoration:none!important;color:inherit!important}\n#upl-tg-phone-2fa a:hover{text-decoration:none!important}\n#upl-tg-qr-login a{text-decoration:none!important;color:inherit!important}\n#upl-tg-qr-login a:hover{text-decoration:none!important}\n#upl-tg-rate-limits a{text-decoration:none!important;color:inherit!important}\n#upl-tg-rate-limits a:hover{text-decoration:none!important}\n#upl-tg-three-apis a{text-decoration:none!important;color:inherit!important}\n#upl-tg-three-apis a:hover{text-decoration:none!important}\n#upl-tg-unipile-connect a{text-decoration:none!important;color:inherit!important}\n#upl-tg-unipile-connect a:hover{text-decoration:none!important}\n#upl-tg-use-cases a{text-decoration:none!important;color:inherit!important}\n#upl-tg-use-cases a:hover{text-decoration:none!important}<\/style>\n<div id=\"upl-tg-final-cta\">\n<div class=\"tfc-wrap\">\n<div class=\"tfc-card\">\n      <span class=\"tfc-eyebrow\">Telegram API, done right<\/span><\/p>\n<h2>Build your Telegram API integration with Unipile<\/h2>\n<div class=\"tfc-desc\">Skip the MTProto client, skip the bot limitations. Connect an existing Telegram account through Unipile and unify it with WhatsApp, LinkedIn, Instagram, Gmail, Outlook and IMAP in one API.<\/div>\n<div class=\"tfc-actions\">\n        <a class=\"tfc-cta-primary\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build with Unipile<\/span><svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a><br \/>\n        <a class=\"tfc-cta-secondary\" href=\"https:\/\/developer.unipile.com\/docs\/getting-started\" target=\"_blank\" rel=\"noopener\"><span>Read the docs<\/span><\/a> <a class=\"tfc-cta-secondary\" href=\"\/communication-api\/messaging-api\/telegram-api\/\"><span>See the Telegram API page<\/span><\/a>\n      <\/div>\n<div class=\"tfc-links\">\n        <a href=\"\/telegram-api-send-message-a-comprehensive-guide\/\">Send a Telegram message with the API<\/a><br \/>\n        <a href=\"\/communication-api\/messaging-api\/telegram-api\/\">Unipile Telegram API product page<\/a>\n      <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script>\n(function(){\n  var root = document.getElementById('upl-tg-final-cta');\n  if (!root) return;\n  root.addEventListener('click', function(e){\n    var el = e.target.closest('[data-upl-link]');\n    if (!el || !root.contains(el)) return;\n    e.preventDefault();\n    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');\n  });\n})();\n<\/script><br \/>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Telegram API guide How to Get Telegram API Access: api_id, api_hash and Bot Tokens The Telegram API is not one API, it is three: the Bot API, the Client API (MTProto), and the Gateway API. This guide shows you exactly where to get your credentials, what api_id, api_hash and a BotFather bot token each unlock, [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":278600,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[69],"tags":[],"post_folder":[],"class_list":["post-265468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-api-guidelines"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Get Telegram API Access: api_id, api_hash and Bot Tokens - Unipile<\/title>\n<meta name=\"description\" content=\"Learn how to get the Telegram API and integrate it with Unipile for seamless CRM and ATS functionality. Step-by-step guide for developers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.unipile.com\/br\/como-obter-a-api-do-telegram-o-guia-passo-a-passo-definitivo\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Get Telegram API Access: api_id, api_hash and Bot Tokens - Unipile\" \/>\n<meta property=\"og:description\" content=\"Learn how to get the Telegram API and integrate it with Unipile for seamless CRM and ATS functionality. Step-by-step guide for developers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.unipile.com\/br\/como-obter-a-api-do-telegram-o-guia-passo-a-passo-definitivo\/\" \/>\n<meta property=\"og:site_name\" content=\"Unipile\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/unipilefr\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-30T08:21:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-13T13:16:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/04\/tg-02-get-api-key.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Damien Girardeau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@UnipileAPI\" \/>\n<meta name=\"twitter:site\" content=\"@UnipileAPI\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Damien Girardeau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/\"},\"author\":{\"name\":\"Damien Girardeau\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/person\\\/a2ac44e22bdc27d497ce8b58716a673e\"},\"headline\":\"How to Get Telegram API Access: api_id, api_hash and Bot Tokens\",\"datePublished\":\"2024-10-30T08:21:38+00:00\",\"dateModified\":\"2026-08-13T13:16:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/\"},\"wordCount\":4814,\"publisher\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/tg-02-get-api-key.png\",\"articleSection\":[\"API Guidelines\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/\",\"name\":\"How to Get Telegram API Access: api_id, api_hash and Bot Tokens - Unipile\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/tg-02-get-api-key.png\",\"datePublished\":\"2024-10-30T08:21:38+00:00\",\"dateModified\":\"2026-08-13T13:16:05+00:00\",\"description\":\"Learn how to get the Telegram API and integrate it with Unipile for seamless CRM and ATS functionality. Step-by-step guide for developers.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/tg-02-get-api-key.png\",\"contentUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/tg-02-get-api-key.png\",\"width\":2400,\"height\":1600,\"caption\":\"Get your Telegram API credentials and connect Telegram accounts to your SaaS via the Unipile unified API.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.unipile.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Get Telegram API Access: api_id, api_hash and Bot Tokens\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#website\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/\",\"name\":\"Unipile\",\"description\":\"Integrate Messaging &amp; Email, Connect with Ease via API\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.unipile.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\",\"name\":\"Unipile\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/logo-unipile.png\",\"contentUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2021\\\/05\\\/logo-unipile.png\",\"width\":200,\"height\":49,\"caption\":\"Unipile\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/unipilefr\",\"https:\\\/\\\/x.com\\\/UnipileAPI\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/unipile\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/person\\\/a2ac44e22bdc27d497ce8b58716a673e\",\"name\":\"Damien Girardeau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12dd140720736a8db29f540c42a17d2680cd54a04fb26bb7b55423c179b065a9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12dd140720736a8db29f540c42a17d2680cd54a04fb26bb7b55423c179b065a9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12dd140720736a8db29f540c42a17d2680cd54a04fb26bb7b55423c179b065a9?s=96&d=mm&r=g\",\"caption\":\"Damien Girardeau\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como Obter Acesso \u00e0 API do Telegram: api_id, api_hash e Tokens de Bot - Unipile","description":"Saiba como obter a API do Telegram e integr\u00e1-la \u00e0 Unipile para obter uma funcionalidade perfeita de CRM e ATS. Guia passo a passo para desenvolvedores.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.unipile.com\/br\/como-obter-a-api-do-telegram-o-guia-passo-a-passo-definitivo\/","og_locale":"pt_BR","og_type":"article","og_title":"How to Get Telegram API Access: api_id, api_hash and Bot Tokens - Unipile","og_description":"Learn how to get the Telegram API and integrate it with Unipile for seamless CRM and ATS functionality. Step-by-step guide for developers.","og_url":"https:\/\/www.unipile.com\/br\/como-obter-a-api-do-telegram-o-guia-passo-a-passo-definitivo\/","og_site_name":"Unipile","article_publisher":"https:\/\/www.facebook.com\/unipilefr","article_published_time":"2024-10-30T08:21:38+00:00","article_modified_time":"2026-08-13T13:16:05+00:00","og_image":[{"width":2400,"height":1600,"url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/04\/tg-02-get-api-key.png","type":"image\/png"}],"author":"Damien Girardeau","twitter_card":"summary_large_image","twitter_creator":"@UnipileAPI","twitter_site":"@UnipileAPI","twitter_misc":{"Escrito por":"Damien Girardeau","Est. tempo de leitura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#article","isPartOf":{"@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/"},"author":{"name":"Damien Girardeau","@id":"https:\/\/www.unipile.com\/#\/schema\/person\/a2ac44e22bdc27d497ce8b58716a673e"},"headline":"How to Get Telegram API Access: api_id, api_hash and Bot Tokens","datePublished":"2024-10-30T08:21:38+00:00","dateModified":"2026-08-13T13:16:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/"},"wordCount":4814,"publisher":{"@id":"https:\/\/www.unipile.com\/#organization"},"image":{"@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/04\/tg-02-get-api-key.png","articleSection":["API Guidelines"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/","url":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/","name":"Como Obter Acesso \u00e0 API do Telegram: api_id, api_hash e Tokens de Bot - Unipile","isPartOf":{"@id":"https:\/\/www.unipile.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#primaryimage"},"image":{"@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/04\/tg-02-get-api-key.png","datePublished":"2024-10-30T08:21:38+00:00","dateModified":"2026-08-13T13:16:05+00:00","description":"Saiba como obter a API do Telegram e integr\u00e1-la \u00e0 Unipile para obter uma funcionalidade perfeita de CRM e ATS. Guia passo a passo para desenvolvedores.","breadcrumb":{"@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#primaryimage","url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/04\/tg-02-get-api-key.png","contentUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/04\/tg-02-get-api-key.png","width":2400,"height":1600,"caption":"Get your Telegram API credentials and connect Telegram accounts to your SaaS via the Unipile unified API."},{"@type":"BreadcrumbList","@id":"https:\/\/www.unipile.com\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.unipile.com\/"},{"@type":"ListItem","position":2,"name":"How to Get Telegram API Access: api_id, api_hash and Bot Tokens"}]},{"@type":"WebSite","@id":"https:\/\/www.unipile.com\/#website","url":"https:\/\/www.unipile.com\/","name":"Unipile","description":"Integre mensagens e e-mail, conecte-se com facilidade via API","publisher":{"@id":"https:\/\/www.unipile.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.unipile.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.unipile.com\/#organization","name":"Unipile","url":"https:\/\/www.unipile.com\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.unipile.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2021\/05\/logo-unipile.png","contentUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2021\/05\/logo-unipile.png","width":200,"height":49,"caption":"Unipile"},"image":{"@id":"https:\/\/www.unipile.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/unipilefr","https:\/\/x.com\/UnipileAPI","https:\/\/www.linkedin.com\/company\/unipile\/"]},{"@type":"Person","@id":"https:\/\/www.unipile.com\/#\/schema\/person\/a2ac44e22bdc27d497ce8b58716a673e","name":"Damien Girardeau","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/12dd140720736a8db29f540c42a17d2680cd54a04fb26bb7b55423c179b065a9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/12dd140720736a8db29f540c42a17d2680cd54a04fb26bb7b55423c179b065a9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/12dd140720736a8db29f540c42a17d2680cd54a04fb26bb7b55423c179b065a9?s=96&d=mm&r=g","caption":"Damien Girardeau"}}]}},"_links":{"self":[{"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/posts\/265468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/comments?post=265468"}],"version-history":[{"count":48,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/posts\/265468\/revisions"}],"predecessor-version":[{"id":279773,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/posts\/265468\/revisions\/279773"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/media\/278600"}],"wp:attachment":[{"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/media?parent=265468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/categories?post=265468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/tags?post=265468"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/www.unipile.com\/br\/wp-json\/wp\/v2\/post_folder?post=265468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}