<!DOCTYPE html>
<html lang="en" class="MainHtml">

<head>
  <meta charset="utf-8">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>V2 API Docs - RevCent</title>
  <meta name="description" content="API version 2 documention." />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="icon" href="https://cdn.revcent.com/img/favicon.png">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/vendor/bootstrap.min.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/vendor/slick.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/vendor/slick-theme.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/sal.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/feather.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/fontawesome-5/css/all.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/euclid-circulara.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/swiper.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/magnify.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/odometer.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/animation.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/bootstrap-select.min.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/jquery-ui.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/magnigy-popup.min.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/plugins/plyr.css">
  <link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/sweetalert/sweetalert.css" type="text/css" />
  <link rel="stylesheet" href="https://cdn.revcent.com/public-new/css/style.css">
  <style>
    html {
      --gutterWidth: 16px;
      --scrollbarWidth: 0px;
      --windowWidth: calc(100vw - var(--scrollbarWidth));
      --layoutWidth: calc(var(--windowWidth) - var(--gutterWidth)*2);
      --layoutWidthMax: 1080px;
      --viewWidthSmall: 375;
      --viewWidthMedium: 600;
      --viewWidthLarge: 1112;
      --viewportScale: calc(var(--windowWidth)/var(--viewWidthLarge));
      --paddingTop: 160px;
      --paddingBottom: 160px;
      --colPadNone: 0;
      --colPadSmall: 8px;
      --colPadNormal: 16px;
      --colPadMedium: 16px;
      --colPadLarge: 16px;
      --colPadXLarge: 16px;
      --rowGap: 8px;
      --navSignupBg: #b966e721;
      --navSignupColor: #b966e7;
      --navSignupBgH: #b966e7;
      --navSignupColorH: #ffffff;
      --shadow-blue: 0px 6px 34px rgb(119 138 255 / 18%);
      --shadow-12: 0px 18px 36px -12px rgba(0, 0, 0, 0.1), 0px 30px 45px -30px rgba(50, 50, 93, 0.25)
    }


    @media (min-width:768px) {
      html {
        --colPadMedium: 32px;
        --colPadLarge: 64px;
        --colPadXLarge: 64px;
      }
    }

    @media (min-width:991px) {
      html {
        --colPadXLarge: 112px;
      }
    }

    @media (min-width:1112px) {
      html {
        --layoutWidth: var(--layoutWidthMax);
        --gutterWidth: calc(var(--windowWidth)/2 - var(--layoutWidth)/2)
      }
    }
  </style>

  <style>
    :root {
      --color-body: #474a51;
      --largeHeroLWidthMax: 1080px;
      --largeHeroLWidth: var(--largeHeroLWidthMax);
      --largeHeroGWidth: calc(var(--windowWidth)/2 - var(--largeHeroLWidth)/2);
      --largeHeroOffsetX: var(--largeHeroGWidth);
      --largeHeroTransformX: calc(var(--largeHeroGWidth)*0.8);
      --largeHeroPaddingTop: calc(116*1px);
      --largeHeroGHeight: calc(100% + var(--largeHeroPaddingTop) + var(--largeHeroTransformX)*0.212);
    }
  </style>

  <style>
    .Section {
      --sectAngleSin: var(--angleNormalSin);
      --sectAngle: 0;
      --sectPaddingSmallMax: 110;
      --sectPaddingXSmallMax: 72;
      --sectPaddingMin: 72;
      --sectPaddingMax: var(--sectPaddingNormalMax);
      --sectPaddingTopMax: var(--sectPaddingMax);
      --sectPaddingBottomMax: var(--sectPaddingMax);
      --sectionMarginBottom: 0;
      --sectAngleHeight: calc(var(--windowWidth)*var(--sectAngleSin));
      --sectAnglePaddingBaseMin: 100;
      --sectAnglePaddingBaseMax: var(--sectPaddingMax);
      --sectAnglePaddingTopBaseMax: var(--sectAnglePaddingBaseMax);
      --sectAnglePaddingBottomBaseMax: var(--sectAnglePaddingBaseMax);
      --sectAngleMaxHeight: none;
      --sectionOverflow: hidden;
      --sectionTransformOrigin: 100% 0;
      --sectionBackgroundOverflow: visible;
      position: relative;
      z-index: 1;
      margin-bottom: var(--sectionMarginBottom);
      color: var(--textColor);
      scroll-margin-top: calc(var(--fNvHeight) + var(--fNvSpacing) - var(--sectPaddingTop))
    }


    .Section {
      --sectPaddingNormalMax: 128
    }


    .Sect--hasStickyNav {
      --sectionOverflow: visible
    }

    .Sect--hasBorderTop .Sect__background {
      border-top: 1px solid rgba(230, 235, 241, .52)
    }

    .Sect--paddingSmall {
      --sectPaddingMax: var(--sectPaddingSmallMax)
    }

    .Sect--paddingXSmall {
      --sectPaddingMax: var(--sectPaddingXSmallMax)
    }

    .Section {
      --sectAnglePaddingTopBase: calc(var(--sectAnglePaddingBaseMin)*1px + (var(--sectAnglePaddingTopBaseMax) - var(--sectAnglePaddingBaseMin))*(var(--windowWidth)/737 - 0.50882px));
      --sectAnglePaddingBottomBase: calc(var(--sectAnglePaddingBaseMin)*1px + (var(--sectAnglePaddingBottomBaseMax) - var(--sectAnglePaddingBaseMin))*(var(--windowWidth)/737 - 0.50882px));
      --sectPaddingTopGutterWidth: var(--gutterWidth);
      --sectAnglePaddingTop: calc(var(--sectAngleHeight) - var(--sectAngleSin)*var(--sectPaddingTopGutterWidth) + var(--sectAnglePaddingTopBase));
      --sectAnglePaddingBottom: calc(var(--sectAngleHeight) - var(--sectAngleSin)*var(--gutterWidth) + var(--sectAnglePaddingBottomBase));
      --sectPaddingTop: calc(var(--sectPaddingMin)*1px + (var(--sectPaddingTopMax) - var(--sectPaddingMin))*(var(--windowWidth)/737 - 0.50882px));
      --sectPaddingBottom: calc(var(--sectPaddingMin)*1px + (var(--sectPaddingBottomMax) - var(--sectPaddingMin))*(var(--windowWidth)/737 - 0.50882px));
    }

    @media (max-width:375px) {
      .Section {
        --sectAnglePaddingTopBase: calc(var(--sectAnglePaddingBaseMin)*1px);
        --sectAnglePaddingBottomBase: calc(var(--sectAnglePaddingBaseMin)*1px);
        --sectPaddingTop: calc(var(--sectPaddingMin)*1px);
        --sectPaddingBottom: calc(var(--sectPaddingMin)*1px)
      }
    }

    @media (min-width:1112px) {
      .Section {
        --sectAnglePaddingTopBase: calc(var(--sectAnglePaddingTopBaseMax)*1px);
        --sectAnglePaddingBottomBase: calc(var(--sectAnglePaddingBottomBaseMax)*1px);
        --sectPaddingTop: calc(var(--sectPaddingTopMax)*1px);
        --sectPaddingBottom: calc(var(--sectPaddingBottomMax)*1px)
      }
    }

    .Sect__background {
      position: relative;
      height: 100%;
      max-height: var(--sectAngleMaxHeight);
      width: 100%;
      top: 0;
      left: 0;
      transform-origin: var(--sectionTransformOrigin);
      transform: skewY(var(--sectAngle));
      background: var(--backgroundColor);
      overflow: hidden
    }

    .Sect__background--isTransparent {
      background: hsla(0, 0%, 100%, .2);
      -webkit-backdrop-filter: blur(7px);
      backdrop-filter: blur(7px)
    }

    .Sect__masked {
      overflow: var(--sectionOverflow)
    }

    .Sect__container {
      position: relative;
      z-index: 1;
      display: flex;
      justify-content: center;
      min-height: var(--sectionMinHeight)
    }

    .Sect__layoutContainer {
      width: 100%;
      margin: 0 var(--colPadNormal)
    }

    .Sect__layout {
      padding: var(--sectPaddingTop) 0 var(--sectPaddingBottom)
    }

    .Sect--angleTop {
      --sectPaddingTop: var(--sectAnglePaddingTop);
      --sectAngle: var(--angleNormal)
    }

    .Sect--angleBottom {
      --sectionTransformOrigin: 0 0
    }

    .Sect--angleBoth,
    .Sect--angleBottom {
      --sectPaddingBottom: var(--sectAnglePaddingBottom);
      --sectionMarginBottom: calc(var(--sectAngleHeight)*-1)
    }

    .Sect--angleBoth {
      --sectPaddingTop: var(--sectAnglePaddingTop);
      --sectAngle: var(--angleNormal)
    }

    .Sect--bleed3 {
      --sectPaddingBottom: 0
    }

    .Sect__backgroundMask {
      position: absolute;
      width: 100%;
      height: 100%;
      overflow: var(--sectionBackgroundOverflow)
    }

    .Sect--paddingTopNone {
      --sectPaddingTop: 0
    }

    .Sect--paddingBottomNone {
      --sectPaddingBottom: 0
    }
  </style>
  <style>
    .MainHtml {
      --filterShadowMedium: 0px 3px 11.5px -3.5px rgba(50, 50, 93, 0.25), 0px 3.8px 7.5px -3.7px rgba(0, 0, 0, 0.1);
      --scrollbarOffset: 10px;
      --angleNormal: -6deg;
      --angleStrong: -12deg;
      --angleNormalSin: 0.106;
      --angleStrongSin: 0.212;
      --fNvHeight: 60px;
      --fNvSpacing: 48px;
      color-scheme: only light
    }

    .MainHtml *,
    .MainHtml :after,
    .MainHtml :before {
      box-sizing: border-box;
    }



    .MainHtml[data-loading] {
      overflow-x: hidden
    }

    .MainHtml[data-loading] :after,
    .MainHtml[data-loading] :before,
    .MainHtml[data-loading] :not([data-transition-in]) {
      transition: none !important
    }

    .MainBody {
      margin: 0;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    .SiteFooterSection {
      --sectionBackgroundOverflow: hidden;
    }

    .SiteFooterSection {
      z-index: 2;
    }
  </style>

  <style>
    .MainHtml {
      --heroImgShadow: rgba(50, 50, 93, 0.25);
    }

    .Page-Theme-0 {
      --blendBackground: #d6d6d6;
      --blendIntersection: #d6d6d6;
      --blendForeground: #d6d6d6;
      --pageThemeBg: #fdfafd;
      --pageThemeLink: #800080;
      --pageThemeLinkH: #800080;
      --badgeColor: #6b6b6b;
      --badgeBackground: #bfbfbf21;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #9400FF;
      --pageThemeSectionLinkH: #9400FF;
      --pageThemeSectionLinkHBg: #80008021;
      --navSignupBg: #f1ddff;
      --navSignupColor: #192335;
      --navSignupBgH: #9400FF;
      --navSignupColorH: #ffffff;
    }

    .Page-Theme-1 {
      --blendBackground: #9400ff;
      --blendIntersection: #9400ff;
      --blendForeground: #9400ff;
      --pageThemeBg: #fdfafd;
      --pageThemeLink: #9400ff;
      --pageThemeLinkH: #c068ff;
      --pageThemeLinkDark: #b959ff;
      --badgeColor: #af1eff;
      --badgeBackground: #b966e721;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #9400FF;
      --pageThemeSectionLinkH: #9400FF;
      --pageThemeSectionLinkHBg: #80008021;
      --navSignupBg: #f1ddff;
      --navSignupColor: #192335;
      --navSignupBgH: #9400FF;
      --navSignupColorH: #ffffff;
      --heroImgShadow: rgba(148, 0, 255, 0.5);
    }

    .Page-Theme-2 {
      --blendBackground: #ff2171;
      --blendIntersection: #ff2171;
      --blendForeground: #ff2171;
      --pageThemeBg: #fffafc;
      --pageThemeLink: #FF2171;
      --pageThemeLinkH: #ff679e;
      --badgeColor: #FF2171;
      --badgeBackground: #ffebf2;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #ff0f80;
      --pageThemeSectionLinkH: #ff0f80;
      --pageThemeSectionLinkHBg: #ffeaf2;
      --navSignupBg: #ff217121;
      --navSignupColor: #192335;
      --navSignupBgH: #FF2171;
      --navSignupColorH: #ffffff;
      --heroImgShadow: rgba(255, 16, 127, 0.5);
    }

    .Page-Theme-3 {
      --blendBackground: #ff3802;
      --blendIntersection: #ff3802;
      --blendForeground: #ff3802;
      --pageThemeBg: #fffcfb;
      --pageThemeLink: #e75703;
      --pageThemeLinkH: #e75703;
      --badgeColor: #ff7300;
      --badgeBackground: #ff39010f;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #ff3802;
      --pageThemeSectionLinkH: #ff3802;
      --pageThemeSectionLinkHBg: #ffd89d85;
      --navSignupBg: #ffd89d85;
      --navSignupColor: #192335;
      --navSignupBgH: #ff3802;
      --navSignupColorH: #ffffff;
      --heroImgShadow: rgba(255, 57, 1, 0.5);
    }

    .Page-Theme-4 {
      --blendBackground: #00c918;
      --blendIntersection: #00c918;
      --blendForeground: #00c918;
      --pageThemeBg: #fbfffc;
      --pageThemeLink: #00ab14;
      --pageThemeLinkH: #00ab14;
      --badgeColor: #00c918;
      --badgeBackground: #eafff2;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #00c918;
      --pageThemeSectionLinkH: #119b44;
      --pageThemeSectionLinkHBg: #c5ffdb;
      --navSignupBg: #daffe8;
      --navSignupColor: #192335;
      --navSignupBgH: #14bf53;
      --navSignupColorH: #ffffff;
      --heroImgShadow: rgba(4, 201, 25, 0.5);
    }

    .Page-Theme-5 {
      --blendBackground: #1b8bff;
      --blendIntersection: #1b8bff;
      --blendForeground: #1b8bff;
      --pageThemeBg: #fbfdff;
      --pageThemeLink: #082d7a;
      --pageThemeLinkH: #082d7a;
      --pageThemeLinkDark: #1b8bff;
      --badgeColor: #082d7a;
      --badgeBackground: #c3f5ff;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #1b8bff;
      --pageThemeSectionLinkH: #082d7a;
      --pageThemeSectionLinkHBg: #c3f5ff;
      --navSignupBg: #1a8bff2b;
      --navSignupColor: #192335;
      --navSignupBgH: #1b8bff;
      --navSignupColorH: #ffffff;
      --heroImgShadow: rgba(26, 139, 255, 0.5);
    }

    .Page-Theme-6 {
      --blendBackground: #930077;
      --blendIntersection: #930077;
      --blendForeground: #930077;
      --pageThemeBg: #fffbfe;
      --pageThemeLink: #930077;
      --pageThemeLinkH: #930077;
      --badgeColor: #930077;
      --badgeBackground: #fff0fc;
      --pageThemeSectionLink: #fff;
      --pageThemeSectionLinkBg: #930077;
      --pageThemeSectionLinkH: #930077;
      --pageThemeSectionLinkHBg: #fff;
      --navSignupBg: #ffeafb;
      --navSignupColor: #192335;
      --navSignupBgH: #930077;
      --navSignupColorH: #fff;
      --heroImgShadow: rgba(147, 0, 119, 0.5);
    }


    .hero-img.page-theme-hero-img {
      box-shadow: 0 50px 100px -20px rgba(50, 50, 93, 0.25), 0 30px 60px -30px rgba(50, 50, 93, 0.25)
    }

    .bg-color-page-theme {
      background-color: var(--pageThemeBg) !important;
    }

    a.bg-page-theme-nav-signup {
      background: var(--navSignupBg) !important;
      color: var(--navSignupColor) !important;
    }

    a.bg-page-theme-nav-signup:hover,
    a.bg-page-theme-nav-signup:focus {
      background: var(--navSignupBgH) !important;
      color: var(--navSignupColorH) !important;
    }


    a.page-theme-link {
      color: var(--pageThemeLink);
    }

    a.page-theme-link.dark-link {
      color: var(--pageThemeLinkDark);
    }

    a.page-theme-link:hover,
    a.page-theme-link:focus {
      color: var(--pageThemeLinkH);
    }

    .page-theme-section-link {
      background: var(--pageThemeSectionLinkBg) !important;
      color: var(--pageThemeSectionLink) !important;
    }

    a.page-theme-section-link:hover,
    button.page-theme-section-link:hover {
      background: var(--pageThemeSectionLinkHBg) !important;
      color: var(--pageThemeSectionLinkH) !important;
    }


    .rbt-badge-6.page-theme-badge {
      background: var(--badgeBackground) !important;
      color: var(--badgeColor) !important;
    }

    .SeparatorSlant {
      --slantInset: 0px;
      --slantWidth: var(--gutterWidth);
      --slantMinWidth: 80px;
      --slantHeight: 40px;
      --slantIntersectionTop: calc(var(--slantSetHeight) - var(--slantHeight));
      --slantIntersectionInset: 0px;
      --slantIntersectionWidth: var(--gutterWidth);
      --slantIntersectionBackground: var(--blendIntersection);
      --slantMaxInset: calc(var(--layoutWidth)/2);
      --slantStartMax: calc(var(--layoutWidth) + var(--gutterWidth));
      --slantStart: calc(var(--slantStartMax) - var(--slantInset) + var(--slantBorderOffset));
      --slantBorderOffset: 0px;
      right: var(--slantStart);
      width: calc(var(--slantWidth) + var(--slantInset) - var(--slantBorderOffset)*2);
      position: absolute;
      height: var(--slantHeight);
      background: var(--slantColor);
      overflow: hidden;
    }

    .SeparatorSlantSet {
      --slantSetHeight: 72px;
      --slantSetAlignCenterOffset: -40px;
      --slantSetSubpixelOffset: 0;
      --slantSetAngle: var(--angleNormal);
      position: absolute;
      height: var(--slantSetHeight);
      width: 100%;
      transform: skewY(var(--slantSetAngle)) translateY(var(--slantSetSubpixelOffset));
      overflow: hidden;
    }



    .SeparatorSlant__intersection {
      position: absolute;
      top: var(--slantIntersectionTop);
      height: var(--slantHeight);
      transform: translateY(-0.25px);
      background: var(--slantIntersectionBackground);
      left: calc(var(--slantWidth) - var(--slantIntersectionWidth));
      width: calc(var(--slantIntersectionWidth) + var(--slantIntersectionInset));
    }

    .SeparatorSlantSet--alignCenter {
      top: var(--slantSetAlignCenterOffset);
    }

    .SeparatorSlantSet--alignEnd {
      top: calc(var(--slantSetHeight)*-1);
    }

    .SeparatorSlant--insetNormal {
      --slantInset: calc(var(--slantMaxInset)*0.25);
    }

    .SeparatorSlant--accentNone:first-of-type {
      --slantColor: var(--blendBackground);
    }

    .SeparatorSlant--widthNormal {
      --slantWidth: 160px;
    }

    .SeparatorSlantSet--BottomLeft .SeparatorSlant.SeparatorSlant--accentNone {
      --slantColor: var(--blendForeground);
    }

    .SeparatorSlantSet--BottomLeft .SeparatorSlant {
      top: var(--slantIntersectionTop);
    }

    .SeparatorSlant--insetSmall {
      --slantInset: calc(var(--slantMaxInset)*0.125);
    }

    .SeparatorSlant:nth-of-type(3) {
      --slantColor: transparent;
    }

    .SeparatorSlant--intersectionInsetSmall {
      --slantIntersectionInset: calc(var(--slantMaxInset)*0.25);
    }

    .SeparatorSlant--intersectionWidthNormal {
      --slantIntersectionWidth: 160px;
    }

    .SeparatorSlantSet--BottomRight .SeparatorSlant__intersection,
    .SeparatorSlantSet--TopRight .SeparatorSlant__intersection {
      left: auto;
      right: calc(var(--slantWidth) - var(--slantIntersectionWidth));
    }


    .SeparatorSlantSet--TopRight {
      --slantSetSubpixelOffset: -0.35px;
      top: 0;
      right: 0;
      transform-origin: 100% 0;
    }

    .SeparatorSlantSet--TopLeft {
      top: 0;
      left: 0;
      transform-origin: 100% 0;
    }

    .SeparatorSlantSet--BottomLeft {
      left: 0;
      bottom: 0;
      transform-origin: 0 100%;
    }


    .SeparatorSlantSet--BottomRight .SeparatorSlant,
    .SeparatorSlantSet--TopRight .SeparatorSlant {
      right: auto;
      left: var(--slantStart);
    }
  </style>

  <style>
    .rbt-btn:hover {
      background-color: var(--color-primary);
      color: var(--color-white);
      transform: translate3d(0, -2px, 0);
      box-shadow: var(--shadow-7);
    }

    .rbt-btn.btn-white {
      box-shadow: none;
    }

    .rbt-btn.btn-white:hover {
      box-shadow: var(--shadow-7);
      background: var(--color-white);
      color: var(--color-heading);
    }


    .rbt-header.rbt-transparent-header {
      max-width: 1450px;
      margin-left: auto;
      margin-right: auto;
    }

    .bg-violet-opacity-2 {
      background: rgba(226, 213, 252, 0.8) !important;
      color: var(--color-violet) !important;
    }

    a.text-link:hover {
      cursor: pointer;
    }

    .quick-access>li.account-access {
      padding-left: 10px;
      margin-left: 20px;
      margin-right: 20px;
      position: relative;
    }

    .rbt-header .logo a img {
      max-height: 21px;
    }

    .rbt-banner-1 {
      background: var(--gradient-2) !important;
      background: linear-gradient(180deg, #f4e9fd87 0%, #FFFFFF 100%) !important;
    }

    .rbt-banner-1.variation-2 .content,
    .rbt-banner-1.variation-2 .content .inner .title,
    .rbt-banner-1.variation-2 .content .inner .description {
      padding-right: 0%;
    }

    .product-hero .content,
    .product-hero .content .inner .title,
    .product-hero .content .inner .description {
      padding-right: 0%;
    }


    .quick-access>li.account-access:first-child::after {
      background: none;
    }

    .height-450 {
      height: 450px;
    }

    .height-350 {
      height: 350px;
    }

    .height-250 {
      height: 250px;
    }

    .height-450,
    .height-350,
    .height-250 {
      display: flex;
      align-items: center;
    }

    .rbt-section-gap-2.simple-page,
    .rbt-section-gap.simple-page {
      padding-top: 0px;
      margin-top: -20px
    }

    @media only screen and (max-width: 1199px) {

      .height-450,
      .height-350,
      .height-250 {
        height: auto
      }
    }

    @media only screen and (min-width: 1199px) {
      .rbt-section-gap-2.simple-page {
        padding-top: 0px;
        /* margin-top: -90px */
      }
    }

    .rbt-section-gap-2 {
      padding: 60px 0;
    }

    a.a-no-link:hover {
      cursor: default;
    }

    .form-group input:focus {
      outline: none;
    }

    .form-group input:focus-visible {
      border-color: #efefef;
      outline: none;
    }

    .form-group.focused label {
      color: var(--color-gray);
    }

    .form-group span.focus-border {
      background-color: var(--color-gray);
    }

    .quick-access>li.account-access::after {
      background: none !important;
    }



    .inner-skew-angle {
      position: absolute;
      height: 100px;
      width: 100%;
      transform: skewY(-6deg) translateY(0);
      overflow: hidden;
    }

    .product-separator-skew .inner-skew-angle {
      transform: skewY(var(--angleNormal)) translateY(0);
    }



    .large-hero h1 span.hero-title-1,
    .large-hero h1 span.hero-title-2 {
      color: #fff;
      text-shadow: 1px 1px #00000052;
    }

    .large-hero .large-hero-inner,
    .product-hero .product-hero-inner {
      top: 0px;
    }

    @media only screen and (min-width: 991px) {

      .large-hero .second-col {
        top: 40px;
        margin-bottom: 30px;
      }

      .bg-color-light-blue {
        background-color: #f0f2ff;
      }
    }

    @media only screen and (max-width: 991px) {

      .large-hero .second-col,
      .product-hero .second-col {
        top: 100px;
        height: 100%;
      }
    }

    .large-hero.height-750,
    .product-hero.height-750 {
      height: 850px;
      display: flex;
      align-items: center;
    }

    @media only screen and (min-width: 991px) {
      .large-hero.height-750.register-hero {
        height: 1250px;
        display: flex;
        align-items: center;
      }

      .large-hero.height-750.pricing-hero {
        height: 950px;
        display: flex;
        align-items: center;
      }

      .large-hero.height-750.contact-hero {
        height: 950px;
        display: flex;
        align-items: center;
      }
    }

    @media only screen and (max-width: 991px) {

      .large-hero.height-750,
      .product-hero.height-750 {
        height: auto;
      }
    }

    .large-hero.rbt-banner-area.rbt-banner-1 {
      background: none !important;
    }

    @media only screen and (min-width: 768px) and (max-width: 991px) {
      .product-hero {
        padding: 0 60px;
        padding-top: 100px;
        padding-bottom: 100px;
      }
    }

    @media only screen and (min-width: 1200px) {

      .large-hero.rbt-banner-1.variation-2 .content .inner h1.title,
      .large-hero.rbt-banner-large-hero .content .inner h1.title,
      .product-hero .content .inner h1.title,
      .product-hero-inner h1.title {
        line-height: .95;
      }
    }



    #hero-background-wrapper {
      position: absolute;
      top: auto;
      left: calc(var(--largeHeroOffsetX)*-1);
      left: 0;
      width: var(--windowWidth);
      height: var(--largeHeroGHeight);
      transform-origin: var(--largeHeroTransformX) 100%;
      transform: skewY(-12deg);
      overflow: hidden;
    }

    .white-hero-nav .rbt-header .mainmenu-nav .mainmenu>li>a,
    .white-hero-nav .quick-access>li>a {
      color: #fff !important;
      text-shadow: 1px 1px #00000036;
    }

    .white-hero-nav .rbt-header .mainmenu-nav .mainmenu>li>a:hover,
    .white-hero-nav .rbt-header .mainmenu-nav .mainmenu>li>a:focus,
    .white-hero-nav .rbt-header .mainmenu-nav .mainmenu>li>a:active,
    .white-hero-nav .quick-access>li>a:hover {
      color: #fff !important;
      opacity: .6;
    }

    .white-hero-nav .rbt-header .mainmenu-nav .mainmenu>li:hover>a,
    .white-hero-nav .rbt-header .mainmenu-nav .mainmenu>li.active>a {
      color: #fff !important;
      opacity: .6;
    }

    .large-hero .large-hero-inner.inner .sub-description,
    .product-hero .product-hero-inner.inner .sub-description {
      max-width: 80%;
    }

    .large-hero.rbt-banner-1 .content .inner .title,
    .large-hero.rbt-banner-large-hero .content .inner .title,
    .product-hero.rbt-banner-1 .content .inner .title {
      letter-spacing: -0.03em;
      color: #000;
    }

    .large-hero .large-hero-inner.inner .sub-description .hero-quote {
      max-width: 80%;
      color: #5a5a5a !important;
    }

    @media only screen and (min-width: 1200px) {
      .product-hero .about-style-1 .thumbnail-wrapper .thumbnail.image-1 {
        left: 200px;
        top: 0px;
      }

    }

    @media only screen and (max-width: 767px) {

      .large-hero .large-hero-inner.inner .sub-description,
      .product-hero .product-hero-inner.inner .sub-description {
        color: #000;
        max-width: 100%;
        background-color: #ffffffc4;
        padding: 10px;
        border-radius: 5px;
        text-align: center;
      }

      .large-hero .large-hero-inner.inner .sub-description .hero-quote {
        max-width: 100%;
      }

      .rbt-banner-1.variation-2 .content .inner .description {
        font-size: 24px;
      }

      .product-hero .content .inner .description {
        font-size: 24px;
      }

      .product-hero {
        padding: 0 15px;
        padding-top: 90px;
        padding-bottom: 50px;
      }

      .product-hero .image-1 {
        left: 0px;
        top: 20px;
      }
    }

    @media only screen and (max-width: 991px) {

      .large-hero.rbt-banner-1 .content .inner .title,
      .large-hero.rbt-banner-large-hero .content .inner .title {
        font-size: 65px;
        margin-left: -1px;
        line-height: 1;
      }

      .product-hero .content .inner .title {
        font-size: 40px;
      }

      .product-hero-inner h1.title {
        font-size: 40px;
        margin-left: -3px;
      }
    }

    @media only screen and (min-width: 992px) and (max-width: 1199px) {

      .large-hero.rbt-banner-1 .content .inner .title,
      .large-hero.rbt-banner-large-hero .content .inner .title {
        font-size: 90px;
        margin-left: -5px;
      }

      .product-hero .content .inner .title {
        font-size: 50px;
      }

      .product-hero-inner h1.title {
        font-size: 50px;
        margin-left: -3px;
      }
    }

    @media only screen and (min-width: 1200px) {

      .large-hero.rbt-banner-1 .content .inner .title,
      .large-hero.rbt-banner-large-hero .content .inner .title {
        font-size: 130px;
        margin-left: -10px;
      }

      .product-hero .content .inner .title {
        font-size: 60px;
      }

      .product-hero-inner h1.title {
        font-size: 75px;
        margin-left: -5px;
      }
    }

    @media only screen and (max-width: 991px) {
      .hero-small-mb {
        margin-bottom: 100px;
      }
    }

    .small-shadow {
      box-shadow: 0px 1px 4px rgb(215 216 222 / 97%);
    }

    .rbt-card.small-shadow {
      box-shadow: 0px 1px 4px rgb(215 216 222 / 97%);
    }

    .rbt-card.white-bordered {
      border: 3px solid #fff;
      border-radius: 8px;
    }

    .rbt-card.white-bordered-large {
      border: 4px solid #fff;
      border-radius: 10px;
    }

    .card-top-white-bordered {
      border-top: 3px solid #ffffff;
    }

    .card-top-grey-bordered {
      border-top: 3px solid #737373;
    }

    .rbt-card.thin-border {
      border: 2px solid #fff;
    }

    .rbt-card.thinner-border {
      border: 1px solid #fff;
    }

    .advance-pricing .pricing-middle {
      height: 100%;
      background: var(--color-lighter);
      padding: 60px 50px;
      border-radius: 0px;
    }

    .advance-pricing .price-wrapper .price-amount {
      font-size: 60px;
      text-align: center;
      display: block;
      color: var(--color-heading);
      font-weight: 700;
      line-height: 1;
    }

    .advance-pricing .price-wrapper .price-amount sup {
      font-size: 16px;
      top: -34px;
    }

    .advance-pricing .main-title {
      margin-bottom: 10px;
    }

    .rbt-contact-form.contact-form-style-1.semi-trans-hero-bg {
      background: #ffffffe8;
    }

    .rbt-contact-form.contact-form-style-1.semi-trans-hero-outline {
      outline: 10px solid #ffffff21;
    }

    .rbt-round-btn::after {
      background: #f6f6f64f;
    }

    .popup-mobile-menu .inner-wrapper .inner-top .close-button {
      height: 25px;
    }

    .popup-mobile-menu .inner-wrapper .inner-top .logo a img {
      max-height: 20px;
    }

    p {
      color: #425466;
    }

    .page-hero-wrapper {
      position: absolute;
      bottom: 0;
      left: 0;
      top: 0;
      width: 100%;
      height: 450px;
      transform-origin: 0 100%;
      transform: skewY(var(--angleNormal));
      will-change: transform;
      z-index: 0;
    }

    .page-hero-canvas {
      position: relative;
      display: block;
      width: inherit;
      height: 100%;
    }

    .hero-thumbnail .small {
      font-size: .75em;
    }

    .section-separator-wrapper {
      position: absolute;
      bottom: 0;
      left: 0;
      width: 100%;
      transform-origin: 0 100%;
      transform: skewY(var(--angleNormal));
      will-change: transform;
      z-index: 0;
    }

    .section-separator-wrapper.skew-flat {
      transform: skewY(0);
    }

    .section-separator-wrapper.section-separator-250 {
      height: 250px;
    }

    .section-separator-wrapper.section-separator-300 {
      height: 300px;
    }

    .section-separator-wrapper.section-separator-400 {
      height: 400px;
    }

    .section-separator-wrapper.section-separator-500 {
      height: 500px;
    }

    .section-separator-wrapper.section-separator-10 {
      height: 10px;
    }

    .section-separator-canvas {
      position: absolute;
      display: block;
      width: inherit;
      height: 100%;
    }

    .gradient-canvas {
      image-rendering: pixelated;
    }

    @media only screen and (max-width: 787px) {}

    @media only screen and (max-width: 991px) {}


    @media only screen and (min-width: 992px) and (max-width: 1199px) {}

    @media only screen and (min-width: 1200px) {}


    .rbt-btn.btn-secondary:hover {
      background-color: var(--color-secondary);
    }

    .rbt-btn.btn-violet:hover {
      background: var(--color-violet);
    }

    .rbt-card-nav a:hover,
    .rbt-card-nav a:focus,
    .rbt-card-nav a:active {
      text-decoration: none;
      outline: none;
      color: var(--pageThemeLink);
    }

    .text-strong {
      font-weight: 600;
    }

    .rbt-badge-card.large-badge {
      padding: 3px 10px;
      font-size: 14px;
    }

    .v-align-super {
      vertical-align: super;
    }

    div.developer-example-wrap {
      border: 1px solid #ffffff26;
      border-radius: 14px;
    }

    .thumbnail-wrapper .thumbnail.outlined-img img {
      outline: 10px solid #ffffff21;
    }

    .developer-example-wrap pre {
      border-radius: 14px;
    }

    .thumbnail-wrapper .thumbnail img.hero-img {
      border-radius: 6px;
    }

    .thumbnail-wrapper.inner-thumbnail {
      padding: 4px;
      border-radius: 6px;
      overflow: hidden;
    }

    .thumbnail-wrapper.inner-thumbnail .thumbnail {
      border-radius: 6px;
      overflow: hidden;
    }

    @media only screen and (max-width: 991px) {
      .row.extra-padding.extra-padding-y .mt--20 {
        margin-top: 20px;
      }
    }

    @media only screen and (min-width: 992px) {
      .row.extra-padding {
        --bs-gutter-x: 5rem;
      }

      .row.extra-padding.extra-padding-y {
        --bs-gutter-y: 5rem;
      }

      .row.extra-padding.extra-padding-y .mt--20 {
        margin-top: var(--bs-gutter-y) !important;
      }
    }

    span.title-numeral {
      font-size: 30px;
      font-weight: 600;
      color: #ffffff;
      line-height: 1.26;
    }

    div.title-numeral-wrap {
      position: absolute;
      margin-top: 0px;
      margin-left: -55px;
      height: 40px;
      width: 40px;
      border-radius: 50px;
      background: #616161;
      text-align: center;
    }



    div.title-numeral-wrap-v2 span.title-numeral {
      font-size: 25px;
      font-weight: 600;
      color: #ffffff;
      line-height: 1.17;
      color: var(--color-secondary) !important;
    }

    div.title-numeral-wrap-v2 {
      position: absolute;
      margin-top: 4px;
      margin-left: -45px;
      height: 30px;
      width: 30px;
      border-radius: 30px;
      background: #8000806e;
      text-align: center;
      background: var(--secondary-opacity) !important;
    }

    @media (min-width: 992px) {
      div.row.row-extra-padding>[class^="col-"] {
        padding-right: 40px;
      }
    }

    .rbt-card-body.card-body-padded {
      padding: 40px;
    }

    .rbt-card.card-nopadded,
    .rbt-card.card-nopadded .rbt-card-body {
      padding: 0px;
    }

    .rbt-card-col-1 {
      padding: 70px;
      padding-top: 30px;
      padding-bottom: 30px;
      z-index: 1;
    }

    .card-gradient {
      height: 100%;
      opacity: .26;
    }

    .card-gradient-wrap {
      height: 100%;
      /* position: relative; */
    }

    .card-gradient-overlay {
      height: 100%;
      position: relative;
      background: linear-gradient(90deg, rgb(255 255 255) 0%, rgb(255 255 255 / 92%) 56%, rgb(255 255 255 / 20%) 100%);
    }

    .card-gradient-overlay-vertical {
      height: 100%;
      position: relative;
      background: linear-gradient(0deg, rgb(255 255 255) 0%, rgb(255 255 255 / 92%) 56%, rgb(255 255 255 / 20%) 100%);
    }

    .card-gradient-wrap .card-icon {
      position: absolute;
      font-size: 100px;
    }

    .bg-card-color-white-bordered {
      background: var(--color-white);
      background-color: var(--color-white) !important;
      border-radius: 4px;
    }

    .tab-button-style-2 li a.active {
      color: var(--color-violet);
    }

    .tab-button-style-2 li a::after {
      background-color: var(--color-violet);
    }

    ul.tab-button-style-2 li a:hover,
    ul.tab-button-style-2 li a:focus,
    ul.tab-button-style-2 li a:active {
      color: var(--pageThemeLink);
    }

    .advance-tab-button-1 .tab-button-list .tab-button {
      padding: 25px 25px;
    }
  </style>

  <style>
    .lifespan-lg-wrap .advance-tab-button-1 .tab-button-list .tab-button::after {
      border-left: 20px solid var(--color-lighter);
    }

    .lifespan-lg-wrap .advance-tab-button-1 .tab-button-list .tab-button::before {
      background: var(--color-lighter);
      box-shadow: none;
    }

    .does-it-all-tab-content {
      padding: 30px;
      border-radius: 10px;
    }
  </style>

  <style>
    .bg-rose-opacity {
      background: #f6a1e430 !important;
      color: #a90087 !important;
    }

    .color-rose {
      color: #a90087 !important;
    }


    .color-coral-dark {
      color: #f26e42 !important;
    }

    .color-orange {
      color: #ff3901 !important;
    }

    .color-blue {
      color: #005cb7 !important;
    }

    .color-blue-dark {
      color: #004f9e !important;
    }

    .color-info-dark {
      color: #00aacc !important;
    }

    .color-green {
      color: #139135 !important;
    }

    .color-secondary-dark {
      color: #8627ba !important;
    }

    .color-pink-dark {
      color: #e03b71 !important;
    }

    .color-hot-pink {
      color: #ff2171 !important;
    }

    .bg-color-violet-opacity-light {
      background: #80008005 !important;
    }

    .bg-color-hot-pink {
      background-color: #ff2171 !important;
    }

    .color-purple {
      color: #6e00be !important;
    }

    .bg-color-purple {
      background-color: #6e00be !important;
    }

    .bg-color-purple-1 {
      background: #aa7ae90a !important;
    }

    .bg-color-purple-2 {
      background: #aa7ae913 !important;
    }

    .bg-color-purple-3 {
      background: #aa7ae924 !important;
    }

    .bg-color-purple-4 {
      background: #aa7ae930 !important;
    }


    .bg-color-purple-5 {
      background: #b966e7 !important;
    }

    .bg-color-purple-6 {
      background: #ab45e3 !important;
    }

    .bg-color-purple-7 {
      background: #a427e9 !important;
    }

    .bg-color-orange {
      background-color: #ff3802 !important;
    }

    .bg-color-orange-1 {
      background: #ff380208 !important;
    }

    .bg-color-orange-2 {
      background: #ff380213 !important;
    }

    .bg-color-orange-3 {
      background: #ff380220 !important;
    }

    .bg-color-orange-4 {
      background: #ff38022b !important;
    }

    .bg-color-orange-5l {
      background: #ff6c2e !important;
    }

    .bg-color-orange-5 {
      background: #ff5f1c !important;
    }

    .bg-color-orange-6 {
      background: #ff4d01 !important;
    }

    .bg-color-orange-7 {
      background: #ff3901 !important;
    }


    .bg-color-pink {
      background-color: #ff2171 !important;
    }

    .bg-color-pink-1 {
      background: #ff217108 !important;
    }

    .bg-color-pink-2 {
      background: #ff217113 !important;
    }

    .bg-color-pink-3 {
      background: #ff217124 !important;
    }

    .bg-color-pink-4 {
      background: #ff217130 !important;
    }


    .bg-color-pink-5 {
      background: #f93491 !important;
    }

    .bg-color-pink-6 {
      background: #ff278d !important;
    }

    .bg-color-pink-7 {
      background: #ff0f80 !important;
    }

    .bg-color-pink-8 {
      background: #fa0074 !important;
    }

    .bg-color-blue {
      background-color: #1a8bff !important;
    }

    .bg-color-blue-1 {
      background: #1a8bff08 !important;
    }

    .bg-color-blue-2 {
      background: #1a8bff13 !important;
    }

    .bg-color-blue-3 {
      background: #1a8bff24 !important;
    }

    .bg-color-blue-4 {
      background: #1a8bff30 !important;
    }


    .bg-color-blue-5l {
      background: #007eff !important;
    }

    .bg-color-blue-5 {
      background: #0076ee !important;
    }

    .bg-color-blue-6 {
      background: #006bd6 !important;
    }

    .bg-color-blue-7 {
      background: #005cb7 !important;
    }

    .bg-color-woo-purple {
      background: #7f54b2 !important;
    }

    .bg-color-woo-purple-light {
      background: #7f54b21a !important;
    }

    .bg-color-dark-purple-1 {
      background: #980ee4 !important;
    }

    .bg-color-dark-purple-2 {
      background: #8805d0 !important;
    }

    .bg-color-dark-purple-3 {
      background: #6b00a5 !important;
    }

    .bg-color-dark-purple-4 {
      background: #580088 !important;
    }

    .bg-color-pink-1 {
      background: #db709312 !important;
    }

    .bg-color-light-xl {
      background-color: #fafcff !important;
    }


    .bg-color-google-blue {
      background-color: #4285F4 !important;
    }

    .bg-color-google-green {
      background-color: #0F9D58 !important;
    }

    .bg-color-dark-green {
      background-color: #1a9139 !important;
    }

    .bg-color-google-red {
      background-color: #DB4437 !important;
    }

    .bg-color-google-yellow {
      background-color: #F4B400 !important;
    }

    .bg-color-white-light-opacity {
      background-color: #ffffff0d !important;
    }

    .bg-color-white-light-xl-opacity {
      background-color: #ffffff05 !important;
    }

    .bg-color-white-xl-opacity {
      background-color: #ffffff03 !important;
    }

    .bg-color-white-opacity-more {
      background-color: #ffffffe3 !important;
    }

    .bg-color-transparent {
      background-color: transparent !important;
    }

    .rbt-badge-6.bg-color-gray {
      color: #fff !important;
      background-color: #8e979b !important;
    }

    .color-bright-lime {
      color: #b0ff14 !important;
    }

    .color-bright-aqua {
      color: #07ffb9 !important;
    }

    .badge.numbering-badge {
      padding: 0.35em 0.6em;
    }

    @media (min-width:991px) {
      .numbered-badge-wrap .badge.numbering-badge {
        vertical-align: sub;
        margin-left: -12px;
      }
    }

    .numbered-badge-wrap .badge.numbering-badge {
      font-size: .9em !important;
    }

    .h5-badge {
      font-size: .67em;
      vertical-align: text-top;
      margin-right: 5px;
    }

    .card-light-purple-bg {
      box-shadow: none;
      background-color: #80008008;
    }

    .bg-color-light {
      background-color: #f6f9fc !important;
    }

    .bg-color-gray-med {
      background-color: #e6e8f1 !important;
    }

    .bg-color-gray-med-xl {
      background-color: #eef0f8 !important;
    }

    .mw--90 {
      max-width: 90%;
    }

    .mw--80 {
      max-width: 80%;
    }

    .padded-thumbnail {
      padding: 20px;
      background-color: #fff;
      border-radius: 6px;
    }

    .padded-thumbnail img {
      max-height: 500px;
    }

    .popup-mobile-menu .mainmenu li a:hover,
    .popup-mobile-menu .mainmenu li a:focus,
    .popup-mobile-menu .mainmenu li a:active {
      color: #9d2fef;
    }

    .Sect--Dark li.list-item.color-white {
      color: #f0f0f0 !important;
    }

    span.helv-font {
      font-family: "Helvetica Neue", sans-serif;
    }

    /* .hljs.highlight-code.language-plaintext {
      color: #4dd0e1;
    } */

    div.developer-example-wrap {
      border: 1px solid #ffffff26;
      border-radius: 14px;
    }

    #functions-container-wrap .margin-view-overlays,
    #functions-container-wrap .lines-content.monaco-editor-background {
      background-color: #021012 !important;
    }

    #functions-container-wrap .developer-example-wrap,
    .developer-example-wrap pre.highlight-code.language-cpp.hljs,
    #functions-container-wrap .monaco-editor.no-user-select.mac.showUnused.showDeprecated.vs-dark,
    #functions-container-wrap .monaco-editor .overflow-guard {
      border-radius: 14px;
    }


    .hljs {
      background: #021012 !important;
    }

    section.svg-section svg {
      margin-bottom: -1px;
    }

    section.svg-section svg {
      position: relative;
      z-index: 1;
    }

    .no-shadow {
      box-shadow: none !important;
    }

    .rbt-default-tab.tab-dark-bg {}

    .rbt-default-tab.tab-dark-bg .tab-button .tabs__tab .nav-link {
      color: var(--color-white);
      /* background: var(--color-gray); */
    }

    .rbt-default-tab.tab-dark-bg .tab-button .tabs__tab .nav-link.active {
      color: var(--color-heading);
      background: var(--color-lighter);
      border-color: transparent;
    }

    .rbt-default-tab.tab-dark-bg div.tab-content {
      padding: 30px;
      border-bottom-left-radius: .25rem;
      border-bottom-right-radius: .25rem;
    }

    .rbt-badge-super {
      background: var(--color-gray-light);
      padding: 4px 7px;
      font-size: 11px;
      display: inline-block;
      vertical-align: super;
      height: 22px;
      align-items: center;
      border-radius: var(--radius-small);
      justify-content: center;
      width: max-content;
    }

    .rbt-badge-default {
      font-size: 14px;
      line-height: 15px;
      font-weight: 500;
      margin-bottom: 15px;
      display: inline-block;
      padding: 10px 20px;
      border-radius: 100px;
      text-transform: uppercase;
      display: inline-block;
      background: #0c0c0c0a;
      color: var(--color-body);
    }

    .row.hero-btn-row .bg-secondary-opacity {
      color: #8d11d2 !important;
    }

    .row.hero-btn-row a.bg-secondary-opacity:hover,
    .row.hero-btn-row button.bg-secondary-opacity:hover {
      background: #a631e7 !important;
      color: var(--color-white) !important;
    }

    .row.hero-btn-row .bg-pink-opacity {
      background: #d733aa21 !important;
      color: #e3259f !important;
    }

    .row.hero-btn-row a.bg-pink-opacity:hover,
    .row.hero-btn-row button.bg-pink-opacity:hover {
      background: #d52186 !important;
      color: var(--color-white) !important;
    }

    .rbt-card.bg-color-text-white h4,
    .rbt-card.bg-color-text-white h5,
    .rbt-card.bg-color-text-white h6,
    .rbt-card.bg-color-text-white p,
    .rbt-card.bg-color-text-white ul li.list-item,
    .rbt-card.bg-color-text-white ol li.list-item {
      color: white !important;
    }

    .tab-content.bg-color-text-white h4,
    .tab-content.bg-color-text-white h5,
    .tab-content.bg-color-text-white h6,
    .tab-content.bg-color-text-white p,
    .tab-content.bg-color-text-white ul li.list-item,
    .tab-content.bg-color-text-white ol li.list-item {
      color: white !important;
    }

    .rbt-card.shadow-blue,
    .thumbnail.shadow-blue {
      box-shadow: var(--shadow-blue);
    }

    .rbt-card.shadow-12,
    .thumbnail.shadow-12 {
      box-shadow: var(--shadow-12);
    }

    .shadow-13 {
      box-shadow: 0 50px 100px -20px rgba(50, 50, 93, 0.25), 0 30px 60px -30px rgba(0, 0, 0, 0.3) !important;
    }

    .shadow-14 {
      box-shadow: 0 50px 100px -20px rgba(50, 50, 93, 0.25), 0 30px 60px -30px rgba(50, 50, 93, 0.25) !important;
    }

    .rbt-default-tab .rainbow-tab-content {
      background: var(--color-light);
      padding: 40px;
    }

    .rbt-default-tab .tab-button .tabs__tab .nav-link.active {
      background: var(--color-light);
      border-color: transparent;
    }

    .border-radius--30 {
      border-radius: 30px !important;
    }

    .border-radius--20 {
      border-radius: 20px !important;
    }

    .border-radius--15 {
      border-radius: 15px !important;
    }

    .border-radius--10 {
      border-radius: 10px !important;
    }

    .hero-terminal-simulator {
      opacity: .9
    }

    .terminal-font {
      font-family: "Courier 10 Pitch", Courier, monospace;
    }

    .terminal-font i {
      color: #7a7a7a !important;
      font-size: .775em;
    }

    .terminal-console-green,
    .terminal-font .terminal-console-green i {
      color: #3EB75E !important
    }

    .terminal-console-blue,
    .terminal-font .terminal-console-blue i {
      color: #579bec !important;
    }

    span.terminal-console-pink {
      color: #ff2171;
    }

    .hero-box-shadow {
      box-shadow: 0 50px 100px -20px rgba(50, 50, 93, 0.25), 0 30px 60px -30px rgba(50, 50, 93, 0.25);
    }

    #hero-ui-display {
      cursor: default !important;
      -webkit-touch-callout: none;
      -webkit-user-select: none;
      -khtml-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }

    p.italic,
    span.italic {
      font-style: italic;
    }

    .rbt-default-tab .tab-button.white-nav .tabs__tab .nav-link.active {
      background: #fff;
      color: var(--color-heading);
      border-color: transparent;
    }

    .rbt-default-tab .tab-button.blue-trans-nav .tabs__tab .nav-link.active {
      background: #1a8bff13;
      border-color: transparent;
    }
  </style>

  <style>
    .Typewriter__cursor {
      display: none;
    }

    .hero-terminal-simulator {
      --terminalHeroBorderRadius: 10px;
      --terminalHeaderBorderRadius: 10px;
      --terminalHeroBgColor: #e8e8e8;
      border-radius: var(--terminalHeroBorderRadius);
      overflow: hidden;
      box-shadow: 0 20px 80px -20px rgba(50, 50, 93, 0.85), 0 10px 30px -20px rgba(50, 50, 93, 0.45);
    }

    .hero-terminal-simulator {
      opacity: 1;
    }

    .terminal-hero-card {
      border-top-left-radius: 0px;
      border-top-right-radius: 0px;
      /* opacity: .95; */
      padding: 20px;
    }

    .terminal-hero-header {
      height: 40px;
      background: var(--terminalHeroBgColor);
    }

    .terminal-mac-buttons {
      position: relative;
      top: -3px;
      left: 15px;
    }

    .mac-button {
      font-size: 13px;
    }

    .mac-button-close {
      color: #FF5D5A
    }

    .mac-button-minimize {
      color: #f5c350
    }

    .mac-button-maximize {
      color: #65cd57
    }
  </style>

  <style>
    .sect-thumbnail-main {
      position: relative;
      --sectImgScale: scale(1.7);
    }

    .sect-thumbnail-main.scale-less {
      --sectImgScale: scale(1.503);
    }

    .sect-thumbnail-main.scale-none {
      --sectImgScale: scale(1);
    }

    .sect-thumbnail-main.fade-white {
      --mgmtFadeBgColor: #ffffff;
    }

    .sect-thumbnail-main.fade-light {
      --mgmtFadeBgColor: #f6f9fc;
    }

    .sect-thumbnail-main.fade-light-xl {
      --mgmtFadeBgColor: #fafcff;
    }

    .sect-thumbnail-main.fade-gray {
      --mgmtFadeBgColor: #a0a9ac;
    }

    .sect-thumbnail-main.fade-gray-lighter {
      --mgmtFadeBgColor: #ebebeb;
    }

    .sect-thumbnail-main.fade-darker {
      --mgmtFadeBgColor: #192335;
    }

    .sect-thumbnail-main.fade-blue-1 {
      --mgmtFadeBgColor: #ecf2fa;
    }

    .sect-thumbnail-main.fade-lighter {
      --mgmtFadeBgColor: var(--color-lighter)
    }

    .sect-thumbnail-main.fade-page-theme {
      --mgmtFadeBgColor: var(--pageThemeBg)
    }

    .sect-thumbnail-wrapper {
      height: 350px;
      overflow: hidden;
      padding: 30px 30px 0px 30px;
      margin-top: -100px;
    }


    .sect-img {
      /* border-radius: 10px; */
    }

    .sect-img:not(.no-transform) {
      -moz-transform: var(--sectImgScale);
      -webkit-transform: var(--sectImgScale);
      transform: var(--sectImgScale);
      transform-origin: top left;
    }

    .sect-thumbnail {
      box-shadow: 0px 10px 30px -10px #47479b38, 0 10px 30px -10px #3f3f7338;
      border-radius: 10px;
      background: #fff;
      overflow: hidden;
      border: 0;
      height: 100%;
    }

    .sect-thumbnail:not(.no-border) {
      border: 15px solid #fff;
    }

    .sect-thumbnail.no-background {
      background: none;
    }

    .sect-thumbnail-fade {
      height: 70px;
      width: 100%;
      bottom: 0px;
      position: absolute;
      background: linear-gradient(to bottom, transparent, var(--mgmtFadeBgColor));
    }



    .sect-thumbnail-main.sect-thumbnail-cornered {
      position: absolute;
      bottom: -10px;
    }

    .sect-thumbnail-cornered .sect-thumbnail-wrapper {
      overflow: hidden;
      padding: 0;
      margin-top: 0px;
    }




    .manage-cards-row .sect-thumbnail-wrapper {
      height: 220px;
    }

    .sect-thumbnail-cornered .sect-img {
      border-radius: 0px;
      opacity: 1;
    }

    .sect-thumbnail-cornered .sect-img:not(.no-transform) {
      -moz-transform: var(--sectImgScale);
      -webkit-transform: var(--sectImgScale);
      transform: var(--sectImgScale);
      transform-origin: top left;
    }

    .sect-thumbnail-cornered .sect-thumbnail:not(.no-mask) {
      box-shadow: none;
      border-radius: 0px;
      border-top-left-radius: 10px;
      mask-image: linear-gradient(to left, transparent, var(--mgmtFadeBgColor) 30%);
      -webkit-mask-image: linear-gradient(to left, transparent, var(--mgmtFadeBgColor) 30%);
    }

    .sect-thumbnail-cornered .sect-thumbnail {
      border-top-right-radius: 0;
    }




    .tabs-bordered {
      --tabsBorderColor: #000;
      --tabsBorderRadius: 6px;
    }

    .tabs-bordered.rbt-default-tab .tab-button.white-nav .tabs__tab .nav-link.active {
      border-left: 1px solid var(--tabsBorderColor);
      border-right: 1px solid var(--tabsBorderColor);
      border-top: 1px solid var(--tabsBorderColor);
    }

    .tabs-bordered.rbt-default-tab .tab-button.white-nav .tabs__tab .nav-link:not(.active) {
      border-bottom: 1px solid var(--tabsBorderColor);
    }

    .tabs-bordered.rbt-default-tab .rainbow-tab-content {
      border-left: 1px solid var(--tabsBorderColor);
      border-right: 1px solid var(--tabsBorderColor);
      border-bottom: 1px solid var(--tabsBorderColor);
      border-bottom-left-radius: var(--tabsBorderRadius);
      border-bottom-right-radius: var(--tabsBorderRadius);
    }


    @media only screen and (min-width: 992px) {
      .card-left-content-col {
        border-left: 3px solid #fff;
      }

      .rbt-card.card-left-img .card-left-img-col .sect-thumbnail,
      .rbt-card.card-left-img .card-left-img-col .sect-img {
        border-radius: 0px;
      }
    }


    @media only screen and (min-width: 992px) {
      .sd--60 {
        bottom: -60px;
      }

      .sd--80 {
        bottom: -80px;
      }

      .sd--100 {
        bottom: -100px;
      }
    }

    .rbt-card.card-top-img,
    .rbt-card.card-top-img .card-body,
    .rbt-card.card-left-img,
    .rbt-card.card-left-img .card-body {
      padding: 0;
    }

    .rbt-card.card-top-img .card-top-img-col,
    .rbt-card.card-left-img .card-left-img-col {
      padding-left: 0;
      padding-right: 0;
    }


    .rbt-card.card-top-img .card-top-img-col .sect-thumbnail-wrapper,
    .rbt-card.card-left-img .card-left-img-col .sect-thumbnail-wrapper {
      padding: 0px;
      margin-top: 0px;
      height: 250px;
      overflow: hidden;
    }

    .rbt-card.card-top-img .card-top-img-col .sect-thumbnail-wrapper.short {
      height: 210px;
    }

    .rbt-card.card-top-img .card-top-img-col .sect-thumbnail-wrapper.tall {
      height: auto;
      max-height: 330px;
      min-height: 250px;
    }

    .rbt-card.card-top-img .card-top-img-col .sect-thumbnail {
      margin-left: 10%;
      margin-top: 10%
    }

    .rbt-card.card-top-img .card-top-img-col .sect-img {
      padding: 20px;
    }

    .card-top-content-wrap,
    .card-left-content-wrap {
      padding: 30px;
    }

    .card-top-text-wrap {
      padding: 40px;
    }

    .rbt-card.card-top-img .card-top-img-col .sect-thumbnail-fade,
    .rbt-card.card-left-img .card-left-img-col .sect-thumbnail-fade {
      opacity: .5;
    }


    .ml--10p {
      margin-left: 10%;
    }

    .mr--10p {
      margin-right: 10%;
    }

    .mlt--0 {
      margin-left: 0% !important;
      margin-top: 0% !important;
    }

    .op--9 {
      opacity: .9 !important;
    }

    .op--8 {
      opacity: .8 !important;
    }

    .op--7 {
      opacity: .7 !important;
    }

    .op--6 {
      opacity: .6 !important;
    }

    .op--5 {
      opacity: .5 !important;
    }

    .op--4 {
      opacity: .4 !important;
    }

    .op--3 {
      opacity: .3 !important;
    }

    .op--2 {
      opacity: .2 !important;
    }

    .op--1 {
      opacity: .1 !important;
    }

    .bg-color-lighter-d {
      background-color: #e1e4e8 !important;
    }

    .sect-thumbnail-wrapper.inner-box-shadow {
      box-shadow: var(--shadow-1);
    }

    .bg-gradient-white-blue {
      background: linear-gradient(rgb(255, 255, 255) 0%, rgb(250 252 255) 100%) !important;
    }

    .bg-gradient-white-purple {
      background: linear-gradient(rgb(255, 255, 255) 0%, rgb(247 239 255) 100%) !important;
    }

    .no-bottom-radius {
      border-bottom-left-radius: 0;
      border-bottom-right-radius: 0;
    }

    .btn-lg.btn-outline-secondary:focus {
      color: #fff;
    }
  </style>
  <style>
    .duo-image-wrap {
      position: relative;
    }

    .duo-image-wrap .thumbnail-wrapper {
      position: relative;
      display: flex;
      flex-wrap: wrap;
    }

    .duo-image-wrap .thumbnail-wrapper .thumbnail img {
      max-height: 450px;
      background-color: #fff;
      padding: 0px;
    }


    .duo-image-wrap img {
      object-fit: cover;
    }

    .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
      position: relative;
    }

    .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
      position: absolute;
      top: 0;
    }


    @media only screen and (min-width: 992px) {

      .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        left: 0;
      }

      .row.duo-image-dormant-customer {
        margin-bottom: 250px;
      }

      .row.duo-image-soft-decline {
        margin-bottom: 300px;
      }

      .row.duo-image-ai-assistant {
        margin-bottom: 300px;
      }

      .row.duo-image-renewal-sms {
        margin-bottom: 80px;
      }

      .duo-image-dormant-customer .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 200px;
        top: -50px;
      }

      .duo-image-dormant-customer .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 img {
        max-height: 550px;
      }


      .duo-image-dormant-customer .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        top: 10px;
      }

      .duo-image-dormant-customer .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 img {
        max-height: 475px;
      }

      .duo-image-soft-decline .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 50px;
        top: -70px;
      }

      .duo-image-ai-assistant .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 70px;
        top: -70px;
      }

      .duo-image-soft-decline .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 img {}

      .duo-image-soft-decline .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2,
      .duo-image-ai-assistant .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        top: 130px;
      }

      .duo-image-soft-decline .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 img,
      .duo-image-ai-assistant .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 img {
        max-height: 300px;
      }

      .duo-image-renewal-sms .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 320px;
        top: -20px;
      }

      .duo-image-renewal-sms .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {}

      .duo-image-ai-assistant .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        transform: scale(.75);
        left: -30px;
        top: 100px;
      }

      .duo-image-ai-playground .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 150px;
        top: -50px;
        transform: scale(.85);
      }

      .duo-image-ai-playground .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        transform: scale(.85);
      }
    }

    @media only screen and (max-width: 991px) {

      .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        right: 0;
      }

      .duo-image-wrap .thumbnail-wrapper .thumbnail img {
        background-color: #fff;
        padding: 0px;
      }

      .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 img {
        max-height: 350px;
      }

      .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 img {
        max-height: 300px;
        max-width: 60vw;
      }

      .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        top: 100px;
      }


      .row.duo-image-dormant-customer {
        margin-bottom: 150px;
      }

      .row.duo-image-soft-decline,
      .row.duo-image-ai-assistant {
        margin-bottom: 150px;
      }

      .row.duo-image-soft-decline,
      .row.duo-image-ai-assistant {
        margin-bottom: 150px;
      }

      .row.duo-image-renewal-sms {
        margin-bottom: 100px;
      }

      .row.duo-image-ai-playground {
        margin-bottom: 150px;
      }

      .duo-image-ai-assistant .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 0px;

      }

      .duo-image-ai-assistant .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        left: -30px;
        top: 90px;
        transform: scale(.95);
      }

      .duo-image-ai-playground .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 {
        left: 30px;

      }

      .duo-image-ai-playground .duo-image-wrap .thumbnail-wrapper .thumbnail.image-2 {
        left: -60px;
        top: 20px;
        transform: scale(.8);
      }
    }



    .gradient-canvas-overlay-wrap {
      height: 100%;
      width: 100%;
      position: absolute;
      right: 0;
      top: 0;
      --overlayPercent: 50%;
    }

    .gradient-canvas-overlay {
      height: 100%;
    }

    .overlay--50 {
      --overlayPercent: 50%;
    }

    .overlay--40 {
      --overlayPercent: 40%;
    }

    .overlay--30 {
      --overlayPercent: 30%;
    }

    .overlay--20 {
      --overlayPercent: 20%;
    }

    .overlay--10 {
      --overlayPercent: 10%;
    }

    .overlay-white {
      background: linear-gradient(#fff var(--overlayPercent), transparent);
    }

    .overlay-light {
      background: linear-gradient(#f6f9fc 30%, transparent);
    }

    .overlay-light-xl {
      background: linear-gradient(#fafcff 30%, transparent);
    }

    .overlay-lighter {
      background: linear-gradient(#F2F5F9 30%, transparent);
    }

    .overlay-purple {
      background: linear-gradient(#fbf9ff 40%, transparent);
    }
  </style><link rel="stylesheet" href="https://cdn.revcent.com/css/plugins/highlightjs/vs2015.css" type="text/css" />

<style>
    .response-col-pre .hljs-attr,
    .response-col-pre .hljs-attribute {
        color: #414141;
    }

    .response-col-pre .hljs-number,
    .response-col-pre .hljs-class {
        color: #9900ca;
    }

    .response-col-pre .hljs-string,
    .response-col-pre .hljs-meta .hljs-string {
        color: #0877af;
    }

    .response-col-pre .hljs-punctuation {
        color: #2f2f2f;
    }

    .response-col-pre .hljs-keyword,
    .response-col-pre .hljs-literal,
    .response-col-pre .hljs-symbol,
    .response-col-pre .hljs-name {
        color: #1878c7;
    }
</style>


<style>
    .MainBody {
        --docsBorderHrColor: #d8e2ea;
    }

    @media only screen and (min-width: 768px) {
        h4 {
            font-size: 24px;
        }
    }

    .rbt-main-wrapper {
        overflow-x: hidden;
    }

    #main-left-col {
        /* padding-right: 0; */
        border-right: 1px solid var(--docsBorderHrColor);
    }

    /* #main-right-col {
        padding-left: 0;
    } */

    #main-right-nav-small {
        border-bottom: 1px solid var(--docsBorderHrColor);
    }

    #main-right-nav-large {
        border-bottom: 1px solid var(--docsBorderHrColor);
        padding: 0;
        min-height: 60px;
    }

    #main-right-nav-large .nav-link {
        font-size: 15px;
    }

    #sidebar-nav-container {
        height: 100vh;
        height: calc(100vh - 60px) !important;
        overflow-y: scroll;
    }

    #main-content-container {
        height: 100vh;
        height: calc(100vh - 60px) !important;
        overflow-y: scroll;
        overflow-x: hidden;
    }

    #main-docs-row {
        height: calc(100vh - 60px) !important;
    }

    #main-nav-row {
        height: 60px !important;
    }

    #navbar-left-main .nav-link {
        color: #424242 !important;
        font-size: 15px;
    }

    #navbar-left-main .nav-pills.tag-nav {
        margin-bottom: 10px;
    }

    #navbar-left-main .nav-pills .nav-link.active,
    #navbar-left-main .nav-pills .show>.nav-link {
        color: var(--color-violet) !important;
        background: var(--primary-opacity) !important;
    }

    #sidebar-nav-brand-wrap {
        padding: 15px;
        border-bottom: 1px solid var(--docsBorderHrColor);
        min-height: 60px;
    }

    .left-col-upper,
    .left-col-lower {
        border-right: 1px solid var(--docsBorderHrColor);
    }

    .pre-header {
        padding-left: 15px;
        padding-top: 7px;
        padding-bottom: 7px;
    }

    .request-col-pre {
        background-color: #3e444f !important;
    }

    .response-col-pre {
        background-color: #f3f5f9 !important;
    }

    .request-pre-container {
        border: 1px solid #5e636d;
        border-radius: 4px;
        overflow: hidden;
    }

    .response-pre-container {
        border: 1px solid #d4d9e3;
        border-radius: 4px;
        overflow: hidden;
    }

    .pre-container pre {
        margin-bottom: 0;
    }


    .request-pre-container .pre-header {
        background-color: #686e7b;
        font-size: 15px;
    }

    .response-pre-container .pre-header {
        color: #273041;
        background-color: #e4e9f7;
        border-bottom: 1px solid #d4d9e3;
        text-transform: uppercase;
        font-weight: 600;
        font-size: 14px;
    }

    .request-pre-container .pre-header .pre-header-operation {
        text-transform: uppercase;
    }

    .pre-header span.pre-header-operation {
        font-weight: 600;
    }

    .pre-header span.pre-header-operation.operation-get {
        color: #c2ffb4;
    }

    .pre-header span.pre-header-operation.operation-post {
        color: #91d9ff;
    }

    .pre-header span.pre-header-path {
        color: #fff;
        margin-left: 10px;
    }


    .request-col-pre,
    .response-col-pre {
        max-height: 420px;
        overflow: hidden scroll;
    }

    .content-section {
        /* padding-top: 20px;
        padding-bottom: 20px; */
    }

    .content-header-wrap,
    .content-text-wrap {
        padding: 30px;
    }

    .operation-wrap {
        padding: 30px;
    }

    @media only screen and (min-width: 768px) {

        .content-header-wrap,
        .content-text-wrap {
            padding: 80px 60px;
        }

        .operation-wrap {
            padding: 80px 60px;
        }
    }

    .separator-hr {
        margin-bottom: 0;
        background-color: var(--docsBorderHrColor);
    }

    .request-col-pre.hljs {
        color: #fff;
    }

    .request-col-pre.hljs .hljs-string,
    .request-col-pre.hljs .hljs-meta .hljs-string {
        color: #f7ceff;
    }

    .request-col-pre.hljs .hljs-keyword,
    .request-col-pre.hljs .hljs-literal,
    .request-col-pre.hljs .hljs-symbol,
    .request-col-pre.hljs .hljs-name {
        color: #abfaff;
    }

    .request-col-pre.hljs .hljs-number,
    .request-col-pre.hljs .hljs-class {
        color: #07e3e7;
    }

    .operation-parameter:not(.rbt-card) {
        padding: 15px 0px;
    }


    .rbt-card .operation-parameter:first-child {
        padding: 0px 0px 15px 0px;
    }

    .rbt-card .operation-parameter:last-child {
        padding: 15px 0px 0px 0px;
    }

    .rbt-card .operation-parameter:only-child {
        padding: 0px;
    }

    .operation-parameter-example-wrap {
        padding-left: 10px;
        margin-top: 5px;
    }

    .operation-parameter-title {
        margin-bottom: 5px;
    }

    .operation-parameter-type {
        margin-left: 7px;
        font-size: 14px;
    }

    .operation-parameter-extra-info-card {
        padding: 30px;
        margin-top: 10px;
    }

    .operation-parameter-extra-info-card p {
        margin-bottom: 10px;
    }

    .operation-parameter-extra-info-card dt {
        font-size: .9em;
    }

    .operation-url-parameter-wrap,
    .operation-path-parameter-wrap,
    .operation-request-body-wrap {
        margin-top: 35px;
    }

    span.operation-parameter-required.badge {
        font-size: 10px;
        margin-left: 10px;
        background-color: #ff2171 !important;
    }

    .operation-parameter-enum-wrap {
        margin-left: 10px;
        margin-top: 5px;
    }

    hr.nav-hr {
        margin-bottom: 10px;
        margin-top: 15px;
    }

    .operation-parameter-sub-props:not(.rbt-card) {
        margin-left: 20px;
    }

    .operation-request-body-properties-wrap {
        margin-top: 20px;
    }

    .operation-request-body-properties-card {
        max-height: 350px;
        overflow: hidden scroll;
    }

    @media only screen and (min-width: 768px) {
        .operation-request-body-properties-card {
            max-height: 650px;
        }
    }

    .row.example-row {
        margin-top: 35px;
    }

    #dropdown-nav-ul {
        max-height: 40vh;
        overflow: hidden scroll;
    }

    .bg-color-body-card {
        background: #aa7ae90a !important;
        border: 1px solid #fadeff;
    }

    .logo-black-img-wide {
        max-height: 21px;
        vertical-align: text-bottom;
    }

    .logo-black-img-mobile {
        max-height: 16px;
        margin-left: 20px;
    }

    .enum-color {}

    .table-borderless td,
    .table-borderless th {
        border: 0;
    }

    .operation-parameter-details .table.table-bordered thead {
        background-color: var(--color-body) !important;
        color: var(--color-white) !important;
    }

    .operation-parameter-details .table.table-bordered tbody td {
        font-size: .875em;
    }

    .text-italic {
        font-style: italic;
    }
