{"id":279108,"date":"2026-06-03T11:32:21","date_gmt":"2026-06-03T09:32:21","guid":{"rendered":"https:\/\/www.unipile.com\/?p=279108"},"modified":"2026-06-03T14:57:21","modified_gmt":"2026-06-03T12:57:21","slug":"google-oauth-playground-handleiding","status":"publish","type":"post","link":"https:\/\/www.unipile.com\/nl\/google-oauth-playground-guide\/","title":{"rendered":"Google OAuth Playground \u2014 Complete Gids voor het Testen van Scopes &amp; Tokens (2026)"},"content":{"rendered":"\n[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#8221; global_colors_info=&#8221;{}&#8221; 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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; sticky_enabled=&#8221;0&#8243;]<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 OAuth Playground 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] -->      <!-- COLUMN 1: Overview --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Overview<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-what\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">01<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">What Is the Playground?<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-why\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">02<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Why Developers Use It<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-quickstart\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">03<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Quick Start in 3 Minutes<\/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] -->      <!-- COLUMN 2: Testing --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Testing<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-scopes\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">04<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Testing OAuth Scopes<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-tokens\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">05<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Access &#038; Refresh Tokens<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-own-creds\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">06<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Use Your Own Credentials<\/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] -->      <!-- COLUMN 3: Advanced --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Advanced<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-pitfalls\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">07<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Common Pitfalls<\/span><!-- [et_pb_line_break_holder] -->          <\/a><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-vs-prod\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">08<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Playground vs Production<\/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] -->      <!-- COLUMN 4: Production + FAQ --><!-- [et_pb_line_break_holder] -->      <div class=\"utc-col\"><!-- [et_pb_line_break_holder] -->        <span class=\"utc-col-label\">Production<\/span><!-- [et_pb_line_break_holder] -->        <div class=\"utc-link-list\"><!-- [et_pb_line_break_holder] -->          <a class=\"utc-link\" href=\"#gop-skip-banner\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num\">09<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Skip Verification<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-gop\"><!-- [et_pb_line_break_holder] -->            <span class=\"utc-num utc-num-faq\">FAQ<\/span><!-- [et_pb_line_break_holder] -->            <span class=\"utc-link-text\">Frequently Asked Questions<\/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) {<!-- [et_pb_line_break_holder] -->          activeId = id;<!-- [et_pb_line_break_holder] -->          readIds.push(id);<!-- [et_pb_line_break_holder] -->        }<!-- [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) {<!-- [et_pb_line_break_holder] -->        link.classList.add('utc-active');<!-- [et_pb_line_break_holder] -->      } else if (readIds.indexOf(id) !== -1) {<!-- [et_pb_line_break_holder] -->        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] --><!-- [et_pb_line_break_holder] -->  if ('IntersectionObserver' in window) {<!-- [et_pb_line_break_holder] -->    var observer = new IntersectionObserver(function(){<!-- [et_pb_line_break_holder] -->      updateActive();<!-- [et_pb_line_break_holder] -->    }, { 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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#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@600;700;800&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#unipile-gop-hero { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero *,<!-- [et_pb_line_break_holder] -->#unipile-gop-hero *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-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: 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] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 48px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-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.1) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(59, 185, 139, 0.25) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  padding: 6px 14px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-badge 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] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-badge-text {<!-- [et_pb_line_break_holder] -->  font-size: 12px !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.6px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-grid {<!-- [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] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-content {}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-desc {<!-- [et_pb_line_break_holder] -->  font-size: 18px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-top: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-cta-row {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-btn-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] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 24px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-btn-primary:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-btn-primary svg {<!-- [et_pb_line_break_holder] -->  width: 16px !important;<!-- [et_pb_line_break_holder] -->  height: 16px !important;<!-- [et_pb_line_break_holder] -->  stroke: #0f2736 !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] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-link {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [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] -->#unipile-gop-hero.gop-hero-wrapper .gop-hero-mockup {<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 14px !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(255,255,255,0.08) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-mock-head {<!-- [et_pb_line_break_holder] -->  background: rgba(255,255,255,0.04) !important;<!-- [et_pb_line_break_holder] -->  padding: 10px 16px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 10px !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] -->#unipile-gop-hero.gop-hero-wrapper .gop-mock-dots {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  gap: 5px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-mock-dot {<!-- [et_pb_line_break_holder] -->  width: 9px !important;<!-- [et_pb_line_break_holder] -->  height: 9px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-dot-r { background: #ff5f56 !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-dot-y { background: #ffbd2e !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-dot-g { background: #27c93f !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-mock-filename {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.45) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-mock-body {<!-- [et_pb_line_break_holder] -->  padding: 18px 20px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #c9d1d9 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-mock-line {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  white-space: pre !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .c-cmt { color: #8b949e !important; font-style: italic !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .c-kw { color: #ff7b72 !important; font-weight: 600 !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .c-str { color: #a5d6ff !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .c-flag { color: #DDDF4C !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .c-grn { color: #3BB98B !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-trust-row {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 28px !important;<!-- [et_pb_line_break_holder] -->  flex-wrap: wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-trust-item {<!-- [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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-hero.gop-hero-wrapper .gop-trust-item 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] -->#unipile-gop-hero.gop-hero-wrapper .gop-trust-item span {<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  color: #64748b !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-hero.gop-hero-wrapper .gop-hero-grid {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1fr !important;<!-- [et_pb_line_break_holder] -->    gap: 32px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-hero.gop-hero-wrapper {<!-- [et_pb_line_break_holder] -->    padding: 32px 16px 28px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-hero.gop-hero-wrapper .gop-hero-desc {<!-- [et_pb_line_break_holder] -->    font-size: 16px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-hero.gop-hero-wrapper .gop-hero-cta-row {<!-- [et_pb_line_break_holder] -->    flex-direction: column !important;<!-- [et_pb_line_break_holder] -->    align-items: stretch !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-hero.gop-hero-wrapper .gop-hero-btn-primary {<!-- [et_pb_line_break_holder] -->    justify-content: center !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-hero.gop-hero-wrapper .gop-mock-body {<!-- [et_pb_line_break_holder] -->    font-size: 10.5px !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] --><span id=\"gop-hero\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-hero\" class=\"gop-hero-wrapper\"><!-- [et_pb_line_break_holder] -->  <div class=\"gop-hero-badge\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><\/svg><span class=\"gop-hero-badge-text\">Google OAuth Playground \u2014 2026 Guide<\/span><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-hero-grid\"><!-- [et_pb_line_break_holder] -->    <div class=\"gop-hero-content\"><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-hero-desc\">The <strong>Google OAuth Playground<\/strong> is Google&#8217;s official sandbox tool for testing OAuth 2.0 authorization flows without writing a single line of backend code. This guide walks you through every feature: selecting scopes, exchanging authorization codes for tokens, making live API calls, and understanding when you need to move beyond the playground to a production-grade solution.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-hero-cta-row\"><!-- [et_pb_line_break_holder] -->        <span class=\"gop-hero-btn-primary\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><span>Start building with Unipile<\/span><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/span><!-- [et_pb_line_break_holder] -->        <a class=\"gop-hero-link\" href=\"https:\/\/developers.google.com\/oauthplayground\/\" target=\"_blank\" rel=\"noopener\">Open OAuth Playground<\/a><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-trust-row\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-trust-item\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>OAuth 2.0 flows explained<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-trust-item\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Token lifecycle decoded<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-trust-item\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Production path included<\/span><\/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=\"gop-hero-mockup\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-mock-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-mock-dots\"><!-- [et_pb_line_break_holder] -->          <span class=\"gop-mock-dot gop-dot-r\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"gop-mock-dot gop-dot-y\"><\/span><!-- [et_pb_line_break_holder] -->          <span class=\"gop-mock-dot gop-dot-g\"><\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-filename\">oauth-playground.sh<\/span><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-mock-body\"><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-cmt\"># Step 1 \u2014 Select scope in Playground UI<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-grn\">SCOPE<\/span>=<span class=\"c-str\">&#8220;https:\/\/www.googleapis.com\/auth\/gmail.readonly&#8221;<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"> <\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-cmt\"># Step 2 \u2014 Exchange auth code for tokens<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-kw\">curl<\/span> -X POST <span class=\"c-str\">&#8220;https:\/\/oauth2.googleapis.com\/token&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\">  -d <span class=\"c-str\">&#8220;code=$AUTH_CODE&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\">  -d <span class=\"c-str\">&#8220;grant_type=authorization_code&#8221;<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"> <\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-cmt\"># Step 3 \u2014 Call Gmail API with access_token<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-kw\">curl<\/span> -H <span class=\"c-str\">&#8220;Authorization: Bearer $ACCESS_TOKEN&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\">  <span class=\"c-str\">&#8220;https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages&#8221;<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"> <\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-cmt\"># access_token expires in 1h<\/span><\/span><!-- [et_pb_line_break_holder] -->        <span class=\"gop-mock-line\"><span class=\"c-cmt\"># refresh_token expires in 24h (playground default)<\/span><\/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] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  function init(){<!-- [et_pb_line_break_holder] -->    var el = document.getElementById('unipile-gop-hero');<!-- [et_pb_line_break_holder] -->    if (!el) return;<!-- [et_pb_line_break_holder] -->    el.addEventListener('click', function(e){<!-- [et_pb_line_break_holder] -->      var target = e.target.closest('[data-upl-link]');<!-- [et_pb_line_break_holder] -->      if (!target) return;<!-- [et_pb_line_break_holder] -->      e.preventDefault();<!-- [et_pb_line_break_holder] -->      var url = target.getAttribute('data-upl-link');<!-- [et_pb_line_break_holder] -->      var t = target.getAttribute('data-upl-target') || '_blank';<!-- [et_pb_line_break_holder] -->      window.open(url, t);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }<!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-what { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-what *,<!-- [et_pb_line_break_holder] -->#unipile-gop-what *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-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: 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] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper 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: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-what-def {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-what-def 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] -->#unipile-gop-what.gop-what-wrapper .gop-what-def 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] -->#unipile-gop-what.gop-what-wrapper .gop-snippet-box {<!-- [et_pb_line_break_holder] -->  background: #f4f5f7 !important;<!-- [et_pb_line_break_holder] -->  border-left: 4px solid #3BB98B !important;<!-- [et_pb_line_break_holder] -->  border-radius: 0 10px 10px 0 !important;<!-- [et_pb_line_break_holder] -->  padding: 20px 24px !important;<!-- [et_pb_line_break_holder] -->  margin: 28px 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-snippet-box p {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->  font-weight: 500 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-what-list {<!-- [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: 16px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-what-item {<!-- [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: 20px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-what.gop-what-wrapper .gop-what-icon {<!-- [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.1) !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-gop-what.gop-what-wrapper .gop-what-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] -->#unipile-gop-what.gop-what-wrapper .gop-what-item-title {<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !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] -->#unipile-gop-what.gop-what-wrapper .gop-what-item-desc {<!-- [et_pb_line_break_holder] -->  font-size: 13px !important;<!-- [et_pb_line_break_holder] -->  color: #64748b !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.55 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-what.gop-what-wrapper h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-what.gop-what-wrapper .gop-what-list { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-what.gop-what-wrapper { padding: 40px 16px 28px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-what.gop-what-wrapper 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=\"gop-what\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-what\" class=\"gop-what-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Definition<\/span><!-- [et_pb_line_break_holder] -->  <h2>What Is the Google OAuth Playground?<\/h2><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-snippet-box\"><!-- [et_pb_line_break_holder] -->    <pee>The <strong>Google OAuth Playground<\/strong> is a free, browser-based tool at <a href=\"https:\/\/developers.google.com\/oauthplayground\/\" target=\"_blank\" rel=\"noopener\">developers.google.com\/oauthplayground<\/a> that lets developers test the full OAuth 2.0 authorization flow against any Google API without setting up a backend server, registering an app, or writing server-side code.<\/pee><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-what-def\">At its core, this tool is a visual interface for the three-legged OAuth 2.0 flow. You select which Google API scopes you want, click &#8220;Authorize APIs&#8221;, complete the Google consent screen, then exchange the resulting authorization code for an access token and a refresh token. From that point, you can make authenticated API requests directly inside the browser and inspect the raw request and response payloads.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-what-def\">It is particularly useful for teams building on top of Gmail, Google Calendar, Google Drive, or any other Google Workspace API. Instead of debugging token flows in production, you can test everything in a safe sandbox first. The google oauth 2.0 playground supports every published Google OAuth scope and shows the exact HTTP headers and JSON payloads at each step of the flow.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-what-list\"><!-- [et_pb_line_break_holder] -->    <div class=\"gop-what-item\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-what-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->      <div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-what-item-title\">No backend required<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-what-item-desc\">Complete the entire OAuth 2.0 flow in your browser. No server, no code, no redirect URI setup on your side.<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"gop-what-item\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-what-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"16 18 22 12 16 6\"\/><polyline points=\"8 6 2 12 8 18\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->      <div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-what-item-title\">Full request inspection<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-what-item-desc\">See the exact HTTP request and response at every step: authorization URL, token exchange, and API call.<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"gop-what-item\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-what-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->      <div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-what-item-title\">Official Google tool<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-what-item-desc\">Maintained by Google&#8217;s developer relations team. Supports all Google APIs and stays current with the latest scope definitions.<\/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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-why { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-why *,<!-- [et_pb_line_break_holder] -->#unipile-gop-why *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-why *::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] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper 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] -->#unipile-gop-why.gop-why-wrapper .gop-why-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 36px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-cards-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: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-icon-row {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-icon {<!-- [et_pb_line_break_holder] -->  width: 42px !important;<!-- [et_pb_line_break_holder] -->  height: 42px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.1) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !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-gop-why.gop-why-wrapper .gop-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] -->#unipile-gop-why.gop-why-wrapper .gop-card-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: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.3 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-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] -->#unipile-gop-why.gop-why-wrapper .gop-card-tip {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.06) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  padding: 10px 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-tip 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] -->  margin-top: 2px !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-tip span {<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-caveat {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(245, 158, 11, 0.08) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  padding: 10px 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-caveat svg {<!-- [et_pb_line_break_holder] -->  width: 14px !important;<!-- [et_pb_line_break_holder] -->  height: 14px !important;<!-- [et_pb_line_break_holder] -->  stroke: #f59e0b !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] -->  margin-top: 2px !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-why.gop-why-wrapper .gop-card-caveat span {<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->  color: #92400e !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-why.gop-why-wrapper h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-why.gop-why-wrapper .gop-cards-grid { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-why.gop-why-wrapper { padding: 40px 16px 28px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-why.gop-why-wrapper 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=\"gop-why\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-why\" class=\"gop-why-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Use Cases<\/span><!-- [et_pb_line_break_holder] -->  <h2>Why Developers Use the Google OAuth Playground<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-why-intro\">The oauth2 playground solves four specific developer problems. Understanding which one applies to you will help you get the most out of each session and know when to graduate to a production setup.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-cards-grid\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-icon-row\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-title\">Test scope coverage before production<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-card-body\">Before shipping your app, you need to know exactly which OAuth scope grants access to which data. The playground lets you compare <strong>gmail.readonly<\/strong> vs <strong>gmail.modify<\/strong> vs <strong>gmail.send<\/strong> side by side, calling the actual Gmail API and inspecting what each scope exposes. This prevents over-permissioning (requesting too many scopes, which triggers more scrutiny from Google&#8217;s review team) and under-permissioning (requesting too few, which causes runtime errors for your users).<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-tip\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Always test with the narrowest scope first. Broaden only if the API call fails.<\/span><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-icon-row\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"16 18 22 12 16 6\"\/><polyline points=\"8 6 2 12 8 18\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-title\">Debug API responses without a full OAuth flow<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-card-body\">Setting up a complete OAuth redirect flow locally takes time: you need an HTTP server, a callback URL, session handling, and token storage. The playground bypasses all of this. You authenticate once in the browser, get your tokens, and then execute any Google API endpoint directly from the &#8220;Send the request&#8221; panel. This is particularly useful for debugging unexpected 403 errors or understanding the structure of API responses before you write the parsing logic in your application.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-tip\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>The &#8220;Request \/ Response&#8221; panel shows the full HTTP exchange, including all headers.<\/span><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-icon-row\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-title\">Onboard new developers to OAuth 2.0<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-card-body\">The playground is one of the best learning tools available for understanding how OAuth 2.0 actually works. The step-by-step UI makes the abstract flow concrete: you see the authorization URL being constructed with your chosen scopes, you see the authorization code returned in the redirect, and you see how that code gets exchanged for an access token and a refresh token. For teams onboarding engineers who are new to OAuth, a 30-minute session in the playground replaces hours of documentation reading. See our guide on <a href=\"https:\/\/www.unipile.com\/integrating-google-oauth-2-0-user-authentication-into-your-app\/\" style=\"color:#3BB98B;text-decoration:underline;\">integrating Google OAuth 2.0 into your app<\/a> for the full production implementation.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-tip\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>Enable &#8220;Use your own OAuth credentials&#8221; to make the flow identical to production.<\/span><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-icon-row\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><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><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-card-title\">Generate ad-hoc tokens for scripts and one-offs<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-card-body\">Sometimes you just need a valid access token to run a one-off data migration script, test a webhook payload, or verify an API integration manually. The playground generates a working access token in under 60 seconds. Copy it, paste it into your curl command or Postman, and you are done. The caveat is that playground tokens (using Google&#8217;s default credentials) expire after <strong>24 hours<\/strong> for the refresh token, and the access token expires after 1 hour &#8211; so this approach is limited to short-lived scripts.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-card-caveat\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg><span>Refresh tokens from playground default credentials revoke after 24 hours. Use your own credentials to avoid this.<\/span><\/div><!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; sticky_enabled=&#8221;0&#8243;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart,<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart *,<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart *::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-gop-quickstart.gop-qs-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper 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] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-qs-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 36px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-steps {<!-- [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] -->  position: relative !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step {<!-- [et_pb_line_break_holder] -->  display: grid !important;<!-- [et_pb_line_break_holder] -->  grid-template-columns: 52px 1fr !important;<!-- [et_pb_line_break_holder] -->  gap: 20px !important;<!-- [et_pb_line_break_holder] -->  position: relative !important;<!-- [et_pb_line_break_holder] -->  padding-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step:last-child {<!-- [et_pb_line_break_holder] -->  padding-bottom: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-left {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  flex-direction: column !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-num {<!-- [et_pb_line_break_holder] -->  width: 40px !important;<!-- [et_pb_line_break_holder] -->  height: 40px !important;<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !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: 15px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-line {<!-- [et_pb_line_break_holder] -->  width: 2px !important;<!-- [et_pb_line_break_holder] -->  flex: 1 !important;<!-- [et_pb_line_break_holder] -->  background: #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  margin-top: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step:last-child .gop-step-line {<!-- [et_pb_line_break_holder] -->  display: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-right {<!-- [et_pb_line_break_holder] -->  padding-top: 8px !important;<!-- [et_pb_line_break_holder] -->  min-width: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-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: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 10px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.35 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-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] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-body a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-step-body code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !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] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-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] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  font-size: 0.95rem !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  margin-top: 28px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-inline-cta:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-quickstart.gop-qs-wrapper .gop-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] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-qs-intro { font-size: 16px !important; margin-bottom: 28px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper {<!-- [et_pb_line_break_holder] -->    padding: 40px 16px 28px !important;<!-- [et_pb_line_break_holder] -->    overflow-x: hidden !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-qs-intro {<!-- [et_pb_line_break_holder] -->    font-size: 15px !important;<!-- [et_pb_line_break_holder] -->    line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 36px 1fr !important;<!-- [et_pb_line_break_holder] -->    gap: 14px !important;<!-- [et_pb_line_break_holder] -->    padding-bottom: 26px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step-num {<!-- [et_pb_line_break_holder] -->    width: 36px !important;<!-- [et_pb_line_break_holder] -->    height: 36px !important;<!-- [et_pb_line_break_holder] -->    font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step-right {<!-- [et_pb_line_break_holder] -->    padding-top: 6px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step-title {<!-- [et_pb_line_break_holder] -->    font-size: 16px !important;<!-- [et_pb_line_break_holder] -->    margin-bottom: 8px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step-body {<!-- [et_pb_line_break_holder] -->    font-size: 14.5px !important;<!-- [et_pb_line_break_holder] -->    line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step-body code {<!-- [et_pb_line_break_holder] -->    font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->    padding: 2px 6px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-inline-cta {<!-- [et_pb_line_break_holder] -->    display: flex !important;<!-- [et_pb_line_break_holder] -->    width: 100% !important;<!-- [et_pb_line_break_holder] -->    justify-content: center !important;<!-- [et_pb_line_break_holder] -->    padding: 14px 20px !important;<!-- [et_pb_line_break_holder] -->    margin-top: 20px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper h2 { font-size: 22px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 32px 1fr !important;<!-- [et_pb_line_break_holder] -->    gap: 12px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-quickstart.gop-qs-wrapper .gop-step-num {<!-- [et_pb_line_break_holder] -->    width: 32px !important;<!-- [et_pb_line_break_holder] -->    height: 32px !important;<!-- [et_pb_line_break_holder] -->    font-size: 13px !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] --><span id=\"gop-quickstart\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-quickstart\" class=\"gop-qs-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Walkthrough<\/span><!-- [et_pb_line_break_holder] -->  <h2>Quick Start: Your First Playground Session in 3 Minutes<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-qs-intro\">Follow these five steps to go from zero to a working API call inside the playground. No Google Cloud Console setup required for this basic flow.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-steps\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-step\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-left\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-num\"><span>1<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-line\"><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-right\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-title\">Navigate to the OAuth Playground<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"gop-step-body\">Open <a href=\"https:\/\/developers.google.com\/oauthplayground\/\" target=\"_blank\" rel=\"noopener\">developers.google.com\/oauthplayground<\/a> in your browser. You will see the main interface split into three sections: Step 1 (Select and authorize APIs), Step 2 (Exchange authorization code for tokens), and Step 3 (Configure request to API). On the right side is the OAuth 2.0 configuration panel, accessible via the gear icon. Make sure you are signed in to your Google account before proceeding.<\/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=\"gop-step\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-left\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-num\"><span>2<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-line\"><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-right\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-title\">Select an API and scope<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"gop-step-body\">In the Step 1 panel, scroll through the list of Google APIs or use the search box. Click on <strong>Gmail API v1<\/strong> to expand it. Select <code>https:\/\/www.googleapis.com\/auth\/gmail.readonly<\/code> to start with read-only access. You can select multiple scopes from multiple APIs in one session &#8211; they will all be bundled into a single authorization request. Once you have selected your scope(s), click the blue <strong>&#8220;Authorize APIs&#8221;<\/strong> button.<\/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=\"gop-step\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-left\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-num\"><span>3<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-line\"><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-right\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-title\">Complete the Google consent screen<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"gop-step-body\">You will be redirected to Google&#8217;s consent screen. This is the same <a href=\"https:\/\/www.unipile.com\/google-oauth-consent-screen\/\">OAuth consent screen<\/a> your end users will see in your production app &#8211; the playground just uses Google&#8217;s own app name instead of yours. Select your Google account, review the requested permissions, and click &#8220;Allow&#8221;. Google will redirect you back to the playground with an authorization code in the URL.<\/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=\"gop-step\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-left\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-num\"><span>4<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-line\"><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-right\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-title\">Exchange the authorization code for tokens<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"gop-step-body\">You are now at Step 2. The playground has automatically captured the authorization code. Click <strong>&#8220;Exchange authorization code for tokens&#8221;<\/strong>. The playground sends a POST request to <code>https:\/\/oauth2.googleapis.com\/token<\/code> and displays both the raw request and the response. You will see your <code>access_token<\/code> (valid for 1 hour) and your <code>refresh_token<\/code> in the response panel. Note these down if you need to reuse them outside the playground.<\/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=\"gop-step\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-left\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-num\"><span>5<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-line\"><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-step-right\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-step-title\">Make your first API call<\/div><!-- [et_pb_line_break_holder] -->        <pee class=\"gop-step-body\">In Step 3, enter the Gmail API endpoint in the &#8220;Request URI&#8221; field: <code>https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages<\/code>. Leave the HTTP method as <strong>GET<\/strong> and click &#8220;Send the request&#8221;. The playground injects your access token as a Bearer header automatically. The response panel displays the JSON payload from the Gmail API &#8211; a list of message IDs from your inbox. You have just completed a full OAuth 2.0 flow in the playground.<\/pee><!-- [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] --><!-- [et_pb_line_break_holder] -->  <a href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" class=\"gop-inline-cta\"><!-- [et_pb_line_break_holder] -->    <span>Build Now<\/span><!-- [et_pb_line_break_holder] -->    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"9 18 15 12 9 6\"><\/polyline><\/svg><!-- [et_pb_line_break_holder] -->  <\/a><!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-scopes { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes *,<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes *::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] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper 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] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-intro 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] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-h3 {<!-- [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: 14px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table {<!-- [et_pb_line_break_holder] -->  width: 100% !important;<!-- [et_pb_line_break_holder] -->  border-collapse: collapse !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table thead tr {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table thead th {<!-- [et_pb_line_break_holder] -->  padding: 14px 18px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  text-align: left !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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table tbody tr {<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table tbody tr:last-child {<!-- [et_pb_line_break_holder] -->  border-bottom: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table tbody tr:nth-child(even) {<!-- [et_pb_line_break_holder] -->  background: #f8fafc !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table tbody td {<!-- [et_pb_line_break_holder] -->  padding: 13px 18px !important;<!-- [et_pb_line_break_holder] -->  font-size: 13.5px !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->  vertical-align: top !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table tbody td code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 4px !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  white-space: nowrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-badge-restricted {<!-- [et_pb_line_break_holder] -->  display: inline-block !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: #991b1b !important;<!-- [et_pb_line_break_holder] -->  background: rgba(239, 68, 68, 0.1) !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !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.4px !important;<!-- [et_pb_line_break_holder] -->  margin-left: 6px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-badge-sensitive {<!-- [et_pb_line_break_holder] -->  display: inline-block !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: #92400e !important;<!-- [et_pb_line_break_holder] -->  background: rgba(245, 158, 11, 0.12) !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !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.4px !important;<!-- [et_pb_line_break_holder] -->  margin-left: 6px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-tip {<!-- [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.2) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  padding: 18px 22px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->  margin: 24px 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-tip 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] -->  margin-top: 1px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-tip-text {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-tip-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] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-tip-text 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] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-body code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !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] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-sc-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] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-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] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  padding: 11px 20px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  margin-top: 8px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-inline-cta:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-scopes.gop-scopes-wrapper .gop-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: #0f2736 !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] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-scopes.gop-scopes-wrapper h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-scopes.gop-scopes-wrapper { padding: 40px 16px 28px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-scopes.gop-scopes-wrapper .gop-scope-table { display: block !important; overflow-x: auto !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-scopes.gop-scopes-wrapper 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=\"gop-scopes\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-scopes\" class=\"gop-scopes-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Scope Testing<\/span><!-- [et_pb_line_break_holder] -->  <h2>Step-by-Step: Testing OAuth Scopes in the Google OAuth Playground<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-sc-intro\">Scope selection is the single most consequential decision in your OAuth integration. Too broad and Google&#8217;s review team will flag your app. Too narrow and your API calls will return 403 errors. The playground lets you test every combination before you commit. For a full reference of every Gmail scope, see our <a href=\"https:\/\/www.unipile.com\/gmail-api-scopes-guide\/\" style=\"color:#3BB98B;text-decoration:underline;\">Gmail API Scopes guide<\/a>.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-sc-tip\"><!-- [et_pb_line_break_holder] -->    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><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 class=\"gop-sc-tip-text\"><strong>Best practice:<\/strong> always start with the narrowest scope that satisfies your use case. Request <code>gmail.readonly<\/code> before testing <code>gmail.modify<\/code>. This principle of least privilege reduces your app&#8217;s attack surface and simplifies Google&#8217;s security review. More on the review process: <a href=\"https:\/\/www.unipile.com\/integrating-google-oauth-2-0-user-authentication-into-your-app\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth verification guide<\/a>.<\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-sc-h3\">Gmail scopes you can test in the playground<\/div><!-- [et_pb_line_break_holder] -->  <div style=\"overflow-x:auto!important;\"><!-- [et_pb_line_break_holder] -->  <table class=\"gop-scope-table\"><!-- [et_pb_line_break_holder] -->    <thead><!-- [et_pb_line_break_holder] -->      <tr><!-- [et_pb_line_break_holder] -->        <th>Scope<\/th><!-- [et_pb_line_break_holder] -->        <th>Access Level<\/th><!-- [et_pb_line_break_holder] -->        <th>Sensitivity<\/th><!-- [et_pb_line_break_holder] -->        <th>Use Case<\/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><code>gmail.readonly<\/code><\/td><!-- [et_pb_line_break_holder] -->        <td>Read all messages and settings<\/td><!-- [et_pb_line_break_holder] -->        <td><span class=\"gop-badge-sensitive\">Sensitive<\/span><\/td><!-- [et_pb_line_break_holder] -->        <td>Email analytics, inbox sync<\/td><!-- [et_pb_line_break_holder] -->      <\/tr><!-- [et_pb_line_break_holder] -->      <tr><!-- [et_pb_line_break_holder] -->        <td><code>gmail.modify<\/code><\/td><!-- [et_pb_line_break_holder] -->        <td>Read, modify labels, delete messages<\/td><!-- [et_pb_line_break_holder] -->        <td><span class=\"gop-badge-restricted\">Restricted<\/span><\/td><!-- [et_pb_line_break_holder] -->        <td>CRM integration, triage apps<\/td><!-- [et_pb_line_break_holder] -->      <\/tr><!-- [et_pb_line_break_holder] -->      <tr><!-- [et_pb_line_break_holder] -->        <td><code>gmail.send<\/code><\/td><!-- [et_pb_line_break_holder] -->        <td>Send messages only<\/td><!-- [et_pb_line_break_holder] -->        <td><span class=\"gop-badge-restricted\">Restricted<\/span><\/td><!-- [et_pb_line_break_holder] -->        <td>Transactional sending on behalf of user<\/td><!-- [et_pb_line_break_holder] -->      <\/tr><!-- [et_pb_line_break_holder] -->      <tr><!-- [et_pb_line_break_holder] -->        <td><code>gmail.compose<\/code><\/td><!-- [et_pb_line_break_holder] -->        <td>Create, read, update, and delete drafts<\/td><!-- [et_pb_line_break_holder] -->        <td><span class=\"gop-badge-sensitive\">Sensitive<\/span><\/td><!-- [et_pb_line_break_holder] -->        <td>AI email assistants, draft management<\/td><!-- [et_pb_line_break_holder] -->      <\/tr><!-- [et_pb_line_break_holder] -->      <tr><!-- [et_pb_line_break_holder] -->        <td><code>gmail.labels<\/code><\/td><!-- [et_pb_line_break_holder] -->        <td>Create, read, update, and delete labels<\/td><!-- [et_pb_line_break_holder] -->        <td><span class=\"gop-badge-sensitive\">Sensitive<\/span><\/td><!-- [et_pb_line_break_holder] -->        <td>Label automation, organization tools<\/td><!-- [et_pb_line_break_holder] -->      <\/tr><!-- [et_pb_line_break_holder] -->      <tr><!-- [et_pb_line_break_holder] -->        <td><code>gmail.metadata<\/code><\/td><!-- [et_pb_line_break_holder] -->        <td>Read message metadata (headers, labels) only<\/td><!-- [et_pb_line_break_holder] -->        <td>Non-sensitive<\/td><!-- [et_pb_line_break_holder] -->        <td>Email presence indicators, thread tracking<\/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=\"gop-sc-h3\">Google Calendar scopes<\/div><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-sc-body\">The playground works equally well for Calendar API testing. To test calendar read access, select <code>https:\/\/www.googleapis.com\/auth\/calendar.readonly<\/code>. For full read\/write access including event creation and deletion, use <code>https:\/\/www.googleapis.com\/auth\/calendar<\/code>. Calendar scopes follow the same pattern: start with <strong>readonly<\/strong>, then escalate only if you need write operations. A common mistake is requesting the full <code>calendar<\/code> scope when you only need to read availability &#8211; this unnecessarily triggers a more invasive security review.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-sc-h3\">Adding a custom scope manually<\/div><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-sc-body\">The playground also accepts custom scope URLs that are not listed in the default menu. In the Step 1 panel, look for the &#8220;Input your own scopes&#8221; field at the bottom. Paste any valid scope URL &#8211; for example, a Google Workspace Admin SDK scope or a Google People API scope &#8211; and it will be added to the authorization request alongside any scopes you selected from the list. This is useful for testing less common Google APIs that are not prominently featured in the playground UI.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <span class=\"gop-inline-cta\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><span>Build your Gmail integration with Unipile<\/span><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><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] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  function init(){<!-- [et_pb_line_break_holder] -->    var el = document.getElementById('unipile-gop-scopes');<!-- [et_pb_line_break_holder] -->    if (!el) return;<!-- [et_pb_line_break_holder] -->    el.addEventListener('click', function(e){<!-- [et_pb_line_break_holder] -->      var t = e.target.closest('[data-upl-link]');<!-- [et_pb_line_break_holder] -->      if (!t) return;<!-- [et_pb_line_break_holder] -->      e.preventDefault();<!-- [et_pb_line_break_holder] -->      window.open(t.getAttribute('data-upl-link'), t.getAttribute('data-upl-target') || '_blank');<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }<!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-tokens { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens *,<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens *::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] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper 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] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-grid {<!-- [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: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 36px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-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] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-card-head {<!-- [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] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-icon {<!-- [et_pb_line_break_holder] -->  width: 38px !important;<!-- [et_pb_line_break_holder] -->  height: 38px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 9px !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-gop-tokens.gop-tokens-wrapper .gop-tok-icon-blue {<!-- [et_pb_line_break_holder] -->  background: rgba(66, 133, 244, 0.12) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-icon-green {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-icon svg {<!-- [et_pb_line_break_holder] -->  width: 18px !important;<!-- [et_pb_line_break_holder] -->  height: 18px !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] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-icon-blue svg { stroke: #4285F4 !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-icon-green svg { stroke: #3BB98B !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-lifetime {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  padding: 3px 9px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 20px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-lifetime-short {<!-- [et_pb_line_break_holder] -->  background: rgba(239, 68, 68, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #991b1b !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-lifetime-long {<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.1) !important;<!-- [et_pb_line_break_holder] -->  color: #065f46 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-body {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-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] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-tok-body code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !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: 12px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-h3 {<!-- [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: 14px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-body {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-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] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-block {<!-- [et_pb_line_break_holder] -->  background: #0d1117 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  overflow: hidden !important;<!-- [et_pb_line_break_holder] -->  margin: 20px 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-head {<!-- [et_pb_line_break_holder] -->  background: rgba(255,255,255,0.04) !important;<!-- [et_pb_line_break_holder] -->  padding: 10px 16px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: center !important;<!-- [et_pb_line_break_holder] -->  gap: 10px !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] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-dots { display: flex !important; gap: 5px !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-dot { width: 9px !important; height: 9px !important; border-radius: 50% !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-dot-r { background: #ff5f56 !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-dot-y { background: #ffbd2e !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-dot-g { background: #27c93f !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-fn {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.45) !important;<!-- [et_pb_line_break_holder] -->  margin-left: 4px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-body {<!-- [et_pb_line_break_holder] -->  padding: 16px 20px !important;<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  font-size: 12px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  color: #c9d1d9 !important;<!-- [et_pb_line_break_holder] -->  overflow-x: auto !important;<!-- [et_pb_line_break_holder] -->  white-space: pre-wrap !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-code-line { display: block !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .c-cmt { color: #8b949e !important; font-style: italic !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .c-kw { color: #ff7b72 !important; font-weight: 600 !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .c-str { color: #a5d6ff !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .c-flag { color: #DDDF4C !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .c-grn { color: #3BB98B !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-warning-box {<!-- [et_pb_line_break_holder] -->  background: rgba(239, 68, 68, 0.06) !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid rgba(239, 68, 68, 0.2) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  padding: 18px 22px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 14px !important;<!-- [et_pb_line_break_holder] -->  margin: 24px 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-warning-box svg {<!-- [et_pb_line_break_holder] -->  width: 20px !important;<!-- [et_pb_line_break_holder] -->  height: 20px !important;<!-- [et_pb_line_break_holder] -->  stroke: #ef4444 !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] -->  margin-top: 1px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-warning-text {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #7f1d1d !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-tokens.gop-tokens-wrapper .gop-warning-text strong {<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-tokens.gop-tokens-wrapper h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-tokens.gop-tokens-wrapper .gop-tok-grid { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-tokens.gop-tokens-wrapper { padding: 40px 16px 28px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-tokens.gop-tokens-wrapper 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=\"gop-tokens\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-tokens\" class=\"gop-tokens-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Token Lifecycle<\/span><!-- [et_pb_line_break_holder] -->  <h2>Step-by-Step: Generating Access Tokens and Refresh Tokens<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-tok-intro\">The Playground&#8217;s Step 2 is where the real OAuth magic happens. After you authorize, an authorization code sits in the playground waiting to be exchanged. This section explains the two tokens you get back, how to force a refresh token, and how to replicate the exchange in your production code.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-tok-grid\"><!-- [et_pb_line_break_holder] -->    <div class=\"gop-tok-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-tok-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-tok-icon gop-tok-icon-blue\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"3\"\/><path d=\"M19.07 4.93A10 10 0 0 0 6.99 3.34\"\/><path d=\"M4 6a10 10 0 1 0 14.9-.9\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-tok-title\">access_token<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <span class=\"gop-tok-lifetime gop-tok-lifetime-short\">Expires: 1 hour<\/span><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-tok-body\">The <strong>access token<\/strong> is a short-lived credential (3600 seconds by default) used as a Bearer token in the <code>Authorization<\/code> header of every API request. When it expires, the API returns a 401 error. You use the refresh token to obtain a new access token without requiring the user to re-authorize. In the playground, the &#8220;Refresh access token&#8221; button does this automatically in Step 2.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"gop-tok-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-tok-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-tok-icon gop-tok-icon-green\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"23 4 23 10 17 10\"\/><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-tok-title\">refresh_token<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <span class=\"gop-tok-lifetime gop-tok-lifetime-long\">Valid: indefinitely (or 24h in playground)<\/span><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-tok-body\">The <strong>refresh token<\/strong> is a long-lived credential that lets your app obtain new access tokens without user interaction. It never expires in production (unless revoked by the user, or if the app has been inactive for 6 months). However, In the playground using Google&#8217;s default credentials, refresh tokens expire after <strong>24 hours<\/strong>. This is a playground-specific limitation, not a production limitation.<\/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=\"gop-h3\">How to force a refresh token in the playground<\/div><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-body\">By default, Google only returns a refresh token the <strong>first time<\/strong> a user authorizes your app. On subsequent authorizations (if the user has already consented), Google skips the refresh token. To force the playground to always return a refresh token in Step 2, click the gear icon to open OAuth 2.0 configuration, and enable both <strong>&#8220;Force prompt&#8221;<\/strong> and <strong>&#8220;Access type: offline&#8221;<\/strong>. With these settings, every authorization flow returns a fresh refresh token.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-h3\">Reproducing the token exchange in your production code<\/div><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-body\">The playground shows you the exact POST request it sends to exchange the authorization code. You can replicate this curl command directly in your backend:<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-code-block\"><!-- [et_pb_line_break_holder] -->    <div class=\"gop-code-head\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-code-dots\"><span class=\"gop-code-dot gop-dot-r\"><\/span><span class=\"gop-code-dot gop-dot-y\"><\/span><span class=\"gop-code-dot gop-dot-g\"><\/span><\/div><!-- [et_pb_line_break_holder] -->      <span class=\"gop-code-fn\">token-exchange.sh<\/span><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"gop-code-body\"><span class=\"gop-code-line\"><span class=\"c-cmt\"># Exchange authorization code for tokens (production equivalent)<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-kw\">curl<\/span> -X POST <span class=\"c-str\">&#8220;https:\/\/oauth2.googleapis.com\/token&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\">  -H <span class=\"c-str\">&#8220;Content-Type: application\/x-www-form-urlencoded&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\">  -d <span class=\"c-str\">&#8220;code=$AUTH_CODE&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\">  -d <span class=\"c-str\">&#8220;client_id=$CLIENT_ID&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\">  -d <span class=\"c-str\">&#8220;client_secret=$CLIENT_SECRET&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\">  -d <span class=\"c-str\">&#8220;redirect_uri=https:\/\/developers.google.com\/oauthplayground&#8221;<\/span> \\<\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\">  -d <span class=\"c-str\">&#8220;grant_type=authorization_code&#8221;<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"> <\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\"># Response:<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\"># {<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\">#   &#8220;access_token&#8221;: &#8220;ya29.xxx&#8221;,       \/\/ Bearer token, 1h TTL<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\">#   &#8220;refresh_token&#8221;: &#8220;1\/\/xxx&#8221;,        \/\/ Long-lived (prod) or 24h (playground)<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\">#   &#8220;expires_in&#8221;: 3599,               \/\/ Seconds until access_token expires<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\">#   &#8220;token_type&#8221;: &#8220;Bearer&#8221;,<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\">#   &#8220;scope&#8221;: &#8220;https:\/\/www.googleapis.com\/auth\/gmail.readonly&#8221;<\/span><\/span><!-- [et_pb_line_break_holder] --><span class=\"gop-code-line\"><span class=\"c-cmt\"># }<\/span><\/span><\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-warning-box\"><!-- [et_pb_line_break_holder] -->    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"\/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"\/><\/svg><!-- [et_pb_line_break_holder] -->    <pee class=\"gop-warning-text\"><strong>24-hour refresh token caveat:<\/strong> when you use the playground&#8217;s default Google credentials (the most common setup), Google limits refresh token lifetime to 24 hours. This is intentional: the playground uses a single shared OAuth client, and Google revokes tokens frequently for security reasons. If you need a refresh token that survives longer than 24 hours, enable &#8220;Use your own OAuth credentials&#8221; in the playground settings &#8211; covered in the next section.<\/pee><!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; sticky_enabled=&#8221;0&#8243;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds,<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds *,<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds *::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-gop-own-creds.gop-oc-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper 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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-intro 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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-grid {<!-- [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: 28px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 36px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-h3 {<!-- [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: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step-list {<!-- [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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step {<!-- [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] -->  background: #ffffff !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step-num {<!-- [et_pb_line_break_holder] -->  width: 24px !important;<!-- [et_pb_line_break_holder] -->  height: 24px !important;<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !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: 11px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ffffff !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step-text {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  min-width: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step-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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step-text code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !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: 11.5px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step-text a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit-list {<!-- [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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit {<!-- [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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit-icon {<!-- [et_pb_line_break_holder] -->  width: 22px !important;<!-- [et_pb_line_break_holder] -->  height: 22px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 50% !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] -->  margin-top: 1px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit-icon svg {<!-- [et_pb_line_break_holder] -->  width: 12px !important;<!-- [et_pb_line_break_holder] -->  height: 12px !important;<!-- [et_pb_line_break_holder] -->  stroke: #3BB98B !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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit-text {<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.6 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  min-width: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit-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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-benefit-text code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !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: 11.5px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout {<!-- [et_pb_line_break_holder] -->  background: #f4f5f7 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 24px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 28px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout 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] -->  margin-top: 2px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout-text {<!-- [et_pb_line_break_holder] -->  font-size: 14.5px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->  min-width: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout-text 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] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout-text a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout-text code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #ffffff !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: 12.5px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-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] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  font-size: 0.95rem !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 28px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  border: 2px solid #DDDF4C !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  margin-top: 24px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-inline-cta:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-own-creds.gop-oc-wrapper .gop-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] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-intro {<!-- [et_pb_line_break_holder] -->    font-size: 16px !important;<!-- [et_pb_line_break_holder] -->    margin-bottom: 28px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-grid {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1fr !important;<!-- [et_pb_line_break_holder] -->    gap: 32px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper {<!-- [et_pb_line_break_holder] -->    padding: 40px 16px 28px !important;<!-- [et_pb_line_break_holder] -->    overflow-x: hidden !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-intro {<!-- [et_pb_line_break_holder] -->    font-size: 15px !important;<!-- [et_pb_line_break_holder] -->    line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-h3 { font-size: 17px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step {<!-- [et_pb_line_break_holder] -->    padding: 14px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout {<!-- [et_pb_line_break_holder] -->    padding: 18px !important;<!-- [et_pb_line_break_holder] -->    gap: 12px !important;<!-- [et_pb_line_break_holder] -->    border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout-text {<!-- [et_pb_line_break_holder] -->    font-size: 13.5px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-inline-cta {<!-- [et_pb_line_break_holder] -->    display: flex !important;<!-- [et_pb_line_break_holder] -->    width: 100% !important;<!-- [et_pb_line_break_holder] -->    justify-content: center !important;<!-- [et_pb_line_break_holder] -->    padding: 14px 20px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper h2 { font-size: 22px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-step {<!-- [et_pb_line_break_holder] -->    padding: 12px !important;<!-- [et_pb_line_break_holder] -->    gap: 10px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-own-creds.gop-oc-wrapper .gop-oc-callout {<!-- [et_pb_line_break_holder] -->    padding: 16px !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] --><span id=\"gop-own-creds\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-own-creds\" class=\"gop-oc-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Own Credentials<\/span><!-- [et_pb_line_break_holder] -->  <h2>Using Your Own OAuth Credentials in the Google OAuth Playground<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-oc-intro\">The default playground setup uses Google&#8217;s shared developer credentials, causing the 24-hour refresh token expiry. Switching to your own OAuth Client ID solves this and makes the playground behavior identical to your production app. This is the right approach when you need to test <a href=\"https:\/\/www.unipile.com\/gmail-api-key-vs-oauth\/\">API key vs OAuth differences<\/a> or work through the full <a href=\"https:\/\/www.unipile.com\/integrating-google-oauth-2-0-user-authentication-into-your-app\/\">Google OAuth integration flow<\/a>.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-oc-grid\"><!-- [et_pb_line_break_holder] -->    <div class=\"gop-oc-steps-col\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-h3\">Setup steps<\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-oc-step-list\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-oc-step\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-num\"><span>1<\/span><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-text\">In <a href=\"https:\/\/console.cloud.google.com\/\" target=\"_blank\" rel=\"noopener\">Google Cloud Console<\/a>, create or select a project, then navigate to <strong>APIs and Services > Credentials<\/strong>. Click <strong>&#8220;Create Credentials&#8221; > &#8220;OAuth client ID&#8221;<\/strong>.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-oc-step\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-num\"><span>2<\/span><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-text\">Set the application type to <strong>&#8220;Web application&#8221;<\/strong>. Give it a name like &#8220;OAuth Playground Testing&#8221;. Under <strong>&#8220;Authorized redirect URIs&#8221;<\/strong>, add exactly: <code>https:\/\/developers.google.com\/oauthplayground<\/code>. This is the specific redirect URI the playground expects.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-oc-step\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-num\"><span>3<\/span><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-text\">Click <strong>&#8220;Create&#8221;<\/strong>. Copy the <strong>Client ID<\/strong> and <strong>Client Secret<\/strong> from the dialog that appears.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-oc-step\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-num\"><span>4<\/span><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-text\">In the playground, click the <strong>gear icon<\/strong> (top right). Check <strong>&#8220;Use your own OAuth credentials&#8221;<\/strong>. Paste your Client ID and Client Secret into the fields. Click &#8220;Close&#8221; to save.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-oc-step\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-num\"><span>5<\/span><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-oc-step-text\">Return to Step 1, select your scopes, and click <strong>&#8220;Authorize APIs&#8221;<\/strong>. The refresh token you receive now behaves like a production token &#8211; no 24-hour expiry.<\/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=\"gop-oc-benefits-col\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-h3\">Why this matters<\/div><!-- [et_pb_line_break_holder] -->      <div class=\"gop-benefit-list\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-text\"><strong>Refresh tokens survive past 24 hours.<\/strong> Your tokens behave exactly like production tokens &#8211; valid until the user revokes access or your app is inactive for 6+ months.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-text\"><strong>Your consent screen shows your app&#8217;s name.<\/strong> Instead of &#8220;Google OAuth Playground&#8221;, users see your own app name during authorization &#8211; useful for testing the exact user experience.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-text\"><strong>Restricted scopes become testable.<\/strong> Some scopes (like <code>gmail.modify<\/code>) require a verified app. With your own credentials, you can test in development mode with up to 100 test users without going through full verification.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-text\"><strong>Rate limits apply to your project, not shared limits.<\/strong> Using Google&#8217;s shared playground credentials means sharing rate limit quotas with thousands of other developers. Your own credentials get their own dedicated quota.<\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-benefit\"><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"gop-benefit-text\"><strong>Exact production equivalence.<\/strong> The token exchange request uses the same <code>client_id<\/code>, <code>client_secret<\/code>, and <code>redirect_uri<\/code> your production backend will use. You can copy the exchange code directly into your app.<\/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] -->  <div class=\"gop-oc-callout\"><!-- [et_pb_line_break_holder] -->    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><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 class=\"gop-oc-callout-text\"><strong>Important:<\/strong> the redirect URI you add in Cloud Console must be an exact match. If you add <code>https:\/\/developers.google.com\/oauthplayground\/<\/code> (with trailing slash) but the playground redirects to the URL without the slash, you will get a <code>redirect_uri_mismatch<\/code> error. Add both versions if you are unsure. For a deeper look at Google&#8217;s error codes, see our guide on <a href=\"https:\/\/www.unipile.com\/google-oauth-gmail-api-errors\/\">common Google OAuth errors<\/a>.<\/div><!-- [et_pb_line_break_holder] -->  <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <a href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" class=\"gop-inline-cta\"><!-- [et_pb_line_break_holder] -->    <span>Build Now<\/span><!-- [et_pb_line_break_holder] -->    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"9 18 15 12 9 6\"><\/polyline><\/svg><!-- [et_pb_line_break_holder] -->  <\/a><!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; sticky_enabled=&#8221;0&#8243;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls,<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls *,<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls *::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-gop-pitfalls.gop-pit-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper 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] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 36px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-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: 20px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-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] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-card-head {<!-- [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] -->  margin-bottom: 14px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-num {<!-- [et_pb_line_break_holder] -->  width: 28px !important;<!-- [et_pb_line_break_holder] -->  height: 28px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(239, 68, 68, 0.1) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 6px !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: 12px !important;<!-- [et_pb_line_break_holder] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  color: #ef4444 !important;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-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] -->  padding-top: 3px !important;<!-- [et_pb_line_break_holder] -->  min-width: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-problem {<!-- [et_pb_line_break_holder] -->  font-size: 13.5px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->  color: #64748b !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-problem code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: #f1f5f9 !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: 11.5px !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-fix {<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 8px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.06) !important;<!-- [et_pb_line_break_holder] -->  border-radius: 8px !important;<!-- [et_pb_line_break_holder] -->  padding: 10px 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-fix svg {<!-- [et_pb_line_break_holder] -->  width: 13px !important;<!-- [et_pb_line_break_holder] -->  height: 13px !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] -->  margin-top: 2px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-fix-text {<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.55 !important;<!-- [et_pb_line_break_holder] -->  min-width: 0 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-fix-text code {<!-- [et_pb_line_break_holder] -->  font-family: 'JetBrains Mono', 'Courier New', monospace !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  padding: 1px 5px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 3px !important;<!-- [et_pb_line_break_holder] -->  font-size: 11px !important;<!-- [et_pb_line_break_holder] -->  color: #065f46 !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-fix-text a {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->  text-decoration: underline !important;<!-- [et_pb_line_break_holder] -->  word-break: break-word !important;<!-- [et_pb_line_break_holder] -->  overflow-wrap: anywhere !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper h2 { font-size: 28px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-intro {<!-- [et_pb_line_break_holder] -->    font-size: 16px !important;<!-- [et_pb_line_break_holder] -->    margin-bottom: 28px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-grid {<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1fr !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper {<!-- [et_pb_line_break_holder] -->    padding: 40px 16px 28px !important;<!-- [et_pb_line_break_holder] -->    overflow-x: hidden !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper h2 { font-size: 24px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-intro {<!-- [et_pb_line_break_holder] -->    font-size: 15px !important;<!-- [et_pb_line_break_holder] -->    line-height: 1.7 !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-grid {<!-- [et_pb_line_break_holder] -->    gap: 14px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-card {<!-- [et_pb_line_break_holder] -->    padding: 20px 18px !important;<!-- [et_pb_line_break_holder] -->    border-radius: 14px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 400px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper h2 { font-size: 22px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-card {<!-- [et_pb_line_break_holder] -->    padding: 18px 16px !important;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  #unipile-gop-pitfalls.gop-pit-wrapper .gop-pit-card-head {<!-- [et_pb_line_break_holder] -->    gap: 10px !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] --><span id=\"gop-pitfalls\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-pitfalls\" class=\"gop-pit-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Troubleshooting<\/span><!-- [et_pb_line_break_holder] -->  <h2>Common Google OAuth Playground Pitfalls<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-pit-intro\">These are the six errors and gotchas that trip up developers most often in the playground. Each one has a specific fix that takes less than 2 minutes to apply.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-pit-grid\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-pit-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-num\"><span>1<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-title\">24-hour refresh token revocation<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-pit-problem\">When using Google&#8217;s default playground credentials, your refresh token becomes invalid after 24 hours. Any script or integration relying on this token will start returning <code>401 invalid_grant<\/code> errors the next day.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-fix\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div class=\"gop-pit-fix-text\">Enable &#8220;Use your own OAuth credentials&#8221; in the gear menu. This makes tokens behave like production tokens with no 24-hour expiry.<\/div><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-pit-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-num\"><span>2<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-title\">redirect_uri_mismatch error<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-pit-problem\">When using your own credentials, Google returns <code>error=redirect_uri_mismatch<\/code> during the authorization step. This means the redirect URI in your Cloud Console OAuth client does not exactly match what the playground sends.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-fix\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div class=\"gop-pit-fix-text\">In Cloud Console, add exactly <code>https:\/\/developers.google.com\/oauthplayground<\/code> (no trailing slash) as an authorized redirect URI. See our guide on <a href=\"https:\/\/www.unipile.com\/google-oauth-gmail-api-errors\/\">OAuth errors<\/a> for more.<\/div><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-pit-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-num\"><span>3<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-title\">Scope not authorized (403 on API call)<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-pit-problem\">The API call in Step 3 returns <code>403 insufficientPermissions<\/code>. This happens when you call an endpoint that requires a scope you did not include in Step 1, or when you forgot to click &#8220;Authorize APIs&#8221; after adding a new scope.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-fix\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div class=\"gop-pit-fix-text\">Go back to Step 1, verify the correct scope is checked, then click &#8220;Authorize APIs&#8221; again. The playground resets on a new authorization &#8211; do not try to reuse the old tokens.<\/div><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-pit-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-num\"><span>4<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-title\">Token expired mid-test (401 after 1 hour)<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-pit-problem\">Access tokens are valid for only 3600 seconds. If your testing session runs long, calls in Step 3 will start returning <code>401 Invalid Credentials<\/code> even though your refresh token is still valid.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-fix\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div class=\"gop-pit-fix-text\">In Step 2, click &#8220;Refresh access token&#8221;. The playground uses your refresh token to obtain a new access token in seconds without requiring re-authorization.<\/div><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-pit-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-num\"><span>5<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-title\">Wrong API version in the request URI<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-pit-problem\">Some Google APIs have versioned scope requirements. For example, the Google Calendar API v3 uses different base URLs from older versions. Using a scope designed for v1 on a v3 endpoint may return unexpected errors or incomplete data.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-fix\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div class=\"gop-pit-fix-text\">Always verify the API version in the endpoint URL matches the scope you selected. Check the official Google API documentation for the current stable version of each API.<\/div><\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"gop-pit-card\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-card-head\"><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-num\"><span>6<\/span><\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-pit-title\">CORS errors in the browser console<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <pee class=\"gop-pit-problem\">You see CORS-related errors in DevTools when using the playground&#8217;s &#8220;Send the request&#8221; feature from certain network environments (corporate proxies, VPNs). This is a playground-specific browser behavior, not a Google API issue.<\/pee><!-- [et_pb_line_break_holder] -->      <div class=\"gop-pit-fix\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><div class=\"gop-pit-fix-text\">Copy the request from the playground and execute it via curl from your terminal. Google APIs fully support CORS in production &#8211; this is a playground UI limitation only. The actual API call will work fine from a backend.<\/div><\/div><!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;]<style><!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod *,<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod *::before,<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod *::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] -->  background: transparent !important;<!-- [et_pb_line_break_holder] -->  float: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper {<!-- [et_pb_line_break_holder] -->  display: block !important;<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 60px 24px 40px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper 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] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-intro {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 36px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table-wrap {<!-- [et_pb_line_break_holder] -->  overflow-x: auto !important;<!-- [et_pb_line_break_holder] -->  border-radius: 14px !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table {<!-- [et_pb_line_break_holder] -->  width: 100% !important;<!-- [et_pb_line_break_holder] -->  border-collapse: collapse !important;<!-- [et_pb_line_break_holder] -->  min-width: 600px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table thead tr {<!-- [et_pb_line_break_holder] -->  background: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table thead th {<!-- [et_pb_line_break_holder] -->  padding: 16px 20px !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] -->  text-align: left !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table thead th:first-child {<!-- [et_pb_line_break_holder] -->  color: rgba(255,255,255,0.7) !important;<!-- [et_pb_line_break_holder] -->  width: 28% !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table thead .th-playground {<!-- [et_pb_line_break_holder] -->  color: #DDDF4C !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table thead .th-production {<!-- [et_pb_line_break_holder] -->  color: #3BB98B !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table tbody tr {<!-- [et_pb_line_break_holder] -->  border-bottom: 1px solid #e5e7eb !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table tbody tr:last-child {<!-- [et_pb_line_break_holder] -->  border-bottom: none !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table tbody tr:nth-child(even) {<!-- [et_pb_line_break_holder] -->  background: #f8fafc !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table tbody td {<!-- [et_pb_line_break_holder] -->  padding: 14px 20px !important;<!-- [et_pb_line_break_holder] -->  font-size: 14px !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->  vertical-align: top !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.55 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-table tbody td:first-child {<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  color: #0f2736 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-badge-warn {<!-- [et_pb_line_break_holder] -->  display: inline-block !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: #92400e !important;<!-- [et_pb_line_break_holder] -->  background: rgba(245, 158, 11, 0.12) !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 4px !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-badge-ok {<!-- [et_pb_line_break_holder] -->  display: inline-block !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: #065f46 !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.12) !important;<!-- [et_pb_line_break_holder] -->  padding: 2px 7px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 4px !important;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-takeaway {<!-- [et_pb_line_break_holder] -->  background: #f4f5f7 !important;<!-- [et_pb_line_break_holder] -->  border-radius: 12px !important;<!-- [et_pb_line_break_holder] -->  padding: 24px !important;<!-- [et_pb_line_break_holder] -->  display: flex !important;<!-- [et_pb_line_break_holder] -->  align-items: flex-start !important;<!-- [et_pb_line_break_holder] -->  gap: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-takeaway svg {<!-- [et_pb_line_break_holder] -->  width: 20px !important;<!-- [et_pb_line_break_holder] -->  height: 20px !important;<!-- [et_pb_line_break_holder] -->  stroke: #0f2736 !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] -->  margin-top: 2px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-takeaway-text {<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.65 !important;<!-- [et_pb_line_break_holder] -->  color: #1e293b !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-vs-prod.gop-vp-wrapper .gop-vp-takeaway-text 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] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-vs-prod.gop-vp-wrapper h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-vs-prod.gop-vp-wrapper { padding: 40px 16px 28px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-vs-prod.gop-vp-wrapper 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=\"gop-vs-prod\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><div id=\"unipile-gop-vs-prod\" class=\"gop-vp-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-section-label\">Comparison<\/span><!-- [et_pb_line_break_holder] -->  <h2>Playground vs Production: When You Outgrow the Google OAuth Playground<\/h2><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-vp-intro\">The playground is an excellent testing tool &#8211; not designed for production use. Here is an honest comparison of what changes when you move from playground testing to a real OAuth integration serving real users.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-vp-table-wrap\"><!-- [et_pb_line_break_holder] -->    <table class=\"gop-vp-table\"><!-- [et_pb_line_break_holder] -->      <thead><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <th>Feature<\/th><!-- [et_pb_line_break_holder] -->          <th class=\"th-playground\">OAuth Playground<\/th><!-- [et_pb_line_break_holder] -->          <th class=\"th-production\">Production App<\/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>Refresh token lifetime<\/td><!-- [et_pb_line_break_holder] -->          <td><span class=\"gop-badge-warn\">24h max<\/span> (with Google&#8217;s credentials)<!\u2013- [et_pb_br_holder] -\u2013>Unlimited with own credentials<\/td><!-- [et_pb_line_break_holder] -->          <td><span class=\"gop-badge-ok\">Unlimited<\/span> until user revokes or 6-month inactivity<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>User base<\/td><!-- [et_pb_line_break_holder] -->          <td>1 user (your Google account only)<\/td><!-- [et_pb_line_break_holder] -->          <td>N users &#8211; any number of Google accounts can authorize your app<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>OAuth verification<\/td><!-- [et_pb_line_break_holder] -->          <td><span class=\"gop-badge-ok\">Not required<\/span> &#8211; playground bypasses review<\/td><!-- [et_pb_line_break_holder] -->          <td><span class=\"gop-badge-warn\">Required<\/span> after 100 test users, for restricted scopes<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>CASA Tier 2 security review<\/td><!-- [et_pb_line_break_holder] -->          <td>Not applicable &#8211; playground is Google&#8217;s own tool<\/td><!-- [et_pb_line_break_holder] -->          <td>Required for apps requesting restricted Gmail or Calendar scopes<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>Consent screen branding<\/td><!-- [et_pb_line_break_holder] -->          <td>Shows &#8220;Google OAuth 2.0 Playground&#8221; as the app name<\/td><!-- [et_pb_line_break_holder] -->          <td>Shows your app&#8217;s name, logo, and privacy policy<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>Request \/ response visibility<\/td><!-- [et_pb_line_break_holder] -->          <td><span class=\"gop-badge-ok\">Full visibility<\/span> &#8211; see every HTTP header and payload<\/td><!-- [et_pb_line_break_holder] -->          <td>Hidden from end users &#8211; only your backend sees the raw tokens and API responses<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>API rate limits<\/td><!-- [et_pb_line_break_holder] -->          <td>Standard Google API quotas (shared with other playground users when using Google&#8217;s credentials)<\/td><!-- [et_pb_line_break_holder] -->          <td>Your own project&#8217;s dedicated quota &#8211; no sharing with other developers<\/td><!-- [et_pb_line_break_holder] -->        <\/tr><!-- [et_pb_line_break_holder] -->        <tr><!-- [et_pb_line_break_holder] -->          <td>Intended use case<\/td><!-- [et_pb_line_break_holder] -->          <td>Testing, debugging, learning, generating one-off tokens<\/td><!-- [et_pb_line_break_holder] -->          <td>Serving end users at scale with persistent, multi-user token management<\/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=\"gop-vp-takeaway\"><!-- [et_pb_line_break_holder] -->    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"\/><\/svg><!-- [et_pb_line_break_holder] -->    <pee class=\"gop-vp-takeaway-text\"><strong>The rule of thumb:<\/strong> use the playground until your integration logic is confirmed, then move to a production OAuth flow for anything user-facing. The biggest friction point in production is Google&#8217;s verification process &#8211; for apps requesting sensitive or restricted scopes, this can take weeks. That is where a solution like Unipile can help: use pre-verified credentials and skip the review entirely while you are validating product-market fit. See our full guide on <a href=\"https:\/\/www.unipile.com\/oauth-email-api\/\" style=\"color:#3BB98B;text-decoration:underline;\">OAuth email API integration<\/a> for a deep dive into production patterns.<\/pee><!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.4&#8243; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221; sticky_enabled=&#8221;0&#8243;]<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=Poppins:wght@600;700;800&#038;family=JetBrains+Mono:wght@400;500;600&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] --><span id=\"gop-skip-banner\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip,<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip *,<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip *::before,<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip *::after { margin:0 !important; padding:0 !important; box-sizing:border-box !important; border:none !important; outline:none !important; font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif !important; line-height:normal !important; letter-spacing:normal !important; text-transform:none !important; text-decoration:none !important; list-style:none !important; background:transparent !important; float:none !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip { max-width:1100px !important; margin:40px auto !important; padding:0 24px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-strip { position:relative !important; background:linear-gradient(135deg,#0f2736 0%,#143447 50%,#0f2736 100%) !important; border-radius:18px !important; overflow:hidden !important; box-shadow:0 20px 55px rgba(15,39,54,0.22) !important; padding:32px 48px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-bg-grid { position:absolute !important; top:0 !important; left:0 !important; right:0 !important; bottom:0 !important; background-image:linear-gradient(rgba(59,185,139,0.05) 1px,transparent 1px),linear-gradient(90deg,rgba(59,185,139,0.05) 1px,transparent 1px) !important; background-size:40px 40px !important; pointer-events:none !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-glow-1 { position:absolute !important; top:-140px !important; right:-100px !important; width:380px !important; height:380px !important; background:radial-gradient(circle,rgba(221,223,76,0.18) 0%,transparent 70%) !important; pointer-events:none !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-glow-2 { position:absolute !important; bottom:-180px !important; left:-120px !important; width:460px !important; height:460px !important; background:radial-gradient(circle,rgba(59,185,139,0.13) 0%,transparent 70%) !important; pointer-events:none !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-content { position:relative !important; z-index:2 !important; display:grid !important; grid-template-columns:1.1fr 1fr !important; gap:40px !important; align-items:center !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-text { display:flex !important; flex-direction:column !important; gap:14px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-h { font-family:'Poppins',sans-serif !important; font-size:34px !important; font-weight:700 !important; line-height:1.12 !important; color:#ffffff !important; letter-spacing:-0.7px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-h .h-yellow { color:#DDDF4C !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-h .h-strike { color:rgba(255,255,255,0.55) !important; text-decoration:line-through !important; text-decoration-color:rgba(234,67,53,0.75) !important; text-decoration-thickness:3px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-desc { font-size:15px !important; line-height:1.55 !important; color:rgba(255,255,255,0.75) !important; max-width:490px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-buttons { display:flex !important; align-items:center !important; gap:18px !important; flex-wrap:wrap !important; margin-top:4px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-btn-primary { display:inline-flex !important; align-items:center !important; gap:10px !important; padding:14px 24px !important; background:#DDDF4C !important; color:#0F2836 !important; border-radius:10px !important; text-decoration:none !important; font-weight:700 !important; font-size:15px !important; box-shadow:0 12px 28px rgba(15,39,54,0.25) !important; transition:transform 0.2s ease,box-shadow 0.2s ease !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-btn-primary:hover { transform:translateY(-3px) !important; box-shadow:0 16px 32px rgba(15,39,54,0.35) !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-btn-primary svg { width:16px !important; height:16px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-trust-line { display:flex !important; align-items:center !important; gap:8px !important; font-size:12px !important; color:rgba(255,255,255,0.5) !important; font-weight:600 !important; margin-top:2px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-trust-line svg { width:13px !important; height:13px !important; color:#3BB98B !important; flex-shrink:0 !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-code-wrap { position:relative !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .casa-badge { position:absolute !important; top:-14px !important; right:-10px !important; z-index:3 !important; display:inline-flex !important; align-items:center !important; gap:6px !important; padding:6px 12px !important; background:#3BB98B !important; color:#ffffff !important; border-radius:20px !important; font-size:10.5px !important; font-weight:700 !important; text-transform:uppercase !important; letter-spacing:0.7px !important; box-shadow:0 8px 20px rgba(59,185,139,0.4) !important; border:2px solid #0f2736 !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .casa-badge svg { width:12px !important; height:12px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .cta-code { background:#0d1117 !important; border:1px solid rgba(255,255,255,0.1) !important; border-radius:12px !important; overflow:hidden !important; box-shadow:0 20px 45px rgba(0,0,0,0.45) !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-head { background:rgba(255,255,255,0.04) !important; padding:10px 16px !important; display:flex !important; align-items:center !important; gap:10px !important; border-bottom:1px solid rgba(255,255,255,0.06) !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-dots { display:flex !important; gap:5px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-dot { width:9px !important; height:9px !important; border-radius:50% !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-dot-r { background:#ff5f56 !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-dot-y { background:#ffbd2e !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-dot-g { background:#27c93f !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-filename { font-family:'JetBrains Mono',monospace !important; font-size:11.5px !important; color:rgba(255,255,255,0.5) !important; margin-left:4px !important; display:flex !important; align-items:center !important; gap:8px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-lang { background:rgba(59,185,139,0.15) !important; border:1px solid rgba(59,185,139,0.3) !important; color:#3BB98B !important; font-size:8.5px !important; font-weight:700 !important; padding:2px 6px !important; border-radius:3px !important; text-transform:uppercase !important; letter-spacing:0.5px !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-body { padding:14px 18px 16px !important; font-family:'JetBrains Mono',monospace !important; font-size:11.5px !important; line-height:1.7 !important; color:#c9d1d9 !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .code-line { display:block !important; white-space:pre !important; font-family:'JetBrains Mono',monospace !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .c-cmt { color:#8b949e !important; font-style:italic !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .c-kw { color:#ff7b72 !important; font-weight:600 !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .c-str { color:#a5d6ff !important; }<!-- [et_pb_line_break_holder] -->#upl-skip-oauth-7.upl-skip-oauth-strip .c-flag { color:#DDDF4C !important; }<!-- [et_pb_line_break_holder] -->@media (max-width:920px) {<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-strip { padding:30px 26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-content { grid-template-columns:1fr !important; gap:26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-h { font-size:26px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .casa-badge { top:-12px !important; right:8px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width:480px) {<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip { padding:0 16px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-strip { padding:24px 18px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-h { font-size:22px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-buttons { flex-direction:column !important; align-items:stretch !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .cta-btn-primary { justify-content:center !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .code-body { font-size:10.5px !important; }<!-- [et_pb_line_break_holder] -->  #upl-skip-oauth-7.upl-skip-oauth-strip .casa-badge { font-size:9.5px !important; padding:5px 10px !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-skip-oauth-7\" class=\"upl-skip-oauth-strip\"><!-- [et_pb_line_break_holder] -->  <div class=\"cta-strip\"><!-- [et_pb_line_break_holder] -->    <div class=\"cta-bg-grid\"><\/div><!-- [et_pb_line_break_holder] -->    <div class=\"cta-glow-1\"><\/div><!-- [et_pb_line_break_holder] -->    <div class=\"cta-glow-2\"><\/div><!-- [et_pb_line_break_holder] -->    <div class=\"cta-content\"><!-- [et_pb_line_break_holder] -->      <div class=\"cta-text\"><!-- [et_pb_line_break_holder] -->        <h2 class=\"cta-h\"><span class=\"h-strike\">Weeks of verification.<\/span><!\u2013- [et_pb_br_holder] -\u2013>Use <span class=\"h-yellow\">Unipile&#8217;s key<\/span> and start now.<\/h2><!-- [et_pb_line_break_holder] -->        <pee class=\"cta-desc\">You tested in the playground &#8211; now go production without the 6-month Google verification wait. Connect Gmail accounts in 5 minutes with our pre-verified developer credentials.<\/pee><!-- [et_pb_line_break_holder] -->        <div class=\"cta-buttons\"><!-- [et_pb_line_break_holder] -->          <a href=\"https:\/\/dashboard.unipile.com\/signup\/\" target=\"_blank\" rel=\"noopener\" class=\"cta-btn-primary\"><span>Use Unipile&#8217;s Google Key<\/span><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"cta-trust-line\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><span>SOC 2 &#8211; GDPR &#8211; No app review needed &#8211; Switch to your own key anytime<\/span><\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->      <div class=\"cta-code-wrap\"><!-- [et_pb_line_break_holder] -->        <span class=\"casa-badge\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"\/><polyline points=\"22 4 12 14.01 9 11.01\"\/><\/svg><span>CASA Tier 2 Certified<\/span><\/span><!-- [et_pb_line_break_holder] -->        <div class=\"cta-code\"><!-- [et_pb_line_break_holder] -->          <div class=\"code-head\"><div class=\"code-dots\"><span class=\"code-dot code-dot-r\"><\/span><span class=\"code-dot code-dot-y\"><\/span><span class=\"code-dot code-dot-g\"><\/span><\/div><span class=\"code-filename\"><span>connect-gmail.sh<\/span><span class=\"code-lang\">curl<\/span><\/span><\/div><!-- [et_pb_line_break_holder] -->          <div class=\"code-body\"><span class=\"code-line\"><span class=\"c-cmt\"># No Google Cloud Console. No review.<\/span><\/span><span class=\"code-line\"><span class=\"c-cmt\"># Connect any Gmail account in 5 min.<\/span><\/span><span class=\"code-line\"> <\/span><span class=\"code-line\"><span class=\"c-kw\">curl<\/span> -X POST <span class=\"c-str\">&#8220;https:\/\/api.unipile.com\/v1\/accounts&#8221;<\/span> \\<\/span><span class=\"code-line\">  -H <span class=\"c-str\">&#8220;X-API-KEY: $UNIPILE_KEY&#8221;<\/span> \\<\/span><span class=\"code-line\">  -d <span class=\"c-str\">&#8216;{<\/span><\/span><span class=\"code-line\">    <span class=\"c-str\">&#8220;provider&#8221;: &#8220;GOOGLE_OAUTH&#8221;,<\/span><\/span><span class=\"code-line\">    <span class=\"c-str\">&#8220;use_unipile_credentials&#8221;: <span class=\"c-flag\">true<\/span><\/span><\/span><span class=\"code-line\">  <span class=\"c-str\">}&#8217;<\/span><\/span><\/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] --><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc { background: transparent !important; }<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc *, #unipile-gop-skip-desc *::before, #unipile-gop-skip-desc *::after {<!-- [et_pb_line_break_holder] -->  margin: 0 !important; padding: 0 !important; box-sizing: border-box !important; border: none !important;<!-- [et_pb_line_break_holder] -->  background: transparent !important; font-family: 'Inter', sans-serif !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper {<!-- [et_pb_line_break_holder] -->  max-width: 1100px !important;<!-- [et_pb_line_break_holder] -->  margin: 0 auto !important;<!-- [et_pb_line_break_holder] -->  padding: 32px 24px 48px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-section-label {<!-- [et_pb_line_break_holder] -->  display: inline-block !important;<!-- [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: 1px !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 12px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper 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] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-body {<!-- [et_pb_line_break_holder] -->  font-size: 17px !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.75 !important;<!-- [et_pb_line_break_holder] -->  color: #383838 !important;<!-- [et_pb_line_break_holder] -->  margin-bottom: 16px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-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] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-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] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-features {<!-- [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: 16px !important;<!-- [et_pb_line_break_holder] -->  margin-top: 28px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-feat {<!-- [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 !important;<!-- [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] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-feat-icon {<!-- [et_pb_line_break_holder] -->  width: 32px !important;<!-- [et_pb_line_break_holder] -->  height: 32px !important;<!-- [et_pb_line_break_holder] -->  background: rgba(59, 185, 139, 0.1) !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-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-feat-icon svg {<!-- [et_pb_line_break_holder] -->  width: 16px !important;<!-- [et_pb_line_break_holder] -->  height: 16px !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-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-feat-title {<!-- [et_pb_line_break_holder] -->  font-weight: 600 !important;<!-- [et_pb_line_break_holder] -->  font-size: 13.5px !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] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-feat-desc {<!-- [et_pb_line_break_holder] -->  font-size: 12.5px !important;<!-- [et_pb_line_break_holder] -->  color: #64748b !important;<!-- [et_pb_line_break_holder] -->  line-height: 1.5 !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-final-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] -->  font-weight: 700 !important;<!-- [et_pb_line_break_holder] -->  font-size: 15px !important;<!-- [et_pb_line_break_holder] -->  padding: 14px 24px !important;<!-- [et_pb_line_break_holder] -->  border-radius: 10px !important;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  transition: transform 0.2s ease !important;<!-- [et_pb_line_break_holder] -->  cursor: pointer !important;<!-- [et_pb_line_break_holder] -->  margin-top: 28px !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-final-cta:hover {<!-- [et_pb_line_break_holder] -->  transform: translateY(-5px) !important;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->#unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-final-cta svg {<!-- [et_pb_line_break_holder] -->  width: 16px !important;<!-- [et_pb_line_break_holder] -->  height: 16px !important;<!-- [et_pb_line_break_holder] -->  stroke: #0f2736 !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] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-skip-desc.gop-skip-desc-wrapper h2 { font-size: 26px !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-skip-desc.gop-skip-desc-wrapper .gop-skip-features { grid-template-columns: 1fr !important; }<!-- [et_pb_line_break_holder] -->  #unipile-gop-skip-desc.gop-skip-desc-wrapper { padding: 24px 16px 36px !important; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->  #unipile-gop-skip-desc.gop-skip-desc-wrapper 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] --><div id=\"unipile-gop-skip-desc\" class=\"gop-skip-desc-wrapper\"><!-- [et_pb_line_break_holder] -->  <span class=\"gop-skip-section-label\">Production Path<\/span><!-- [et_pb_line_break_holder] -->  <h2>From Google OAuth Playground to Production: Skip the Verification Wait<\/h2><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-skip-body\">The playground confirmed your integration logic works. The next step is connecting real user accounts in production. But here is the problem: Google&#8217;s OAuth verification process for apps requesting sensitive or restricted Gmail scopes can take <strong>4 to 12 weeks<\/strong>, and requires a CASA Tier 2 security audit for restricted scopes like <code>gmail.modify<\/code> and <code>gmail.send<\/code>.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <pee class=\"gop-skip-body\">Unipile solves this with pre-verified Google OAuth credentials. Instead of waiting months for Google to approve your app, you use <strong>Unipile&#8217;s CASA Tier 2 Certified developer key<\/strong> to connect Gmail accounts immediately. Your users authorize through Google&#8217;s standard consent screen, your app reads and sends emails via Unipile&#8217;s API, and you can switch to your own verified credentials at any time when you are ready. This is the same approach used by teams building on top of our <a href=\"https:\/\/www.unipile.com\/integrating-google-oauth-2-0-user-authentication-into-your-app\/\" style=\"color:#3BB98B;text-decoration:underline;\">Google OAuth integration<\/a> and our broader <a href=\"https:\/\/www.unipile.com\/email-api-guide\/\" style=\"color:#3BB98B;text-decoration:underline;\">Email API platform<\/a>.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <div class=\"gop-skip-features\"><!-- [et_pb_line_break_holder] -->    <div class=\"gop-skip-feat\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-skip-feat-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->      <div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-skip-feat-title\">No Google Cloud Console setup<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-skip-feat-desc\">Skip project creation, credential setup, and authorized redirect URI configuration for initial deployment.<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"gop-skip-feat\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-skip-feat-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->      <div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-skip-feat-title\">CASA Tier 2 Certified<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-skip-feat-desc\">Unipile&#8217;s credentials have passed Google&#8217;s highest tier security assessment. SOC 2 and GDPR compliant.<\/div><!-- [et_pb_line_break_holder] -->      <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] -->    <div class=\"gop-skip-feat\"><!-- [et_pb_line_break_holder] -->      <div class=\"gop-skip-feat-icon\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"23 4 23 10 17 10\"\/><path d=\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\"\/><\/svg><\/div><!-- [et_pb_line_break_holder] -->      <div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-skip-feat-title\">Switch to your own key anytime<\/div><!-- [et_pb_line_break_holder] -->        <div class=\"gop-skip-feat-desc\">Start with Unipile&#8217;s key to ship fast, then migrate to your own verified credentials with zero downtime.<\/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] -->  <span class=\"gop-skip-final-cta\" data-upl-link=\"https:\/\/dashboard.unipile.com\/signup\/\" data-upl-target=\"_blank\"><span>Start building &#8211; no verification wait<\/span><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><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] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function(){<!-- [et_pb_line_break_holder] -->  function init(){<!-- [et_pb_line_break_holder] -->    var el = document.getElementById('unipile-gop-skip-desc');<!-- [et_pb_line_break_holder] -->    if (!el) return;<!-- [et_pb_line_break_holder] -->    el.addEventListener('click', function(e){<!-- [et_pb_line_break_holder] -->      var t = e.target.closest('[data-upl-link]');<!-- [et_pb_line_break_holder] -->      if (!t) return;<!-- [et_pb_line_break_holder] -->      e.preventDefault();<!-- [et_pb_line_break_holder] -->      window.open(t.getAttribute('data-upl-link'), t.getAttribute('data-upl-target') || '_blank');<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); }<!-- [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.3&#8243; background_color=&#8221;transparent&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#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; da_disable_devices=&#8221;off|off|off&#8221;][et_pb_row _builder_version=&#8221;4.27.3&#8243; background_color=&#8221;transparent&#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.3&#8243; global_colors_info=&#8221;{}&#8221; theme_builder_area=&#8221;post_content&#8221;][et_pb_code _builder_version=&#8221;4.27.3&#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\": \"What is Google OAuth Playground?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"The Google OAuth Playground is a free, browser-based tool at developers.google.com\/oauthplayground that lets developers test OAuth 2.0 authorization flows against any Google API without setting up a backend server. It supports all Google API scopes and displays the full HTTP request and response at each step of the OAuth flow.\"<!-- [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 do tokens last in OAuth Playground?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"Access tokens generated in the Google OAuth Playground expire after 1 hour (3600 seconds). Refresh tokens using Google's default playground credentials expire after 24 hours. If you use your own OAuth credentials (Client ID and Client Secret from Google Cloud Console), refresh tokens behave like production tokens and do not have the 24-hour limitation.\"<!-- [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\": \"Can I use Google OAuth Playground for production?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"No. The Google OAuth Playground is a development and testing tool only. It uses shared credentials, limits tokens to one user account, and does not support multi-user authorization flows. For production, you need a registered OAuth app with your own Client ID and Client Secret, and for sensitive or restricted scopes, you need to go through Google's OAuth verification process.\"<!-- [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 use my own OAuth credentials in Playground?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"Click the gear icon in the top right of the OAuth Playground to open the settings panel. Check 'Use your own OAuth credentials'. Enter your Client ID and Client Secret from Google Cloud Console. Make sure you have added https:\/\/developers.google.com\/oauthplayground as an authorized redirect URI in your OAuth client settings in Cloud Console. Then authorize as normal - your tokens will now behave like production tokens.\"<!-- [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 is my refresh token expiring after 24 hours?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"The 24-hour refresh token expiry is a limitation of the Google OAuth Playground when using Google's shared default credentials. To avoid this, enable 'Use your own OAuth credentials' in the playground settings and enter your own Client ID and Client Secret. With your own credentials, refresh tokens are long-lived and behave exactly like production tokens.\"<!-- [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\": \"Can I test Gmail API in OAuth Playground?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"Yes. The Google OAuth Playground fully supports the Gmail API. In Step 1, scroll to 'Gmail API v1' and select the scope you want to test (gmail.readonly, gmail.modify, gmail.send, etc.). After authorization, use Step 3 to call endpoints like https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages and inspect the response.\"<!-- [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 scopes can I test in OAuth Playground?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"The Google OAuth Playground supports all published Google API scopes including Gmail (readonly, modify, send, compose, labels, metadata), Google Calendar (readonly, full access), Google Drive, Google Workspace Admin SDK, and many others. You can also enter custom scope URLs manually in the 'Input your own scopes' field at the bottom of Step 1.\"<!-- [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 fix 'redirect_uri_mismatch' in Playground?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"The redirect_uri_mismatch error occurs when using your own OAuth credentials and the redirect URI in your Google Cloud Console OAuth client does not exactly match what the playground uses. Add https:\/\/developers.google.com\/oauthplayground (without a trailing slash) as an authorized redirect URI in your Cloud Console OAuth client settings. Save the changes and try authorizing again.\"<!-- [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\": \"Is OAuth Playground free?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"Yes. The Google OAuth Playground is completely free to use. It is maintained by Google and available at developers.google.com\/oauthplayground with no account or payment required. The API calls you make through the playground count against your Google API project's quota, but the playground tool itself has no cost.\"<!-- [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 is the alternative to OAuth Playground for SaaS?\",<!-- [et_pb_line_break_holder] -->      \"acceptedAnswer\": {<!-- [et_pb_line_break_holder] -->        \"@type\": \"Answer\",<!-- [et_pb_line_break_holder] -->        \"text\": \"For SaaS applications that need to connect Gmail or Google Calendar accounts for multiple end users, Unipile provides a production-ready OAuth API with pre-verified Google credentials (CASA Tier 2 Certified). Instead of going through Google's 4 to 12 week verification process, you can connect Gmail accounts immediately using Unipile's developer key, then switch to your own credentials when ready. Unipile is SOC 2 and GDPR compliant.\"<!-- [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-gop\" style=\"display:block;position:relative;top:-80px;visibility:hidden;\"><\/span><!-- [et_pb_line_break_holder] --><style><!-- [et_pb_line_break_holder] -->#upl-gop-faq { font-family:'Inter',sans-serif; padding:80px 20px; max-width:900px; margin:0 auto; background:transparent!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq *, #upl-gop-faq *::before, #upl-gop-faq *::after { margin:0!important; padding:0!important; box-sizing:border-box!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-header { text-align:center!important; margin-bottom:60px!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-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-gop-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-gop-faq .upl-faq-list { display:flex!important; flex-direction:column!important; gap:12px!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-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-gop-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-gop-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-gop-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-gop-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-gop-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-gop-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-gop-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-gop-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-gop-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-gop-faq .upl-faq-item:hover .upl-faq-icon { background:rgba(59,185,139,0.1)!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-item:hover .upl-faq-icon svg { color:#3BB98B!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-item.active .upl-faq-icon { background:#3BB98B!important; transform:rotate(45deg)!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-item.active .upl-faq-icon svg { color:#ffffff!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-answer { max-height:0!important; overflow:hidden!important; transition:max-height 0.4s ease!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-item.active .upl-faq-answer { max-height:600px!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-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-gop-faq .upl-faq-answer-content strong { color:#0f2736!important; font-weight:600!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-faq .upl-faq-answer-content a { color:#3BB98B!important; text-decoration:underline!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-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-gop-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-gop-faq .upl-faq-cta-text { color:#475569!important; font-size:1rem!important; }<!-- [et_pb_line_break_holder] -->#upl-gop-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-gop-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-gop-faq { padding:60px 16px!important; }<!-- [et_pb_line_break_holder] -->  #upl-gop-faq .upl-faq-answer-content { padding:0 20px 20px 20px!important; }<!-- [et_pb_line_break_holder] -->  #upl-gop-faq .upl-faq-question { padding:18px 20px!important; }<!-- [et_pb_line_break_holder] -->  #upl-gop-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-gop-faq\"><!-- [et_pb_line_break_holder] -->  <div class=\"upl-faq-header\"><!-- [et_pb_line_break_holder] -->    <h2 class=\"upl-faq-title\">Google OAuth Playground &#8211; FAQ<\/h2><!-- [et_pb_line_break_holder] -->    <pee class=\"upl-faq-subtitle\">Answers to the most common questions about testing, tokens, scopes, and moving to production from the playground.<\/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\">What is Google OAuth Playground?<\/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 Playground<\/strong> is a free, browser-based tool at <a href=\"https:\/\/developers.google.com\/oauthplayground\/\" target=\"_blank\" rel=\"noopener\">developers.google.com\/oauthplayground<\/a> that lets developers test OAuth 2.0 authorization flows against any Google API. Select scopes, authorize your Google account, exchange the authorization code for tokens, and make live API calls &#8211; all without writing backend code. Maintained by Google, it supports every published Google API scope.<\/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 do tokens last in OAuth Playground?<\/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>Access tokens<\/strong> expire after 1 hour (3600 seconds). <strong>Refresh tokens<\/strong> using Google&#8217;s default playground credentials expire after 24 hours &#8211; this is a playground-specific limitation. If you configure the playground to use your own OAuth credentials (Client ID and Client Secret from Google Cloud Console), refresh tokens behave exactly like production tokens with no 24-hour expiry. You can also click &#8220;Refresh access token&#8221; in Step 2 at any time to get a new access token without re-authorizing.<\/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\">Can I use Google OAuth Playground for production?<\/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>No. The playground is a <strong>testing and debugging tool only<\/strong>. It is limited to one user account (your own), tokens expire quickly with default credentials, and it does not support multi-user authorization flows needed by production apps. For production, you need to register your own OAuth app, implement the authorization redirect flow in your backend, and for sensitive scopes like <code>gmail.modify<\/code>, complete Google&#8217;s verification process. Alternatively, use a service like <a href=\"https:\/\/www.unipile.com\/integrating-google-oauth-2-0-user-authentication-into-your-app\/\">Unipile&#8217;s pre-verified OAuth credentials<\/a> to ship faster.<\/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 use my own OAuth credentials in Playground?<\/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>In Google Cloud Console, create an OAuth 2.0 Web application credential and add <code>https:\/\/developers.google.com\/oauthplayground<\/code> as an authorized redirect URI. Copy the Client ID and Client Secret. In the playground, click the <strong>gear icon<\/strong>, enable &#8220;Use your own OAuth credentials&#8221;, and paste your Client ID and Client Secret. Click &#8220;Close&#8221;, then proceed with Step 1 scope selection and authorization as normal. Your tokens will now have production-equivalent lifetimes.<\/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\">Why is my refresh token expiring after 24 hours?<\/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 24-hour expiry is because you are using the <strong>playground&#8217;s default shared credentials<\/strong> (Google&#8217;s own OAuth client). Google intentionally limits these shared tokens for security reasons. This is not how production OAuth tokens work. The fix is to enable &#8220;Use your own OAuth credentials&#8221; in the playground gear settings and provide your own Client ID and Client Secret. With your own credentials, refresh tokens are valid until the user explicitly revokes access or the app is inactive for 6 months.<\/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\">Can I test Gmail API in OAuth Playground?<\/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, fully. In the playground Step 1, expand <strong>&#8220;Gmail API v1&#8221;<\/strong> and select any Gmail scope (<code>gmail.readonly<\/code>, <code>gmail.modify<\/code>, <code>gmail.send<\/code>, etc.). After authorization, in Step 3 enter the endpoint URL such as <code>https:\/\/gmail.googleapis.com\/gmail\/v1\/users\/me\/messages<\/code> and click &#8220;Send the request&#8221;. You will see the live response from your Gmail inbox. For a complete reference of Gmail scopes and their permissions, see our <a href=\"https:\/\/www.unipile.com\/gmail-api-scopes-guide\/\">Gmail API Scopes guide<\/a>.<\/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\">What scopes can I test in OAuth Playground?<\/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 playground supports all published Google API scopes. The built-in list includes Gmail API, Google Calendar, Google Drive, Google Sheets, Google Docs, Google Slides, Google Admin SDK, Google People API, Google Tasks, YouTube, and many others. You can also test any custom scope by entering the full scope URL manually in the &#8220;Input your own scopes&#8221; field. Multiple scopes from different APIs can be combined in a single authorization request.<\/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\">08<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">How do I fix &#8220;redirect_uri_mismatch&#8221; in Playground?<\/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>This error only appears when using your own OAuth credentials. Go to <a href=\"https:\/\/console.cloud.google.com\/\" target=\"_blank\" rel=\"noopener\">Google Cloud Console<\/a>, open your OAuth client&#8217;s settings, and add <code>https:\/\/developers.google.com\/oauthplayground<\/code> (without trailing slash) as an authorized redirect URI. Save, wait a few minutes for changes to propagate, then retry. If the error persists, also try adding the version with a trailing slash. For more OAuth error fixes, see our <a href=\"https:\/\/www.unipile.com\/google-oauth-gmail-api-errors\/\">Google OAuth errors guide<\/a>.<\/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\">09<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">Is OAuth Playground free?<\/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, the Google OAuth Playground is <strong>completely free<\/strong>. There is no account required to use the playground interface itself &#8211; just navigate to <a href=\"https:\/\/developers.google.com\/oauthplayground\/\" target=\"_blank\" rel=\"noopener\">developers.google.com\/oauthplayground<\/a> and sign in with any Google account. The API calls you make through the playground count against your Google Cloud project&#8217;s quota (which has a generous free tier for most APIs), but the playground tool itself has no cost. For a fully managed alternative, see <a href=\"\/communication-api\/email-api\/gmail-api\/\" style=\"color:#2aaa7e;font-weight:600;text-decoration:underline;\">Unipile&#8217;s production-ready Gmail API<\/a>.<\/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\">10<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"upl-faq-question-text\">What is the alternative to OAuth Playground for SaaS?<\/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>For SaaS applications connecting Gmail or Google Calendar accounts for multiple end users, <a href=\"https:\/\/www.unipile.com\/email-api-guide\/\">Unipile<\/a> provides a production-ready OAuth API with pre-verified Google credentials (CASA Tier 2 Certified, SOC 2, GDPR compliant). Instead of the 4-12 week Google verification process for restricted scopes, you can connect user Gmail accounts immediately. You can also <a href=\"https:\/\/developer.unipile.com\/docs\/google-oauth\" target=\"_blank\" rel=\"noopener\">read the Unipile Google OAuth documentation<\/a> to see the exact API calls required. Switch to your own verified credentials at any time with no downtime.<\/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 or the playground?<\/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-gop-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] -->    faq.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] -->  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":"","protected":false},"author":4,"featured_media":279136,"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-279108","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 Playground \u2014 Complete Guide to Testing Scopes &amp; Tokens (2026) - Unipile<\/title>\n<meta name=\"description\" content=\"Master Google OAuth Playground in 2026: test scopes, generate access + refresh tokens, debug API calls. Plus the production-ready alternative that skips verification.\" \/>\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\/nl\/google-oauth-playground-handleiding\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google OAuth Playground \u2014 Complete Guide to Testing Scopes &amp; Tokens (2026) - Unipile\" \/>\n<meta property=\"og:description\" content=\"Master Google OAuth Playground in 2026: test scopes, generate access + refresh tokens, debug API calls. Plus the production-ready alternative that skips verification.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.unipile.com\/nl\/google-oauth-playground-handleiding\/\" \/>\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-03T09:32:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-03T12:57:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/em-25-google-oauth-playground.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\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=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Damien Girardeau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/\"},\"author\":{\"name\":\"Damien Girardeau\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#\\\/schema\\\/person\\\/a2ac44e22bdc27d497ce8b58716a673e\"},\"headline\":\"Google OAuth Playground \u2014 Complete Guide to Testing Scopes &#038; Tokens (2026)\",\"datePublished\":\"2026-06-03T09:32:21+00:00\",\"dateModified\":\"2026-06-03T12:57:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/\"},\"wordCount\":5787,\"publisher\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/em-25-google-oauth-playground.png\",\"articleSection\":[\"API Guidelines\"],\"inLanguage\":\"nl-NL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/\",\"name\":\"Google OAuth Playground \u2014 Complete Guide to Testing Scopes & Tokens (2026) - Unipile\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/em-25-google-oauth-playground.png\",\"datePublished\":\"2026-06-03T09:32:21+00:00\",\"dateModified\":\"2026-06-03T12:57:21+00:00\",\"description\":\"Master Google OAuth Playground in 2026: test scopes, generate access + refresh tokens, debug API calls. Plus the production-ready alternative that skips verification.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/em-25-google-oauth-playground.png\",\"contentUrl\":\"https:\\\/\\\/www.unipile.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/em-25-google-oauth-playground.png\",\"width\":2400,\"height\":1260,\"caption\":\"Google OAuth Playground: test scopes, generate access + refresh tokens, then move to production via Unipile\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/google-oauth-playground-guide\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.unipile.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google OAuth Playground \u2014 Complete Guide to Testing Scopes &#038; Tokens (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\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.unipile.com\\\/#organization\",\"name\":\"Unipile\",\"url\":\"https:\\\/\\\/www.unipile.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@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\":\"nl-NL\",\"@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 Playground \u2014 Complete Gids voor het Testen van Scopes &amp; Tokens (2026) - Unipile","description":"Beheers Google OAuth Playground in 2026: test bereiken, genereer toegangs- en vernieuwingstokens, debug API-aanroepen. Plus het productieklaare alternatief dat verificatie overslaat.","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\/nl\/google-oauth-playground-handleiding\/","og_locale":"nl_NL","og_type":"article","og_title":"Google OAuth Playground \u2014 Complete Guide to Testing Scopes & Tokens (2026) - Unipile","og_description":"Master Google OAuth Playground in 2026: test scopes, generate access + refresh tokens, debug API calls. Plus the production-ready alternative that skips verification.","og_url":"https:\/\/www.unipile.com\/nl\/google-oauth-playground-handleiding\/","og_site_name":"Unipile","article_publisher":"https:\/\/www.facebook.com\/unipilefr","article_published_time":"2026-06-03T09:32:21+00:00","article_modified_time":"2026-06-03T12:57:21+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/em-25-google-oauth-playground.png","type":"image\/png"}],"author":"Damien Girardeau","twitter_card":"summary_large_image","twitter_creator":"@UnipileAPI","twitter_site":"@UnipileAPI","twitter_misc":{"Geschreven door":"Damien Girardeau","Geschatte leestijd":"20 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#article","isPartOf":{"@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/"},"author":{"name":"Damien Girardeau","@id":"https:\/\/www.unipile.com\/#\/schema\/person\/a2ac44e22bdc27d497ce8b58716a673e"},"headline":"Google OAuth Playground \u2014 Complete Guide to Testing Scopes &#038; Tokens (2026)","datePublished":"2026-06-03T09:32:21+00:00","dateModified":"2026-06-03T12:57:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/"},"wordCount":5787,"publisher":{"@id":"https:\/\/www.unipile.com\/#organization"},"image":{"@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/em-25-google-oauth-playground.png","articleSection":["API Guidelines"],"inLanguage":"nl-NL"},{"@type":"WebPage","@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/","url":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/","name":"Google OAuth Playground \u2014 Complete Gids voor het Testen van Scopes &amp; Tokens (2026) - Unipile","isPartOf":{"@id":"https:\/\/www.unipile.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#primaryimage"},"image":{"@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/em-25-google-oauth-playground.png","datePublished":"2026-06-03T09:32:21+00:00","dateModified":"2026-06-03T12:57:21+00:00","description":"Beheers Google OAuth Playground in 2026: test bereiken, genereer toegangs- en vernieuwingstokens, debug API-aanroepen. Plus het productieklaare alternatief dat verificatie overslaat.","breadcrumb":{"@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.unipile.com\/google-oauth-playground-guide\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#primaryimage","url":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/em-25-google-oauth-playground.png","contentUrl":"https:\/\/www.unipile.com\/wp-content\/uploads\/2026\/06\/em-25-google-oauth-playground.png","width":2400,"height":1260,"caption":"Google OAuth Playground: test scopes, generate access + refresh tokens, then move to production via Unipile"},{"@type":"BreadcrumbList","@id":"https:\/\/www.unipile.com\/google-oauth-playground-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.unipile.com\/"},{"@type":"ListItem","position":2,"name":"Google OAuth Playground \u2014 Complete Guide to Testing Scopes &#038; Tokens (2026)"}]},{"@type":"WebSite","@id":"https:\/\/www.unipile.com\/#website","url":"https:\/\/www.unipile.com\/","name":"Eenpaal","description":"Integreer berichten en e-mail, maak eenvoudig verbinding 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":"nl-NL"},{"@type":"Organization","@id":"https:\/\/www.unipile.com\/#organization","name":"Eenpaal","url":"https:\/\/www.unipile.com\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@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":"nl-NL","@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\/nl\/wp-json\/wp\/v2\/posts\/279108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/comments?post=279108"}],"version-history":[{"count":6,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/posts\/279108\/revisions"}],"predecessor-version":[{"id":279127,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/posts\/279108\/revisions\/279127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/media\/279136"}],"wp:attachment":[{"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/media?parent=279108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/categories?post=279108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/tags?post=279108"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/www.unipile.com\/nl\/wp-json\/wp\/v2\/post_folder?post=279108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}