{"id":279145,"date":"2026-06-04T15:11:05","date_gmt":"2026-06-04T13:11:05","guid":{"rendered":"https:\/\/www.unipile.com\/?p=279145"},"modified":"2026-06-08T16:58:57","modified_gmt":"2026-06-08T14:58:57","slug":"google-oauth-yenileme-jetonu","status":"publish","type":"post","link":"https:\/\/www.unipile.com\/tr\/google-oauth-refresh-token\/","title":{"rendered":"Google OAuth Yenileme Tokenleri: S\u00fcresi Dolanlar, 7 G\u00fcnl\u00fck S\u0131n\u0131r ve Ya\u015fam D\u00f6ng\u00fcs\u00fc (2026)"},"content":{"rendered":"\n[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->\/* ============================================================<!-- [et_pb_line_break_holder] -->   UNIPILE TOC  -  Google Refresh Token article  -  Divi-safe<!-- [et_pb_line_break_holder] -->   ============================================================ *\/<!-- [et_pb_line_break_holder] -->#unipile-toc,<!-- [et_pb_line_break_holder] -->#unipile-toc *,<!-- [et_pb_line_break_holder] -->#unipile-toc *::before,<!-- [et_pb_line_break_holder] -->#unipile-toc *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: normal !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  width: 100% !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  position: relative !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  font-size: 16px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-card {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  padding: 32px !important;<!-- [et_pb_line_break_holder] -->  box-shadow: 0 2px 12px rgba(15, 39, 54, 0.04) !important;<!-- [et_pb_line_break_holder] -->  width: 100% !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-header {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: space-between !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 24px !important;<!-- [et_pb_line_break_holder] -->  padding-bottom: 20px !important;<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-header-left {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-icon-box {<!-- [et_pb_line_break_holder] -->  width: 36px !important;<!-- [et_pb_line_break_holder] -->  height: 36px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-icon-box svg {<!-- [et_pb_line_break_holder] -->  width: 18px !important;<!-- [et_pb_line_break_holder] -->  height: 18px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.2 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-toggle {<!-- [et_pb_line_break_holder] -->  display: none !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 6px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 10px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 6px !important;<!-- [et_pb_line_break_holder] -->  transition: background 0.2s ease !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-toggle svg {<!-- [et_pb_line_break_holder] -->  width: 14px !important;<!-- [et_pb_line_break_holder] -->  height: 14px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.3s ease !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc:not(.utc-expanded) .utc-toggle svg {<!-- [et_pb_line_break_holder] -->  transform: rotate(-90deg) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-grid {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(4, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-col {<!-- [et_pb_line_break_holder] -->  padding: 0 24px !important;<!-- [et_pb_line_break_holder] -->  border-left: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-col:first-child {<!-- [et_pb_line_break_holder] -->  padding-left: 0 !important;<!-- [et_pb_line_break_holder] -->  border-left: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-col:last-child {<!-- [et_pb_line_break_holder] -->  padding-right: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-col-label {<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #94a3b8 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.8px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link-list {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 10px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 10px !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  transition: all 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  padding: 4px 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-num {<!-- [et_pb_line_break_holder] -->  width: 18px !important;<!-- [et_pb_line_break_holder] -->  height: 18px !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->  background: #f4f5f7 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 4px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  font-size: 10px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #94a3b8 !important;<!-- [et_pb_line_break_holder] -->  transition: all 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  margin-top: 1px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-num.utc-num-faq {<!-- [et_pb_line_break_holder] -->  font-size: 8px !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.2px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link-text {<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 500 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.45 !important;<!-- [et_pb_line_break_holder] -->  transition: color 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  flex: 1 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link:hover .utc-num {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.15) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link:hover .utc-link-text {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link.utc-active .utc-num {<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link.utc-active .utc-link-text {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-link.utc-read .utc-num {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.15) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-toc .utc-tag-best {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [et_pb_line_break_holder] -->  font-size: 9px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 6px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 4px !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  margin-left: 6px !important;<!-- [et_pb_line_break_holder] -->  vertical-align: middle !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 1000px) {<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-grid {<!-- [et_pb_line_break_holder] -->    grid-template-columns: repeat(2, 1fr) !important;<!-- [et_pb_line_break_holder] -->    gap: 24px 0 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-col {<!-- [et_pb_line_break_holder] -->    padding: 0 20px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-col:nth-child(2n+1) {<!-- [et_pb_line_break_holder] -->    padding-left: 0 !important;<!-- [et_pb_line_break_holder] -->    border-left: none !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-col:nth-child(2n) {<!-- [et_pb_line_break_holder] -->    padding-right: 0 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 700px) {<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-card {<!-- [et_pb_line_break_holder] -->    padding: 22px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-header {<!-- [et_pb_line_break_holder] -->    margin-bottom: 0 !important;<!-- [et_pb_line_break_holder] -->    padding-bottom: 0 !important;<!-- [et_pb_line_break_holder] -->    border-bottom: none !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-toggle {<!-- [et_pb_line_break_holder] -->    display: flex !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-grid {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1fr !important;<!-- [et_pb_line_break_holder] -->    gap: 22px !important;<!-- [et_pb_line_break_holder] -->    overflow: hidden !important;<!-- [et_pb_line_break_holder] -->    transition: max-height 0.4s ease, margin-top 0.3s ease, padding-top 0.3s ease !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  \/* === COLLAPSED PAR DEFAUT EN CSS sur mobile (avant meme le JS) === *\/<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-grid {<!-- [et_pb_line_break_holder] -->    max-height: 0 !important;<!-- [et_pb_line_break_holder] -->    margin-top: 0 !important;<!-- [et_pb_line_break_holder] -->    padding-top: 0 !important;<!-- [et_pb_line_break_holder] -->    border-top: none !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  \/* Si le JS a tourne et l'utilisateur ouvre, cette classe re-affiche *\/<!-- [et_pb_line_break_holder] -->  #unipile-toc.utc-expanded .utc-grid {<!-- [et_pb_line_break_holder] -->    max-height: 2000px !important;<!-- [et_pb_line_break_holder] -->    margin-top: 22px !important;<!-- [et_pb_line_break_holder] -->    padding-top: 22px !important;<!-- [et_pb_line_break_holder] -->    border-top: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-col {<!-- [et_pb_line_break_holder] -->    padding: 0 !important;<!-- [et_pb_line_break_holder] -->    border-left: none !important;<!-- [et_pb_line_break_holder] -->    border-top: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->    padding-top: 18px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-toc .utc-col:first-child {<!-- [et_pb_line_break_holder] -->    border-top: none !important;<!-- [et_pb_line_break_holder] -->    padding-top: 0 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><div id=\"unipile-toc\"><!-- [et_pb_line_break_holder] -->  <div class=\"utc-card\"><!-- [et_pb_line_break_holder] -->    <div class=\"utc-header\"><!-- [et_pb_line_break_holder] -->      <div class=\"utc-header-left\"><!-- [et_pb_line_break_holder] -->        <div class=\"utc-icon-box\"><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><!-- [et_pb_line_break_holder] -->            <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"\/><!-- [et_pb_line_break_holder] -->          <\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <span class=\"utc-title\">Table of Contents<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <button type=\"button\" class=\"utc-toggle\" aria-label=\"Toggle table of contents\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-toggle-label\">Show<\/span><!-- [et_pb_line_break_holder] -->        <svg viewBox=\"0 0 24 24\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"utc-grid\"><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Fundamentals<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-what\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">01<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">What it is<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-expiration\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">02<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Expiration<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Key Scenarios<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-7days\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">03<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">7-day trap<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-lifetime\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">04<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Lifetime<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Code &#038; Errors<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-howto\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">05<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">How to refresh<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-invalid-grant\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">06<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">invalid_grant<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Managed Solution<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#grt-unipile\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">07<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Managed (Unipile)<span class=\"utc-tag-best\">Best<\/span><\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#faq-grt\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num utc-num-faq\">FAQ<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">FAQ<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  var toc = document.getElementById('unipile-toc');<!-- [et_pb_line_break_holder] -->  if (!toc) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  var MOBILE_BP = 700;<!-- [et_pb_line_break_holder] -->  var toggleBtn = toc.querySelector('.utc-toggle');<!-- [et_pb_line_break_holder] -->  var toggleLabel = toc.querySelector('.utc-toggle-label');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function syncInitial(){<!-- [et_pb_line_break_holder] -->    if (window.innerWidth <= MOBILE_BP) {<!-- [et_pb_line_break_holder] -->      toc.classList.remove('utc-expanded');<!-- [et_pb_line_break_holder] -->      if (toggleLabel) toggleLabel.textContent = 'Show';<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      toc.classList.add('utc-expanded');<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  syncInitial();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (toggleBtn) {<!-- [et_pb_line_break_holder] -->    toggleBtn.addEventListener('click', function(){<!-- [et_pb_line_break_holder] -->      var isOpen = toc.classList.toggle('utc-expanded');<!-- [et_pb_line_break_holder] -->      if (toggleLabel) toggleLabel.textContent = isOpen ? 'Hide' : 'Show';<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  var resizeTimer = null;<!-- [et_pb_line_break_holder] -->  window.addEventListener('resize', function(){<!-- [et_pb_line_break_holder] -->    if (resizeTimer) clearTimeout(resizeTimer);<!-- [et_pb_line_break_holder] -->    resizeTimer = setTimeout(syncInitial, 150);<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  var links = toc.querySelectorAll('.utc-link');<!-- [et_pb_line_break_holder] -->  links.forEach(function(link){<!-- [et_pb_line_break_holder] -->    link.addEventListener('click', function(e){<!-- [et_pb_line_break_holder] -->      var href = link.getAttribute('href');<!-- [et_pb_line_break_holder] -->      if (!href || href.charAt(0) !== '#') return;<!-- [et_pb_line_break_holder] -->      var target = document.getElementById(href.substring(1));<!-- [et_pb_line_break_holder] -->      if (target) {<!-- [et_pb_line_break_holder] -->        e.preventDefault();<!-- [et_pb_line_break_holder] -->        var offset = 80;<!-- [et_pb_line_break_holder] -->        var top = target.getBoundingClientRect().top + window.pageYOffset - offset;<!-- [et_pb_line_break_holder] -->        window.scrollTo({ top: top, behavior: 'smooth' });<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  var sectionIds = [];<!-- [et_pb_line_break_holder] -->  links.forEach(function(link){<!-- [et_pb_line_break_holder] -->    var href = link.getAttribute('href');<!-- [et_pb_line_break_holder] -->    if (href && href.charAt(0) === '#') sectionIds.push(href.substring(1));<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateActive(){<!-- [et_pb_line_break_holder] -->    var scrollY = window.pageYOffset + 120;<!-- [et_pb_line_break_holder] -->    var activeId = null;<!-- [et_pb_line_break_holder] -->    var readIds = [];<!-- [et_pb_line_break_holder] -->    sectionIds.forEach(function(id){<!-- [et_pb_line_break_holder] -->      var el = document.getElementById(id);<!-- [et_pb_line_break_holder] -->      if (el) {<!-- [et_pb_line_break_holder] -->        var top = el.getBoundingClientRect().top + window.pageYOffset;<!-- [et_pb_line_break_holder] -->        if (top <= scrollY) { activeId = id; readIds.push(id); }<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    links.forEach(function(link){<!-- [et_pb_line_break_holder] -->      var href = link.getAttribute('href');<!-- [et_pb_line_break_holder] -->      var id = href ? href.substring(1) : '';<!-- [et_pb_line_break_holder] -->      link.classList.remove('utc-active', 'utc-read');<!-- [et_pb_line_break_holder] -->      if (id === activeId) { link.classList.add('utc-active'); }<!-- [et_pb_line_break_holder] -->      else if (readIds.indexOf(id) !== -1) { link.classList.add('utc-read'); }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if ('IntersectionObserver' in window) {<!-- [et_pb_line_break_holder] -->    var observer = new IntersectionObserver(function(){ updateActive(); }, { rootMargin: '-120px 0px -60% 0px' });<!-- [et_pb_line_break_holder] -->    sectionIds.forEach(function(id){<!-- [et_pb_line_break_holder] -->      var el = document.getElementById(id);<!-- [et_pb_line_break_holder] -->      if (el) observer.observe(el);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  window.addEventListener('scroll', updateActive, { passive: true });<!-- [et_pb_line_break_holder] -->  updateActive();<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-hero,<!-- [et_pb_line_break_holder] -->#upl-grt-hero *,<!-- [et_pb_line_break_holder] -->#upl-grt-hero *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-hero *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 80px 24px 70px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1160px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: 1fr 1fr !important;<!-- [et_pb_line_break_holder] -->  gap: 60px !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-left {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 24px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-badge .grt-badge-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-h1 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 44px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.18 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-h1 .grt-accent {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-desc {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-actions {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-cta-primary {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-cta-primary:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-cta-primary svg {<!-- [et_pb_line_break_holder] -->  width: 16px !important;<!-- [et_pb_line_break_holder] -->  height: 16px !important;<!-- [et_pb_line_break_holder] -->  stroke: currentColor !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-cta-secondary {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 24px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: all 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-cta-secondary:hover {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-hero-right {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-code-wrapper {<!-- [et_pb_line_break_holder] -->  border-radius: 14px !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-editor-bar {<!-- [et_pb_line_break_holder] -->  background: #161b22 !important;<!-- [et_pb_line_break_holder] -->  padding: 12px 18px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid rgba(255,255,255,0.06) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-dot {<!-- [et_pb_line_break_holder] -->  width: 12px !important;<!-- [et_pb_line_break_holder] -->  height: 12px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-dot-r { background: #ff5f57 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-dot-y { background: #febc2e !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-dot-g { background: #28c840 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-filename {<!-- [et_pb_line_break_holder] -->  color: #8b949e !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  margin-left: 6px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-pre {<!-- [et_pb_line_break_holder] -->  padding: 22px 24px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.8 !important;<!-- [et_pb_line_break_holder] -->  overflow-x: auto !important;<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->  white-space: pre-wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-pre code {<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  white-space: pre !important;<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-c { color: #8b949e !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-k { color: #ff7b72 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-fn { color: #d2a8ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-s { color: #a5d6ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-w { color: #e6edf3 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-n { color: #79c0ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-editor-ok {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.1) !important;<!-- [et_pb_line_break_holder] -->  border-top: 1px solid rgba(59, 185, 139, 0.25) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 11px 24px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-hero .grt-ok-dot {<!-- [et_pb_line_break_holder] -->  width: 8px !important;<!-- [et_pb_line_break_holder] -->  height: 8px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-hero { padding: 60px 20px 50px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-hero-inner {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1fr !important;<!-- [et_pb_line_break_holder] -->    gap: 44px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-hero-h1 { font-size: 34px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-hero { padding: 50px 16px 40px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-hero-h1 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-hero-desc { font-size: 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-hero-actions { flex-direction: column !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-cta-primary,<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-cta-secondary { width: 100% !important; justify-content: center !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-hero .grt-hero-h1 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-top\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-hero\"><!-- [et_pb_line_break_holder] -->  <div class=\"grt-hero-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grt-hero-left\"><!-- [et_pb_line_break_holder] -->      <div class=\"grt-hero-badge\"><!-- [et_pb_line_break_holder] -->        <span class=\"grt-badge-dot\"><\/span><!-- [et_pb_line_break_holder] -->        <span>Google OAuth &#8211; Developer Guide<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <h1 class=\"grt-hero-h1\">Google OAuth <span class=\"grt-accent\">Refresh Token<\/span>: Expiration, 7-Day Limit &#038; Lifetime Explained (2026)<\/h1><!-- [et_pb_line_break_holder] -->      <pee class=\"grt-hero-desc\">Google OAuth refresh tokens don&#8217;t last forever. Understand every expiration condition &#8211; from the 7-day testing trap to the 6-month inactivity rule &#8211; and learn how to keep your Gmail API integration alive in production.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"grt-hero-actions\"><!-- [et_pb_line_break_holder] -->        <a class=\"grt-cta-primary\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <span>Build it with Unipile<\/span><!-- [et_pb_line_break_holder] -->        <\/a><!-- [et_pb_line_break_holder] -->        <a class=\"grt-cta-secondary\" href=\"https:\/\/developer.unipile.com\/docs\/getting-started\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->          <span>View Docs<\/span><!-- [et_pb_line_break_holder] -->        <\/a><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"grt-hero-right\"><!-- [et_pb_line_break_holder] -->      <div class=\"grt-code-wrapper\"><!-- [et_pb_line_break_holder] -->        <div class=\"grt-editor-bar\"><!-- [et_pb_line_break_holder] -->          <span class=\"grt-dot grt-dot-r\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grt-dot grt-dot-y\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grt-dot grt-dot-g\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grt-filename\">refresh_token.py<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grt-pre\"><code><span class=\"grt-k\">import<\/span><span class=\"grt-w\"> requests<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-c\"># Exchange refresh token for new access token<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">response = <\/span><span class=\"grt-fn\">requests.post<\/span><span class=\"grt-w\">(<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">    <\/span><span class=\"grt-s\">\"https:\/\/oauth2.googleapis.com\/token\"<\/span><span class=\"grt-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">    data={<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">        <\/span><span class=\"grt-s\">\"client_id\"<\/span><span class=\"grt-w\">:     <\/span><span class=\"grt-s\">\"YOUR_CLIENT_ID\"<\/span><span class=\"grt-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">        <\/span><span class=\"grt-s\">\"client_secret\"<\/span><span class=\"grt-w\">: <\/span><span class=\"grt-s\">\"YOUR_SECRET\"<\/span><span class=\"grt-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">        <\/span><span class=\"grt-s\">\"refresh_token\"<\/span><span class=\"grt-w\">: <\/span><span class=\"grt-s\">\"1\/\/0g...\"<\/span><span class=\"grt-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">        <\/span><span class=\"grt-s\">\"grant_type\"<\/span><span class=\"grt-w\">:    <\/span><span class=\"grt-s\">\"refresh_token\"<\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">    }<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">)<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grt-w\">token = response.<\/span><span class=\"grt-fn\">json<\/span><span class=\"grt-w\">()[<\/span><span class=\"grt-s\">\"access_token\"<\/span><span class=\"grt-w\">]<\/span><\/code><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grt-editor-ok\"><!-- [et_pb_line_break_holder] -->          <span class=\"grt-ok-dot\"><\/span><!-- [et_pb_line_break_holder] -->          <span>200 OK &#8211; access_token valid for 3600s<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  document.addEventListener('click', function(e){<!-- [et_pb_line_break_holder] -->    var el = e.target.closest('[data-upl-link]');<!-- [et_pb_line_break_holder] -->    if (!el) return;<!-- [et_pb_line_break_holder] -->    e.preventDefault();<!-- [et_pb_line_break_holder] -->    window.open(el.getAttribute('data-upl-link'), el.getAttribute('data-upl-target') || '_blank');<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-compliance,<!-- [et_pb_line_break_holder] -->#upl-grt-compliance *,<!-- [et_pb_line_break_holder] -->#upl-grt-compliance *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-compliance *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-block {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  border-left: 4px solid #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 28px 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-eyebrow {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.18) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 4px 12px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.6px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-eyebrow .grtc-dot {<!-- [et_pb_line_break_holder] -->  width: 6px !important;<!-- [et_pb_line_break_holder] -->  height: 6px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-block-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 10px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.3 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-block-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.82) !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-compliance .grtc-block-body strong {<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-compliance { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-compliance .grtc-block { padding: 22px 20px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-compliance\"><!-- [et_pb_line_break_holder] -->  <div class=\"grtc-inner\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtc-block\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtc-eyebrow\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtc-dot\"><\/span><!-- [et_pb_line_break_holder] -->        <span>Data Handling Note<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtc-block-title\">How Unipile handles OAuth tokens and user data<\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grtc-block-body\">Unipile does not store OAuth tokens in a parallel archive or create independent data copies outside the authenticated session. Token storage and refresh operations are scoped exclusively to the session of each <strong>authenticated user<\/strong> who has explicitly granted access. No token data is shared across accounts or retained beyond the authorization scope defined by the user.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtc-block\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtc-eyebrow\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtc-dot\"><\/span><!-- [et_pb_line_break_holder] -->        <span>How Unipile Operates<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtc-block-title\">Unipile as an independent technical intermediary<\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grtc-block-body\">Unipile acts as an <strong>independent technical intermediary<\/strong>, performing Gmail API and OAuth token operations <strong>on behalf of<\/strong> each authenticated user who has individually authorized access. Unipile is <strong>not affiliated with, endorsed by, or sponsored by Google<\/strong>. No shared credentials are used. Each integration relies on the user&#8217;s own Google OAuth consent, issued through their own Google Cloud project or via Unipile&#8217;s CASA Tier 2 certified OAuth flow.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtc-block\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtc-eyebrow\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtc-dot\"><\/span><!-- [et_pb_line_break_holder] -->        <span>Platform Limits &#038; Responsible Use<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtc-block-title\">Rate limits and quota management<\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grtc-block-body\">Unipile relays Google API rate limits and quota restrictions as defined by Google&#8217;s policies. Request cadence, volume decisions, and usage patterns remain a <strong>customer-side decision<\/strong>. Developers are responsible for ensuring their integration complies with Google&#8217;s Terms of Service, including OAuth token handling policies and data access scopes. Unipile provides infrastructure &#8211; policy compliance is the responsibility of each developer.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-what,<!-- [et_pb_line_break_holder] -->#upl-grt-what *,<!-- [et_pb_line_break_holder] -->#upl-grt-what *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-what *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-badge .grtw-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-snippet-card {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 32px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-snippet-label {<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.8px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-snippet-label svg {<!-- [et_pb_line_break_holder] -->  width: 14px !important;<!-- [et_pb_line_break_holder] -->  height: 14px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-snippet-def {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 500 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-flow {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(3, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-flow-card {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 24px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-flow-step {<!-- [et_pb_line_break_holder] -->  width: 32px !important;<!-- [et_pb_line_break_holder] -->  height: 32px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-flow-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 8px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.3 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-flow-desc {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #4a5568 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-token-anatomy {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 28px 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-anatomy-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 16px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-anatomy-grid {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(2, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-anatomy-item {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 6px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-anatomy-label {<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #94a3b8 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-anatomy-val {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.55 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-what .grtw-anatomy-val code {<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: rgba(0,0,0,0.05) !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 6px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 4px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-what { padding: 50px 20px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-what .grtw-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-what .grtw-flow { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-what .grtw-anatomy-grid { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-what { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-what .grtw-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-what .grtw-snippet-card { padding: 22px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-what .grtw-h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-what\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-what\"><!-- [et_pb_line_break_holder] -->  <div class=\"grtw-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grtw-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grtw-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Definition<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grtw-h2\">What is a Google OAuth refresh token?<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grtw-intro\">Before diving into expiration rules, it helps to understand exactly what a Google OAuth refresh token is, what it does, and how it differs from an access token in the Google OAuth2 flow.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtw-snippet-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtw-snippet-label\"><!-- [et_pb_line_break_holder] -->        <svg viewBox=\"0 0 24 24\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <span>Quick Definition<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grtw-snippet-def\">A <strong>Google OAuth refresh token<\/strong> is a long-lived credential issued by Google&#8217;s authorization server that allows your application to obtain new access tokens without requiring the user to re-authenticate. Unlike access tokens (which expire after 3,600 seconds), a google oauth refresh token persists across sessions &#8211; subject to specific expiration conditions &#8211; and is issued only when the <code>access_type=offline<\/code> parameter is included in the authorization request.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtw-flow\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtw-flow-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-flow-step\">01<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-flow-title\">User grants consent<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtw-flow-desc\">The authenticated user approves your app&#8217;s requested scopes on Google&#8217;s consent screen. With <code>access_type=offline<\/code>, Google issues both an access token and a refresh token.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtw-flow-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-flow-step\">02<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-flow-title\">Access token expires (1h)<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtw-flow-desc\">Access tokens have a fixed TTL of 3,600 seconds. Once expired, any API call returns a 401 Unauthorized error. Your app must exchange the refresh token for a new access token.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtw-flow-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-flow-step\">03<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-flow-title\">Refresh token exchange<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtw-flow-desc\">A POST to <code>https:\/\/oauth2.googleapis.com\/token<\/code> with <code>grant_type=refresh_token<\/code> returns a new access token. The google oauth refresh token itself remains valid (unless one of the 6 expiration conditions fires).<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtw-token-anatomy\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtw-anatomy-title\">Access token vs. Google OAuth2 refresh token at a glance<\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtw-anatomy-grid\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Token type<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\"><strong>Access token<\/strong> &#8211; short-lived bearer token<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Token type<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\"><strong>Refresh token<\/strong> &#8211; long-lived credential<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Lifetime<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\">3,600 seconds (1 hour), always<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Lifetime<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\">Indefinite in production (see 6 conditions)<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Required param<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\">Issued automatically with every consent<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Required param<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\"><code>access_type=offline<\/code> must be set<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Format prefix<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\">Short JWT starting with <code>ya29.<\/code><\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtw-anatomy-item\"><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-label\">Format prefix<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grtw-anatomy-val\">Long opaque string starting with <code>1\/\/<\/code><\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-expiration,<!-- [et_pb_line_break_holder] -->#upl-grt-expiration *,<!-- [et_pb_line_break_holder] -->#upl-grt-expiration *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-expiration *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(221, 223, 76, 0.18) !important;<!-- [et_pb_line_break_holder] -->  color: #8a8c2e !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-badge .grte-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table-wrap {<!-- [et_pb_line_break_holder] -->  overflow-x: auto !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table {<!-- [et_pb_line_break_holder] -->  width: 100% !important;<!-- [et_pb_line_break_holder] -->  border-collapse: collapse !important;<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table thead tr {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table thead th {<!-- [et_pb_line_break_holder] -->  padding: 16px 20px !important;<!-- [et_pb_line_break_holder] -->  text-align: left !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table thead th:first-child {<!-- [et_pb_line_break_holder] -->  border-radius: 15px 0 0 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table thead th:last-child {<!-- [et_pb_line_break_holder] -->  border-radius: 0 15px 0 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table tbody tr {<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid #f0f2f5 !important;<!-- [et_pb_line_break_holder] -->  transition: background 0.15s ease !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table tbody tr:last-child {<!-- [et_pb_line_break_holder] -->  border-bottom: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table tbody tr:hover {<!-- [et_pb_line_break_holder] -->  background: #f8fafc !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table tbody td {<!-- [et_pb_line_break_holder] -->  padding: 16px 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->  vertical-align: top !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-table tbody td strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-badge-sev {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 5px !important;<!-- [et_pb_line_break_holder] -->  padding: 3px 10px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-sev-high {<!-- [et_pb_line_break_holder] -->  background: rgba(234, 67, 53, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #c0392b !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-sev-med {<!-- [et_pb_line_break_holder] -->  background: rgba(251, 188, 4, 0.15) !important;<!-- [et_pb_line_break_holder] -->  color: #8a6a00 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-sev-low {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-callout {<!-- [et_pb_line_break_holder] -->  background: rgba(221, 223, 76, 0.1) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(221, 223, 76, 0.4) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 20px 24px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-callout-icon {<!-- [et_pb_line_break_holder] -->  width: 36px !important;<!-- [et_pb_line_break_holder] -->  height: 36px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(221, 223, 76, 0.2) !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-callout-icon svg {<!-- [et_pb_line_break_holder] -->  width: 18px !important;<!-- [et_pb_line_break_holder] -->  height: 18px !important;<!-- [et_pb_line_break_holder] -->  stroke: #8a8c2e !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-callout-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-expiration .grte-callout-body strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Mobile: table becomes card stack *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration { padding: 50px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table-wrap { border: none !important; border-radius: 0 !important; overflow: visible !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table,<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table thead,<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table tbody,<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table th,<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table td,<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table tr { display: block !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table thead tr { display: none !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table tbody tr {<!-- [et_pb_line_break_holder] -->    background: #ffffff !important;<!-- [et_pb_line_break_holder] -->    border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->    border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->    margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->    padding: 16px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table tbody td {<!-- [et_pb_line_break_holder] -->    padding: 6px 0 !important;<!-- [et_pb_line_break_holder] -->    font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-table tbody td::before {<!-- [et_pb_line_break_holder] -->    content: attr(data-label) \": \" !important;<!-- [et_pb_line_break_holder] -->    font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->    color: #94a3b8 !important;<!-- [et_pb_line_break_holder] -->    font-size: 11px !important;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->    display: block !important;<!-- [et_pb_line_break_holder] -->    margin-bottom: 2px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-expiration .grte-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-expiration\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-expiration\"><!-- [et_pb_line_break_holder] -->  <div class=\"grte-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grte-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grte-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Expiration Rules<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grte-h2\">Do Google refresh tokens expire? The 6 conditions<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grte-intro\">Yes, a Google OAuth refresh token can expire &#8211; but only under specific conditions. Understanding every case is critical for any <a href=\"https:\/\/www.unipile.com\/gmail-api\/\" style=\"color:#3BB98B;text-decoration:underline;\">Gmail API<\/a> integration that needs to run unattended. Here are all six Google OAuth refresh token expiration scenarios you must handle in production.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grte-table-wrap\"><!-- [et_pb_line_break_holder] -->      <table class=\"grte-table\"><!-- [et_pb_line_break_holder] -->        <thead><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <th>#<\/th><!-- [et_pb_line_break_holder] -->            <th>Condition<\/th><!-- [et_pb_line_break_holder] -->            <th>When it fires<\/th><!-- [et_pb_line_break_holder] -->            <th>Severity<\/th><!-- [et_pb_line_break_holder] -->            <th>Fix<\/th><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->        <\/thead><!-- [et_pb_line_break_holder] -->        <tbody><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <td data-label=\"#\">1<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Condition\"><strong>App in testing mode &#8211; 7-day limit<\/strong><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"When it fires\">OAuth consent screen is &#8220;Testing&#8221; and app is not verified by Google<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Severity\"><span class=\"grte-badge-sev grte-sev-high\"><span>Critical<\/span><\/span><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Fix\">Publish the app or use an internal Workspace app<\/td><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <td data-label=\"#\">2<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Condition\"><strong>6 months of inactivity<\/strong><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"When it fires\">Token has not been used to obtain an access token for 6 months<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Severity\"><span class=\"grte-badge-sev grte-sev-med\"><span>Medium<\/span><\/span><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Fix\">Implement keep-alive pings; use token at least every 6 months<\/td><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <td data-label=\"#\">3<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Condition\"><strong>User changes Google password<\/strong><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"When it fires\">Only affects tokens with Gmail or sensitive mail scopes<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Severity\"><span class=\"grte-badge-sev grte-sev-med\"><span>Medium<\/span><\/span><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Fix\">Re-initiate OAuth flow; prompt re-authorization<\/td><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <td data-label=\"#\">4<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Condition\"><strong>50 refresh tokens per client-user pair<\/strong><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"When it fires\">User authorizes your app more than 50 times; oldest tokens silently revoked<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Severity\"><span class=\"grte-badge-sev grte-sev-med\"><span>Medium<\/span><\/span><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Fix\">Store tokens server-side; never re-prompt unless token is invalid<\/td><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <td data-label=\"#\">5<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Condition\"><strong>User explicitly revokes access<\/strong><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"When it fires\">User visits Google Account settings and removes your app<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Severity\"><span class=\"grte-badge-sev grte-sev-low\"><span>Expected<\/span><\/span><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Fix\">Catch <code>invalid_grant<\/code>; remove stored token; prompt re-authorization<\/td><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->          <tr><!-- [et_pb_line_break_holder] -->            <td data-label=\"#\">6<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Condition\"><strong>Sensitive\/restricted scope &#8211; app not verified<\/strong><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"When it fires\">App requests restricted scopes without passing Google verification<\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Severity\"><span class=\"grte-badge-sev grte-sev-high\"><span>Critical<\/span><\/span><\/td><!-- [et_pb_line_break_holder] -->            <td data-label=\"Fix\">Complete <a href=\"https:\/\/www.unipile.com\/google-oauth-verification-gmail-api-credentials\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth verification<\/a> or scope down to non-sensitive scopes<\/td><!-- [et_pb_line_break_holder] -->          <\/tr><!-- [et_pb_line_break_holder] -->        <\/tbody><!-- [et_pb_line_break_holder] -->      <\/table><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grte-callout\"><!-- [et_pb_line_break_holder] -->      <div class=\"grte-callout-icon\"><!-- [et_pb_line_break_holder] -->        <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><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grte-callout-body\"><strong>Key insight:<\/strong> The 7-day limit (condition 1) is the most common cause of broken integrations during development. It only applies when your app&#8217;s OAuth consent screen status is &#8220;Testing&#8221; and the app has NOT been submitted for Google verification. The <a href=\"https:\/\/www.unipile.com\/google-oauth-verification-gmail-api-credentials\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth verification process<\/a> is the permanent fix &#8211; but it takes time. See section 3 for faster workarounds.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-7days,<!-- [et_pb_line_break_holder] -->#upl-grt-7days *,<!-- [et_pb_line_break_holder] -->#upl-grt-7days *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-7days *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(234, 67, 53, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #c0392b !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-badge .grt7-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #EA4335 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-why-card {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 28px 32px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-why-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 18px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-why-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-why-body strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-solutions-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 20px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 24px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-solutions {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(3, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-card {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 28px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-num {<!-- [et_pb_line_break_holder] -->  width: 36px !important;<!-- [et_pb_line_break_holder] -->  height: 36px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 16px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.3 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-body {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #4a5568 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-body strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-body a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-tag {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 5px !important;<!-- [et_pb_line_break_holder] -->  padding: 4px 10px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-tag-dev {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-tag-prod {<!-- [et_pb_line_break_holder] -->  background: rgba(221, 223, 76, 0.18) !important;<!-- [et_pb_line_break_holder] -->  color: #8a8c2e !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-sol-tag-fast {<!-- [et_pb_line_break_holder] -->  background: rgba(66, 133, 244, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #1a56a0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-strip {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 32px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: space-between !important;<!-- [et_pb_line_break_holder] -->  gap: 24px !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-text {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-headline {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 20px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-sub {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.75) !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-btn {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-btn:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-7days .grt7-cta-btn svg {<!-- [et_pb_line_break_holder] -->  width: 16px !important;<!-- [et_pb_line_break_holder] -->  height: 16px !important;<!-- [et_pb_line_break_holder] -->  stroke: currentColor !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-7days { padding: 50px 20px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-7days .grt7-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-7days .grt7-solutions { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-7days .grt7-cta-strip { flex-direction: column !important; align-items: flex-start !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-7days { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-7days .grt7-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-7days .grt7-cta-btn { width: 100% !important; justify-content: center !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-7days .grt7-h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-7days\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-7days\"><!-- [et_pb_line_break_holder] -->  <div class=\"grt7-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grt7-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grt7-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Critical Scenario<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grt7-h2\">The 7-day testing trap: why it happens, how to escape<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grt7-intro\">The Google OAuth refresh token 7-day expiration is the most disruptive issue developers face during integration. It catches teams off guard: everything works in development, tokens stop refreshing exactly 7 days later, and the <a href=\"https:\/\/www.unipile.com\/google-oauth-common-errors-and-their-fixes\/\" style=\"color:#3BB98B;text-decoration:underline;\">error response<\/a> often appears days after the user authorized the app.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grt7-why-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"grt7-why-title\">Why does the Google OAuth refresh token expire after 7 days?<\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grt7-why-body\">When an app&#8217;s OAuth consent screen status is set to <strong>&#8220;Testing&#8221;<\/strong> in Google Cloud Console, Google treats it as an unverified application. To protect users, Google automatically expires all refresh tokens issued by unverified apps after exactly <strong>7 days<\/strong>. This policy is documented in Google&#8217;s OAuth 2.0 documentation and applies regardless of how many times the user has authorized the app. The cap also applies to <a href=\"https:\/\/www.unipile.com\/google-oauth-100-user-limit\/\" style=\"color:#3BB98B;text-decoration:underline;\">the 100 test user limit<\/a> for apps in testing mode. Once a google oauth refresh token expires under this rule, any attempt to use it returns <code>invalid_grant<\/code>.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grt7-solutions-title\">3 fixes: move from testing to production<\/div><!-- [et_pb_line_break_holder] -->    <div class=\"grt7-solutions\"><!-- [et_pb_line_break_holder] -->      <div class=\"grt7-sol-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-sol-num\">01<\/div><!-- [et_pb_line_break_holder] -->        <span class=\"grt7-sol-tag grt7-sol-tag-prod\"><span>Permanent Fix<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-sol-title\">Publish your app and complete Google verification<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grt7-sol-body\">Change your app&#8217;s OAuth consent screen status from &#8220;Testing&#8221; to &#8220;In Production&#8221; in Google Cloud Console. For apps requesting <a href=\"https:\/\/www.unipile.com\/gmail-api-scopes-explained\/\" style=\"color:#3BB98B;text-decoration:underline;\">sensitive or restricted Gmail scopes<\/a>, you must complete the full <a href=\"https:\/\/www.unipile.com\/google-oauth-verification-gmail-api-credentials\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth app verification process<\/a>, including a security audit. Once published, <strong>google oauth refresh token lifetime becomes indefinite<\/strong> (subject to the remaining 5 conditions).<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grt7-sol-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-sol-num\">02<\/div><!-- [et_pb_line_break_holder] -->        <span class=\"grt7-sol-tag grt7-sol-tag-dev\"><span>Dev\/Internal<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-sol-title\">Use an internal Google Workspace app<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grt7-sol-body\">If your app is only used within a <strong>Google Workspace organization<\/strong>, set the OAuth consent screen user type to &#8220;Internal&#8221;. Internal apps are not subject to the 7-day expiration or the 100 test user cap. Tokens issued to Workspace users under internal apps do not expire based on the testing mode rule. This is the fastest path for B2B SaaS products with Google Workspace customers.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grt7-sol-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-sol-num\">03<\/div><!-- [et_pb_line_break_holder] -->        <span class=\"grt7-sol-tag grt7-sol-tag-fast\"><span>Fastest Path<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-sol-title\">Use Unipile&#8217;s certified OAuth flow<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grt7-sol-body\">Unipile operates as an <strong>independent technical intermediary on behalf of<\/strong> each authenticated user. Our OAuth flow is CASA Tier 2 certified. You can test with non-expiring tokens immediately while your own <a href=\"https:\/\/www.unipile.com\/google-oauth-verification-gmail-api-credentials\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth verification<\/a> is in progress, then switch to Bring-Your-Own-Credentials (BYOC) once approved. <strong>No 7-day limit<\/strong> during your POC phase.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grt7-cta-strip\"><!-- [et_pb_line_break_holder] -->      <div class=\"grt7-cta-text\"><!-- [et_pb_line_break_holder] -->        <div class=\"grt7-cta-headline\">Skip the 7-day trap during your POC<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grt7-cta-sub\">Build your Gmail integration today with tokens that don&#8217;t expire after 7 days. Unipile handles token refresh on the server side.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <a class=\"grt7-cta-btn\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><!-- [et_pb_line_break_holder] -->        <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <span>Start building<\/span><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-lifetime,<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime *,<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-badge .grtl-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-cards {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(2, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 24px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card {<!-- [et_pb_line_break_holder] -->  background: #f8fafc !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 28px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card-icon {<!-- [et_pb_line_break_holder] -->  width: 40px !important;<!-- [et_pb_line_break_holder] -->  height: 40px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card-icon svg {<!-- [et_pb_line_break_holder] -->  width: 20px !important;<!-- [et_pb_line_break_holder] -->  height: 20px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 16px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 10px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card-body {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #4a5568 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card-body strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-card-body code {<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: rgba(0,0,0,0.06) !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 5px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 3px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-50-section {<!-- [et_pb_line_break_holder] -->  background: #f4f5f7 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 32px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-50-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 18px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-50-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-50-body strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-list {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 10px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-item {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 18px !important;<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-check {<!-- [et_pb_line_break_holder] -->  width: 20px !important;<!-- [et_pb_line_break_holder] -->  height: 20px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  margin-top: 1px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-check svg {<!-- [et_pb_line_break_holder] -->  width: 12px !important;<!-- [et_pb_line_break_holder] -->  height: 12px !important;<!-- [et_pb_line_break_holder] -->  stroke: currentColor !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 3 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-yes {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.15) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-no {<!-- [et_pb_line_break_holder] -->  background: rgba(234, 67, 53, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #EA4335 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-text {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-lifetime .grtl-usage-text strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-lifetime { padding: 50px 20px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-lifetime .grtl-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-lifetime .grtl-cards { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-lifetime { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-lifetime .grtl-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-lifetime .grtl-h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-lifetime\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-lifetime\"><!-- [et_pb_line_break_holder] -->  <div class=\"grtl-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grtl-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grtl-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Production<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grtl-h2\">Google OAuth refresh token lifetime in production<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grtl-intro\">Once your app is published and verified, Google OAuth refresh token lifetime becomes effectively indefinite &#8211; but with important caveats. The two key production rules are the 50-token-per-client-user cap and the 6-month inactivity expiration.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtl-cards\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtl-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-card-icon\"><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polyline points=\"12 6 12 12 16 14\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-card-title\">6-month inactivity rule<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtl-card-body\">A google oauth refresh token expires if it has not been used to obtain a new access token for <strong>6 consecutive months<\/strong>. &#8220;Used&#8221; means a successful token refresh call &#8211; not an API call made with the resulting access token. Store refresh tokens and schedule periodic silent refreshes to keep them alive. A monthly ping to <code>\/token<\/code> is sufficient.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtl-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-card-icon\"><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-card-title\">Google OAuth refresh token expiration in Google Workspace<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtl-card-body\">For Google Workspace apps with user type &#8220;Internal&#8221;, there is no 7-day expiration and no verification requirement. Tokens still observe the 6-month inactivity rule and the <strong>50-token limit per client-user pair<\/strong>. Workspace admins can also revoke tokens organization-wide via the Admin Console, which overrides application-level token management.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtl-50-section\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtl-50-title\">The 50 refresh tokens per client-user limit<\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"grtl-50-body\">Google allows a maximum of <strong>50 refresh tokens per OAuth client ID + Google user account combination<\/strong>. If your app generates a new refresh token (by prompting the user again with <code>prompt=consent<\/code>) beyond this limit, Google silently invalidates the oldest token. This is a common source of <code>invalid_grant<\/code> errors in production when teams repeatedly re-authorize users during testing or re-onboarding flows. The fix is simple: store the refresh token server-side and never re-prompt unless the token is actually invalid.<\/pee><!-- [et_pb_line_break_holder] -->      <pee class=\"grtl-50-body\">What counts as &#8220;using&#8221; a google oauth2 refresh token:<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"grtl-usage-list\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-usage-item\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtl-usage-check grtl-usage-yes\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grtl-usage-text\"><strong>Counts as use:<\/strong> POST to <code>https:\/\/oauth2.googleapis.com\/token<\/code> with <code>grant_type=refresh_token<\/code> that returns a new access token<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-usage-item\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtl-usage-check grtl-usage-no\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grtl-usage-text\"><strong>Does NOT count as use:<\/strong> making Gmail API calls with the current access token, even millions of them<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtl-usage-item\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtl-usage-check grtl-usage-no\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grtl-usage-text\"><strong>Does NOT count as use:<\/strong> calling <code>tokeninfo<\/code> or introspection endpoints &#8211; only the token exchange endpoint resets the inactivity clock<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-howto,<!-- [et_pb_line_break_holder] -->#upl-grt-howto *,<!-- [et_pb_line_break_holder] -->#upl-grt-howto *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-howto *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(221, 223, 76, 0.18) !important;<!-- [et_pb_line_break_holder] -->  color: #8a8c2e !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-badge .grth-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-tabs {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 24px !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-tab {<!-- [et_pb_line_break_holder] -->  padding: 8px 18px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  transition: all 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  color: #4a5568 !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-tab.grth-active {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border-color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-code-block {<!-- [et_pb_line_break_holder] -->  display: none !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-code-block.grth-visible {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-code-wrapper {<!-- [et_pb_line_break_holder] -->  border-radius: 14px !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-editor-bar {<!-- [et_pb_line_break_holder] -->  background: #161b22 !important;<!-- [et_pb_line_break_holder] -->  padding: 12px 18px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid rgba(255,255,255,0.06) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-dot {<!-- [et_pb_line_break_holder] -->  width: 12px !important;<!-- [et_pb_line_break_holder] -->  height: 12px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-dot-r { background: #ff5f57 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-dot-y { background: #febc2e !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-dot-g { background: #28c840 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-filename {<!-- [et_pb_line_break_holder] -->  color: #8b949e !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  margin-left: 6px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-pre {<!-- [et_pb_line_break_holder] -->  padding: 22px 24px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.8 !important;<!-- [et_pb_line_break_holder] -->  overflow-x: auto !important;<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-pre code {<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  white-space: pre !important;<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-c { color: #8b949e !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-k { color: #ff7b72 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-fn { color: #d2a8ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-s { color: #a5d6ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-w { color: #e6edf3 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-n { color: #79c0ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-editor-ok {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.1) !important;<!-- [et_pb_line_break_holder] -->  border-top: 1px solid rgba(59, 185, 139, 0.25) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 11px 24px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-ok-dot {<!-- [et_pb_line_break_holder] -->  width: 8px !important;<!-- [et_pb_line_break_holder] -->  height: 8px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-playground-link {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 18px 22px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 24px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-playground-link svg {<!-- [et_pb_line_break_holder] -->  width: 20px !important;<!-- [et_pb_line_break_holder] -->  height: 20px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-playground-text {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->  flex: 1 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-playground-text a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-howto .grth-playground-text strong {<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-howto { padding: 50px 20px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-howto .grth-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-howto .grth-pre { padding: 16px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-howto { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-howto .grth-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-howto .grth-pre code { white-space: pre-wrap !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-howto .grth-h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-howto\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-howto\"><!-- [et_pb_line_break_holder] -->  <div class=\"grth-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grth-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grth-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Code Examples<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grth-h2\">How to refresh an access token: curl, Node.js, Python<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grth-intro\">When your access token expires, you need to exchange your Google OAuth refresh token for a new one. Here are production-ready code samples for three common environments. All three hit the same <a href=\"https:\/\/www.unipile.com\/google-oauth-playground-gmail-api\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth token endpoint<\/a>.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grth-tabs\"><!-- [et_pb_line_break_holder] -->      <button type=\"button\" class=\"grth-tab grth-active\" data-tab=\"curl\"><span>curl<\/span><\/button><!-- [et_pb_line_break_holder] -->      <button type=\"button\" class=\"grth-tab\" data-tab=\"python\"><span>Python<\/span><\/button><!-- [et_pb_line_break_holder] -->      <button type=\"button\" class=\"grth-tab\" data-tab=\"node\"><span>Node.js<\/span><\/button><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grth-code-block grth-visible\" id=\"grth-tab-curl\"><!-- [et_pb_line_break_holder] -->      <div class=\"grth-code-wrapper\"><!-- [et_pb_line_break_holder] -->        <div class=\"grth-editor-bar\"><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-r\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-y\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-g\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-filename\">refresh.sh<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grth-pre\"><code><span class=\"grth-c\"># Refresh a Google OAuth access token using curl<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-fn\">curl<\/span><span class=\"grth-w\"> -s -X POST \\<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  <\/span><span class=\"grth-s\">\"https:\/\/oauth2.googleapis.com\/token\"<\/span><span class=\"grth-w\"> \\<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  -H <\/span><span class=\"grth-s\">\"Content-Type: application\/x-www-form-urlencoded\"<\/span><span class=\"grth-w\"> \\<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  -d <\/span><span class=\"grth-s\">\"client_id=YOUR_CLIENT_ID\"<\/span><span class=\"grth-w\"> \\<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  -d <\/span><span class=\"grth-s\">\"client_secret=YOUR_CLIENT_SECRET\"<\/span><span class=\"grth-w\"> \\<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  -d <\/span><span class=\"grth-s\">\"refresh_token=YOUR_REFRESH_TOKEN\"<\/span><span class=\"grth-w\"> \\<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  -d <\/span><span class=\"grth-s\">\"grant_type=refresh_token\"<\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-c\"><!-- [et_pb_line_break_holder] --># Response: { \"access_token\": \"ya29.XXX\", \"expires_in\": 3600, \"token_type\": \"Bearer\" }<\/span><\/code><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grth-editor-ok\"><!-- [et_pb_line_break_holder] -->          <span class=\"grth-ok-dot\"><\/span><!-- [et_pb_line_break_holder] -->          <span>Returns new access_token valid for 3600 seconds<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grth-code-block\" id=\"grth-tab-python\"><!-- [et_pb_line_break_holder] -->      <div class=\"grth-code-wrapper\"><!-- [et_pb_line_break_holder] -->        <div class=\"grth-editor-bar\"><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-r\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-y\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-g\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-filename\">refresh_token.py<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grth-pre\"><code><span class=\"grth-k\">import<\/span><span class=\"grth-w\"> requests<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-k\">import<\/span><span class=\"grth-w\"> json<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-k\">def<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-fn\">refresh_google_access_token<\/span><span class=\"grth-w\">(refresh_token: <\/span><span class=\"grth-fn\">str<\/span><span class=\"grth-w\">) -> <\/span><span class=\"grth-fn\">str<\/span><span class=\"grth-w\">:<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    <\/span><span class=\"grth-c\">\"\"\"Exchange a google oauth refresh token for a new access token.\"\"\"<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    response = <\/span><span class=\"grth-fn\">requests.post<\/span><span class=\"grth-w\">(<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">        <\/span><span class=\"grth-s\">\"https:\/\/oauth2.googleapis.com\/token\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">        data={<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">            <\/span><span class=\"grth-s\">\"client_id\"<\/span><span class=\"grth-w\">:     <\/span><span class=\"grth-s\">\"YOUR_CLIENT_ID\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">            <\/span><span class=\"grth-s\">\"client_secret\"<\/span><span class=\"grth-w\">: <\/span><span class=\"grth-s\">\"YOUR_CLIENT_SECRET\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">            <\/span><span class=\"grth-s\">\"refresh_token\"<\/span><span class=\"grth-w\">: refresh_token,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">            <\/span><span class=\"grth-s\">\"grant_type\"<\/span><span class=\"grth-w\">:    <\/span><span class=\"grth-s\">\"refresh_token\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">        },<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    )<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    data = response.<\/span><span class=\"grth-fn\">json<\/span><span class=\"grth-w\">()<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-k\">    if<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-s\">\"error\"<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-k\">in<\/span><span class=\"grth-w\"> data:<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">        <\/span><span class=\"grth-k\">raise<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-fn\">ValueError<\/span><span class=\"grth-w\">(<\/span><span class=\"grth-fn\">f<\/span><span class=\"grth-s\">\"Token refresh failed: {data['error']} - {data.get('error_description')}\"<\/span><span class=\"grth-w\">)<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    <\/span><span class=\"grth-k\">return<\/span><span class=\"grth-w\"> data[<\/span><span class=\"grth-s\">\"access_token\"<\/span><span class=\"grth-w\">]<\/span><\/code><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grth-editor-ok\"><!-- [et_pb_line_break_holder] -->          <span class=\"grth-ok-dot\"><\/span><!-- [et_pb_line_break_holder] -->          <span>Raises ValueError on invalid_grant &#8211; catch and re-authorize user<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grth-code-block\" id=\"grth-tab-node\"><!-- [et_pb_line_break_holder] -->      <div class=\"grth-code-wrapper\"><!-- [et_pb_line_break_holder] -->        <div class=\"grth-editor-bar\"><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-r\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-y\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-dot grth-dot-g\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"grth-filename\">refreshToken.js<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grth-pre\"><code><span class=\"grth-c\">\/\/ Refresh a Google OAuth access token - Node.js (fetch)<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-k\">async function<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-fn\">refreshGoogleAccessToken<\/span><span class=\"grth-w\">(refreshToken) {<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  <\/span><span class=\"grth-k\">const<\/span><span class=\"grth-w\"> params = <\/span><span class=\"grth-k\">new<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-fn\">URLSearchParams<\/span><span class=\"grth-w\">({<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    client_id:     <\/span><span class=\"grth-s\">\"YOUR_CLIENT_ID\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    client_secret: <\/span><span class=\"grth-s\">\"YOUR_CLIENT_SECRET\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    refresh_token: refreshToken,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    grant_type:    <\/span><span class=\"grth-s\">\"refresh_token\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  <\/span><span class=\"grth-k\">const<\/span><span class=\"grth-w\"> res = <\/span><span class=\"grth-k\">await<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-fn\">fetch<\/span><span class=\"grth-w\">(<\/span><span class=\"grth-s\">\"https:\/\/oauth2.googleapis.com\/token\"<\/span><span class=\"grth-w\">, {<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    method: <\/span><span class=\"grth-s\">\"POST\"<\/span><span class=\"grth-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    headers: { <\/span><span class=\"grth-s\">\"Content-Type\"<\/span><span class=\"grth-w\">: <\/span><span class=\"grth-s\">\"application\/x-www-form-urlencoded\"<\/span><span class=\"grth-w\"> },<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">    body: params.toString(),<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  <\/span><span class=\"grth-k\">const<\/span><span class=\"grth-w\"> data = <\/span><span class=\"grth-k\">await<\/span><span class=\"grth-w\"> res.<\/span><span class=\"grth-fn\">json<\/span><span class=\"grth-w\">();<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  <\/span><span class=\"grth-k\">if<\/span><span class=\"grth-w\"> (data.error) <\/span><span class=\"grth-k\">throw new<\/span><span class=\"grth-w\"> <\/span><span class=\"grth-fn\">Error<\/span><span class=\"grth-w\">(`<\/span><span class=\"grth-s\">${data.error}: ${data.error_description}<\/span><span class=\"grth-w\">`);<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">  <\/span><span class=\"grth-k\">return<\/span><span class=\"grth-w\"> data.access_token; <\/span><span class=\"grth-c\">\/\/ valid for 3600s<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grth-w\">}<\/span><\/code><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grth-editor-ok\"><!-- [et_pb_line_break_holder] -->          <span class=\"grth-ok-dot\"><\/span><!-- [et_pb_line_break_holder] -->          <span>Throws on error.error === &#8220;invalid_grant&#8221; &#8211; trigger re-auth<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grth-playground-link\"><!-- [et_pb_line_break_holder] -->      <svg viewBox=\"0 0 24 24\"><polygon points=\"5 3 19 12 5 21 5 3\"\/><\/svg><!-- [et_pb_line_break_holder] -->      <pee class=\"grth-playground-text\"><strong>Test interactively:<\/strong> Use the <a href=\"https:\/\/www.unipile.com\/google-oauth-playground-gmail-api\/\" target=\"_blank\" rel=\"noopener\">Google OAuth Playground<\/a> to test the refresh token flow without writing any code. It lets you obtain tokens, inspect responses, and debug the full google oauth2 refresh token lifecycle in a browser UI.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  var container = document.getElementById('upl-grt-howto');<!-- [et_pb_line_break_holder] -->  if (!container) return;<!-- [et_pb_line_break_holder] -->  var tabs = container.querySelectorAll('.grth-tab');<!-- [et_pb_line_break_holder] -->  var blocks = container.querySelectorAll('.grth-code-block');<!-- [et_pb_line_break_holder] -->  tabs.forEach(function(tab){<!-- [et_pb_line_break_holder] -->    tab.addEventListener('click', function(){<!-- [et_pb_line_break_holder] -->      var target = tab.getAttribute('data-tab');<!-- [et_pb_line_break_holder] -->      tabs.forEach(function(t){ t.classList.remove('grth-active'); });<!-- [et_pb_line_break_holder] -->      blocks.forEach(function(b){ b.classList.remove('grth-visible'); });<!-- [et_pb_line_break_holder] -->      tab.classList.add('grth-active');<!-- [et_pb_line_break_holder] -->      var block = document.getElementById('grth-tab-' + target);<!-- [et_pb_line_break_holder] -->      if (block) block.classList.add('grth-visible');<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-invalid,<!-- [et_pb_line_break_holder] -->#upl-grt-invalid *,<!-- [et_pb_line_break_holder] -->#upl-grt-invalid *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-invalid *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(234, 67, 53, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #c0392b !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-badge .grti-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #EA4335 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-error-box {<!-- [et_pb_line_break_holder] -->  background: rgba(234, 67, 53, 0.06) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(234, 67, 53, 0.25) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 20px 24px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  color: #c0392b !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-causes {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(2, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-cause {<!-- [et_pb_line_break_holder] -->  background: #f8fafc !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 20px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-cause-num {<!-- [et_pb_line_break_holder] -->  width: 28px !important;<!-- [et_pb_line_break_holder] -->  height: 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 6px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(234, 67, 53, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #c0392b !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-cause-body {<!-- [et_pb_line_break_holder] -->  flex: 1 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-cause-title {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 4px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-cause-desc {<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  color: #4a5568 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-detail-link {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.06) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(59, 185, 139, 0.25) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 18px 22px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-detail-link svg {<!-- [et_pb_line_break_holder] -->  width: 20px !important;<!-- [et_pb_line_break_holder] -->  height: 20px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-detail-link p {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-detail-link a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-inline-cta {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  padding: 12px 22px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  margin-top: 24px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-inline-cta:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-invalid .grti-inline-cta svg {<!-- [et_pb_line_break_holder] -->  width: 14px !important;<!-- [et_pb_line_break_holder] -->  height: 14px !important;<!-- [et_pb_line_break_holder] -->  stroke: currentColor !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-invalid { padding: 50px 20px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-invalid .grti-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-invalid .grti-causes { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-invalid { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-invalid .grti-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-invalid .grti-h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-invalid-grant\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-invalid\"><!-- [et_pb_line_break_holder] -->  <div class=\"grti-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grti-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grti-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Error Handling<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grti-h2\">invalid_grant: quick guide<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grti-intro\">When a Google OAuth refresh token is expired, revoked, or invalid, the token endpoint returns an <code>invalid_grant<\/code> error. This is the canonical sign that your google oauth refresh token is no longer usable. Here are the most common causes and their immediate fixes.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grti-error-box\"><!-- [et_pb_line_break_holder] -->{<!-- [et_pb_line_break_holder] -->  &#8220;error&#8221;: &#8220;invalid_grant&#8221;,<!-- [et_pb_line_break_holder] -->  &#8220;error_description&#8221;: &#8220;Token has been expired or revoked.&#8221;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grti-causes\"><!-- [et_pb_line_break_holder] -->      <div class=\"grti-cause\"><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-num\">01<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-body\"><!-- [et_pb_line_break_holder] -->          <div class=\"grti-cause-title\">7-day expiration (testing mode)<\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grti-cause-desc\">App is in &#8220;Testing&#8221; status. Token expired after 7 days. Fix: publish app or switch to internal Workspace.<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grti-cause\"><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-num\">02<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-body\"><!-- [et_pb_line_break_holder] -->          <div class=\"grti-cause-title\">6-month inactivity<\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grti-cause-desc\">Token not used for 6 months. Fix: implement keep-alive refresh; schedule monthly token exchange.<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grti-cause\"><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-num\">03<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-body\"><!-- [et_pb_line_break_holder] -->          <div class=\"grti-cause-title\">50-token cap exceeded<\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grti-cause-desc\">User consented too many times; oldest token silently revoked. Fix: store tokens server-side, never re-prompt unnecessarily.<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grti-cause\"><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-num\">04<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-body\"><!-- [et_pb_line_break_holder] -->          <div class=\"grti-cause-title\">User revoked access<\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grti-cause-desc\">User removed your app from Google Account settings. Fix: delete stored token; display re-authorization prompt to user.<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grti-cause\"><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-num\">05<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-body\"><!-- [et_pb_line_break_holder] -->          <div class=\"grti-cause-title\">Password change (Gmail scopes)<\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grti-cause-desc\">User changed Google password while your app holds sensitive Gmail scopes. Fix: catch error, prompt re-authorization.<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grti-cause\"><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-num\">06<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grti-cause-body\"><!-- [et_pb_line_break_holder] -->          <div class=\"grti-cause-title\">Wrong credentials or copy-paste error<\/div><!-- [et_pb_line_break_holder] -->          <pee class=\"grti-cause-desc\">Mismatched client_id\/secret, or token was issued by a different app. Fix: verify credentials; test with the <a href=\"https:\/\/www.unipile.com\/google-oauth-playground-gmail-api\/\" style=\"color:#3BB98B;text-decoration:underline;\">OAuth Playground<\/a>.<\/pee><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grti-detail-link\"><!-- [et_pb_line_break_holder] -->      <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><!-- [et_pb_line_break_holder] -->      <pee>For a complete breakdown of every Google OAuth error code with HTTP status, cause table, and code-level fixes, see the full <a href=\"https:\/\/www.unipile.com\/google-oauth-common-errors-and-their-fixes\/\" target=\"_blank\" rel=\"noopener\">Google OAuth errors reference guide<\/a>.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <a class=\"grti-inline-cta\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><!-- [et_pb_line_break_holder] -->      <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->      <span>Build your refresh flow with Unipile<\/span><!-- [et_pb_line_break_holder] -->    <\/a><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-unipile,<!-- [et_pb_line_break_holder] -->#upl-grt-unipile *,<!-- [et_pb_line_break_holder] -->#upl-grt-unipile *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-unipile *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 24px !important;<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.2) !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-badge .grtu-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 35px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.8) !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 48px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cols {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: 1fr 1fr !important;<!-- [et_pb_line_break_holder] -->  gap: 40px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 48px !important;<!-- [et_pb_line_break_holder] -->  align-items: start !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefits {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefit {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefit-icon {<!-- [et_pb_line_break_holder] -->  width: 36px !important;<!-- [et_pb_line_break_holder] -->  height: 36px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.2) !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefit-icon svg {<!-- [et_pb_line_break_holder] -->  width: 18px !important;<!-- [et_pb_line_break_holder] -->  height: 18px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefit-content {<!-- [et_pb_line_break_holder] -->  flex: 1 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefit-title {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 4px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-benefit-desc {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.65) !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-flow-card {<!-- [et_pb_line_break_holder] -->  background: rgba(255,255,255,0.07) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(255,255,255,0.12) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 28px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-flow-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 16px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-steps {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-step {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-step-num {<!-- [et_pb_line_break_holder] -->  width: 28px !important;<!-- [et_pb_line_break_holder] -->  height: 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 6px !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: center !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-step-label {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.85) !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-step-label strong {<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-code-section {<!-- [et_pb_line_break_holder] -->  background: rgba(255,255,255,0.05) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(255,255,255,0.1) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-code-header {<!-- [et_pb_line_break_holder] -->  padding: 16px 24px !important;<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid rgba(255,255,255,0.08) !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: space-between !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-code-label {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-code-sub {<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.4) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-pre {<!-- [et_pb_line_break_holder] -->  padding: 22px 24px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.8 !important;<!-- [et_pb_line_break_holder] -->  overflow-x: auto !important;<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-pre code {<!-- [et_pb_line_break_holder] -->  font-family: 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  white-space: pre !important;<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-c { color: #8b949e !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-k { color: #ff7b72 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-fn { color: #d2a8ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-s { color: #a5d6ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-w { color: #e6edf3 !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-n { color: #79c0ff !important; }<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cta-row {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cta-primary {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cta-primary:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cta-primary svg {<!-- [et_pb_line_break_holder] -->  width: 16px !important;<!-- [et_pb_line_break_holder] -->  height: 16px !important;<!-- [et_pb_line_break_holder] -->  stroke: currentColor !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cta-secondary {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 24px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid rgba(255,255,255,0.35) !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: all 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-unipile .grtu-cta-secondary:hover {<!-- [et_pb_line_break_holder] -->  border-color: rgba(255,255,255,0.7) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile { padding: 50px 20px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-cols { grid-template-columns: 1fr !important; gap: 32px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile { padding: 40px 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-cta-row { flex-direction: column !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-cta-primary,<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-cta-secondary { width: 100% !important; justify-content: center !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-pre code { white-space: pre-wrap !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-unipile .grtu-h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><span id=\"grt-unipile\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-unipile\"><!-- [et_pb_line_break_holder] -->  <div class=\"grtu-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grtu-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grtu-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Managed Solution<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grtu-h2\">Managed refresh tokens with Unipile<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"grtu-intro\">Building and maintaining a robust Google OAuth refresh token lifecycle is non-trivial engineering work. Unipile acts as an <strong>independent technical intermediary on behalf of<\/strong> each authenticated user, handling token storage, refresh scheduling, and error recovery server-side &#8211; so your team ships features instead of debugging <code>invalid_grant<\/code> at 2 AM.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtu-cols\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtu-benefits\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtu-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-icon\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-content\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-benefit-title\">Token storage &#038; auto-refresh<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-benefit-desc\">Unipile stores your users&#8217; refresh tokens encrypted server-side and proactively refreshes access tokens before they expire. No 401 errors reach your application.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtu-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-icon\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><polyline points=\"9 11 12 14 22 4\"\/><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-content\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-benefit-title\">CASA Tier 2 certified OAuth flow<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-benefit-desc\">Unipile&#8217;s own OAuth application has passed CASA Tier 2 security assessment. During your POC, your users authorize via Unipile&#8217;s verified flow &#8211; no 7-day testing limit applies.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtu-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-icon\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"3\"\/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M4.93 4.93a10 10 0 0 0 0 14.14\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-content\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-benefit-title\">Bring-Your-Own-Credentials (BYOC)<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-benefit-desc\">When your own Google OAuth verification is approved, switch to BYOC mode: your users authorize via your own verified Google app, while Unipile continues handling token refresh infrastructure.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtu-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-icon\"><!-- [et_pb_line_break_holder] -->            <svg viewBox=\"0 0 24 24\"><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"\/><path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"\/><\/svg><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-benefit-content\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-benefit-title\">Unified API for Gmail, Outlook, and IMAP<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-benefit-desc\">Unipile provides a single <a href=\"https:\/\/www.unipile.com\/communication-api\/email-api\/gmail-api\/\" style=\"color:#3BB98B;text-decoration:underline;\">Gmail API<\/a> abstraction layer that also covers Outlook (Microsoft 365 + Exchange Online) and IMAP &#8211; each with its own managed token lifecycle, so you never implement provider-specific refresh logic.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <div class=\"grtu-flow-card\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtu-flow-title\">POC to production in 3 steps<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"grtu-steps\"><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-step\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-step-num\">01<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-step-label\"><strong>POC with Unipile key:<\/strong> Connect your first authenticated users immediately via Unipile&#8217;s CASA Tier 2 flow. No 7-day expiration. Full Gmail API access via Unipile&#8217;s unified endpoint.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-step\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-step-num\">02<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-step-label\"><strong>Certify in parallel:<\/strong> Submit your own Google app for OAuth verification while running your integration in production. Unipile supports this parallel track.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->          <div class=\"grtu-step\"><!-- [et_pb_line_break_holder] -->            <div class=\"grtu-step-num\">03<\/div><!-- [et_pb_line_break_holder] -->            <pee class=\"grtu-step-label\"><strong>Switch to BYOC:<\/strong> Once Google approves your app, activate Bring-Your-Own-Credentials mode. Your Google OAuth refresh token lifetime becomes indefinite in production. Unipile continues managing refresh infrastructure.<\/pee><!-- [et_pb_line_break_holder] -->          <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtu-code-section\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtu-code-header\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtu-code-label\">Unipile Email API &#8211; List messages (Gmail, managed tokens)<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"grtu-code-sub\">No token management needed<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"grtu-pre\"><code><span class=\"grtu-c\"># List emails via Unipile - refresh token handled server-side<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-k\">import<\/span><span class=\"grtu-w\"> requests<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">headers = {<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">    <\/span><span class=\"grtu-s\">\"X-API-KEY\"<\/span><span class=\"grtu-w\">: <\/span><span class=\"grtu-s\">\"YOUR_UNIPILE_API_KEY\"<\/span><span class=\"grtu-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">    <\/span><span class=\"grtu-s\">\"accept\"<\/span><span class=\"grtu-w\">:    <\/span><span class=\"grtu-s\">\"application\/json\"<\/span><span class=\"grtu-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-c\"># account_id = authenticated user's linked account ID<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">response = <\/span><span class=\"grtu-fn\">requests.get<\/span><span class=\"grtu-w\">(<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">    <\/span><span class=\"grtu-s\">\"https:\/\/api7.unipile.com:13046\/api\/v1\/emails\"<\/span><span class=\"grtu-w\">,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">    params={<\/span><span class=\"grtu-s\">\"account_id\"<\/span><span class=\"grtu-w\">: <\/span><span class=\"grtu-s\">\"acc_XXXXXXXX\"<\/span><span class=\"grtu-w\">},<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">    headers=headers,<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-c\"># Google OAuth refresh token is refreshed automatically by Unipile<!-- [et_pb_line_break_holder] --><\/span><!-- [et_pb_line_break_holder] --><span class=\"grtu-w\">emails = response.<\/span><span class=\"grtu-fn\">json<\/span><span class=\"grtu-w\">()[<\/span><span class=\"grtu-s\">\"items\"<\/span><span class=\"grtu-w\">]<\/span><\/code><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtu-cta-row\"><!-- [et_pb_line_break_holder] -->      <a class=\"grtu-cta-primary\" href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><!-- [et_pb_line_break_holder] -->        <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <span>Build your Gmail integration<\/span><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->      <a class=\"grtu-cta-secondary\" href=\"https:\/\/developer.unipile.com\/docs\/getting-started\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span>Read the docs<\/span><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<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\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-related,<!-- [et_pb_line_break_holder] -->#upl-grt-related *,<!-- [et_pb_line_break_holder] -->#upl-grt-related *::before,<!-- [et_pb_line_break_holder] -->#upl-grt-related *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 0 !important;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box !important;<!-- [et_pb_line_break_holder] -->  border: none !important;<!-- [et_pb_line_break_holder] -->  outline: none !important;<!-- [et_pb_line_break_holder] -->  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: normal !important;<!-- [et_pb_line_break_holder] -->  text-transform: none !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  list-style: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  padding: 70px 0 !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-inner {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-badge {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.5px !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-badge .grtr-dot {<!-- [et_pb_line_break_holder] -->  width: 7px !important;<!-- [et_pb_line_break_holder] -->  height: 7px !important;<!-- [et_pb_line_break_holder] -->  background: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-h2 {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 28px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.2 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-grid {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: repeat(3, 1fr) !important;<!-- [et_pb_line_break_holder] -->  gap: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card {<!-- [et_pb_line_break_holder] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 16px !important;<!-- [et_pb_line_break_holder] -->  padding: 24px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 12px !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.2s ease, border-color 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card:hover {<!-- [et_pb_line_break_holder] -->  border-color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  transform: translateY(-4px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card-tag {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  padding: 3px 10px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  width: fit-content !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #2aaa7e !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card-title {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.35 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card-desc {<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  color: #4a5568 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->  flex: 1 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card-arrow {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 6px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-card-arrow svg {<!-- [et_pb_line_break_holder] -->  width: 14px !important;<!-- [et_pb_line_break_holder] -->  height: 14px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-cta {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 14px !important;<!-- [et_pb_line_break_holder] -->  padding: 28px 32px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  justify-content: space-between !important;<!-- [et_pb_line_break_holder] -->  gap: 24px !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-text {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  gap: 6px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-headline {<!-- [et_pb_line_break_holder] -->  font-family: 'Poppins', sans-serif !important;<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-sub {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.65) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-btn {<!-- [et_pb_line_break_holder] -->  display: inline-flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  padding: 12px 22px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.25s ease !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-btn:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#upl-grt-related .grtr-pillar-btn svg {<!-- [et_pb_line_break_holder] -->  width: 14px !important;<!-- [et_pb_line_break_holder] -->  height: 14px !important;<!-- [et_pb_line_break_holder] -->  stroke: currentColor !important;<!-- [et_pb_line_break_holder] -->  fill: none !important;<!-- [et_pb_line_break_holder] -->  stroke-width: 2.5 !important;<!-- [et_pb_line_break_holder] -->  stroke-linecap: round !important;<!-- [et_pb_line_break_holder] -->  stroke-linejoin: round !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-related { padding: 50px 0 !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-related .grtr-grid { grid-template-columns: repeat(2, 1fr) !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-related .grtr-pillar-cta { flex-direction: column !important; align-items: flex-start !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-related { padding: 40px 0 !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-related .grtr-grid { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-related .grtr-pillar-btn { width: 100% !important; justify-content: center !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><div id=\"upl-grt-related\"><!-- [et_pb_line_break_holder] -->  <div class=\"grtr-inner\"><!-- [et_pb_line_break_holder] -->    <div class=\"grtr-badge\"><!-- [et_pb_line_break_holder] -->      <span class=\"grtr-dot\"><\/span><!-- [et_pb_line_break_holder] -->      <span>Google OAuth Cluster<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <h2 class=\"grtr-h2\">More resources in the Google OAuth series<\/h2><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtr-grid\"><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-card\" href=\"https:\/\/www.unipile.com\/google-oauth-verification-gmail-api-credentials\/\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtr-card-tag\"><span>Verification Hub<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-title\">Google OAuth App Verification &#038; Gmail API Credentials<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-card-desc\">Full guide to the OAuth consent screen, CASA Tier 2 security audit, and the POC-to-production certification path.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-arrow\"><!-- [et_pb_line_break_holder] -->          <span>Read guide<\/span><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-card\" href=\"https:\/\/www.unipile.com\/google-oauth-common-errors-and-their-fixes\/\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtr-card-tag\"><span>Errors<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-title\">Google OAuth Common Errors &#038; Their Fixes<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-card-desc\">Complete reference for every OAuth error code: invalid_grant, redirect_uri_mismatch, access_denied, and more &#8211; with fixes.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-arrow\"><!-- [et_pb_line_break_holder] -->          <span>Read guide<\/span><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-card\" href=\"https:\/\/www.unipile.com\/google-oauth-100-user-limit\/\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtr-card-tag\"><span>Limits<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-title\">Google OAuth 100 User Limit Explained<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-card-desc\">Why unverified apps are capped at 100 test users, how it relates to the 7-day token limit, and how to lift the cap.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-arrow\"><!-- [et_pb_line_break_holder] -->          <span>Read guide<\/span><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-card\" href=\"https:\/\/www.unipile.com\/google-oauth-playground-gmail-api\/\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtr-card-tag\"><span>Tools<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-title\">Google OAuth Playground for Gmail API<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-card-desc\">How to use Google&#8217;s OAuth Playground to test token flows, inspect responses, and debug refresh token issues interactively.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-arrow\"><!-- [et_pb_line_break_holder] -->          <span>Read guide<\/span><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-card\" href=\"https:\/\/www.unipile.com\/gmail-api-scopes-explained\/\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtr-card-tag\"><span>Scopes<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-title\">Gmail API Scopes Explained<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-card-desc\">Full breakdown of Gmail API scopes, sensitive vs. restricted classifications, and their direct impact on refresh token expiration.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-arrow\"><!-- [et_pb_line_break_holder] -->          <span>Read guide<\/span><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-card\" href=\"https:\/\/www.unipile.com\/google-oauth-consent-screen\/\" target=\"_blank\" rel=\"noopener\"><!-- [et_pb_line_break_holder] -->        <span class=\"grtr-card-tag\"><span>Consent Screen<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-title\">Google OAuth Consent Screen: Complete Setup Guide<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-card-desc\">Step-by-step setup of the OAuth consent screen in Google Cloud Console &#8211; from app registration to publishing for production.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-card-arrow\"><!-- [et_pb_line_break_holder] -->          <span>Read guide<\/span><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"grtr-pillar-cta\"><!-- [et_pb_line_break_holder] -->      <div class=\"grtr-pillar-text\"><!-- [et_pb_line_break_holder] -->        <div class=\"grtr-pillar-headline\">Email API: complete developer guide<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"grtr-pillar-sub\">The full Unipile Email API pillar covers Gmail, Outlook, and IMAP &#8211; from first token to production webhook.<\/pee><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <a class=\"grtr-pillar-btn\" href=\"https:\/\/www.unipile.com\/email-api\/\" target=\"_blank\" rel=\"noopener\" data-upl-link=\"https:\/\/www.unipile.com\/email-api\/\" data-upl-target=\"_blank\"><!-- [et_pb_line_break_holder] -->        <svg viewBox=\"0 0 24 24\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><!-- [et_pb_line_break_holder] -->        <span>Read the Email API guide<\/span><!-- [et_pb_line_break_holder] -->      <\/a><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/div>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.0&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; da_disable_devices=&#8221;off|off|off&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; da_is_popup=&#8221;off&#8221; da_exit_intent=&#8221;off&#8221; da_has_close=&#8221;on&#8221; da_alt_close=&#8221;off&#8221; da_dark_close=&#8221;off&#8221; da_not_modal=&#8221;on&#8221; da_is_singular=&#8221;off&#8221; da_with_loader=&#8221;off&#8221; da_has_shadow=&#8221;on&#8221;][et_pb_row _builder_version=&#8221;4.27.0&#8243; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<script type=\"application\/ld+json\"><!-- [et_pb_line_break_holder] -->{<!-- [et_pb_line_break_holder] -->  \"@context\": \"https:\/\/schema.org\",<!-- [et_pb_line_break_holder] -->  \"@type\": \"FAQPage\",<!-- [et_pb_line_break_holder] -->  \"mainEntity\": [<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"Do Google OAuth refresh tokens expire?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"Yes, Google OAuth refresh tokens can expire under 6 specific conditions: (1) the app is in testing mode - tokens expire after 7 days; (2) the token has not been used for 6 months (inactivity); (3) the user changes their Google password and the app holds Gmail or sensitive email scopes; (4) the 50-refresh-token-per-client-user cap is exceeded and the oldest token is silently revoked; (5) the user explicitly revokes access from Google Account settings; (6) the app requests sensitive or restricted scopes without completing Google verification. In production with a verified app, tokens are effectively permanent unless one of these conditions is triggered.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"How long does a Google OAuth refresh token last?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"A Google OAuth refresh token lifetime depends on the app's verification status. For unverified apps in testing mode, tokens expire after 7 days. For published, verified apps, there is no fixed expiration - tokens remain valid indefinitely unless the user revokes access, changes their password (for Gmail scopes), the token goes unused for 6 months, or the 50-token-per-client-user limit is exceeded.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"Why does my Google OAuth refresh token expire after 7 days?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"The 7-day expiration applies when your app's OAuth consent screen status is set to Testing in Google Cloud Console and the app has not been verified by Google. Google enforces this limit to protect users from unverified applications. The fix is to publish your app (change status to In Production) and complete Google's OAuth verification process, or to use a Google Workspace internal app which is not subject to this restriction.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"How do I keep a Google OAuth refresh token alive?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"To prevent a google oauth refresh token from expiring due to inactivity, use it to obtain a new access token at least once every 6 months. A monthly scheduled call to the Google token endpoint (https:\/\/oauth2.googleapis.com\/token) with grant_type=refresh_token is sufficient to reset the inactivity timer. Store refresh tokens securely server-side and never re-prompt users unless the token is actually invalid, to avoid hitting the 50-token-per-client-user cap.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"What causes invalid_grant on a Google OAuth refresh token?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"The invalid_grant error on a refresh token exchange is caused by: the token being expired (7-day testing limit or 6-month inactivity), the user having revoked access, the token being displaced by the 50-token-per-client-user cap, the user having changed their Google password with sensitive scopes active, or mismatched client credentials. The error response is: {\\\"error\\\": \\\"invalid_grant\\\", \\\"error_description\\\": \\\"Token has been expired or revoked.\\\"}. When you receive this error, delete the stored token and prompt the user to re-authorize.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"How do I get a new Google OAuth refresh token without asking for user consent again?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"You cannot get a new Google OAuth refresh token without user consent - by design. Refresh tokens are only issued during the OAuth authorization flow when the user explicitly grants access. If your token has expired or been revoked, you must redirect the user to Google's authorization endpoint again. To minimize re-authorization requests, store tokens server-side, implement keep-alive refreshes, and never re-prompt unnecessarily. Adding prompt=consent forces a new consent screen and issues a new token, but it also counts against the 50-token-per-client-user limit.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->      \"@type\": \"Question\",<!-- [et_pb_line_break_holder] -->      \"name\": \"How do I refresh a Google OAuth access token programmatically?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"To refresh a Google OAuth access token, send a POST request to https:\/\/oauth2.googleapis.com\/token with the following body parameters: client_id (your Google Cloud app's client ID), client_secret (your client secret), refresh_token (the stored google oauth2 refresh token), and grant_type set to refresh_token. The response includes a new access_token valid for 3600 seconds. If the response contains an error field with invalid_grant, the refresh token is no longer valid and the user must re-authorize.\"<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  ]<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><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=\"faq-grt\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-grt-faq { font-family:'Inter',sans-serif; padding:80px 20px; max-width:900px; margin:0 auto; background:transparent!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq *, #upl-grt-faq *::before, #upl-grt-faq *::after { margin:0!important; padding:0!important; box-sizing:border-box!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-header { text-align:center!important; margin-bottom:60px!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-subtitle { font-size:17px!important; color:#383838!important; max-width:700px!important; margin:0 auto!important; line-height:1.6!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-list { display:flex!important; flex-direction:column!important; gap:12px!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item:hover { border-color:#3BB98B!important; box-shadow:0 4px 20px rgba(59,185,139,0.08)!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item.active { border-color:#3BB98B!important; box-shadow:0 8px 30px rgba(59,185,139,0.12)!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-question-content { display:flex!important; align-items:flex-start!important; gap:16px!important; flex:1!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item.active .upl-faq-number { background:rgba(59,185,139,0.2)!important; color:#2a9d6e!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-icon svg { width:18px!important; height:18px!important; color:#64748b!important; transition:all 0.3s ease!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item:hover .upl-faq-icon { background:rgba(59,185,139,0.1)!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item:hover .upl-faq-icon svg { color:#3BB98B!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item.active .upl-faq-icon { background:#3BB98B!important; transform:rotate(45deg)!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item.active .upl-faq-icon svg { color:#ffffff!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-answer { max-height:0!important; overflow:hidden!important; transition:max-height 0.4s ease!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-item.active .upl-faq-answer { max-height:600px!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-answer-content { padding:0 28px 28px 76px!important; color:#475569!important; font-size:1rem!important; line-height:1.7!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-answer-content strong { color:#0f2736!important; font-weight:600!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-answer-content a { color:#3BB98B!important; text-decoration:underline!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-cta-text { color:#475569!important; font-size:1rem!important; }<!-- [et_pb_line_break_holder] -->#upl-grt-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; }<!-- [et_pb_line_break_holder] -->#upl-grt-faq .upl-faq-cta-button:hover { transform:translateY(-2px)!important; }<!-- [et_pb_line_break_holder] -->@media (max-width:768px) {<!-- [et_pb_line_break_holder] -->  #upl-grt-faq { padding:60px 16px!important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-faq .upl-faq-answer-content { padding:0 20px 20px 20px!important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-faq .upl-faq-question { padding:18px 20px!important; }<!-- [et_pb_line_break_holder] -->  #upl-grt-faq .upl-faq-cta { flex-direction:column!important; align-items:flex-start!important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><section id=\"upl-grt-faq\"><!-- [et_pb_line_break_holder] -->  <div class=\"upl-faq-header\"><!-- [et_pb_line_break_holder] -->    <h2 class=\"upl-faq-title\">Google OAuth Refresh Token &#8211; FAQ<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"upl-faq-subtitle\">Common questions about Google OAuth refresh token expiration, lifetime, and the google oauth2 refresh token lifecycle.<\/pee><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] -->  <div class=\"upl-faq-list\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item active\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"true\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">01<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">Do Google OAuth refresh tokens expire?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee>Yes, under 6 specific conditions. The most common is the <strong>7-day testing limit<\/strong>: if your app is in &#8220;Testing&#8221; status in Google Cloud Console, all refresh tokens expire after 7 days. In production with a verified app, tokens are effectively permanent unless: (1) unused for 6 months, (2) user revokes access, (3) password change with Gmail scopes, (4) 50-token cap exceeded, or (5) app loses verification for sensitive scopes. Understanding <a href=\"https:\/\/www.unipile.com\/google-oauth-verification-gmail-api-credentials\/\">Google OAuth verification<\/a> is key to avoiding unexpected expiration.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">02<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">How long does a Google OAuth refresh token last?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee><strong>Google OAuth refresh token lifetime<\/strong> depends on your app&#8217;s status. In <strong>testing mode<\/strong>: 7 days maximum, regardless of use. In <strong>production (verified app)<\/strong>: no fixed expiration &#8211; tokens last indefinitely as long as they are used at least once every 6 months, the 50-token cap is not exceeded, and the user has not revoked access. Google Workspace internal apps also have no 7-day limit.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">03<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">Why does my Google OAuth refresh token expire after 7 days?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee>The <strong>google oauth refresh token 7-day expiration<\/strong> applies when your OAuth consent screen status is &#8220;Testing&#8221; in Google Cloud Console. Google enforces this limit on all unverified applications as a security measure. It also coincides with the <a href=\"https:\/\/www.unipile.com\/google-oauth-100-user-limit\/\">100 test user limit<\/a>. The fix is to publish your app and complete Google OAuth verification (for production) or set the app to &#8220;Internal&#8221; if it&#8217;s Workspace-only.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">04<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">How do I keep a Google OAuth refresh token alive?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee>To prevent the <strong>google oauth2 refresh token<\/strong> from expiring due to 6-month inactivity: schedule a monthly POST to <code>https:\/\/oauth2.googleapis.com\/token<\/code> with <code>grant_type=refresh_token<\/code>. This resets the inactivity clock. Note that making Gmail API calls with the existing access token does NOT count as &#8220;using&#8221; the refresh token &#8211; only the token exchange endpoint resets the timer. Store tokens server-side and never re-prompt users unnecessarily to stay under the 50-token cap.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">05<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">What causes invalid_grant on a Google OAuth refresh token?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee><code>invalid_grant<\/code> means your <strong>google oauth refresh token expiration<\/strong> has been triggered or the token is invalid. Main causes: token expired (7-day testing limit or 6-month inactivity), user revoked access from Google Account settings, 50-token-per-client-user cap was exceeded and this token was displaced, password change with Gmail scopes, or mismatched client credentials. See the full <a href=\"https:\/\/www.unipile.com\/google-oauth-common-errors-and-their-fixes\/\">Google OAuth errors guide<\/a> for detailed remediation steps per cause.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">06<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">How do I get a new Google OAuth refresh token without asking for user consent again?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee>You cannot obtain a new Google OAuth refresh token without user interaction &#8211; by design. Refresh tokens are only issued during the user-consent authorization flow. If your token is expired or revoked, you must redirect the user through the OAuth flow again. Adding <code>prompt=consent<\/code> forces a new consent screen and issues a new token, but counts against the 50-token cap. The best practice is to prevent expiration in the first place: store tokens securely, implement keep-alive refreshes, and handle <code>invalid_grant<\/code> errors gracefully by prompting re-authorization only when necessary.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"upl-faq-item\"><!-- [et_pb_line_break_holder] -->      <button class=\"upl-faq-question\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-question-content\"><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-number\">07<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">How do I refresh a Google OAuth access token programmatically?<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-icon\"><!-- [et_pb_line_break_holder] -->          <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><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <div class=\"upl-faq-answer\"><!-- [et_pb_line_break_holder] -->        <div class=\"upl-faq-answer-content\"><pee>POST to <code>https:\/\/oauth2.googleapis.com\/token<\/code> with <code>Content-Type: application\/x-www-form-urlencoded<\/code> and body params: <code>client_id<\/code>, <code>client_secret<\/code>, <code>refresh_token<\/code>, and <code>grant_type=refresh_token<\/code>. The response returns a new <code>access_token<\/code> valid for 3,600 seconds. If the response contains <code>\"error\": \"invalid_grant\"<\/code>, the <strong>google api refresh token<\/strong> is no longer valid and user re-authorization is required. See the code samples in section 5 for curl, Python, and Node.js implementations.<\/pee><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] -->  <div class=\"upl-faq-cta\"><!-- [et_pb_line_break_holder] -->    <pee class=\"upl-faq-cta-text\">Still have questions about Google OAuth refresh tokens? Our team is here to help.<\/pee><!-- [et_pb_line_break_holder] -->    <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><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><\/section><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  function initFaq(){<!-- [et_pb_line_break_holder] -->    var faq=document.getElementById('upl-grt-faq');<!-- [et_pb_line_break_holder] -->    if(!faq)return;<!-- [et_pb_line_break_holder] -->    faq.querySelectorAll('.upl-faq-question').forEach(function(btn){<!-- [et_pb_line_break_holder] -->      btn.addEventListener('click',function(){<!-- [et_pb_line_break_holder] -->        var item=btn.closest('.upl-faq-item');<!-- [et_pb_line_break_holder] -->        var isActive=item.classList.contains('active');<!-- [et_pb_line_break_holder] -->        faq.querySelectorAll('.upl-faq-item').forEach(function(i){i.classList.remove('active');i.querySelector('.upl-faq-question').setAttribute('aria-expanded','false');});<!-- [et_pb_line_break_holder] -->        if(!isActive){item.classList.add('active');btn.setAttribute('aria-expanded','true');}<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',initFaq);}else{initFaq();}<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]\n","protected":false},"excerpt":{"rendered":"<p>Google OAuth &#8211; Developer Guide Google OAuth Refresh Token: Expiration, 7-Day Limit &#038; Lifetime Explained (2026) Google OAuth refresh tokens don&#8217;t last forever. Understand every expiration condition &#8211; from the 7-day testing trap to the 6-month inactivity rule &#8211; and learn how to keep your Gmail API integration alive in production. Build it with Unipile [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":279149,"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-279145","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>Google OAuth Refresh Token: Expiration, 7-Day Limit &amp; Lifetime Explained (2026) - Unipile<\/title>\n<meta name=\"description\" content=\"Google OAuth refresh token expires after 7 days in testing, 6 months unused, or on revoke. Full lifetime guide, code samples, and Unipile&#039;s managed 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\/tr\/google-oauth-yenileme-jetonu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google OAuth Refresh Token: Expiration, 7-Day Limit &amp; Lifetime Explained (2026) - Unipile\" \/>\n<meta property=\"og:description\" content=\"Google OAuth refresh token expires after 7 days in testing, 6 months unused, or on revoke. Full lifetime guide, code samples, and Unipile&#039;s managed alternative.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.unipile.com\/tr\/google-oauth-yenileme-jetonu\/\" \/>\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-06-04T13:11:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-08T14:58:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/google-oauth-refresh-token.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=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Damien Girardeau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/\"},\"author\":{\"name\":\"Damien Girardeau\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/person\\\/a2ac44e22bdc27d497ce8b58716a673e\"},\"headline\":\"Google OAuth Refresh Token: Expiration, 7-Day Limit &#038; Lifetime Explained (2026)\",\"datePublished\":\"2026-06-04T13:11:05+00:00\",\"dateModified\":\"2026-06-08T14:58:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/\"},\"wordCount\":4374,\"publisher\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/google-oauth-refresh-token.png\",\"articleSection\":[\"API Guidelines\"],\"inLanguage\":\"tr\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/\",\"name\":\"Google OAuth Refresh Token: Expiration, 7-Day Limit & Lifetime Explained (2026) - Unipile\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/google-oauth-refresh-token.png\",\"datePublished\":\"2026-06-04T13:11:05+00:00\",\"dateModified\":\"2026-06-08T14:58:57+00:00\",\"description\":\"Google OAuth refresh token expires after 7 days in testing, 6 months unused, or on revoke. Full lifetime guide, code samples, and Unipile's managed alternative.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/google-oauth-refresh-token.png\",\"contentUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/google-oauth-refresh-token.png\",\"width\":2400,\"height\":1600,\"caption\":\"Google OAuth refresh token: expiration, 7-day testing trap, production lifetime, and Unipile's managed alternative.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-refresh-token\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.unipile.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google OAuth Refresh Token: Expiration, 7-Day Limit &#038; Lifetime Explained (2026)\"}]},{\"@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\":\"tr\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\",\"name\":\"Unipile\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@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\":\"tr\",\"@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":"Google OAuth Yenileme Tokeni: S\u00fcresinin Dolmas\u0131, 7 G\u00fcnl\u00fck S\u0131n\u0131r ve \u00d6mr\u00fc A\u00e7\u0131klamas\u0131 (2026) - Unipile","description":"Google OAuth yenileme jetonu testte 7 g\u00fcn, kullan\u0131lmad\u0131\u011f\u0131nda 6 ay sonra veya geri al\u0131nd\u0131\u011f\u0131nda s\u00fcresi dolar. Tam \u00f6m\u00fcr k\u0131lavuzu, kod \u00f6rnekleri ve Unipile'\u0131n y\u00f6netilen alternatifi.","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\/tr\/google-oauth-yenileme-jetonu\/","og_locale":"tr_TR","og_type":"article","og_title":"Google OAuth Refresh Token: Expiration, 7-Day Limit & Lifetime Explained (2026) - Unipile","og_description":"Google OAuth refresh token expires after 7 days in testing, 6 months unused, or on revoke. Full lifetime guide, code samples, and Unipile's managed alternative.","og_url":"https:\/\/www.unipile.com\/tr\/google-oauth-yenileme-jetonu\/","og_site_name":"Unipile","article_publisher":"https:\/\/www.facebook.com\/unipilefr","article_published_time":"2026-06-04T13:11:05+00:00","article_modified_time":"2026-06-08T14:58:57+00:00","og_image":[{"width":2400,"height":1600,"url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/google-oauth-refresh-token.png","type":"image\/png"}],"author":"Damien Girardeau","twitter_card":"summary_large_image","twitter_creator":"@UnipileAPI","twitter_site":"@UnipileAPI","twitter_misc":{"Yazan:":"Damien Girardeau","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#article","isPartOf":{"@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/"},"author":{"name":"Damien Girardeau","@id":"https:\/\/www.unipile.com\/#\/schema\/person\/a2ac44e22bdc27d497ce8b58716a673e"},"headline":"Google OAuth Refresh Token: Expiration, 7-Day Limit &#038; Lifetime Explained (2026)","datePublished":"2026-06-04T13:11:05+00:00","dateModified":"2026-06-08T14:58:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/"},"wordCount":4374,"publisher":{"@id":"https:\/\/www.unipile.com\/#organization"},"image":{"@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/google-oauth-refresh-token.png","articleSection":["API Guidelines"],"inLanguage":"tr"},{"@type":"WebPage","@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/","url":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/","name":"Google OAuth Yenileme Tokeni: S\u00fcresinin Dolmas\u0131, 7 G\u00fcnl\u00fck S\u0131n\u0131r ve \u00d6mr\u00fc A\u00e7\u0131klamas\u0131 (2026) - Unipile","isPartOf":{"@id":"https:\/\/www.unipile.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#primaryimage"},"image":{"@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/google-oauth-refresh-token.png","datePublished":"2026-06-04T13:11:05+00:00","dateModified":"2026-06-08T14:58:57+00:00","description":"Google OAuth yenileme jetonu testte 7 g\u00fcn, kullan\u0131lmad\u0131\u011f\u0131nda 6 ay sonra veya geri al\u0131nd\u0131\u011f\u0131nda s\u00fcresi dolar. Tam \u00f6m\u00fcr k\u0131lavuzu, kod \u00f6rnekleri ve Unipile'\u0131n y\u00f6netilen alternatifi.","breadcrumb":{"@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.unipile.com\/google-oauth-refresh-token\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#primaryimage","url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/google-oauth-refresh-token.png","contentUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/google-oauth-refresh-token.png","width":2400,"height":1600,"caption":"Google OAuth refresh token: expiration, 7-day testing trap, production lifetime, and Unipile's managed alternative."},{"@type":"BreadcrumbList","@id":"https:\/\/www.unipile.com\/google-oauth-refresh-token\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.unipile.com\/"},{"@type":"ListItem","position":2,"name":"Google OAuth Refresh Token: Expiration, 7-Day Limit &#038; Lifetime Explained (2026)"}]},{"@type":"WebSite","@id":"https:\/\/www.unipile.com\/#website","url":"https:\/\/www.unipile.com\/","name":"Unipile","description":"Mesajla\u015fma ve E-postay\u0131 Entegre Edin, API ile Kolayca Ba\u011flan\u0131n","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":"tr"},{"@type":"Organization","@id":"https:\/\/www.unipile.com\/#organization","name":"Unipile","url":"https:\/\/www.unipile.com\/","logo":{"@type":"ImageObject","inLanguage":"tr","@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":"tr","@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\/tr\/wp-json\/wp\/v2\/posts\/279145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/comments?post=279145"}],"version-history":[{"count":5,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/posts\/279145\/revisions"}],"predecessor-version":[{"id":279151,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/posts\/279145\/revisions\/279151"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/media\/279149"}],"wp:attachment":[{"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/media?parent=279145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/categories?post=279145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/tags?post=279145"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/www.unipile.com\/tr\/wp-json\/wp\/v2\/post_folder?post=279145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}