</style>

</head>

<body class="MainBody Page-Theme-5" data-pagetheme="5">

    <div class="row g-0 sticky-topx" id="main-nav-row">
        <div class="col-xl-2 col-lg-3 d-lg-block d-none bg-color-light-xl left-col-upper">
            <div class="bg-color-light-xl" id="sidebar-nav-brand-wrap">
                <a class="" href="/"><img src="https://cdn.revcent.com/img/revcent-logo-black.png" class="logo-black-img-wide" alt="RevCent Logo" style=""></a>
                <span class="text-muted small ml--10" style="vertical-align:middle">API V2</span>
            </div>
        </div>
        <div class="col-xl-10 col-lg-9 col-12 right-col-upper">
            <nav class="navbar navbar-expand-lg navbar-light bg-color-light-xl justify-content-end d-lg-flex d-none" id="main-right-nav-large">
                <ul class="nav mr--40">
                    <li class="nav-item">
                        <a class="nav-link color-body" href="https://kb.revcent.com/" target="_blank">Knowledge Base</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link color-body" href="/contact" target="_blank">Contact</a>
                    </li>
                </ul>
            </nav>
            <nav class="navbar sticky-top navbar-light bg-color-light-xl d-lg-none d-block" id="main-right-nav-small">
                <div class="container-fluid">
                    <a class="navbar-brand" href="/"><img src="https://cdn.revcent.com/img/revcent-logo-black.png" class="logo-black-img-mobile" alt="RevCent Logo" style=""> <span class="text-muted ml--10" style="vertical-align:middle">API V2</span></a>
                    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#dropdown-nav" aria-controls="dropdown-nav" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button>
                    <div class="collapse navbar-collapse" id="dropdown-nav">
                        <ul class="navbar-nav flex-column" id="dropdown-nav-ul">
                            <li class="nav-item">
                                <a class="nav-link" href="#section-introduction">Introduction</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#section-authentication">Authentication</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#section-errors">Errors</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#section-idempotency">Idempotent Requests</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#section-filtering">Filtering</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" href="#section-pagination">Pagination</a>
                            </li>
                        </ul>
                    </div>
                </div>
            </nav>
        </div>

    </div>

    <div class="row g-0" id="main-docs-row">
        <div class="col-xl-2 col-lg-3 bg-color-light-xl left-col-lower d-lg-block d-none">
            <div class="pl--15 pt--5 pr--15" id="sidebar-nav-container">
                <div id="sidebar-nav-wrap" class="pt--10">
                    <nav id="navbar-left-main" class="navbar navbar-light bg-color-none flex-column align-items-stretch">
                        <nav class="nav nav-pills flex-column" id="navbar-left-nav">
                            <a class="nav-link" href="#section-introduction" data-tagid="introduction">Introduction</a>
                            <a class="nav-link" href="#section-authentication" data-tagid="authentication">Authentication</a>
                            <nav class="nav nav-pills flex-column tag-nav d-none" data-tagid="authentication">
                                <a class="nav-link ms-3 my-1" href="#section-authentication-x-api-key-header" data-tagid="authentication">Header</a>
                                <a class="nav-link ms-3 my-1" href="#section-authentication-permissions" data-tagid="authentication">Permissions</a>
                                <a class="nav-link ms-3 my-1" href="#section-authentication-live-test-keys" data-tagid="authentication">Live/Test Keys</a>
                            </nav>
                            <a class="nav-link" href="#section-errors" data-tagid="errors">Errors</a>
                            <nav class="nav nav-pills flex-column tag-nav d-none" data-tagid="errors">
                                <a class="nav-link ms-3 my-1" href="#section-errors-http-codes" data-tagid="errors">HTTP Status Codes</a>
                                <a class="nav-link ms-3 my-1" href="#section-errors-non-payment" data-tagid="errors">Non-Payment Error</a>
                                <a class="nav-link ms-3 my-1" href="#section-errors-payment" data-tagid="errors">Payment Error</a>
                                <a class="nav-link ms-3 my-1" href="#section-errors-fraud" data-tagid="errors">Fraud Error</a>
                                <a class="nav-link ms-3 my-1" href="#section-errors-not-found" data-tagid="errors">Not Found Error</a>
                            </nav>
                            <a class="nav-link" href="#section-idempotency" data-tagid="idempotency">Idempotent Requests</a>
                            <nav class="nav nav-pills flex-column tag-nav d-none" data-tagid="idempotency">
                                <a class="nav-link ms-3 my-1" href="#section-idempotency-key" data-tagid="idempotency">Idempotency Key</a>
                            </nav>
                            <a class="nav-link" href="#section-filtering" data-tagid="filtering">Filtering</a>
                            <nav class="nav nav-pills flex-column tag-nav d-none" data-tagid="filtering">
                                <a class="nav-link ms-3 my-1" href="#section-filtering-required-params" data-tagid="filtering">Required Params</a>
                                <a class="nav-link ms-3 my-1" href="#section-filtering-multi-value" data-tagid="filtering">Multi-Value</a>
                                <a class="nav-link ms-3 my-1" href="#section-filtering-metadata" data-tagid="filtering">Metadata</a>
                                <a class="nav-link ms-3 my-1" href="#section-filtering-customer-id" data-tagid="filtering">Customer ID</a>
                            </nav>
                            <a class="nav-link" href="#section-pagination" data-tagid="pagination">Pagination</a>
                            <nav class="nav nav-pills flex-column tag-nav d-none" data-tagid="pagination">
                                <a class="nav-link ms-3 my-1" href="#section-pagination-url-params" data-tagid="pagination">URL Params</a>
                                <a class="nav-link ms-3 my-1" href="#section-pagination-page-info" data-tagid="pagination">Page Info</a>
                            </nav>
                            <hr class="nav-hr">
                        </nav>
                    </nav>
                </div>
            </div>
        </div>
        <div class="col-xl-10 col-lg-9 col-12 right-col-lower">
            <div class="" id="main-content-container" tabindex="0">
                <div class="content-section" id="section-introduction">
                    <div class="row">
                        <div class="col-sm-8">
                            <div class="content-header-wrap">
                                <h3>RevCent API V2</h3>
                                <p>You are viewing the Version 2 API Docs. If you are looking for the Version 1 API Docs, please <a href="/docs/api">click here</a>.</p>

                                <h5 class="mb--5">OpenAPI 3.1</h5>
                                <p>The V2 API is a HTTP REST API, allowing only GET and POST requests. It conforms to the <a href="https://spec.openapis.org/oas/latest.html" target="_blank" rel="nofollow">OpenAPI 3.1 standard</a>. Download or import our OpenAPI 3.1 API specification: <a class="color-purple" href="https://api.revcent.com/v2/openapi.json" rel="nofollow" target="_blank" title="OpenAPI 3.1 Specification File" download>https://api.revcent.com/v2/openapi.json</a></p>

                                <h5 class="mb--5">V1 vs V2</h5>
                                <p>The difference between the V1 API and V2 API is purely based on the need for an open standard interface. The V1 API does not follow an open standard. The V2 API follows the OpenAPI 3.1 standard, allowing developers and third parties to programmatically integrate using the specification file.</p>

                                <h5 class="mb--5">Which Should I Use?</h5>
                                <p>If you are integrating with RevCent for the first time, we recommend using the V2 API and its specification. If you are currently using V1 API please continue to use it, as the V1 API will never be deprecated.</p>

                                <h5 class="mb--5">Whitelist RevCent</h5>
                                <p>All requests from RevCent will use the following IP addresses:
                                    <br><strong>34.224.171.255</strong>
                                    <br><strong>52.3.146.218</strong>
                                    <br><strong>54.174.155.188</strong>
                                </p>
                            </div>
                        </div>
                    </div>
                </div>
                <hr class="separator-hr">
                <div class="content-section" id="section-authentication">
                    <div class="row">
                        <div class="col-sm-8">
                            <div class="content-header-wrap">
                                <h3>Authentication</h3>
                                <p>Use your RevCent API Key to make authenticated requests to the V2 API. The API Key is sent within the header of an API request. Read more about creating an API Key at our <a href="https://kb.revcent.com/integrations/revcent-api/api-account" target="_blank">Knowledge Base</a></p>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-authentication-x-api-key-header">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>x-api-key Header</h4>
                                            <p>The x-api-key header should be present in every API request. Create an API account and retrieve the key in the web UI. We do not recommend using the root API keys which were created by RevCent when you signed up. Instead, create new keys for specific implementations.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2 \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-authentication-permissions">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Permissions</h4>
                                            <p>When creating an API key you can limit the key to perform only specific actions. We recommend you use the principle of least privilege, where you only enable specific API methods based on the use case per key.</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-authentication-live-test-keys">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Live/Test Keys</h4>
                                            <p>An API key can be set to Test mode or Live mode. This allows you to test the API and view results using the test/live mode toggle in the web app. Read more about Live vs Test mode at our <a href="https://kb.revcent.com/en/revcent-account/live-test-mode" target="_blank">Knowledge Base</a></p>
                                            <p>Depending on the key used, RevCent will retrieve live or test items, as well as use the appropriate merchant gateway endpoint when processing payments. For example, if you use a test key for a payment request, RevCent will use the test endpoint for the merchant gateway and a live key will use the live merchant gateway endpoint.</p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <hr class="separator-hr">
                <div class="content-section" id="section-errors">
                    <div class="row">
                        <div class="col-12">
                            <div class="content-header-wrap">
                                <div class="row">
                                    <div class="col-sm-8">
                                        <h3>Errors</h3>
                                        <p>The V2 API uses conventional HTTP status codes to indicate the success or failure of an API request. Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error such a missing required parameter, a payment failure, etc. Codes in the 5xx range indicate an error with RevCent.</p>
                                        <p>When a 4XX response is returned, the code property in the response body will indicate the type of error. All 4xx errors also include a message property that briefly explains the reason for failure, allowing for possible remedy and re-attempt.</p>
                                        <p>It is recommended that you do not display raw API responses directly to visitors on checkout. Instead, use the HTTP status code and the response body code property to create a custom message to display to the visitor.</p>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-errors-http-codes">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>HTTP Status Codes</h4>
                                            <p>There are seven potential HTTP status codes which can be returned by the RevCent V2 API. Use status codes as the starting point to determine the outcome of a request, then use the body of the response.</p>
                                            <p>Do not confuse a HTTP status code with the code property contained within the response body. A HTTP status code is a standard for HTTP requests. The code property contained within an API call response body is specific to RevCent.</p>
                                        </div>
                                        <div class="col-sm-6 mt--30">
                                            <table class="response-code-table table table-bordered">
                                                <thead class="" style="background-color:#e4e9f7">
                                                    <tr class="small">
                                                        <th>HTTP Code</th>
                                                        <th>Type</th>
                                                        <th>Description</th>
                                                    </tr>
                                                </thead>
                                                <tbody>
                                                    <tr>
                                                        <td class="text-center text-strong text-success vert-mid">200</td>
                                                        <td>Success</td>
                                                        <td>The request was successful, either for non-payment or payment requests.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong text-danger vert-mid">400</td>
                                                        <td>Non-Payment Error</td>
                                                        <td>The API request contains an error and should be handled internally by the user.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong text-danger vert-mid">401</td>
                                                        <td>Unauthorized</td>
                                                        <td>The API key is either missing, invalid or disabled.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong text-danger vert-mid">402</td>
                                                        <td>Payment Error</td>
                                                        <td>A payment attempt failed, either due to decline, merchant error or fraud.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong text-danger vert-mid">404</td>
                                                        <td>Not Found</td>
                                                        <td>A requested entity was not found.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong text-danger vert-mid">405</td>
                                                        <td>Method Not Allowed</td>
                                                        <td>The requested HTTP method is not allowed. Only GET and POST requests are accepted.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong text-danger vert-mid">500</td>
                                                        <td>RevCent Error</td>
                                                        <td>An error occurred within the RevCent system.</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-errors-non-payment">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Non-Payment Error</h4>
                                            <p>For non-payment errors the HTTP status code will be <span class="text-danger text-strong">400</span> and the code property will equal 0. The message property will describe the reason for the request error.</p>
                                            <table class="response-code-table table table-bordered mt--30">
                                                <thead class="bg-color-purple-2">
                                                    <tr class="small">
                                                        <th>Body Code</th>
                                                        <th>Type</th>
                                                        <th>Description</th>
                                                    </tr>
                                                </thead>
                                                <tbody>
                                                    <tr>
                                                        <td class="text-center text-strong vert-mid">0</td>
                                                        <td>Generic Error</td>
                                                        <td>The request failed due to a user error.</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                        <div class="col-sm-6">
                                            <div class="pre-container response-pre-container mt--40">
                                                <div class="pre-header">
                                                    <span class="pre-header-title">Response</span> <span class="text-danger ml--10">400</span>
                                                </div>
                                                <div class="pre-wrap">
                                                    <pre class="response-col-pre highlight-code language-json">
{
    "code": 0,
    "error_code": "E0037",
    "message": "The payment profile you entered is invalid",
    "result": "Error"
}</pre>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-errors-payment">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Payment Error</h4>
                                            <p>For failed payment attempts the HTTP status code will be <span class="text-danger text-strong">402</span>, and the code property within the response body will indicate the type of payment failure. The gateway_raw_response property is the response from the gateway indicating why the payment attempt failed.</p>
                                            <p>There are potential values for the code property within the response body, either 2, 3, or 4, indicating the type of gateway failure.</p>
                                            <table class="response-code-table table table-bordered mt--30">
                                                <thead class="bg-color-purple-2">
                                                    <tr class="small">
                                                        <th>Body Code</th>
                                                        <th>Type</th>
                                                        <th>Description</th>
                                                    </tr>
                                                </thead>
                                                <tbody>
                                                    <tr>
                                                        <td class="text-center text-strong vert-mid">2</td>
                                                        <td>Payment Declined</td>
                                                        <td>The payment gateway declined the transaction. Use the gateway raw response to determine the exact error and reason.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong vert-mid">3</td>
                                                        <td>Gateway Error</td>
                                                        <td>The payment gateway returned an error. Use the gateway raw response to determine the exact error and reason.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-center text-strong vert-mid">4</td>
                                                        <td>Gateway Hold</td>
                                                        <td>The payment gateway held the transaction.</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                        <div class="col-sm-6">
                                            <div class="pre-container response-pre-container mt--40">
                                                <div class="pre-header">
                                                    <span class="pre-header-title">Response</span> <span class="text-danger ml--10">402</span>
                                                </div>
                                                <div class="pre-wrap">
                                                    <pre class="response-col-pre highlight-code language-json">
{
    "code": 2,
    "message": "The gateway declined the transaction.",
    "gateway_raw_response": {
        "response": "2",
        "responsetext": "Insufficient funds",
        "authcode": "      ",
        "transactionid": "123456789",
        "avsresponse": "Y",
        "cvvresponse": "M"
    },
    "result": "Declined."
}</pre>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-errors-fraud">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Fraud Error</h4>
                                            <p>When either Sentinel or a third party service deems a request is fraud, the HTTP status code will be <span class="text-danger text-strong">402</span>, and the code property will always equal 5. The fraud_detection_response property will provide detailed information about the fraud.</p>
                                            <p>It is recommended that you do not display a fraud response directly to the visitor on checkout when fraud is detected. Instead, display a generic payment declined message to the fraudster, not letting them know you have detected fraud.</p>
                                            <p>Additional payment attempts the fraudster makes will be immediately blocked by RevCent and never reach a gateway. RevCent wants fraudsters to continue to attempt payments, as RevCent will internally save information such as additional stolen cards and tracking visitor information.</p>
                                            <table class="response-code-table table table-bordered mt--30">
                                                <thead class="bg-color-purple-2">
                                                    <tr class="small">
                                                        <th>Body Code</th>
                                                        <th>Type</th>
                                                        <th>Description</th>
                                                    </tr>
                                                </thead>
                                                <tbody>
                                                    <tr>
                                                        <td class="text-center text-strong vert-mid">5</td>
                                                        <td>Fraud Detected</td>
                                                        <td>Fraud was detected, either by Sentinel or third party service.</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                        <div class="col-sm-6">
                                            <div class="pre-container response-pre-container mt--40">
                                                <div class="pre-header">
                                                    <span class="pre-header-title">Response</span> <span class="text-danger ml--10">402</span>
                                                </div>
                                                <div class="pre-wrap">
                                                    <pre class="response-col-pre highlight-code language-json">
{
    "code": 5,
    "message": "Payment not processed.",
    "fraud_detected": true,
    "fraud_detection_created": [
        "kyy9RE8HNo91lAZbwq0X"
    ],
    "fraud_detection_response": {...},
    "result": "Payment request failed."
}</pre>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-errors-not-found">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Not Found Error</h4>
                                            <p>For not found errors the HTTP status code will be <span class="text-danger text-strong">404</span> and the code property will equal 0.</p>
                                            <table class="response-code-table table table-bordered mt--30">
                                                <thead class="bg-color-purple-2">
                                                    <tr class="small">
                                                        <th>Body Code</th>
                                                        <th>Type</th>
                                                        <th>Description</th>
                                                    </tr>
                                                </thead>
                                                <tbody>
                                                    <tr>
                                                        <td class="text-center text-strong vert-mid">0</td>
                                                        <td>Generic Error</td>
                                                        <td>The request failed due to a user error.</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                        <div class="col-sm-6">
                                            <div class="pre-container response-pre-container mt--40">
                                                <div class="pre-header">
                                                    <span class="pre-header-title">Response</span> <span class="text-danger ml--10">404</span>
                                                </div>
                                                <div class="pre-wrap">
                                                    <pre class="response-col-pre highlight-code language-json">
{
    "code": 0,
    "message": "The requested item does not exist.",
    "result": "Not Found"
}</pre>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <hr class="separator-hr">
                <div class="content-section" id="section-idempotency">
                    <div class="row">
                        <div class="col-sm-8">
                            <div class="content-header-wrap">
                                <h3>Idempotent Requests</h3>
                                <p>The RevCent API supports idempotency for safely retrying POST requests without performing the same specific operation twice.</p>
                                <p>This is useful for retrying disrupted requests while avoiding the chance of double charging a customer. To perform an idempotent request, provide the idempotency_key property within the request object. RevCent will check existing idempotency keys submitted within the past 24 hours for the API account. If an idempotency key match is found, the API request is immediately rejected and not saved.</p>
                                <p><strong>Important</strong>: Only use idempotency keys if you know when and why to use them. Resubmitting the same idempotency key when purposely retrying a declined payment request will result in an error, and the retry payment will never be attempted.</p>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-idempotency-key">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>idempotency_key</h4>
                                            <p>Provide the idempotency_key property in the JSON body of a POST request. The idempotency key must be at least 10 characters in length and can be up to 255 characters in length. We recommended you use V4 UUIDs.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -X POST https://api.revcent.com/v2/sales \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data-raw '{
    "idempotency_key": "2c74f520-2b7f-44ea"
}'</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <hr class="separator-hr">
                <div class="content-section" id="section-filtering">
                    <div class="row">
                        <div class="col-sm-8">
                            <div class="content-header-wrap">
                                <h3>Filtering</h3>
                                <p>When retrieving a list of multiple items there are four required parameters as well as the option to include one or more filters. Each request has a specific set of filters available, so please refer to each request schema.</p>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-filtering-required-params">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Required Parameters</h4>
                                            <p>Any GET requests which return more than one item, i.e. not ID specific, must include the date_start, date_end, limit and page URL parameters. Omitting any required parameters will result in an error.</p>
                                            <table class="response-code-table table table-bordered mt--30">
                                                <thead class="bg-color-purple-2">
                                                    <tr class="small">
                                                        <th>URL Param</th>
                                                        <th>Type</th>
                                                        <th>Description</th>
                                                    </tr>
                                                </thead>
                                                <tbody>
                                                    <tr>
                                                        <td class="text-strong vert-mid">date_start</td>
                                                        <td>Unix Timestamp</td>
                                                        <td>The date range start date as a unix timestamp.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-strong vert-mid">date_end</td>
                                                        <td>Unix Timestamp</td>
                                                        <td>The date range end date as a unix timestamp.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-strong vert-mid">limit</td>
                                                        <td>Integer</td>
                                                        <td>The limit on the number of items to be returned.</td>
                                                    </tr>
                                                    <tr>
                                                        <td class="text-strong vert-mid">page</td>
                                                        <td>Integer</td>
                                                        <td>The requested page.</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                        <div class="col-sm-6">
                                            <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2/customers \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-d date_start=1627876799 \
