<!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;
    }
  </style>
  <style>
    @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-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-soft-decline .duo-image-wrap .thumbnail-wrapper .thumbnail.image-1 img {}

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

      .duo-image-soft-decline .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 {}
    }

    @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 {
        margin-bottom: 150px;
      }

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

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



    .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 for third parties to programatically integrate. The V2 API follows the OpenAPI 3.1 standard, allowing developers and third parties to programatically 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 and any new API capabilities will be added to both V1 and V2 simultaneously.</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
      ];

      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("/schemas/api-v2/openapi.json");
            const openapi_get=await fetch("https://api.revcent.com/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) {
            console.log(openapi_json);


            let ctr=0;
            for(let i=0,len=openapi_json.tags.length;i<len;i++) {
                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) {
                        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 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 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}
                                    </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>