{"id":279730,"date":"2026-08-11T15:56:30","date_gmt":"2026-08-11T13:56:30","guid":{"rendered":"https:\/\/www.unipile.com\/?p=279730"},"modified":"2026-08-13T15:12:49","modified_gmt":"2026-08-13T13:12:49","slug":"telegram-bot-api-vs-telegram-api","status":"publish","type":"post","link":"https:\/\/www.unipile.com\/it\/telegram-bot-api-vs-telegram-api\/","title":{"rendered":"Telegram Bot API vs Telegram API: Which One Do You Need?"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221;]<!--\n  TOC CANONIQUE UNIPILE : copie telle quelle depuis \/Users\/m1\/Unipile\/articles\/_templates\/toc-canonique.html\n  Seuls labels, anchors, nombre d'entrees et tag \"Best\" adaptes. CSS\/JS\/classes\/ID intouches.\n  Additif wpautop en bas (regle 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@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 (regle reference_wp_divi_push.md 2026-08-06) : ne touche pas au reste du template *\/\n#unipile-toc br { display: none !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\">The two models<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tbv-models\"><br \/>\n            <span class=\"utc-num\">01<\/span><br \/>\n            <span class=\"utc-link-text\">Bot API vs Telegram User API<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tbv-question\"><br \/>\n            <span class=\"utc-num\">02<\/span><br \/>\n            <span class=\"utc-link-text\">The question that decides<\/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\">Capabilities &amp; cost<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tbv-matrix\"><br \/>\n            <span class=\"utc-num\">03<\/span><br \/>\n            <span class=\"utc-link-text\">Capability matrix, endpoint by endpoint<\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tbv-cost\"><br \/>\n            <span class=\"utc-num\">04<\/span><br \/>\n            <span class=\"utc-link-text\">The real cost of MTProto<\/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\">Decide &amp; build<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tbv-thirdway\"><br \/>\n            <span class=\"utc-num\">05<\/span><br \/>\n            <span class=\"utc-link-text\">The third way: a linked account<span class=\"utc-tag-best\">Best<\/span><\/span><br \/>\n          <\/a><br \/>\n          <a class=\"utc-link\" href=\"#tbv-decision\"><br \/>\n            <span class=\"utc-num\">06<\/span><br \/>\n            <span class=\"utc-link-text\">Decision tree: which one for your case<\/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\">Questions<\/span><\/p>\n<div class=\"utc-link-list\">\n          <a class=\"utc-link\" href=\"#tbv-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>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  HERO : #upl-tbv-hero, prefix tbvh-\n  Badge + H1 (SLOT) + description + CTA. AUCUNE ligne meta, AUCUNE chip mots-cl\u00e9s.\n  H1 dependant du pre-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-tbv-hero,\n#upl-tbv-hero *,\n#upl-tbv-hero *::before,\n#upl-tbv-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-tbv-hero { display: block !important; }\n#upl-tbv-hero br { display: none !important; }\n#upl-tbv-hero p { display: contents !important; }\n#upl-tbv-hero .tbvh-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-tbv-hero .tbvh-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-tbv-hero .tbvh-badge .tbvh-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-tbv-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-tbv-hero h1 .tbvh-accent { color: #3BB98B !important; }\n#upl-tbv-hero .tbvh-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-tbv-hero .tbvh-actions {\n  display: flex !important;\n  align-items: center !important;\n  gap: 14px !important;\n  flex-wrap: wrap !important;\n}\n#upl-tbv-hero .tbvh-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-tbv-hero .tbvh-cta-primary:hover { transform: translateY(-5px) !important; }\n#upl-tbv-hero .tbvh-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-tbv-hero .tbvh-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-tbv-hero .tbvh-cta-secondary:hover { background: #0f2736 !important; color: #ffffff !important; }<\/p>\n<p>\/* Code mockup *\/\n#upl-tbv-hero .tbvh-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-tbv-hero .tbvh-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-tbv-hero .tbvh-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tbv-hero .tbvh-dot-r { background: #ff5f57 !important; }\n#upl-tbv-hero .tbvh-dot-y { background: #febc2e !important; }\n#upl-tbv-hero .tbvh-dot-g { background: #28c840 !important; }\n#upl-tbv-hero .tbvh-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tbv-hero .tbvh-pre { padding: 22px 24px !important; font-size: 13.5px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tbv-hero .tbvh-pre code { font-family: 'Courier New', monospace !important; white-space: pre-wrap !important; word-break: break-word !important; display: block !important; }\n#upl-tbv-hero .tbvh-c { color: #8b949e !important; }\n#upl-tbv-hero .tbvh-k { color: #ff7b72 !important; }\n#upl-tbv-hero .tbvh-fn { color: #d2a8ff !important; }\n#upl-tbv-hero .tbvh-s { color: #a5d6ff !important; }\n#upl-tbv-hero .tbvh-w { color: #e6edf3 !important; }\n#upl-tbv-hero .tbvh-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-tbv-hero .tbvh-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-tbv-hero .tbvh-wrap { grid-template-columns: 1fr !important; gap: 36px !important; padding: 44px 20px 32px !important; }\n  #upl-tbv-hero h1 { font-size: 34px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-hero .tbvh-wrap { padding: 36px 16px 28px !important; }\n  #upl-tbv-hero h1 { font-size: 28px !important; }\n  #upl-tbv-hero .tbvh-desc { font-size: 15.5px !important; }\n  #upl-tbv-hero .tbvh-actions { width: 100% !important; gap: 10px !important; }\n  #upl-tbv-hero .tbvh-cta-primary, #upl-tbv-hero .tbvh-cta-secondary { width: 100% !important; justify-content: center !important; }\n  #upl-tbv-hero .tbvh-pre { font-size: 12px !important; padding: 18px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-hero h1 { font-size: 26px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-hero\">\n<div class=\"tbvh-wrap\">\n<div class=\"tbvh-col-content\">\n<div class=\"tbvh-badge\"><span class=\"tbvh-dot\"><\/span><span>Telegram Bot API vs Telegram API<\/span><\/div>\n<h1><span>Telegram Bot API vs Telegram API: Which One Do You Need?<\/span><\/h1>\n<div class=\"tbvh-desc\">The <strong>Telegram Bot API<\/strong> and the <strong>Telegram API<\/strong> (also called the Telegram User API, built on MTProto) solve different problems. One runs a bot account over HTTP. The other runs a real user account over a binary protocol you implement yourself. This guide breaks down where each one blocks you, endpoint by endpoint, and what it actually costs to build and maintain a Telegram User API client versus connecting an existing account through Unipile.<\/div>\n<div class=\"tbvh-actions\">\n        <a class=\"tbvh-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=\"tbvh-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=\"tbvh-col-mockup\">\n<div class=\"tbvh-code-wrapper\">\n<div class=\"tbvh-editor-bar\">\n          <span class=\"tbvh-dot2 tbvh-dot-r\"><\/span><span class=\"tbvh-dot2 tbvh-dot-y\"><\/span><span class=\"tbvh-dot2 tbvh-dot-g\"><\/span><br \/>\n          <span class=\"tbvh-filename\">can-i-message-first.js<\/span>\n        <\/div>\n<div class=\"tbvh-pre\"><code><span class=\"tbvh-c\">\/\/ Bot API: blocked, the user never messaged the bot<\/span>&#10;<span class=\"tbvh-k\">const<\/span> <span class=\"tbvh-w\">res<\/span> <span class=\"tbvh-w\">=<\/span> <span class=\"tbvh-k\">await<\/span> <span class=\"tbvh-fn\">bot<\/span><span class=\"tbvh-w\">.<\/span><span class=\"tbvh-fn\">sendMessage<\/span><span class=\"tbvh-w\">(<\/span><span class=\"tbvh-w\">userId<\/span><span class=\"tbvh-w\">,<\/span> <span class=\"tbvh-s\">\"Hi there\"<\/span><span class=\"tbvh-w\">);<\/span>&#10;<span class=\"tbvh-c\">\/\/ -&gt; 403 Forbidden: bot was blocked by the user<\/span>&#10;<span class=\"tbvh-c\">\/\/    or never started a conversation<\/span>&#10;&#10;<span class=\"tbvh-c\">\/\/ Telegram User API via Unipile: works, it is a real account<\/span>&#10;<span class=\"tbvh-c\">\/\/ POST \/v2\/:account_id\/chats\/send<\/span>&#10;<span class=\"tbvh-k\">const<\/span> <span class=\"tbvh-w\">chat<\/span> <span class=\"tbvh-w\">=<\/span> <span class=\"tbvh-k\">await<\/span> <span class=\"tbvh-fn\">unipile<\/span><span class=\"tbvh-w\">.<\/span><span class=\"tbvh-fn\">chats<\/span><span class=\"tbvh-w\">.<\/span><span class=\"tbvh-fn\">create<\/span><span class=\"tbvh-w\">({<\/span>&#10;  <span class=\"tbvh-w\">account_id:<\/span> <span class=\"tbvh-w\">telegramAccountId,<\/span>&#10;  <span class=\"tbvh-w\">user_ids:<\/span> <span class=\"tbvh-w\">[<\/span><span class=\"tbvh-w\">username<\/span><span class=\"tbvh-w\">],<\/span>&#10;  <span class=\"tbvh-w\">text:<\/span> <span class=\"tbvh-s\">\"Hi there\"<\/span>&#10;<span class=\"tbvh-w\">});<\/span><\/code><\/div>\n<div class=\"tbvh-editor-ok\"><svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>chat.status: \"sent\"<\/span><\/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\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  SECTION 01 : #upl-tbv-models, prefix tbvm-\n  The two models in one table: Bot API (HTTP, bot account) vs Client API \/ Telegram User API (MTProto, user account).\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-tbv-models,\n#upl-tbv-models *,\n#upl-tbv-models *::before,\n#upl-tbv-models *::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-tbv-models { display: block !important; }\n#upl-tbv-models br { display: none !important; }\n#upl-tbv-models p { display: contents !important; }\n#upl-tbv-models .tbvm-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tbv-models .tbvm-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tbv-models .tbvm-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-tbv-models .tbvm-badge .tbvm-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tbv-models 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-tbv-models .tbvm-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }\n#upl-tbv-models .tbvm-intro a { color: #2aaa7e !important; text-decoration: underline !important; }<\/p>\n<p>\/* Desktop table *\/\n#upl-tbv-models .tbvm-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; margin-bottom: 28px !important; }\n#upl-tbv-models table { width: 100% !important; border-collapse: collapse !important; }\n#upl-tbv-models thead tr { background: #0f2736 !important; }\n#upl-tbv-models 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-tbv-models thead th:first-child { width: 26% !important; }\n#upl-tbv-models tbody tr { border-top: 1px solid #e5e7eb !important; }\n#upl-tbv-models tbody tr:nth-child(even) { background: #f8fafc !important; }\n#upl-tbv-models 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-tbv-models tbody td:first-child { font-weight: 700 !important; color: #0f2736 !important; }\n#upl-tbv-models tbody td code { font-family: 'Courier New', monospace !important; background: #f1f5f9 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 12.5px !important; }<\/p>\n<p>\/* Mobile cards *\/\n#upl-tbv-models .tbvm-cards { display: none !important; }\n#upl-tbv-models .tbvm-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px !important; margin-bottom: 14px !important; }\n#upl-tbv-models .tbvm-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-tbv-models .tbvm-card-row { display: flex !important; justify-content: space-between !important; gap: 12px !important; padding: 7px 0 !important; font-size: 13px !important; border-top: 1px solid #f0f1f3 !important; }\n#upl-tbv-models .tbvm-card-row:first-of-type { border-top: none !important; }\n#upl-tbv-models .tbvm-card-row-label { color: #64748b !important; font-weight: 600 !important; flex-shrink: 0 !important; }\n#upl-tbv-models .tbvm-card-row-val { color: #383838 !important; text-align: right !important; }<\/p>\n<p>#upl-tbv-models .tbvm-cta-row { margin-top: 8px !important; display: flex !important; justify-content: center !important; }\n#upl-tbv-models .tbvm-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-tbv-models .tbvm-cta:hover { transform: translateY(-5px) !important; }\n#upl-tbv-models .tbvm-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-tbv-models .tbvm-wrap { padding: 50px 20px !important; }\n  #upl-tbv-models h2 { font-size: 28px !important; }\n}\n@media (max-width: 768px) {\n  #upl-tbv-models .tbvm-table-wrap { display: none !important; }\n  #upl-tbv-models .tbvm-cards { display: block !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-models .tbvm-wrap { padding: 40px 16px !important; }\n  #upl-tbv-models h2 { font-size: 26px !important; }\n  #upl-tbv-models .tbvm-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-models h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-models\">\n<div class=\"tbvm-wrap\">\n    <span id=\"tbv-models\" class=\"tbvm-anchor\"><\/span><\/p>\n<div class=\"tbvm-badge\"><span class=\"tbvm-dot\"><\/span><span>The two models<\/span><\/div>\n<h2>Telegram Bot API vs Telegram User API, in one table<\/h2>\n<div class=\"tbvm-intro\">If you already know that Telegram has multiple APIs and you just want to know which one applies to your project, this table gets you there in ten seconds. If you still need the full picture of all three Telegram APIs, read <a href=\"\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/\">the getting-started guide<\/a> first. Here, we go one level deeper on the two that people actually build against: the Bot API and the Telegram User API.<\/div>\n<div class=\"tbvm-table-wrap\">\n<table>\n<thead>\n<tr>\n<th>Criteria<\/th>\n<th>Telegram Bot API<\/th>\n<th>Telegram User API (MTProto)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>What it connects<\/td>\n<td>A bot account, created and owned by your app<\/td>\n<td>A real Telegram user account, phone-number bound<\/td>\n<\/tr>\n<tr>\n<td>Protocol<\/td>\n<td>Standard HTTP, JSON requests and responses<\/td>\n<td>MTProto, a custom binary protocol you implement<\/td>\n<\/tr>\n<tr>\n<td>Credentials<\/td>\n<td>A bot token issued by <code>@BotFather<\/code><\/td>\n<td><code>api_id<\/code> + <code>api_hash<\/code> from <code>my.telegram.org<\/code><\/td>\n<\/tr>\n<tr>\n<td>Identity in chats<\/td>\n<td>Shows a visible \"bot\" badge, distinct from a person<\/td>\n<td>Indistinguishable from a person using the app<\/td>\n<\/tr>\n<tr>\n<td>Who can message whom<\/td>\n<td>Bot can only reply once a user starts the chat<\/td>\n<td>Account can message anyone, like any Telegram user<\/td>\n<\/tr>\n<tr>\n<td>Typical implementation<\/td>\n<td>Any HTTP client, official and community SDKs<\/td>\n<td>Telethon, Pyrogram, GramJS, TDLib, or a linked account via Unipile<\/td>\n<\/tr>\n<tr>\n<td>Cost<\/td>\n<td>Free to use<\/td>\n<td>Free to use, self-hosted infrastructure cost only<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<div class=\"tbvm-cards\">\n<div class=\"tbvm-card\">\n        <span class=\"tbvm-card-title\">Telegram Bot API<\/span><\/p>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Connects<\/span><span class=\"tbvm-card-row-val\">A bot account<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Protocol<\/span><span class=\"tbvm-card-row-val\">HTTP, JSON<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Credentials<\/span><span class=\"tbvm-card-row-val\">Bot token (BotFather)<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Identity<\/span><span class=\"tbvm-card-row-val\">Visible bot badge<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Who it can message<\/span><span class=\"tbvm-card-row-val\">Only users who messaged first<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Cost<\/span><span class=\"tbvm-card-row-val\">Free<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvm-card\">\n        <span class=\"tbvm-card-title\">Telegram User API (MTProto)<\/span><\/p>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Connects<\/span><span class=\"tbvm-card-row-val\">A real user account<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Protocol<\/span><span class=\"tbvm-card-row-val\">MTProto, binary<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Credentials<\/span><span class=\"tbvm-card-row-val\">api_id + api_hash<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Identity<\/span><span class=\"tbvm-card-row-val\">Indistinguishable from a person<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Who it can message<\/span><span class=\"tbvm-card-row-val\">Anyone, like a normal user<\/span><\/div>\n<div class=\"tbvm-card-row\"><span class=\"tbvm-card-row-label\">Cost<\/span><span class=\"tbvm-card-row-val\">Free, self-hosted cost only<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbvm-cta-row\">\n      <a class=\"tbvm-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build your Telegram integration<\/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>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  SECTION 02 : #upl-tbv-question, prefix tbvq-\n  The question that tranches: who do you want to write to first. Bot cannot initiate with a user who never messaged it first.\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-tbv-question,\n#upl-tbv-question *,\n#upl-tbv-question *::before,\n#upl-tbv-question *::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-tbv-question { display: block !important; }\n#upl-tbv-question br { display: none !important; }\n#upl-tbv-question p { display: contents !important; }\n#upl-tbv-question .tbvq-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tbv-question .tbvq-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tbv-question .tbvq-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-tbv-question .tbvq-badge .tbvq-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tbv-question 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-tbv-question .tbvq-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tbv-question .tbvq-key {\n  background: #0f2736 !important; border-radius: 16px !important; padding: 30px 32px !important;\n  margin-bottom: 32px !important; display: flex !important; align-items: flex-start !important; gap: 18px !important;\n}\n#upl-tbv-question .tbvq-key-icon {\n  width: 44px !important; height: 44px !important; border-radius: 10px !important; flex-shrink: 0 !important;\n  background: rgba(221,223,76,0.16) !important; display: flex !important; align-items: center !important; justify-content: center !important;\n}\n#upl-tbv-question .tbvq-key-icon svg { width: 22px !important; height: 22px !important; stroke: #DDDF4C !important; fill: none !important; stroke-width: 2 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tbv-question .tbvq-key-title { font-family: 'Poppins', sans-serif !important; font-size: 19px !important; font-weight: 700 !important; color: #ffffff !important; line-height: 1.4 !important; margin-bottom: 8px !important; display: block !important; }\n#upl-tbv-question .tbvq-key-text { color: rgba(255,255,255,0.78) !important; font-size: 14.5px !important; line-height: 1.7 !important; display: block !important; }\n#upl-tbv-question .tbvq-key-text strong { color: #ffffff !important; font-weight: 700 !important; }<\/p>\n<p>#upl-tbv-question .tbvq-grid { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 20px !important; margin-bottom: 8px !important; }\n#upl-tbv-question .tbvq-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; }\n#upl-tbv-question .tbvq-card.tbvq-blocked { border-color: #f3d2d2 !important; }\n#upl-tbv-question .tbvq-card.tbvq-ok { border-color: rgba(59,185,139,0.35) !important; }\n#upl-tbv-question .tbvq-card-status {\n  display: inline-flex !important; align-items: center !important; gap: 6px !important;\n  padding: 5px 12px !important; border-radius: 20px !important; font-size: 11.5px !important;\n  font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.4px !important; margin-bottom: 14px !important;\n}\n#upl-tbv-question .tbvq-card.tbvq-blocked .tbvq-card-status { background: rgba(220,38,38,0.1) !important; color: #dc2626 !important; }\n#upl-tbv-question .tbvq-card.tbvq-ok .tbvq-card-status { background: rgba(59,185,139,0.12) !important; color: #2aaa7e !important; }\n#upl-tbv-question .tbvq-card h3 { font-family: 'Poppins', sans-serif !important; font-size: 18px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 10px !important; display: block !important; line-height: 1.35 !important; }\n#upl-tbv-question .tbvq-card-text { font-size: 14.5px !important; color: #64748b !important; line-height: 1.7 !important; display: block !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tbv-question .tbvq-wrap { padding: 50px 20px !important; }\n  #upl-tbv-question h2 { font-size: 28px !important; }\n  #upl-tbv-question .tbvq-grid { grid-template-columns: 1fr !important; }\n  #upl-tbv-question .tbvq-key { flex-direction: column !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-question .tbvq-wrap { padding: 40px 16px !important; }\n  #upl-tbv-question h2 { font-size: 26px !important; }\n  #upl-tbv-question .tbvq-key { padding: 22px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-question h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-question\">\n<div class=\"tbvq-wrap\">\n    <span id=\"tbv-question\" class=\"tbvq-anchor\"><\/span><\/p>\n<div class=\"tbvq-badge\"><span class=\"tbvq-dot\"><\/span><span>The question that decides<\/span><\/div>\n<h2>Who do you want to write to first?<\/h2>\n<div class=\"tbvq-intro\">Every other difference between the Telegram Bot API and the Telegram User API is secondary to this one. Answer it first and the rest of this guide becomes a checklist, not a decision.<\/div>\n<div class=\"tbvq-key\">\n<div class=\"tbvq-key-icon\"><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><\/div>\n<div>\n        <span class=\"tbvq-key-title\">A bot cannot start a conversation with a user who has never messaged it first<\/span><br \/>\n        <span class=\"tbvq-key-text\">This is a Telegram platform rule, not a Unipile limitation or a library bug. A bot account can only reply inside a chat the user already opened, or after the user taps a <code>t.me<\/code> deep link or joins a group the bot is in. If your use case requires reaching out to someone who has not interacted with your bot yet, the Bot API is not an option, no matter which framework or library sits on top of it.<\/span>\n      <\/div>\n<\/p><\/div>\n<div class=\"tbvq-grid\">\n<div class=\"tbvq-card tbvq-ok\">\n        <span class=\"tbvq-card-status\">Bot API works<\/span><\/p>\n<h3>The user talks to your bot first<\/h3>\n<p>        <span class=\"tbvq-card-text\">Support bots, command-driven tools, notification opt-ins, chatbots linked from your product. The user finds your bot, starts the chat, and everything from there onward is a normal exchange the Bot API handles well.<\/span>\n      <\/div>\n<div class=\"tbvq-card tbvq-blocked\">\n        <span class=\"tbvq-card-status\">Bot API blocked<\/span><\/p>\n<h3>You need to reach out first<\/h3>\n<p>        <span class=\"tbvq-card-text\">Sales outreach, recruiting, customer messaging tied to an existing contact list, or any workflow where your product initiates contact with a Telegram user. This requires a real user account, which means the Telegram User API (MTProto), not the Bot API.<\/span>\n      <\/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\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  SECTION 03 : #upl-tbv-matrix, prefix tbvx-\n  Detailed capability matrix, endpoint by endpoint. Bot API \/ Telegram User API raw MTProto \/ Unipile linked account.\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-tbv-matrix,\n#upl-tbv-matrix *,\n#upl-tbv-matrix *::before,\n#upl-tbv-matrix *::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-tbv-matrix { display: block !important; }\n#upl-tbv-matrix br { display: none !important; }\n#upl-tbv-matrix p { display: contents !important; }\n#upl-tbv-matrix .tbvx-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tbv-matrix .tbvx-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tbv-matrix .tbvx-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-tbv-matrix .tbvx-badge .tbvx-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tbv-matrix 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-tbv-matrix .tbvx-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>\/* Desktop table *\/\n#upl-tbv-matrix .tbvx-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; margin-bottom: 24px !important; }\n#upl-tbv-matrix table { width: 100% !important; border-collapse: collapse !important; }\n#upl-tbv-matrix thead tr { background: #0f2736 !important; }\n#upl-tbv-matrix thead th { color: #ffffff !important; font-family: 'Poppins', sans-serif !important; font-size: 12.5px !important; font-weight: 700 !important; text-align: left !important; padding: 15px 16px !important; }\n#upl-tbv-matrix thead th:first-child { width: 26% !important; }\n#upl-tbv-matrix tbody tr { border-top: 1px solid #e5e7eb !important; }\n#upl-tbv-matrix tbody tr:nth-child(even) { background: #f8fafc !important; }\n#upl-tbv-matrix tbody td { padding: 13px 16px !important; font-size: 13px !important; color: #383838 !important; line-height: 1.55 !important; vertical-align: top !important; }\n#upl-tbv-matrix tbody td:first-child { font-weight: 700 !important; color: #0f2736 !important; }\n#upl-tbv-matrix .tbvx-yes { color: #2aaa7e !important; font-weight: 600 !important; }\n#upl-tbv-matrix .tbvx-no { color: #94a3b8 !important; }\n#upl-tbv-matrix .tbvx-partial { color: #8a8c2e !important; font-weight: 600 !important; }<\/p>\n<p>\/* Mobile cards *\/\n#upl-tbv-matrix .tbvx-cards { display: none !important; }\n#upl-tbv-matrix .tbvx-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 14px !important; padding: 18px !important; margin-bottom: 14px !important; }\n#upl-tbv-matrix .tbvx-card-title { font-family: 'Poppins', sans-serif !important; font-size: 15px !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-tbv-matrix .tbvx-card-row { display: flex !important; justify-content: space-between !important; gap: 12px !important; padding: 7px 0 !important; font-size: 12.5px !important; border-top: 1px solid #f0f1f3 !important; }\n#upl-tbv-matrix .tbvx-card-row:first-of-type { border-top: none !important; }\n#upl-tbv-matrix .tbvx-card-row-label { color: #64748b !important; font-weight: 600 !important; flex-shrink: 0 !important; max-width: 55% !important; }\n#upl-tbv-matrix .tbvx-card-row-val { color: #383838 !important; text-align: right !important; }<\/p>\n<p>#upl-tbv-matrix .tbvx-footnote { margin-top: 4px !important; background: #f4f5f7 !important; border-radius: 12px !important; padding: 18px 20px !important; margin-bottom: 28px !important; }\n#upl-tbv-matrix .tbvx-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-tbv-matrix .tbvx-footnote-text { font-size: 13.5px !important; color: #64748b !important; line-height: 1.7 !important; display: block !important; }<\/p>\n<p>#upl-tbv-matrix .tbvx-cta-row { display: flex !important; justify-content: center !important; }\n#upl-tbv-matrix .tbvx-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-tbv-matrix .tbvx-cta:hover { transform: translateY(-5px) !important; }\n#upl-tbv-matrix .tbvx-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-tbv-matrix .tbvx-wrap { padding: 50px 20px !important; }\n  #upl-tbv-matrix h2 { font-size: 28px !important; }\n}\n@media (max-width: 768px) {\n  #upl-tbv-matrix .tbvx-table-wrap { display: none !important; }\n  #upl-tbv-matrix .tbvx-cards { display: block !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-matrix .tbvx-wrap { padding: 40px 16px !important; }\n  #upl-tbv-matrix h2 { font-size: 26px !important; }\n  #upl-tbv-matrix .tbvx-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-matrix h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-matrix\">\n<div class=\"tbvx-wrap\">\n    <span id=\"tbv-matrix\" class=\"tbvx-anchor\"><\/span><\/p>\n<div class=\"tbvx-badge\"><span class=\"tbvx-dot\"><\/span><span>Capability matrix<\/span><\/div>\n<h2>What actually works, endpoint by endpoint<\/h2>\n<div class=\"tbvx-intro\">Beyond the headline difference, here is where each option blocks you in practice. \"Telegram User API (raw)\" means a self-built MTProto client with a library such as Telethon, Pyrogram, GramJS or TDLib. \"Unipile\" means the same real user account, connected without writing MTProto code yourself.<\/div>\n<div class=\"tbvx-table-wrap\">\n<table>\n<thead>\n<tr>\n<th>Capability<\/th>\n<th>Bot API<\/th>\n<th>Telegram User API (raw)<\/th>\n<th>Unipile<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Start a chat with a user who never messaged first<\/td>\n<td class=\"tbvx-no\">No<\/td>\n<td class=\"tbvx-yes\">Yes, subject to the user's privacy settings<\/td>\n<td class=\"tbvx-yes\">Yes, same rule as any Telegram account<\/td>\n<\/tr>\n<tr>\n<td>Send and receive text messages<\/td>\n<td class=\"tbvx-yes\">Yes, in chats the bot is part of<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<\/tr>\n<tr>\n<td>Read message history from before the bot joined<\/td>\n<td class=\"tbvx-no\">No<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<\/tr>\n<tr>\n<td>Group participant list, add, remove<\/td>\n<td class=\"tbvx-partial\">Limited to the bot's own permissions<\/td>\n<td class=\"tbvx-yes\">Yes, if you build it<\/td>\n<td class=\"tbvx-yes\">Yes, getParticipantsList, addParticipant, removeParticipant<\/td>\n<\/tr>\n<tr>\n<td>Group administration: approve, promote, revoke<\/td>\n<td class=\"tbvx-partial\">Yes, only if the bot is an admin<\/td>\n<td class=\"tbvx-yes\">Yes, if you build it<\/td>\n<td class=\"tbvx-no\">Not supported<\/td>\n<\/tr>\n<tr>\n<td>Channels, communities, broadcasts<\/td>\n<td class=\"tbvx-yes\">Yes, if added as admin<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<td class=\"tbvx-no\">Not supported<\/td>\n<\/tr>\n<tr>\n<td>Secret chats<\/td>\n<td class=\"tbvx-no\">Not applicable<\/td>\n<td class=\"tbvx-yes\">Yes, if you build it<\/td>\n<td class=\"tbvx-no\">Not supported<\/td>\n<\/tr>\n<tr>\n<td>Contact, location, poll, event attachments<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<td class=\"tbvx-yes\">Yes<\/td>\n<td class=\"tbvx-no\">Not supported<\/td>\n<\/tr>\n<tr>\n<td>Voice and video calls<\/td>\n<td class=\"tbvx-no\">No<\/td>\n<td class=\"tbvx-partial\">Possible, high implementation effort<\/td>\n<td class=\"tbvx-no\">Not supported<\/td>\n<\/tr>\n<tr>\n<td>Chat theme, archiving, chat deletion<\/td>\n<td class=\"tbvx-no\">Not applicable<\/td>\n<td class=\"tbvx-yes\">Yes, if you build it<\/td>\n<td class=\"tbvx-no\">Not supported<\/td>\n<\/tr>\n<tr>\n<td>Account identity<\/td>\n<td>Separate bot identity, visible badge<\/td>\n<td>Real user identity, phone-number bound<\/td>\n<td>Real user identity, your existing account<\/td>\n<\/tr>\n<tr>\n<td>Session and device management<\/td>\n<td>Token-based, no device concept<\/td>\n<td>You manage the MTProto auth key and 2FA yourself<\/td>\n<td>Managed via Telegram's own Devices feature<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<div class=\"tbvx-cards\">\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Start a chat cold<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">No<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes, privacy-dependent<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Yes<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Message history before joining<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">No<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Yes<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Group participants (get \/ add \/ remove)<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">Limited to bot permissions<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes, self-built<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Yes, dedicated endpoints<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Group administration<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">Yes, if admin bot<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes, self-built<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Not supported<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Channels, communities, broadcasts<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">Yes, as admin<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Not supported<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Secret chats<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">Not applicable<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes, self-built<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Not supported<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Contact \/ location \/ poll \/ event attachments<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">Yes<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Yes<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Not supported<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Voice and video calls<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">No<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Possible, high effort<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Not supported<\/span><\/div>\n<\/p><\/div>\n<div class=\"tbvx-card\">\n        <span class=\"tbvx-card-title\">Session \/ device management<\/span><\/p>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Bot API<\/span><span class=\"tbvx-card-row-val\">Token-based<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">User API (raw)<\/span><span class=\"tbvx-card-row-val\">Self-managed auth key + 2FA<\/span><\/div>\n<div class=\"tbvx-card-row\"><span class=\"tbvx-card-row-label\">Unipile<\/span><span class=\"tbvx-card-row-val\">Telegram's own Devices feature<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbvx-footnote\">\n      <span class=\"tbvx-footnote-title\">What Unipile does not cover on Telegram<\/span><br \/>\n      <span class=\"tbvx-footnote-text\">Channels, communities and broadcasts, chat theme, secret chats, contact, location, poll and event attachments, group administration (approving, promoting, revoking), chat deletion, archiving, and voice or video calls. If your project needs any of these, only a self-built Telegram User API client covers the full surface.<\/span>\n    <\/div>\n<div class=\"tbvx-cta-row\">\n      <a class=\"tbvx-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>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  SECTION 04 : #upl-tbv-cost, prefix tbvc-\n  Real cost of MTProto: session management, 2FA, api_id tied to phone number, implementation complexity, accounts under observation.\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-tbv-cost,\n#upl-tbv-cost *,\n#upl-tbv-cost *::before,\n#upl-tbv-cost *::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-tbv-cost { display: block !important; }\n#upl-tbv-cost br { display: none !important; }\n#upl-tbv-cost p { display: contents !important; }\n#upl-tbv-cost .tbvc-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tbv-cost .tbvc-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tbv-cost .tbvc-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-tbv-cost .tbvc-badge .tbvc-dot { width: 7px !important; height: 7px !important; background: #DDDF4C !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tbv-cost 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-tbv-cost .tbvc-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tbv-cost .tbvc-grid { display: grid !important; grid-template-columns: repeat(2, 1fr) !important; gap: 18px !important; margin-bottom: 32px !important; }\n#upl-tbv-cost .tbvc-card { background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 16px !important; padding: 24px !important; box-shadow: 0 8px 24px rgba(15,39,54,0.06) !important; }\n#upl-tbv-cost .tbvc-card-num {\n  display: inline-flex !important; align-items: center !important; justify-content: center !important;\n  width: 30px !important; height: 30px !important; border-radius: 8px !important;\n  background: rgba(221,223,76,0.18) !important; color: #8a8c2e !important;\n  font-family: 'Poppins', sans-serif !important; font-size: 13px !important; font-weight: 700 !important;\n  margin-bottom: 14px !important;\n}\n#upl-tbv-cost .tbvc-card h3 { font-family: 'Poppins', sans-serif !important; font-size: 16.5px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 8px !important; display: block !important; line-height: 1.35 !important; }\n#upl-tbv-cost .tbvc-card-text { font-size: 14px !important; color: #64748b !important; line-height: 1.7 !important; display: block !important; }\n#upl-tbv-cost .tbvc-card-text code { font-family: 'Courier New', monospace !important; background: #f1f5f9 !important; padding: 1px 5px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #383838 !important; }<\/p>\n<p>\/* Code block *\/\n#upl-tbv-cost .tbvc-code-wrapper { border-radius: 14px !important; overflow: hidden !important; background: #0d1117 !important; margin-bottom: 32px !important; }\n#upl-tbv-cost .tbvc-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-tbv-cost .tbvc-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tbv-cost .tbvc-dot-r { background: #ff5f57 !important; }\n#upl-tbv-cost .tbvc-dot-y { background: #febc2e !important; }\n#upl-tbv-cost .tbvc-dot-g { background: #28c840 !important; }\n#upl-tbv-cost .tbvc-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tbv-cost .tbvc-pre { padding: 22px 24px !important; font-size: 13.5px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tbv-cost .tbvc-pre code { font-family: 'Courier New', monospace !important; white-space: pre-wrap !important; word-break: break-word !important; display: block !important; }\n#upl-tbv-cost .tbvc-c { color: #8b949e !important; }\n#upl-tbv-cost .tbvc-k { color: #ff7b72 !important; }\n#upl-tbv-cost .tbvc-fn { color: #d2a8ff !important; }\n#upl-tbv-cost .tbvc-s { color: #a5d6ff !important; }\n#upl-tbv-cost .tbvc-w { color: #e6edf3 !important; }\n#upl-tbv-cost .tbvc-err { color: #ff7b72 !important; font-weight: 700 !important; }<\/p>\n<p>#upl-tbv-cost .tbvc-banner {\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-tbv-cost .tbvc-banner-text { flex: 1 1 380px !important; }\n#upl-tbv-cost .tbvc-banner-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-tbv-cost .tbvc-banner-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-tbv-cost .tbvc-banner-desc { color: rgba(255,255,255,0.75) !important; font-size: 14.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tbv-cost .tbvc-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-tbv-cost .tbvc-cta:hover { transform: translateY(-5px) !important; }\n#upl-tbv-cost .tbvc-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-tbv-cost .tbvc-wrap { padding: 50px 20px !important; }\n  #upl-tbv-cost h2 { font-size: 28px !important; }\n  #upl-tbv-cost .tbvc-grid { grid-template-columns: 1fr !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-cost .tbvc-wrap { padding: 40px 16px !important; }\n  #upl-tbv-cost h2 { font-size: 26px !important; }\n  #upl-tbv-cost .tbvc-pre { font-size: 12px !important; padding: 18px !important; }\n  #upl-tbv-cost .tbvc-banner { flex-direction: column !important; align-items: flex-start !important; padding: 22px !important; }\n  #upl-tbv-cost .tbvc-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-cost h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-cost\">\n<div class=\"tbvc-wrap\">\n    <span id=\"tbv-cost\" class=\"tbvc-anchor\"><\/span><\/p>\n<div class=\"tbvc-badge\"><span class=\"tbvc-dot\"><\/span><span>The real cost<\/span><\/div>\n<h2>The real cost of building on MTProto<\/h2>\n<div class=\"tbvc-intro\">The Telegram User API is free of charge, but \"free\" only covers the license. Building and maintaining a Telegram User API client yourself has a real engineering cost that a Bot API integration never has. Here is what that cost actually looks like.<\/div>\n<div class=\"tbvc-grid\">\n<div class=\"tbvc-card\">\n        <span class=\"tbvc-card-num\">01<\/span><\/p>\n<h3>Session and auth key management<\/h3>\n<p>        <span class=\"tbvc-card-text\">MTProto is a binary protocol, not REST. You implement the TL schema, the auth key exchange, and persist the resulting session yourself. Lose the session and the user has to re-authenticate from scratch.<\/span>\n      <\/div>\n<div class=\"tbvc-card\">\n        <span class=\"tbvc-card-num\">02<\/span><\/p>\n<h3>Two-factor authentication<\/h3>\n<p>        <span class=\"tbvc-card-text\">Accounts with a cloud password require handling Telegram's SRP-based 2FA flow during login. It is one more state machine to build, test, and keep working across every Telegram protocol update.<\/span>\n      <\/div>\n<div class=\"tbvc-card\">\n        <span class=\"tbvc-card-num\">03<\/span><\/p>\n<h3>One api_id per phone number<\/h3>\n<p>        <span class=\"tbvc-card-text\"><code>api_id<\/code> and <code>api_hash<\/code> are issued on <code>my.telegram.org<\/code> under \"API development tools,\" and require an active Telegram account. Telegram allows a single <code>api_id<\/code> per phone number, which shapes how you provision test and production credentials.<\/span>\n      <\/div>\n<div class=\"tbvc-card\">\n        <span class=\"tbvc-card-num\">04<\/span><\/p>\n<h3>Accounts under automatic observation<\/h3>\n<p>        <span class=\"tbvc-card-text\">Unofficial clients are placed under automatic observation by Telegram. Flooding, spam, and artificially inflating counters can trigger a permanent ban, which means rate limiting and warm-up are your responsibility, not a library default.<\/span>\n      <\/div>\n<\/p><\/div>\n<div class=\"tbvc-code-wrapper\">\n<div class=\"tbvc-editor-bar\">\n        <span class=\"tbvc-dot2 tbvc-dot-r\"><\/span><span class=\"tbvc-dot2 tbvc-dot-y\"><\/span><span class=\"tbvc-dot2 tbvc-dot-g\"><\/span><br \/>\n        <span class=\"tbvc-filename\">shared-api-id-in-open-source.log<\/span>\n      <\/div>\n<div class=\"tbvc-pre\"><code><span class=\"tbvc-c\">\/\/ Copy-pasting a sample api_id from an open source repo<\/span>&#10;<span class=\"tbvc-c\">\/\/ instead of registering your own on my.telegram.org<\/span>&#10;<span class=\"tbvc-w\">Error: <\/span><span class=\"tbvc-err\">API_ID_PUBLISHED_FLOOD<\/span>&#10;<span class=\"tbvc-c\">\/\/ Telegram flags api_id values published in public code.<\/span>&#10;<span class=\"tbvc-c\">\/\/ Every application you ship needs its own api_id \/ api_hash,<\/span>&#10;<span class=\"tbvc-c\">\/\/ one per phone number, or your end users hit this error.<\/span><\/code><\/div>\n<\/p><\/div>\n<div class=\"tbvc-banner\">\n<div class=\"tbvc-banner-text\">\n        <span class=\"tbvc-banner-eyebrow\">Skip the protocol work<\/span><br \/>\n        <span class=\"tbvc-banner-title\">None of this is required to connect a real Telegram account<\/span><br \/>\n        <span class=\"tbvc-banner-desc\">Unipile handles the MTProto session, the login flow and the credential lifecycle for you. You get a real, human Telegram account connected to your product without writing a client from scratch.<\/span>\n      <\/div>\n<p>      <a class=\"tbvc-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Start building 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>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  SECTION 05 : #upl-tbv-thirdway, prefix tbvt-\n  Third way: connect an existing Telegram user account via Devices (QR code) or Hosted Auth, no MTProto to implement.\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-tbv-thirdway,\n#upl-tbv-thirdway *,\n#upl-tbv-thirdway *::before,\n#upl-tbv-thirdway *::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-tbv-thirdway { display: block !important; }\n#upl-tbv-thirdway br { display: none !important; }\n#upl-tbv-thirdway p { display: contents !important; }\n#upl-tbv-thirdway .tbvt-wrap { max-width: 1160px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tbv-thirdway .tbvt-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tbv-thirdway .tbvt-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-tbv-thirdway .tbvt-badge .tbvt-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tbv-thirdway 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-tbv-thirdway .tbvt-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }\n#upl-tbv-thirdway .tbvt-intro a { color: #2aaa7e !important; text-decoration: underline !important; }<\/p>\n<p>#upl-tbv-thirdway .tbvt-grid { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 44px !important; align-items: center !important; margin-bottom: 32px !important; }<\/p>\n<p>#upl-tbv-thirdway .tbvt-list { display: flex !important; flex-direction: column !important; gap: 16px !important; margin-bottom: 24px !important; }\n#upl-tbv-thirdway .tbvt-item { display: flex !important; align-items: flex-start !important; gap: 14px !important; }\n#upl-tbv-thirdway .tbvt-item-icon {\n  width: 34px !important; height: 34px !important; border-radius: 8px !important; flex-shrink: 0 !important;\n  background: rgba(59,185,139,0.12) !important; display: flex !important; align-items: center !important; justify-content: center !important;\n}\n#upl-tbv-thirdway .tbvt-item-icon svg { width: 17px !important; height: 17px !important; stroke: #3BB98B !important; fill: none !important; stroke-width: 2.3 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tbv-thirdway .tbvt-item-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-tbv-thirdway .tbvt-item-text { font-size: 13.5px !important; color: #64748b !important; line-height: 1.65 !important; display: block !important; }\n#upl-tbv-thirdway .tbvt-item-text code { font-family: 'Courier New', monospace !important; background: #f1f5f9 !important; padding: 1px 5px !important; border-radius: 4px !important; font-size: 12.5px !important; color: #383838 !important; }<\/p>\n<p>#upl-tbv-thirdway .tbvt-actions { display: flex !important; align-items: center !important; gap: 14px !important; flex-wrap: wrap !important; }\n#upl-tbv-thirdway .tbvt-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-tbv-thirdway .tbvt-cta-primary:hover { transform: translateY(-5px) !important; }\n#upl-tbv-thirdway .tbvt-cta-primary svg { width: 16px !important; height: 16px !important; stroke: currentColor !important; fill: none !important; stroke-width: 2.5 !important; stroke-linecap: round !important; stroke-linejoin: round !important; }\n#upl-tbv-thirdway .tbvt-cta-secondary {\n  display: inline-flex !important; align-items: center !important; gap: 8px !important;\n  background: transparent !important; color: #0f2736 !important; padding: 12px 24px !important;\n  border-radius: 8px !important; border: 2px solid #0f2736 !important; font-size: 0.95rem !important;\n  font-weight: 600 !important; transition: all 0.3s ease !important; cursor: pointer !important; white-space: nowrap !important;\n}\n#upl-tbv-thirdway .tbvt-cta-secondary:hover { background: #0f2736 !important; color: #ffffff !important; }<\/p>\n<p>\/* Code mockup *\/\n#upl-tbv-thirdway .tbvt-code-wrapper { border-radius: 14px !important; overflow: hidden !important; background: #0d1117 !important; box-shadow: 0 20px 50px rgba(15, 39, 54, 0.18) !important; }\n#upl-tbv-thirdway .tbvt-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-tbv-thirdway .tbvt-dot2 { width: 12px !important; height: 12px !important; border-radius: 50% !important; display: inline-block !important; flex-shrink: 0 !important; }\n#upl-tbv-thirdway .tbvt-dot-r { background: #ff5f57 !important; }\n#upl-tbv-thirdway .tbvt-dot-y { background: #febc2e !important; }\n#upl-tbv-thirdway .tbvt-dot-g { background: #28c840 !important; }\n#upl-tbv-thirdway .tbvt-filename { color: #8b949e !important; font-size: 13px !important; margin-left: 6px !important; font-family: 'Courier New', monospace !important; }\n#upl-tbv-thirdway .tbvt-pre { padding: 22px 24px !important; font-size: 13.5px !important; line-height: 1.8 !important; overflow-x: auto !important; background: #0d1117 !important; }\n#upl-tbv-thirdway .tbvt-pre code { font-family: 'Courier New', monospace !important; white-space: pre-wrap !important; word-break: break-word !important; display: block !important; }\n#upl-tbv-thirdway .tbvt-c { color: #8b949e !important; }\n#upl-tbv-thirdway .tbvt-k { color: #ff7b72 !important; }\n#upl-tbv-thirdway .tbvt-fn { color: #d2a8ff !important; }\n#upl-tbv-thirdway .tbvt-s { color: #a5d6ff !important; }\n#upl-tbv-thirdway .tbvt-w { color: #e6edf3 !important; }\n#upl-tbv-thirdway .tbvt-editor-ok {\n  background: rgba(59, 185, 139, 0.1) !important; border-top: 1px solid rgba(59, 185, 139, 0.25) !important;\n  color: #3BB98B !important; padding: 11px 24px !important; font-size: 12.5px !important;\n  font-family: 'Courier New', monospace !important; display: flex !important; align-items: center !important; gap: 8px !important;\n}\n#upl-tbv-thirdway .tbvt-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>#upl-tbv-thirdway .tbvt-note { background: #f4f5f7 !important; border-radius: 12px !important; padding: 18px 20px !important; margin-top: 32px !important; }\n#upl-tbv-thirdway .tbvt-note-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-tbv-thirdway .tbvt-note-text { font-size: 13.5px !important; color: #64748b !important; line-height: 1.7 !important; display: block !important; }\n#upl-tbv-thirdway .tbvt-note-text a { color: #2aaa7e !important; text-decoration: underline !important; }<\/p>\n<p>@media (max-width: 900px) {\n  #upl-tbv-thirdway .tbvt-wrap { padding: 50px 20px !important; }\n  #upl-tbv-thirdway h2 { font-size: 28px !important; }\n  #upl-tbv-thirdway .tbvt-grid { grid-template-columns: 1fr !important; gap: 30px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-thirdway .tbvt-wrap { padding: 40px 16px !important; }\n  #upl-tbv-thirdway h2 { font-size: 26px !important; }\n  #upl-tbv-thirdway .tbvt-actions { width: 100% !important; gap: 10px !important; }\n  #upl-tbv-thirdway .tbvt-cta-primary, #upl-tbv-thirdway .tbvt-cta-secondary { width: 100% !important; justify-content: center !important; }\n  #upl-tbv-thirdway .tbvt-pre { font-size: 12px !important; padding: 18px !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-thirdway h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-thirdway\">\n<div class=\"tbvt-wrap\">\n    <span id=\"tbv-thirdway\" class=\"tbvt-anchor\"><\/span><\/p>\n<div class=\"tbvt-badge\"><span class=\"tbvt-dot\"><\/span><span>The third way<\/span><\/div>\n<h2>Connect an existing account, skip the MTProto build<\/h2>\n<div class=\"tbvt-intro\">Most teams do not actually want to build a Telegram client. They want the capabilities of a real user account: starting conversations, reading full history, managing group participants, without owning a binary protocol implementation. That is what Unipile's <a href=\"\/communication-api\/messaging-api\/telegram-api\/\">Telegram API<\/a> is for.<\/div>\n<div class=\"tbvt-grid\">\n<div class=\"tbvt-col-content\">\n<div class=\"tbvt-list\">\n<div class=\"tbvt-item\">\n<div class=\"tbvt-item-icon\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"\/><line x1=\"17.5\" y1=\"17.5\" x2=\"17.5\" y2=\"17.51\"\/><\/svg><\/div>\n<div>\n              <span class=\"tbvt-item-title\">Connect via Telegram's own Devices feature<\/span><br \/>\n              <span class=\"tbvt-item-text\">Unipile links an existing Telegram user account through Telegram's Devices function, the same mechanism that lets you log into Telegram Desktop or Telegram Web. Login happens by QR code, or through Hosted Auth with <code>providers: \"TELEGRAM\"<\/code> for a drop-in connection flow.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tbvt-item\">\n<div class=\"tbvt-item-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M12 2a4 4 0 0 1 4 4v4a4 4 0 0 1-8 0V6a4 4 0 0 1 4-4z\"\/><path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"\/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"\/><\/svg><\/div>\n<div>\n              <span class=\"tbvt-item-title\">No api_id, no api_hash, no MTProto to write<\/span><br \/>\n              <span class=\"tbvt-item-text\">You never handle the auth key exchange, the TL schema, or 2FA yourself. The linked account behaves like a real Telegram user because it is one, not a bot and not a simulated client.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tbvt-item\">\n<div class=\"tbvt-item-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<div>\n              <span class=\"tbvt-item-title\">Group participants, through dedicated endpoints<\/span><br \/>\n              <span class=\"tbvt-item-text\"><code>getParticipantsList<\/code>, <code>addParticipant<\/code>, <code>removeParticipant<\/code>, exposed via <code>POST<\/code>, <code>GET<\/code>, and <code>DELETE \/v2\/{account_id}\/chats\/{chat_id}\/participants<\/code>. No custom MTProto calls to write for basic membership management.<\/span>\n            <\/div>\n<\/p><\/div>\n<div class=\"tbvt-item\">\n<div class=\"tbvt-item-icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M13 2 3 14h9l-1 8 10-12h-9l1-8z\"\/><\/svg><\/div>\n<div>\n              <span class=\"tbvt-item-title\">Session status tied to Telegram's device list<\/span><br \/>\n              <span class=\"tbvt-item-text\">If the Unipile device is removed from the account's active sessions inside Telegram, the account status switches to <code>disconnected<\/code>. Session lifecycle is visible and predictable, not a black box you debug alone.<\/span>\n            <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbvt-actions\">\n          <a class=\"tbvt-cta-primary\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\"><span>Build your Telegram feature<\/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=\"tbvt-cta-secondary\" href=\"\/communication-api\/messaging-api\/telegram-api\/\"><span>Explore the Telegram API<\/span><\/a>\n        <\/div>\n<\/p><\/div>\n<div class=\"tbvt-col-mockup\">\n<div class=\"tbvt-code-wrapper\">\n<div class=\"tbvt-editor-bar\">\n            <span class=\"tbvt-dot2 tbvt-dot-r\"><\/span><span class=\"tbvt-dot2 tbvt-dot-y\"><\/span><span class=\"tbvt-dot2 tbvt-dot-g\"><\/span><br \/>\n            <span class=\"tbvt-filename\">connect-telegram-account.js<\/span>\n          <\/div>\n<div class=\"tbvt-pre\"><code><span class=\"tbvt-c\">\/\/ Connect an existing Telegram user account<\/span>&#10;<span class=\"tbvt-c\">\/\/ via Hosted Auth, no MTProto code required<\/span>&#10;<span class=\"tbvt-k\">const<\/span> <span class=\"tbvt-w\">link<\/span> <span class=\"tbvt-w\">=<\/span> <span class=\"tbvt-k\">await<\/span> <span class=\"tbvt-fn\">unipile<\/span><span class=\"tbvt-w\">.<\/span><span class=\"tbvt-fn\">hostedAuth<\/span><span class=\"tbvt-w\">.<\/span><span class=\"tbvt-fn\">create<\/span><span class=\"tbvt-w\">({<\/span>&#10;  <span class=\"tbvt-w\">providers:<\/span> <span class=\"tbvt-w\">[<\/span><span class=\"tbvt-s\">\"TELEGRAM\"<\/span><span class=\"tbvt-w\">],<\/span>&#10;  <span class=\"tbvt-w\">expiresOn:<\/span> <span class=\"tbvt-s\">\"2026-12-31T23:59:59.000Z\"<\/span>&#10;<span class=\"tbvt-w\">});<\/span>&#10;&#10;<span class=\"tbvt-c\">\/\/ User scans the QR code with the Telegram app<\/span>&#10;<span class=\"tbvt-c\">\/\/ Account status becomes \"connected\"<\/span>&#10;&#10;<span class=\"tbvt-c\">\/\/ GET \/v2\/{account_id}\/chats\/{chat_id}\/participants<\/span>&#10;<span class=\"tbvt-k\">const<\/span> <span class=\"tbvt-w\">members<\/span> <span class=\"tbvt-w\">=<\/span> <span class=\"tbvt-k\">await<\/span> <span class=\"tbvt-fn\">unipile<\/span><span class=\"tbvt-w\">.<\/span><span class=\"tbvt-fn\">chats<\/span><span class=\"tbvt-w\">.<\/span><span class=\"tbvt-fn\">getParticipantsList<\/span><span class=\"tbvt-w\">(<\/span><span class=\"tbvt-w\">chatId<\/span><span class=\"tbvt-w\">);<\/span><\/code><\/div>\n<div class=\"tbvt-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<div class=\"tbvt-note\">\n          <span class=\"tbvt-note-title\">Same rules, no shortcut around them<\/span><br \/>\n          <span class=\"tbvt-note-text\">A linked account is still a Telegram account and follows Telegram's own limits: avoid brand new accounts for heavy use, ramp up volume progressively, and keep at least 10 to 20 seconds between messages. See the <a href=\"\/how-to-get-telegram-api-the-ultimate-step-by-step-guide\/\">Telegram API guide<\/a> and the <a href=\"\/telegram-api-send-message-a-comprehensive-guide\/\">send message guide<\/a> for the full setup.<\/span>\n        <\/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\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  SECTION 06 : #upl-tbv-decision, prefix tbvd-\n  Final decision tree: which option for your case.\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-tbv-decision,\n#upl-tbv-decision *,\n#upl-tbv-decision *::before,\n#upl-tbv-decision *::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-tbv-decision { display: block !important; }\n#upl-tbv-decision br { display: none !important; }\n#upl-tbv-decision p { display: contents !important; }\n#upl-tbv-decision .tbvd-wrap { max-width: 1100px !important; margin: 0 auto !important; padding: 70px 24px !important; }\n#upl-tbv-decision .tbvd-anchor { display: block !important; position: relative !important; top: -80px !important; visibility: hidden !important; }\n#upl-tbv-decision .tbvd-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-tbv-decision .tbvd-badge .tbvd-dot { width: 7px !important; height: 7px !important; background: #3BB98B !important; border-radius: 50% !important; flex-shrink: 0 !important; display: block !important; }\n#upl-tbv-decision 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-tbv-decision .tbvd-intro { font-size: 17px !important; line-height: 1.8 !important; color: #383838 !important; margin-bottom: 36px !important; display: block !important; }<\/p>\n<p>#upl-tbv-decision .tbvd-flow { display: flex !important; flex-direction: column !important; gap: 0 !important; }\n#upl-tbv-decision .tbvd-step { display: flex !important; gap: 20px !important; }\n#upl-tbv-decision .tbvd-rail { display: flex !important; flex-direction: column !important; align-items: center !important; flex-shrink: 0 !important; width: 40px !important; }\n#upl-tbv-decision .tbvd-num {\n  width: 40px !important; height: 40px !important; border-radius: 50% !important;\n  background: #0f2736 !important; color: #ffffff !important; display: flex !important;\n  align-items: center !important; justify-content: center !important;\n  font-family: 'Poppins', sans-serif !important; font-size: 15px !important; font-weight: 700 !important; flex-shrink: 0 !important;\n}\n#upl-tbv-decision .tbvd-step.tbvd-final .tbvd-num { background: #3BB98B !important; }\n#upl-tbv-decision .tbvd-line { width: 2px !important; flex: 1 !important; background: #e5e7eb !important; min-height: 26px !important; }\n#upl-tbv-decision .tbvd-body { flex: 1 !important; padding-bottom: 26px !important; }\n#upl-tbv-decision .tbvd-q { font-family: 'Poppins', sans-serif !important; font-size: 16.5px !important; font-weight: 700 !important; color: #0f2736 !important; margin-bottom: 12px !important; display: block !important; line-height: 1.4 !important; padding-top: 6px !important; }\n#upl-tbv-decision .tbvd-outcomes { display: flex !important; flex-direction: column !important; gap: 10px !important; }\n#upl-tbv-decision .tbvd-outcome {\n  background: #ffffff !important; border: 1px solid #e5e7eb !important; border-radius: 12px !important;\n  padding: 14px 18px !important; display: flex !important; align-items: center !important; gap: 12px !important; flex-wrap: wrap !important;\n}\n#upl-tbv-decision .tbvd-outcome-arrow { color: #94a3b8 !important; font-weight: 700 !important; flex-shrink: 0 !important; }\n#upl-tbv-decision .tbvd-outcome-text { font-size: 14px !important; color: #383838 !important; line-height: 1.6 !important; flex: 1 1 auto !important; }\n#upl-tbv-decision .tbvd-outcome-tag {\n  display: inline-flex !important; align-items: center !important; padding: 4px 10px !important;\n  border-radius: 6px !important; font-size: 12px !important; font-weight: 700 !important; flex-shrink: 0 !important;\n}\n#upl-tbv-decision .tbvd-tag-bot { background: rgba(100,116,139,0.12) !important; color: #475569 !important; }\n#upl-tbv-decision .tbvd-tag-raw { background: rgba(221,223,76,0.18) !important; color: #8a8c2e !important; }\n#upl-tbv-decision .tbvd-tag-unipile { background: rgba(59,185,139,0.14) !important; color: #2aaa7e !important; }<\/p>\n<p>#upl-tbv-decision .tbvd-final-card {\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; margin-top: 6px !important;\n}\n#upl-tbv-decision .tbvd-final-text { flex: 1 1 380px !important; }\n#upl-tbv-decision .tbvd-final-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-tbv-decision .tbvd-final-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-tbv-decision .tbvd-final-desc { color: rgba(255,255,255,0.75) !important; font-size: 14.5px !important; line-height: 1.65 !important; display: block !important; }\n#upl-tbv-decision .tbvd-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-tbv-decision .tbvd-cta:hover { transform: translateY(-5px) !important; }\n#upl-tbv-decision .tbvd-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-tbv-decision .tbvd-wrap { padding: 50px 20px !important; }\n  #upl-tbv-decision h2 { font-size: 28px !important; }\n}\n@media (max-width: 600px) {\n  #upl-tbv-decision .tbvd-wrap { padding: 40px 16px !important; }\n  #upl-tbv-decision h2 { font-size: 26px !important; }\n  #upl-tbv-decision .tbvd-rail { width: 32px !important; }\n  #upl-tbv-decision .tbvd-num { width: 32px !important; height: 32px !important; font-size: 13px !important; }\n  #upl-tbv-decision .tbvd-step { gap: 14px !important; }\n  #upl-tbv-decision .tbvd-final-card { flex-direction: column !important; align-items: flex-start !important; padding: 22px !important; }\n  #upl-tbv-decision .tbvd-cta { width: 100% !important; justify-content: center !important; }\n}\n@media (max-width: 400px) {\n  #upl-tbv-decision h2 { font-size: 24px !important; }\n}\n<\/style>\n<div id=\"upl-tbv-decision\">\n<div class=\"tbvd-wrap\">\n    <span id=\"tbv-decision\" class=\"tbvd-anchor\"><\/span><\/p>\n<div class=\"tbvd-badge\"><span class=\"tbvd-dot\"><\/span><span>Decision tree<\/span><\/div>\n<h2>Which one is right for your case<\/h2>\n<div class=\"tbvd-intro\">Three questions, in order. Stop at the first one that matches your project.<\/div>\n<div class=\"tbvd-flow\">\n<div class=\"tbvd-step\">\n<div class=\"tbvd-rail\">\n<div class=\"tbvd-num\">1<\/div>\n<div class=\"tbvd-line\"><\/div>\n<\/div>\n<div class=\"tbvd-body\">\n          <span class=\"tbvd-q\">Does the user always message you first, and does the bot only need to reply to commands and messages?<\/span><\/p>\n<div class=\"tbvd-outcomes\">\n<div class=\"tbvd-outcome\"><span class=\"tbvd-outcome-arrow\">-&gt;<\/span><span class=\"tbvd-outcome-text\">Support bots, opt-in notifications, command tools where the user initiates contact.<\/span><span class=\"tbvd-outcome-tag tbvd-tag-bot\">Bot API<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbvd-step\">\n<div class=\"tbvd-rail\">\n<div class=\"tbvd-num\">2<\/div>\n<div class=\"tbvd-line\"><\/div>\n<\/div>\n<div class=\"tbvd-body\">\n          <span class=\"tbvd-q\">Do you need to reach out first, and do you also need channels, secret chats, group administration, or calls?<\/span><\/p>\n<div class=\"tbvd-outcomes\">\n<div class=\"tbvd-outcome\"><span class=\"tbvd-outcome-arrow\">-&gt;<\/span><span class=\"tbvd-outcome-text\">Full platform coverage, and you are willing to build and maintain your own MTProto client with Telethon, Pyrogram, GramJS or TDLib.<\/span><span class=\"tbvd-outcome-tag tbvd-tag-raw\">Telegram User API, self-built<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbvd-step tbvd-final\">\n<div class=\"tbvd-rail\">\n<div class=\"tbvd-num\">3<\/div>\n<\/div>\n<div class=\"tbvd-body\">\n          <span class=\"tbvd-q\">Do you need to reach out first, act as a real account, and get moving without owning MTProto?<\/span><\/p>\n<div class=\"tbvd-outcomes\">\n<div class=\"tbvd-outcome\"><span class=\"tbvd-outcome-arrow\">-&gt;<\/span><span class=\"tbvd-outcome-text\">Messaging, chat history, and group participant management on a connected user account, with the session handled for you.<\/span><span class=\"tbvd-outcome-tag tbvd-tag-unipile\">Unipile<\/span><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"tbvd-final-card\">\n<div class=\"tbvd-final-text\">\n        <span class=\"tbvd-final-eyebrow\">Most teams land here<\/span><br \/>\n        <span class=\"tbvd-final-title\">Connect a real Telegram account without building a client<\/span><br \/>\n        <span class=\"tbvd-final-desc\">If your project needs to reach out first but does not need channels, secret chats, or calls, a linked account through Unipile gets you there without a Telegram User API implementation to maintain.<\/span>\n      <\/div>\n<p>      <a class=\"tbvd-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>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<br \/>\n[et_pb_section fb_built=\"1\" _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.27.3\" background_color=\"transparent\" custom_padding=\"0px|0px|0px|0px|false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.27.3\" global_colors_info=\"{}\"][et_pb_code _builder_version=\"4.27.3\" global_colors_info=\"{}\"]<!--\n  FAQ CANONIQUE UNIPILE : copiee telle quelle depuis \/Users\/m1\/Unipile\/articles\/_templates\/faq-canonique.html\n  prefix = tbv, anchor = tbv-faq. Structure\/CSS\/JS intouches.\n  QUESTIONS\/ANSWERS = SLOTS OUVERTS, ne pas inventer. Voir SLOTS-OUVERTS.md.\n  Additif wpautop (regle reference_wp_divi_push.md 2026-08-06) : br neutralise + p en display:contents.\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=\"tbv-faq\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><\/p>\n<style>\n#upl-tbv-faq { font-family:'Inter',sans-serif; padding:80px 20px; max-width:900px; margin:0 auto; background:transparent!important; }\n#upl-tbv-faq *, #upl-tbv-faq *::before, #upl-tbv-faq *::after { margin:0!important; padding:0!important; box-sizing:border-box!important; }\n#upl-tbv-faq .upl-faq-header { text-align:center!important; margin-bottom:60px!important; }\n#upl-tbv-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-tbv-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-tbv-faq .upl-faq-list { display:flex!important; flex-direction:column!important; gap:12px!important; }\n#upl-tbv-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-tbv-faq .upl-faq-item:hover { border-color:#3BB98B!important; box-shadow:0 4px 20px rgba(59,185,139,0.08)!important; }\n#upl-tbv-faq .upl-faq-item.active { border-color:#3BB98B!important; box-shadow:0 8px 30px rgba(59,185,139,0.12)!important; }\n#upl-tbv-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-tbv-faq .upl-faq-question-content { display:flex!important; align-items:flex-start!important; gap:16px!important; flex:1!important; }\n#upl-tbv-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-tbv-faq .upl-faq-item.active .upl-faq-number { background:rgba(59,185,139,0.2)!important; color:#2a9d6e!important; }\n#upl-tbv-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-tbv-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-tbv-faq .upl-faq-icon svg { width:18px!important; height:18px!important; color:#64748b!important; transition:all 0.3s ease!important; }\n#upl-tbv-faq .upl-faq-item:hover .upl-faq-icon { background:rgba(59,185,139,0.1)!important; }\n#upl-tbv-faq .upl-faq-item:hover .upl-faq-icon svg { color:#3BB98B!important; }\n#upl-tbv-faq .upl-faq-item.active .upl-faq-icon { background:#3BB98B!important; transform:rotate(45deg)!important; }\n#upl-tbv-faq .upl-faq-item.active .upl-faq-icon svg { color:#ffffff!important; }\n#upl-tbv-faq .upl-faq-answer { max-height:0!important; overflow:hidden!important; transition:max-height 0.4s ease!important; }\n#upl-tbv-faq .upl-faq-item.active .upl-faq-answer { max-height:600px!important; }\n#upl-tbv-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-tbv-faq .upl-faq-answer-content strong { color:#0f2736!important; font-weight:600!important; }\n#upl-tbv-faq .upl-faq-answer-content a { color:#3BB98B!important; text-decoration:underline!important; }\n#upl-tbv-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-tbv-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-tbv-faq .upl-faq-cta-text { color:#475569!important; font-size:1rem!important; }\n#upl-tbv-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-tbv-faq .upl-faq-cta-button:hover { transform:translateY(-2px)!important; }\n@media (max-width:768px) {\n  #upl-tbv-faq { padding:60px 16px!important; }\n  #upl-tbv-faq .upl-faq-answer-content { padding:0 20px 20px 20px!important; }\n  #upl-tbv-faq .upl-faq-question { padding:18px 20px!important; }\n  #upl-tbv-faq .upl-faq-cta { flex-direction:column!important; align-items:flex-start!important; }\n}\n\/* Additif wpautop (regle reference_wp_divi_push.md 2026-08-06) *\/\n#upl-tbv-faq br { display:none!important; }\n#upl-tbv-faq p { display:contents!important; }<\/p>\n<p>#unipile-toc a{text-decoration:none!important;color:inherit!important}\n#unipile-toc a:hover{text-decoration:none!important}\n#upl-tbv-cost a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-cost a:hover{text-decoration:none!important}\n#upl-tbv-decision a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-decision a:hover{text-decoration:none!important}\n#upl-tbv-faq a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-faq a:hover{text-decoration:none!important}\n#upl-tbv-hero a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-hero a:hover{text-decoration:none!important}\n#upl-tbv-matrix a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-matrix a:hover{text-decoration:none!important}\n#upl-tbv-models a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-models a:hover{text-decoration:none!important}\n#upl-tbv-question a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-question a:hover{text-decoration:none!important}\n#upl-tbv-thirdway a{text-decoration:none!important;color:inherit!important}\n#upl-tbv-thirdway a:hover{text-decoration:none!important}<\/style>\n<section id=\"upl-tbv-faq\">\n<div class=\"upl-faq-header\">\n<h2 class=\"upl-faq-title\">Telegram Bot API vs Telegram API - FAQ<\/h2>\n<div class=\"upl-faq-subtitle\">Common questions on choosing between the Telegram Bot API and the Telegram User API (MTProto).<\/div>\n<\/p><\/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 difference between the Telegram Bot API and 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>The Bot API is an HTTP interface that drives a bot account and exposes a deliberately limited surface. The Telegram API, also called the Client API, speaks the MTProto binary protocol and drives a real user account with the full feature set. They are different account types, not two versions of the same thing.<\/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\">Which Telegram API should I use?<\/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>Ask who you need to write to. If your users message you first and a bot identity is acceptable, use the Bot API. If you need to reach people who have not contacted you, or to act as a real person, you need user-account access.<\/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\">Can a Telegram bot message a user who has never contacted it?<\/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>No. The user must start the conversation first. This is the single limit that pushes most products off the Bot API, and no endpoint works around it.<\/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\">Do I need api_id and api_hash for the 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>No. The Bot API only needs the bot token that BotFather gives you. api_id and api_hash come from my.telegram.org and are for the Client API, with one api_id allowed 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\">05<\/span><br \/>\n          <span class=\"upl-faq-question-text\">How hard is MTProto to implement?<\/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>Hard enough that almost nobody writes it from scratch. You handle session persistence, two-factor authentication, reconnection and a binary protocol. Most teams use Telethon, Pyrogram, GramJS or TDLib, and still own the session lifecycle.<\/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\">What is the Telegram User 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>It is another name for the Client API, the MTProto interface that authenticates as a real Telegram user rather than a bot.<\/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\">07<\/span><br \/>\n          <span class=\"upl-faq-question-text\">Can I get user-account access 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. Connecting an existing account through Telegram's Devices feature gives user-account access without implementing MTProto. That is how Unipile links Telegram accounts, through a QR code login or a hosted authentication flow.<\/div>\n<\/div><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"upl-faq-cta\">\n<div class=\"upl-faq-cta-text\">Still have questions? Our team is here to help.<\/div>\n<p>    <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-tbv-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\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    { \"@type\": \"Question\", \"name\": \"What is the difference between the Telegram Bot API and the Telegram API?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"The Bot API is an HTTP interface that drives a bot account and exposes a deliberately limited surface. The Telegram API, also called the Client API, speaks the MTProto binary protocol and drives a real user account with the full feature set. They are different account types, not two versions of the same thing.\" } },\n    { \"@type\": \"Question\", \"name\": \"Which Telegram API should I use?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Ask who you need to write to. If your users message you first and a bot identity is acceptable, use the Bot API. If you need to reach people who have not contacted you, or to act as a real person, you need user-account access.\" } },\n    { \"@type\": \"Question\", \"name\": \"Can a Telegram bot message a user who has never contacted it?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"No. The user must start the conversation first. This is the single limit that pushes most products off the Bot API, and no endpoint works around it.\" } },\n    { \"@type\": \"Question\", \"name\": \"Do I need api_id and api_hash for the Bot API?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"No. The Bot API only needs the bot token that BotFather gives you. api_id and api_hash come from my.telegram.org and are for the Client API, with one api_id allowed per phone number.\" } },\n    { \"@type\": \"Question\", \"name\": \"How hard is MTProto to implement?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Hard enough that almost nobody writes it from scratch. You handle session persistence, two-factor authentication, reconnection and a binary protocol. Most teams use Telethon, Pyrogram, GramJS or TDLib, and still own the session lifecycle.\" } },\n    { \"@type\": \"Question\", \"name\": \"What is the Telegram User API?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"It is another name for the Client API, the MTProto interface that authenticates as a real Telegram user rather than a bot.\" } },\n    { \"@type\": \"Question\", \"name\": \"Can I get user-account access without building an MTProto client?\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Yes. Connecting an existing account through Telegram's Devices feature gives user-account access without implementing MTProto. That is how Unipile links Telegram accounts, through a QR code login or a hosted authentication flow.\" } }\n  ]\n}\n<\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Telegram Bot API vs Telegram API Telegram Bot API vs Telegram API: Which One Do You Need? The Telegram Bot API and the Telegram API (also called the Telegram User API, built on MTProto) solve different problems. One runs a bot account over HTTP. The other runs a real user account over a binary protocol [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":279745,"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-279730","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>Telegram Bot API vs Telegram API: Which One Do You Need? - Unipile<\/title>\n<meta name=\"description\" content=\"Bot API or Client API on MTProto? The choice comes down to who you need to message. Capability matrix, real costs, and the connected account alternative.\" \/>\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\/it\/telegram-bot-api-vs-telegram-api\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Telegram Bot API vs Telegram API: Which One Do You Need? - Unipile\" \/>\n<meta property=\"og:description\" content=\"Bot API or Client API on MTProto? The choice comes down to who you need to message. Capability matrix, real costs, and the connected account alternative.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.unipile.com\/it\/telegram-bot-api-vs-telegram-api\/\" \/>\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=\"2026-08-11T13:56:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-13T13:12:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/08\/telegram-bot-api-vs-telegram-api.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=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Damien Girardeau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/\"},\"author\":{\"name\":\"Damien Girardeau\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/person\\\/a2ac44e22bdc27d497ce8b58716a673e\"},\"headline\":\"Telegram Bot API vs Telegram API: Which One Do You Need?\",\"datePublished\":\"2026-08-11T13:56:30+00:00\",\"dateModified\":\"2026-08-13T13:12:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/\"},\"wordCount\":2783,\"publisher\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/telegram-bot-api-vs-telegram-api.png\",\"articleSection\":[\"API Guidelines\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/\",\"name\":\"Telegram Bot API vs Telegram API: Which One Do You Need? - Unipile\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/telegram-bot-api-vs-telegram-api.png\",\"datePublished\":\"2026-08-11T13:56:30+00:00\",\"dateModified\":\"2026-08-13T13:12:49+00:00\",\"description\":\"Bot API or Client API on MTProto? The choice comes down to who you need to message. Capability matrix, real costs, and the connected account alternative.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/telegram-bot-api-vs-telegram-api.png\",\"contentUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/telegram-bot-api-vs-telegram-api.png\",\"width\":2400,\"height\":1600,\"caption\":\"Bot API or Client API on MTProto? The choice comes down to who you need to message first.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/telegram-bot-api-vs-telegram-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.unipile.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Telegram Bot API vs Telegram API: Which One Do You Need?\"}]},{\"@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\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\",\"name\":\"Unipile\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@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\":\"it-IT\",\"@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":"Telegram Bot API vs Telegram API: Which One Do You Need? - Unipile","description":"Bot API or Client API on MTProto? The choice comes down to who you need to message. Capability matrix, real costs, and the connected account alternative.","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\/it\/telegram-bot-api-vs-telegram-api\/","og_locale":"it_IT","og_type":"article","og_title":"Telegram Bot API vs Telegram API: Which One Do You Need? - Unipile","og_description":"Bot API or Client API on MTProto? The choice comes down to who you need to message. Capability matrix, real costs, and the connected account alternative.","og_url":"https:\/\/www.unipile.com\/it\/telegram-bot-api-vs-telegram-api\/","og_site_name":"Unipile","article_publisher":"https:\/\/www.facebook.com\/unipilefr","article_published_time":"2026-08-11T13:56:30+00:00","article_modified_time":"2026-08-13T13:12:49+00:00","og_image":[{"width":2400,"height":1600,"url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/08\/telegram-bot-api-vs-telegram-api.png","type":"image\/png"}],"author":"Damien Girardeau","twitter_card":"summary_large_image","twitter_creator":"@UnipileAPI","twitter_site":"@UnipileAPI","twitter_misc":{"Scritto da":"Damien Girardeau","Tempo di lettura stimato":"11 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#article","isPartOf":{"@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/"},"author":{"name":"Damien Girardeau","@id":"https:\/\/www.unipile.com\/#\/schema\/person\/a2ac44e22bdc27d497ce8b58716a673e"},"headline":"Telegram Bot API vs Telegram API: Which One Do You Need?","datePublished":"2026-08-11T13:56:30+00:00","dateModified":"2026-08-13T13:12:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/"},"wordCount":2783,"publisher":{"@id":"https:\/\/www.unipile.com\/#organization"},"image":{"@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/08\/telegram-bot-api-vs-telegram-api.png","articleSection":["API Guidelines"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/","url":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/","name":"Telegram Bot API vs Telegram API: Which One Do You Need? - Unipile","isPartOf":{"@id":"https:\/\/www.unipile.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#primaryimage"},"image":{"@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/08\/telegram-bot-api-vs-telegram-api.png","datePublished":"2026-08-11T13:56:30+00:00","dateModified":"2026-08-13T13:12:49+00:00","description":"Bot API or Client API on MTProto? The choice comes down to who you need to message. Capability matrix, real costs, and the connected account alternative.","breadcrumb":{"@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#primaryimage","url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/08\/telegram-bot-api-vs-telegram-api.png","contentUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/08\/telegram-bot-api-vs-telegram-api.png","width":2400,"height":1600,"caption":"Bot API or Client API on MTProto? The choice comes down to who you need to message first."},{"@type":"BreadcrumbList","@id":"https:\/\/www.unipile.com\/telegram-bot-api-vs-telegram-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.unipile.com\/"},{"@type":"ListItem","position":2,"name":"Telegram Bot API vs Telegram API: Which One Do You Need?"}]},{"@type":"WebSite","@id":"https:\/\/www.unipile.com\/#website","url":"https:\/\/www.unipile.com\/","name":"Unipile","description":"Integrazione di messaggistica ed e-mail, connessione semplice tramite 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":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.unipile.com\/#organization","name":"Unipile","url":"https:\/\/www.unipile.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@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":"it-IT","@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\/it\/wp-json\/wp\/v2\/posts\/279730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/comments?post=279730"}],"version-history":[{"count":6,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/posts\/279730\/revisions"}],"predecessor-version":[{"id":279770,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/posts\/279730\/revisions\/279770"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/media\/279745"}],"wp:attachment":[{"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/media?parent=279730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/categories?post=279730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/tags?post=279730"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/www.unipile.com\/it\/wp-json\/wp\/v2\/post_folder?post=279730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}