-d date_end=1628049599 \
-d limit=25 \
-d page=1</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-filtering-multi-value">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Multi-Value Filter</h4>
                                            <p>You can submit multiple values for the same filter by including the URL parameter more than once in a GET request. RevCent will group same URL parameters when filtering items.</p>
                                            <p>In the example CURL request we wish to filter a list of customers by campaign using the campaign_filter parameter. However, we want to filter using multiple campaign IDs. We provide the campaign_filter URL parameter twice, each time being a specific campaign ID.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2/customers \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-d date_start=1627876799 \
-d date_end=1628049599 \
-d limit=25 \
-d page=1 \
-d campaign_filter="mJ1zZoOobEuP8pnWKXd1" \
-d campaign_filter="LYE26MW8Rlh5VbJmlp2l"</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-filtering-metadata">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Metadata Filter</h4>
                                            <p>When making a get request for a list of items you have an optional metadata_filter parameter, which can be multi-value. Each metadata_filter parameter submitted is an object having a name and value property.</p>
                                            <p>There are two methods when providing one or more metadata_filter parameters, however, you should only use one method in production. You can use a stringified JSON object, or use an array index i.e. metadata_filter[i][name] and metadata_filter[i][value].</p>
                                            <p>In the two example CURL requests we show the different methods, where both methods would produce the same filtered result.</p>
                                            <p>In the first example CURL request we wish to filter a list of sales by metadata using a stringified JSON object for each metadata_filter. Notice how we can include the metadata_filter multiple times with separate stringified JSON objects.</p>
                                            <p>In the second example CURL request we use the array index method to match the name/value pair for each metadata_filter. Notice how we can include the metadata_filter multiple times, separating each filter name/value pair using an array index.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <div class="row">
                                                <div class="col-12">
                                                    <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2/sales \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-d date_start=1627876799 \
-d date_end=1628049599 \
-d limit=25 \
-d page=1 \
--data-urlencode metadata_filter="{\"name\":\"facebook_ad\",\"value\":\"pets\"}" \
--data-urlencode metadata_filter="{\"name\":\"landing_page\",\"value\":\"v1\"}"</pre>
                                                </div>
                                                <div class="col-12">
                                                    <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2/sales \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-d date_start=1627876799 \
-d date_end=1628049599 \
-d limit=25 \
-d page=1 \
--data-urlencode metadata_filter[0][name]="facebook_ad" \
--data-urlencode metadata_filter[0][value]="pets" \
--data-urlencode metadata_filter[1][name]="landing_page" \
--data-urlencode metadata_filter[1][value]="v1" </pre>
                                                </div>

                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-filtering-customer-id">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Customer ID Filter</h4>
                                            <p>Utilize the customer_id URL parameter when you wish to return a list of items specific to a customer.</p>
                                            <p>Note: The customer_id filter is not a multi-value filter. It is limited to one customer ID and additional customer_id parameters will be ignored.</p>
                                            <p>In the example CURL request, we wish to receive a list of transactions specific to the customer with an ID of 4r158EzJmmcVM69dNLkg. This will limit transactions only to this specific customer. If we omitted the customer_id parameter, all transactions will be returned regardless of customer.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2/transactions \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-d date_start=1627876799 \
-d date_end=1628049599 \
-d limit=25 \
-d page=1 \
-d customer_id="4r158EzJmmcVM69dNLkg"</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <hr class="separator-hr">
                <div class="content-section" id="section-pagination">
                    <div class="row">
                        <div class="col-sm-8">
                            <div class="content-header-wrap">
                                <h3>Pagination</h3>
                                <p>Pagination only applies to GET requests which return more than one item. All get requests which return multiple items will have page info contained in the response. Utilize the page info returned, along with the original URL date_start, date_end and limit parameters, to paginate.</p>

                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-pagination-url-params">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>URL Params</h4>
                                            <p>When requesting a list of items, the date_start, date_end, page and limit parameters are required. Utilize all four parameters, specifically the limit and page parameters, to paginate across multiple pages of results.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <pre class="request-col-pre highlight-code language-curl mt--40" style="border-radius: 4px;">
curl -G https://api.revcent.com/v2/customers \
-H "x-api-key: YOUR_REVCENT_API_KEY" \
-H "Accept: application/json" \
-d date_start=1627876799 \
-d date_end=1628049599 \
-d limit=25 \
-d page=1</pre>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12">
                            <div class="content-section-wrap" id="section-pagination-page-info">
                                <div class="operation-wrap">
                                    <div class="row extra-padding">
                                        <div class="col-sm-6">
                                            <h4>Page Info</h4>
                                            <p>The response from a list request will contain the results array, as well as page info. The page info tells you the current page, the total number of pages and the number of items per page.</p>
                                            <p>In the example response, we are using a limit of 25, currently at page 1, with a total of 4 pages. If you wanted the next page (page 2), you would use the same date_start and date_end URL params, along with limit=25 page=2.</p>
                                        </div>
                                        <div class="col-sm-6">
                                            <div class="pre-container response-pre-container mt--40">
                                                <div class="pre-header">
                                                    <span class="pre-header-title">Response</span>
                                                </div>
                                                <div class="pre-wrap">
                                                    <pre class="response-col-pre highlight-code language-json">
{
    "current_count": 25,
    "current_page": 1,
    "results": [...],
    "total_count": 79,
    "total_pages": 4
}</pre>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <hr class="separator-hr">
            </div>
        </div>

    </div>

    <!-- End Page Wrapper Area -->
    <div class="rbt-progress-parent d-none">
        <svg class="rbt-back-circle svg-inner" width="100%" height="100%" viewBox="-1 -1 102 102">
            <path d="M50,1 a49,49 0 0,1 0,98 a49,49 0 0,1 0,-98" />
        </svg>
    </div>

    <script src="https://cdn.revcent.com/public-new/js/vendor/modernizr.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/jquery.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/bootstrap.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/sal.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/swiper.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/magnify.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/jquery-appear.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/odometer.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/backtotop.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/isotop.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/imageloaded.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/wow.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/waypoint.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/easypie.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/text-type.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/jquery-one-page-nav.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/bootstrap-select.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/jquery-ui.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/magnify-popup.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/paralax-scroll.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/paralax.min.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/countdown.js"></script>
    <script src="https://cdn.revcent.com/public-new/js/vendor/plyr.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/uuid/uuid.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/lodash/lodash.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/sweetalert/sweetalert.min.js"></script>

    <script src="https://cdn.revcent.com/js/plugins/validation/jquery.validate.min.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/validation/additional-methods.min.js"></script>
    <script src="https://www.google.com/recaptcha/api.js?onload=recaptchaLibLoaded&render=explicit" async defer></script>
    <script src="https://cdn.revcent.com/js/plugins/anim-gradient/anim-gradient.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/highlightjs/highlight-2.min.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/typeit/typeit.js"></script>




    <script>
      let registerRequestRecaptchaWidget;
      let contactModalRecaptchaWidget;
      recaptchaLibLoaded=function() {
        let recaptcha_site_key='6LcDsNUUAAAAAIpsHmkuI7Renzt8xNAl7HHItOou';
        if($('#recaptcha_contact_modal').length>0) {
          contactModalRecaptchaWidget=grecaptcha.render('recaptcha_contact_modal',{
            'sitekey': recaptcha_site_key
          });
        }
        if($('#recaptcha_register_request').length>0) {
          registerRequestRecaptchaWidget=grecaptcha.render('recaptcha_register_request',{
            'sitekey': recaptcha_site_key
          });
        }
      };

      $(document).ready(function() {
        $(document).on('mouseenter','.advanced-tab-button-nav .nav-link:not(.active)',function(a) {
          $(this).tab('show');
        });
        $('.lobtn').click(function() {
          $.ajax({
            type: 'POST',
            url: '/auth/logout',
            dataType: "json",
            success: function(x) {
              window.location.replace('/');
            }
          });
        });
      });
    </script>

    <script>
      // $('.page-theme-link.small').hover(function() {
      //   $(this).children('i.far.fa-angle-right.small').addClass('ml--5');
      // },
      //   function() {
      //     $(this).children('i.far.fa-angle-right.small').removeClass('ml--5');
      //   });
    </script>
    <script>
      let hero_palette=[
        ['#521262','#6639a6','#3490de','#6fe7dd'], //0
        ['#f8ecfd','#c264fe','#a82ffc','#7a08fa'], //purple 1
        ['#d9faff','#00bbf0','#005792','#00204a'], //ice 2
        ['#fc85ae','#9e579d','#574b90','#303a52'], //city night 3
        ['#abedd8','#46cdcf','#3d84a8','#48466d'], //sea foam 4
        ['#d2ecf9','#1891ac','#1f5f8b','#253b6e'], //ocean 5
        ['#ffbd39','#e61c5d','#930077','#3a0088'], //dark fruit 6
        ['#ff165d','#ff9a00','#ebedb4','#3ec1d3'], //fruit 7
        ['#ffde7d','#f6416c','#f8f3d4','#00b8a9'], //light melon 8
        ['#eaeaea','#ff2e63','#252a34','#08d9d6'], //peppermint 9
        ['#64379f','#9854cb','#ddacf5','#33a8b5'], // 10
        ['#5f59f7','#6592fd','#44c2fd','#8c61ff'], // 11
        ['#a7dbd8','#e0e4cc','#f38630','#fa6900'], // 12
        ['#0dceda','#6ef3d6','#c6fce5','#ebfffa'], //13
        ['#7e6bc4','#c79ecf','#d6c8ff','#fef0ff'], //14
        ['#d988bc','#ffa8b8','#ffd2a5','#ffffc1'], //15
        ['#8a00d4','#d527b7','#f782c2','#f9c46b'], //16
        ['#556270','#4ecdc4','#c7f464','#ff6b6b'], //17
        ['#bce784','#5dd39e','#348aa7','#525174'], //18
        ['#ff9de2','#8c82fc','#b693fe','#7effdb'], //19
        ['#8971d0','#7dace4','#95e8d7','#adf7d1'], //20
        ['#fff5a5','#ffaa64','#ff8264','#ff6464'], //21
        ['#a7ff83','#17b978','#086972','#071a52'], //22
        ['#2f9296','#46b7b9','#87dfd6','#dff5f2'], //23
        ['#74f9ff','#e8ffe8','#a6fff2','#00e0ff'], //24
        ['#d7fbe8','#62d2a2','#9df3c4','#1fab89'], //25
        ['#F0FF42','#82CD47','#54B435','#379237'],//26
        ['#F49D1A','#009FBD','#210062','#77037B'], //27
        ['#13bf53','#38E54D','#9CFF2E','#FDFF00'], //28
        ['#07e3d1','#7203ad','#C70A80','#ffe100'], //29
        ['#FFBE0B','#70d6ff','#FF006E','#8338EC'], //30
        ['#92bff0','#57cdff','#1b8bff','#0061c9'], //31
        ['#fff75e','#ffe94e','#ffda3d','#fdc43f'], //32
        ['#E60965','#F94892','#FFA1C9','#E80F88'], //33
        ['#a200ff','#7e00c7','#b940ff','#8b3aba'], //34
        ['#930077','#7f2381','#6a3287','#eb1ec5'], //35
        ['#873EFF','#873EFF','#720EEC','#720EEC'], //36 woo purple
      ];

      let page_theme_gradients={
        '1': 1,
        '2': 33,
        '3': 21,
        '4': 28,
        '5': 31,
        '6': 35,
        '7': 33
      };

      if($('.gradient-canvas').length>0&&(typeof $('.gradient-canvas').attr('data-palettenum')!=='undefined'||typeof $('body.MainBody').attr('data-pagetheme')!=='undefined'||typeof $('.rbt-main-wrapper').attr('data-palettearray')!=='undefined')) {
        $('.gradient-canvas').each(function() {
          let angle=0;
          let palette_array;
          let amplitude=320;
          let static=false;
          let indiv_grad=$(this);
          if(typeof $('body.MainBody').attr('data-pagetheme')!=='undefined'&&$(this).parent('.gradient-canvas-wrapper').hasClass('section-separator-250')&&typeof page_theme_gradients?.[$('body.MainBody').attr('data-pagetheme')]!=='undefined') {
            palette_array=hero_palette[page_theme_gradients[$('body.MainBody').attr('data-pagetheme')]];
          } else if(typeof $(this).attr('data-palettearray')!=='undefined') {
            palette_array=JSON.parse($(this).attr('data-palettearray'));
          } else {
            palette_array=hero_palette[parseInt($(this).attr('data-palettenum'))];
          }
          if(typeof $(this).attr('data-gradamp')!=='undefined'&&parseInt($(this).attr('data-gradamp'))>0) {
            amplitude=parseInt($(this).attr('data-gradamp'));
          }
          if(typeof $(this).attr('data-gradangle')!=='undefined'&&parseInt($(this).attr('data-gradangle'))>0) {
            angle=parseInt($(this).attr('data-gradangle'));
          }

          if(typeof $(this).attr('data-gradstatic')!=='undefined'&&$(this).attr('data-gradstatic')==='true') {
            static=true;
          }
          if(typeof $(this).attr('data-gradshuffle')!=='undefined'&&$(this).attr('data-gradshuffle')==='true') {
            palette_array=palette_array
              .map(value => ({value,sort: Math.random()}))
              .sort((a,b) => a.sort-b.sort)
              .map(({value}) => value)
          }



          indiv_grad.gradient({
            colors: palette_array,
            angle,
            amplitude,
            static,
            density: [.06, .16]
          });
        });
      }
    </script>


    <script>


      (function(window,document,$,undefined) {
        'use strict';

        let siteConf={
          i: function(e) {
            siteConf.d();
            siteConf.methods();
          },

          d: function(e) {
            this._window=$(window),
              this._document=$(document),
              this._body=$('body'),
              this._html=$('html'),
              this.sideNav=$('.rbt-search-dropdown')
          },
          methods: function(e) {
            siteConf._clickDoc();
            siteConf.popupMobileMenu();
          },
          _clickDoc: function() {
            var inputblur,inputFocus,openSideNav,closeSideNav;
            inputblur=function(e) {
              if(!$(this).val()) {
                $(this).parent('.form-group').removeClass('focused');
              }
            };
            inputFocus=function(e) {
              $(this).parents('.form-group').addClass('focused');
            };
            openSideNav=function(e) {
              e.preventDefault();
              siteConf.sideNav.addClass('active');
              $('.search-trigger-active').addClass('open');
              siteConf._html.addClass('side-nav-opened');
            };

            closeSideNav=function(e) {
              if(!$('.rbt-search-dropdown, .rbt-search-dropdown *:not(".search-trigger-active, .search-trigger-active *")').is(e.target)) {
                siteConf.sideNav.removeClass('active');
                $('.search-trigger-active').removeClass('open');
                siteConf._html.removeClass('side-nav-opened');
              }
            };
            siteConf._document
              .on('blur','input,textarea,select',inputblur)
              .on('focus','input:not([type="radio"]),input:not([type="checkbox"]),textarea,select',inputFocus)
              .on('click','.search-trigger-active',openSideNav)
              .on('click','.side-nav-opened',closeSideNav)
          },




          popupMobileMenu: function(e) {
            $('.hamberger-button').on('click',function(e) {
              $('.popup-mobile-menu').addClass('active');
            });

            $('.close-button').on('click',function(e) {
              $('.popup-mobile-menu').removeClass('active');
              $('.popup-mobile-menu .mainmenu .has-dropdown > a, .popup-mobile-menu .mainmenu .with-megamenu > a').siblings('.submenu, .rbt-megamenu').removeClass('active').slideUp('400');
              $('.popup-mobile-menu .mainmenu .has-dropdown > a, .popup-mobile-menu .mainmenu .with-megamenu > a').removeClass('open')
            });

            $('.popup-mobile-menu .mainmenu .has-dropdown > a, .popup-mobile-menu .mainmenu .with-megamenu > a').on('click',function(e) {
              e.preventDefault();
              $(this).siblings('.submenu, .rbt-megamenu').toggleClass('active').slideToggle('400');
              $(this).toggleClass('open')
            })

            $('.popup-mobile-menu, .popup-mobile-menu .mainmenu.onepagenav li a').on('click',function(e) {
              e.target===this&&$('.popup-mobile-menu').removeClass('active')&&$('.popup-mobile-menu .mainmenu .has-dropdown > a, .popup-mobile-menu .mainmenu .with-megamenu > a').siblings('.submenu, .rbt-megamenu').removeClass('active').slideUp('400')&&$('.popup-mobile-menu .mainmenu .has-dropdown > a, .popup-mobile-menu .mainmenu .with-megamenu > a').removeClass('open');
            });
          }
        }
        siteConf.i();


      })(window,document,jQuery);
      
    </script><script type="text/javascript">
</script>    <script src="https://cdn.revcent.com/js/plugins/json-schema-sampler/json-schema-sampler.js"></script>
    <script src="https://cdn.revcent.com/js/plugins/highlightjs/curl.min.js"></script>


    <script>

        async function getSchema() {
            const openapi_get=await fetch("https://cdn.revcent.com/schemas/api-v2/openapi.json");
            const openapi_json=await openapi_get.json();
            parseOpenApi(openapi_json);
        }

        function amendXAdditionalInfo(obj) {
            let amend_info='';
            if(typeof obj?.["x-additional-info"]==='string'&&obj["x-additional-info"].length>0) {
                amend_info=' '+obj["x-additional-info"];
            }
            return amend_info;
        }

        function getOperationCurl(operation_obj,path,operation) {
            let endpoint='https://api.revcent.com/v2';
            let headers=[`-H "x-api-key: YOUR_REVCENT_API_KEY" \\\r`,`-H "Accept: application/json" \\\r`];
            let curl_command='';
            let request_data=[];
            if(operation==='get') {
                curl_command='-G ';
                if(typeof operation_obj?.parameters!=='undefined'&&Array.isArray(operation_obj.parameters)&&operation_obj.parameters.length>0) {
                    for(let i=0,len=operation_obj.parameters.length;i<len;i++) {
                        let parameter=operation_obj.parameters[i];
                        if(['limit','page'].includes(parameter.name)) {
                            let example_val=25;
                            if(parameter.name==='page') {
                                example_val=1;
                            }
                            request_data.push(`-d ${parameter.name}=${example_val}`);
                        } else if(typeof parameter?.in==='string'&&parameter.in==='query'&&['date_start','date_end'].includes(parameter.name)&&typeof parameter?.schema?.examples?.[0]!=='undefined') {
                            request_data.push(`-d ${parameter.name}=${parameter.schema.examples[0]}`);
                        } else if(parameter.name==='metadata_filter') {
                            request_data.push(`--data-urlencode ${parameter.name}="{\\"name\\":\\"facebook_ad\\",\\"value\\":\\"pets\\"}"`);
                            //request_data.push(`--data-urlencode ${parameter.name}="{\\"name\\":\\"google\\",\\"value\\":\\"123\\"}"`);
                        } else if(['search_term','coupon_code'].includes(parameter.name)) {
                            request_data.push(`--data-urlencode ${parameter.name}="${parameter.schema.examples[0]}"`);
                        } else if(typeof parameter?.in==='string'&&parameter.in==='query'&&typeof parameter?.schema?.type==='string'&&parameter.schema.type==='array'&&(typeof parameter?.schema?.items?.enum?.[0]==='string'||typeof parameter?.schema?.items?.examples?.[0]==='string')) {
                            let prop='';
                            if(typeof parameter?.schema?.items?.examples?.[0]==='string') {
                                prop='examples';
                            } else if(typeof parameter?.schema?.items?.enum?.[0]==='string') {
                                prop='enum';
                            }
                            let param_val=parameter.schema.items[prop][0];
                            request_data.push(`-d ${parameter.name}="${param_val}"`);
                        }
                    }
                }
            } else {
                headers.push(`-H "Content-Type: application/json" \\\r`);
                curl_command='-X POST ';
                let post_data=JSON.stringify(JSONSchemaSampler.sample(operation_obj.requestBody.content['application/json'].schema),null,2);
                if(post_data!=='{}') {
                    request_data.push(`--data-raw '${post_data}'`);
                }
            }
            let operation_curl=`
curl ${curl_command}${endpoint}${path} \\\r
${headers.join('')}
${request_data.join(' \\\r')}
`;

            return operation_curl;
        }

        function getOperationUrlParamHtml(operation_obj,path,operation) {

            let operation_url_param_html='';
            if(typeof operation_obj?.parameters!=='undefined'&&Array.isArray(operation_obj.parameters)&&operation_obj.parameters.length>0) {
                let operation_parameters=[];
                let operation_path_parameters=[];

                for(let i=0,len=operation_obj.parameters.length;i<len;i++) {
                    let param_obj=operation_obj.parameters[i];
                    let param_type='';
                    if(param_obj.schema.type==='array'&&param_obj.name.includes('_filter')) {
                        if(param_obj.name==='metadata_filter') {
                            param_type='<a class="text-muted" href="#section-filtering-metadata"><u>metadata</u></a>';
                        } else {
                            param_type='<a class="text-muted" href="#section-filtering-multi-value"><u>multi-value</u></a>';
                        }
                    } else if(typeof param_obj?.schema?.format==='string') {
                        param_type=param_obj.schema.format;
                    } else {
                        param_type=param_obj.schema.type;
                    }
                    let param_example='';
                    let param_required='';
                    let param_enum='';
                    let param_enum_class='d-none';
                    let param_type_class='';
                    let param_example_class='';
                    if(param_obj.required===true) {
                        param_required='<span class="operation-parameter-required badge rounded-pill">required</span>';
                    }
                    if(param_obj.in!=='query') {
                        param_example_class='d-none';
                        param_type_class='d-none';
                    }
                    if(param_obj.schema.type==='array'||param_obj.name==='search_term') {
                        param_example_class='d-none';
                    }
                    if(typeof param_obj?.schema?.examples?.[0]!=='undefined') {
                        param_example='<span class="small">'+encodeURI(param_obj.name+'='+param_obj.schema.examples[0])+'</span>';
                    }
                    if(typeof param_obj?.schema?.items?.enum?.[0]!=='undefined') {
                        param_enum_class='';
                        param_num_htmls=[]
                        for(let j=0,len2=param_obj.schema.items.enum.length;j<len2;j++) {
                            param_num_htmls.push('<span class="operation-parameter-enum-item badge bg-secondary rounded-pill">'+param_obj.schema.items.enum[j]+'</span>');
                        }
                        param_enum=param_num_htmls.join(' ');
                        param_example='<span class="small">'+encodeURI(param_obj.name+'='+param_obj.schema.items.enum[0])+'</span>';
                    } else if(typeof param_obj?.schema?.items?.examples?.[0]!=='undefined') {
                        param_example='<span class="small">'+encodeURI(param_obj.name+'='+param_obj.schema.items.examples[0])+'</span>';
                    }
                    let param_html=`
                        <div class="operation-parameter">
                            <div class="operation-parameter-title">
                                <span class="operation-parameter-name text-strong small">${param_obj.name}</span> <span class="operation-parameter-type text-muted small ${param_type_class}">${param_type}</span> ${param_required}
                            </div>
                            <div class="operation-parameter-details">
                                <p class="operation-parameter-description small">${param_obj.description}${amendXAdditionalInfo(param_obj)}</p>
                            </div>
                            <div class="operation-parameter-example-wrap ${param_example_class}">
                                <span class="operation-parameter-example badge bg-light text-dark small">${param_example}</span>
                            </div>
                            <div class="operation-parameter-enum-wrap ${param_enum_class}">
                                <p class="operation-parameter-enum small"><em class="small enum-color">enum:</em> ${param_enum}</p>
                            </div>
                        </div>
                    `;
                    if(param_obj.in==='path') {
                        operation_path_parameters.push(param_html);
                    } else {
                        operation_parameters.push(param_html);
                    }
                }
                let operation_path_parameters_class='d-none';
                let operation_url_parameters_class='d-none';

                if(operation_path_parameters.length>0) {
                    operation_path_parameters_class='';
                }
                if(operation_parameters.length>0) {
                    operation_url_parameters_class='';
                }
                operation_url_param_html=`
                    <div class="operation-path-parameter-wrap ${operation_path_parameters_class}">
                        <p class="mb--10"><strong>Path Parameters</strong></p>
                        <hr class="separator-hr">
                        <div class="operation-parameters-wrap">
                            ${operation_path_parameters.join('<hr class="separator-hr">')}
                        </div>
                    </div>
                    <div class="operation-url-parameter-wrap ${operation_url_parameters_class}">
                        <p class="mb--10"><strong>URL Parameters</strong></p>
                        <hr class="separator-hr">
                        <div class="operation-parameters-wrap">
                            ${operation_parameters.join('<hr class="separator-hr">')}
                        </div>
                    </div>
                `;
            }


            return operation_url_param_html;
        }
        function formatIndivProperty(property_obj,property,operation_obj,path,operation,required_array) {
            let property_example_class='d-none';
            let property_enum_class='d-none';
            let property_enum='';
            let property_example='';
            let param_required='';
            if(required_array.includes(property)) {
                param_required='<span class="operation-parameter-required badge rounded-pill">required</span>';
            }
            if(typeof property_obj?.enum?.[0]!=='undefined') {
                property_enum_class='';
                property_enum_htmls=[]
                for(let j=0,len2=property_obj.enum.length;j<len2;j++) {
                    property_enum_htmls.push('<span class="operation-parameter-enum-item badge bg-secondary rounded-pill">'+property_obj.enum[j]+'</span>');
                }
                property_enum=property_enum_htmls.join(' ');
            }
            let actual_type='';
            if(typeof property_obj?.format==='string') {
                actual_type=property_obj.format;
            } else {
                actual_type=property_obj.type;
            }

            let extra_info_class='d-none';
            let extra_info='';
            if(typeof property_obj?.['x-extra-info']==='string') {
                extra_info=property_obj['x-extra-info'];
                extra_info_class='';
            }

            let prop_html=`
                <div class="operation-parameter">
                    <div class="operation-parameter-title">
                        <span class="operation-parameter-name text-strong small">${property}</span> <span class="operation-parameter-type text-muted small">${actual_type}</span> ${param_required}
                    </div>
                    <div class="operation-parameter-details">
                        <p class="operation-parameter-description small">${property_obj.description}${amendXAdditionalInfo(property_obj)}</p>
                    </div>
                    <div class="operation-parameter-example-wrap ${property_example_class}">
                        <span class="operation-parameter-example badge bg-light text-dark small">${property_example}</span>
                    </div>
                    <div class="operation-parameter-enum-wrap ${property_enum_class}">
                        <p class="operation-parameter-enum small"><em class="small enum-color">enum:</em> ${property_enum}</p>
                    </div>
                    <div class="operation-parameter-extra-info-wrap ${extra_info_class}">
                            <div class="operation-parameter-extra-info-card rbt-card no-shadow bg-color-primary-opacity">
                                <p class="operation-parameter-extra-info small">${extra_info}</p>
                            </div>
                    </div>
                </div>
            `;

            return prop_html;
        }

        function getRequiredArray(schema) {
            let required_array=[];
            if(typeof schema?.required!=='undefined'&&Array.isArray(schema.required)&&schema.required.length>0) {
                required_array=schema.required;
            }
            return required_array;
        }

        function getReqResBodyPropertyHtml(property_obj,property,operation_obj,path,operation,required_array,body_source) {
            let prop_html='';
            if(typeof property_obj?.type==='string') {
                if(['string','integer','number','boolean'].includes(property_obj.type)) {
                    prop_html=formatIndivProperty(property_obj,property,operation_obj,path,operation,required_array);
                } else if(property_obj.type==='array') {
                    let sub_prop_class='';
                    let sub_props=[];
                    if(typeof property_obj?.items?.type!=='undefined'&&property_obj.items.type==='object') {
                        let req_array2=getRequiredArray(property_obj);
                        for(let sub_property in property_obj.items.properties) {
                            sub_props.push(getReqResBodyPropertyHtml(property_obj.items.properties[sub_property],sub_property,operation_obj,path,operation,req_array2,body_source));
                        }
                    } else {
                        sub_prop_class='d-none';
                    }
                    let param_required='';
                    if(required_array.includes(property)) {
                        param_required='<span class="operation-parameter-required badge rounded-pill">required</span>';
                    }
                    prop_html=`
                        <div class="operation-parameter">
                            <div class="operation-parameter-title">
                                <span class="operation-parameter-name text-strong small">${property}</span> <span class="operation-parameter-type text-muted small">${property_obj.type}</span> ${param_required}
                            </div>
                            <div class="operation-parameter-details">
                                <p class="operation-parameter-description small">${property_obj.description}${amendXAdditionalInfo(property_obj)}</p>
                            </div>
                            
                            <div class="operation-parameter-sub-props rbt-card no-shadow bg-color-body-card ${sub_prop_class}">
                                ${sub_props.join('<hr class="separator-hr">')}
                            </div>
                        </div>
                    `;
                } else if(property_obj.type==='object') {
                    let req_array2=getRequiredArray(property_obj);
                    let sub_props=[];
                    for(let sub_property in property_obj.properties) {
                        sub_props.push(getReqResBodyPropertyHtml(property_obj.properties[sub_property],sub_property,operation_obj,path,operation,req_array2,body_source));
                    }
                    let param_required='';
                    if(required_array.includes(property)) {
                        param_required='<span class="operation-parameter-required badge rounded-pill">required</span>';
                    }
                    prop_html=`
                        <div class="operation-parameter">
                            <div class="operation-parameter-title">
                                <span class="operation-parameter-name text-strong small">${property}</span> <span class="operation-parameter-type text-muted small">${property_obj.type}</span> ${param_required}
                            </div>
                            <div class="operation-parameter-details">
                                <p class="operation-parameter-description small">${property_obj.description}${amendXAdditionalInfo(property_obj)}</p>
                            </div>
                            
                            <div class="operation-parameter-sub-props rbt-card no-shadow bg-color-body-card">
                                ${sub_props.join('<hr class="separator-hr">')}
                            </div>
                        </div>
                    `;
                }
            }
            return prop_html;
        }

        function getOperationReqResHtml(operation_obj,path,operation,body_source) {
            let req_body_htmls=[];
            let properties=operation_obj.requestBody.content['application/json'].schema.properties;
            let required_array=getRequiredArray(operation_obj.requestBody.content['application/json'].schema);
            for(let property in properties) {
                req_body_htmls.push(getReqResBodyPropertyHtml(properties[property],property,operation_obj,path,operation,required_array,body_source));
            }
            let operation_request_body_html=`
                    <div class="operation-request-body-wrap">
                        <p class="mb--10"><strong>Request Body</strong></p>
                        <hr class="separator-hr d-nonex">
                        <div class="operation-request-body-properties-wrap">
                            <div class="rbt-card no-shadow operation-request-body-properties-card bg-color-body-card">
                                    ${req_body_htmls.join('<hr class="separator-hr">')}
                            </div>
                        </div>
                    </div>
                `;

            return operation_request_body_html;
        }




        function parseOpenApi(openapi_json) {
            let hide_tags=['Queries'];
            let hide_operation_ids=['QueryTransactions','QuerySales'];
            let ctr=0;
            for(let i=0,len=openapi_json.tags.length;i<len;i++) {
                if(!(hide_tags.includes(openapi_json.tags[i].name))) {
                    let tag_name=openapi_json.tags[i].name;
                    let tag_description=openapi_json.tags[i].description;
                    let tag_id=_.snakeCase(tag_name);
                    let tag_nav_item=`
                        <a class="nav-link" href="#section-${tag_id}" data-tagid="${tag_id}" data-level="1">${tag_name}</a>
                        <nav class="nav nav-pills flex-column tag-nav d-none" data-tagid="${tag_id}">
                        </nav>
                    `;
                    $('#navbar-left-nav').append(tag_nav_item);

                    let dropdown_tag_item=`
                    <li class="nav-item">
                        <a class="nav-link" href="#section-${tag_id}" data-tagid="${tag_id}">${tag_name}</a>    
                    </li>
                `;
                    $('#dropdown-nav-ul').append(dropdown_tag_item);

                    let tag_section=`
                    <div class="content-section" id="section-${tag_id}">
                        <div class="row">
                            <div class="col-sm-8">
                                <div class="content-header-wrap" data-tagid="${tag_id}">
                                    <h3>${tag_name}</h3>
                                    <p>${tag_description}</p>
                                </div>
                            </div>
                            <hr class="separator-hr">
                            <div class="col-12">
                                <div class="content-section-wrap" data-tagid="${tag_id}"></div>
                            </div>
                        </div>
                    </div>
                `;
                    $('#main-content-container').append(tag_section);
                }
                ctr++;
                if(ctr===openapi_json.tags.length) {
                    parseApiPaths();
                }
            }

            function parseApiPaths() {
                let p_ctr=0;
                let paths=openapi_json.paths;
                for(let path in paths) {
                    let path_obj=paths[path];
                    let m_ctr=0;
                    for(let operation in path_obj) {
                        if(!(hide_operation_ids.includes(path_obj[operation].operationId))) {
                            let operation_obj=path_obj[operation];
                            let tag_name=operation_obj.tags[0];
                            let tag_id=_.snakeCase(tag_name);
                            let operation_link=`<a class="nav-link ms-3 my-1" href="#operation-${operation_obj.operationId}" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">${operation_obj.summary}</a>`;
                            $('.tag-nav[data-tagid="'+tag_id+'"]').append(operation_link);

                            let operation_url_param_html=getOperationUrlParamHtml(operation_obj,path,operation);
                            let operation_request_body_html='';
                            if(operation==='post') {
                                if(typeof operation_obj?.requestBody?.content?.['application/json']?.schema?.properties==='object'&&operation_obj.requestBody.content['application/json'].schema.properties!==null&&Object.keys(operation_obj.requestBody.content['application/json'].schema.properties).length>0) {
                                    operation_request_body_html=getOperationReqResHtml(operation_obj,path,operation,'request');
                                } else if(typeof operation_obj?.requestBody?.content?.['application/json']?.schema?.allOf!=='undefined'&&Array.isArray(operation_obj.requestBody.content['application/json'].schema.allOf)&&operation_obj.requestBody.content['application/json'].schema.allOf.length>0) {
                                    let all_of_array=JSON.parse(JSON.stringify(operation_obj.requestBody.content['application/json'].schema.allOf));
                                    let rebuilt_obj=JSON.parse(JSON.stringify(operation_obj));
                                    rebuilt_obj.requestBody.content['application/json'].schema={};
                                    rebuilt_obj.requestBody.content['application/json'].schema.type='object';
                                    rebuilt_obj.requestBody.content['application/json'].schema.properties={};
                                    rebuilt_obj.requestBody.content['application/json'].schema.required=[];
                                    for(let j=0,len2=all_of_array.length;j<len2;j++) {
                                        if(typeof all_of_array[j]?.type!=='undefined'&&all_of_array[j].type==='object') {
                                            rebuilt_obj.requestBody.content['application/json'].schema.properties={...rebuilt_obj.requestBody.content['application/json'].schema.properties,...all_of_array[j].properties}
                                            if(typeof all_of_array[j]?.required!=='undefined'&&Array.isArray(all_of_array[j].required)&&all_of_array[j].required.length>0) {
                                                rebuilt_obj.requestBody.content['application/json'].schema.required.push(...all_of_array[j].required);
                                            }
                                        }
                                    }
                                    operation_request_body_html=getOperationReqResHtml(rebuilt_obj,path,operation,'request');
                                }
                            }
                            let operation_curl=getOperationCurl(operation_obj,path,operation);
                            let ai_assistant_p='';
                            let permission_p=``;
                            if(typeof operation_obj?.['x-api-permission']==='string'&&operation_obj['x-api-permission'].length>0) {
                                permission_p=`
                                <div class="alert alert-secondary small"><span class="text-muted small text-italic">API Permission:</span> <span>${operation_obj['x-api-permission']}</span></div>
                            `;
                            }
                            let ai_alert='';
                            let ai_list=[];
                            if((typeof operation_obj?.['x-ai-options']!=='undefined'&&Array.isArray(operation_obj['x-ai-options'])&&operation_obj['x-ai-options'].length>0)||(typeof operation_obj?.['x-gpt-type']!=='undefined'&&Array.isArray(operation_obj['x-gpt-type'])&&operation_obj['x-gpt-type'].length>0)) {
                                let ai_option_map={
                                    none: {
                                        name: 'None',
                                        link: ''
                                    },
                                    web_chat: {
                                        name: 'Web Chat',
                                        link: 'https://kb.revcent.com/tools/ai/chat'
                                    },
                                    ai_assistant: {
                                        name: 'AI Assistant',
                                        link: 'https://kb.revcent.com/tools/ai/assistants'
                                    },
                                    ai_voice_agent: {
                                        name: 'AI Voice Agent',
                                        link: 'https://kb.revcent.com/tools/ai/voice-agents'
                                    },
                                    mcp: {
                                        name: 'RevCent MCP',
                                        link: 'https://kb.revcent.com/tools/ai/mcp'
                                    },
                                    revcent_gpt: {
                                        name: 'RevCent GPT',
                                        link: 'https://kb.revcent.com/tools/ai/revcent-gpt'
                                    }
                                };
                                if((typeof operation_obj?.['x-ai-options']!=='undefined'&&Array.isArray(operation_obj['x-ai-options'])&&operation_obj['x-ai-options'].length>0)) {
                                    for(let k=0,len3=operation_obj['x-ai-options'].length;k<len3;k++) {
                                        if(typeof operation_obj?.['x-ai-options']?.[k]==='string'&&operation_obj['x-ai-options'][k]!=='none'&&typeof ai_option_map?.[operation_obj?.['x-ai-options']?.[k]]?.name==='string') {
                                            ai_list.push('<a class="text-muted" href="'+ai_option_map[operation_obj['x-ai-options'][k]].link+'" target="_blank">'+ai_option_map[operation_obj['x-ai-options'][k]].name+'</a>')
                                        }
                                    }
                                }
                                if(ai_list.length>0) {
                                    ai_alert=`
                                        <div class="alert alert-info small"><span class="text-muted small text-italic">AI:</span> <span>${ai_list.join(', ')}</span></div>
                                    `;
                                }
                            }
                            let operation_html=`
                            <div class="operation-wrap" id="operation-${operation_obj.operationId}" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">
                                <div class="row extra-padding">
                                    <div class="col-sm-6">
                                        <h4>${operation_obj.summary}</h4>
                                        <p>${operation_obj.description}${amendXAdditionalInfo(operation_obj)}</p>
                                        ${permission_p}
                                        ${ai_alert}
                                    </div>
                                    <div class="col-sm-6 d-none">
                                        <p>${operation}</p>
                                        <pre class="path-col-pre" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">${path}</pre>
                                    </div>
                                </div>
                                <div class="row extra-padding">
                                    <div class="col-sm-6 operation-col-1" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">
                                        ${operation_url_param_html}
                                        ${operation_request_body_html}
                                    </div>
                                    <div class="col-sm-6 operation-col-2" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">
                                        <div class="row example-row" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">
                                            <div class="col-sm-12 request-col mb--20" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">
                                                <div class="pre-container request-pre-container">
                                                    <div class="pre-header">
                                                        <div class="pre-header-content">
                                                            <span class="pre-header-operation operation-${operation}">${operation}</span> <span class="pre-header-path">${path}</span>
                                                        </div>
                                                    </div>
                                                    <div class="pre-wrap">
                                                        <pre class="request-col-pre highlight-code language-curl" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">${operation_curl}</pre>
                                                    </div>
                                                </div>
                                            </div>
                                            <div class="col-sm-12 response-col mb--20" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}">
                                                <div class="pre-container response-pre-container">
                                                    <div class="pre-header">
                                                        <span class="pre-header-title">Response</span> <span class="text-success ml--10">200</span>
                                                    </div>
                                                    <div class="pre-wrap">
                                                        <pre class="response-col-pre highlight-code language-json" data-language="json" data-tagid="${tag_id}" data-operationid="${operation_obj.operationId}"></pre>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <hr class="separator-hr">
                        `;
                            $('.content-section-wrap[data-tagid="'+tag_id+'"]').append(operation_html);
                            operation_obj.responses['200'].content['application/json'].schema.additionalProperties=false;
                            const response_schema=JSONSchemaSampler.sample(operation_obj.responses['200'].content['application/json'].schema);
                            if(typeof response_schema==='object'&&response_schema.object!==null) {
                                $('.response-col-pre[data-tagid="'+tag_id+'"][data-operationid="'+operation_obj.operationId+'"]').append(JSON.stringify(response_schema,null,2));
                            }
                        }
                        m_ctr++;
                        if(m_ctr===Object.keys(path_obj).length) {
                            p_ctr++;
                            if(p_ctr===Object.keys(paths).length) {
                                loadHighlight();
                            }
                        }
                    }
                }
            }


            function loadHighlight() {
                hljs.configure({
                    cssSelector: '.highlight-code'
                });
                hljs.highlightAll();
                loadNavScrollSpy();
            }


            function loadNavScrollSpy() {
                let DocsScrollSpy=new bootstrap.ScrollSpy($('#main-content-container'),{
                    target: '#navbar-left-main',
                    offset: 100
                });
                var firstScrollSpyEl=document.querySelector('#main-content-container')
                firstScrollSpyEl.addEventListener('activate.bs.scrollspy',function(e) {
                    $('#navbar-left-main nav.tag-nav').addClass('d-none');
                    let tag_id=$('#navbar-left-main a.nav-link[href="'+e.relatedTarget+'"]').attr('data-tagid');
                    $('#navbar-left-main nav.tag-nav[data-tagid="'+tag_id+'"]').removeClass('d-none');
                });
                scrollToSection();
            }

            function scrollToSection() {
                try {
                    let url_hash=window.location.hash;
                    if(typeof url_hash!=='undefined'&&url_hash.length>1&&typeof url_hash.split('#')?.[1]==='string'&&url_hash.split('#')[1].length>0) {
                        let element=document.getElementById(url_hash.split('#')[1]);
                        if(element!==null) {
                            element.scrollIntoView();
                        }
                    }
                } catch(ex) {
                    console.log(ex);
                }
            }

        }

        getSchema();


        $(document).on("click","#dropdown-nav-ul a.nav-link",function(a) {
            $('#dropdown-nav').removeClass('show');
        });
    </script>

</body>


</html>