diff --git a/tyk-docs/assets/img/2.10/create-account-setup-choice.png b/tyk-docs/assets/img/2.10/create-account-setup-choice.png new file mode 100644 index 0000000000..16de34fb55 Binary files /dev/null and b/tyk-docs/assets/img/2.10/create-account-setup-choice.png differ diff --git a/tyk-docs/assets/scss/_bespoke.scss b/tyk-docs/assets/scss/_bespoke.scss index 509f256472..a164104fb6 100644 --- a/tyk-docs/assets/scss/_bespoke.scss +++ b/tyk-docs/assets/scss/_bespoke.scss @@ -15,30 +15,28 @@ html { Fonts ========================================================================== */ @font-face { - font-family: 'smoolthan'; - src: url('../fonts/smoolthan_regular-webfont.woff2') format('woff2'), - url('../fonts/smoolthan_regular-webfont.woff') format('woff'); + font-family: "smoolthan"; + src: url("../fonts/smoolthan_regular-webfont.woff2") format("woff2"), + url("../fonts/smoolthan_regular-webfont.woff") format("woff"); font-weight: normal; font-style: normal; - } @font-face { - font-family: 'smoolthan'; - src: url('../fonts/smoolthan_bold-webfont.woff2') format('woff2'), - url('../fonts/smoolthan_bold-webfont.woff') format('woff'); + font-family: "smoolthan"; + src: url("../fonts/smoolthan_bold-webfont.woff2") format("woff2"), + url("../fonts/smoolthan_bold-webfont.woff") format("woff"); font-weight: bold; font-style: normal; - } @font-face { - font-family: 'tyk'; - src: url('../fonts/tyk.eot?66741098'); - src: url('../fonts/tyk.eot?66741098#iefix') format('embedded-opentype'), - url('../fonts/tyk.woff?66741098') format('woff'), - url('../fonts/tyk.ttf?66741098') format('truetype'), - url('../fonts/tyk.svg?66741098#fontello') format('svg'); + font-family: "tyk"; + src: url("../fonts/tyk.eot?66741098"); + src: url("../fonts/tyk.eot?66741098#iefix") format("embedded-opentype"), + url("../fonts/tyk.woff?66741098") format("woff"), + url("../fonts/tyk.ttf?66741098") format("truetype"), + url("../fonts/tyk.svg?66741098#fontello") format("svg"); font-weight: normal; font-style: normal; } @@ -61,260 +59,259 @@ blockquote:before { } .icon-cloud-b:before { - content: '\e800'; + content: "\e800"; } /* '' */ .icon-left:before { - content: '\e801'; + content: "\e801"; } /* '' */ .icon-right:before { - content: '\e802'; + content: "\e802"; } /* '' */ .icon-quote:before { - content: '\e803'; + content: "\e803"; } /* '' */ .icon-features:before { - content: '\e804'; + content: "\e804"; } /* '' */ .icon-extend:before { - content: '\e805'; + content: "\e805"; } /* '' */ .icon-cube:before { - content: '\e806'; + content: "\e806"; } /* '' */ .icon-hybrid-b:before { - content: '\e807'; + content: "\e807"; } /* '' */ .icon-onpremises-b:before { - content: '\e808'; + content: "\e808"; } /* '' */ .icon-case-studies:before { - content: '\e809'; + content: "\e809"; } /* '' */ .icon-hybrid:before { - content: '\e80a'; + content: "\e80a"; } /* '' */ .icon-onpremises:before { - content: '\e80b'; + content: "\e80b"; } /* '' */ .icon-cloud:before { - content: '\e80c'; + content: "\e80c"; } /* '' */ .icon-calendar:before { - content: '\e80d'; + content: "\e80d"; } /* '' */ .icon-close:before { - content: '\e80e'; + content: "\e80e"; } /* '' */ .icon-share:before { - content: '\e80f'; + content: "\e80f"; } /* '' */ .icon-print:before { - content: '\e810'; + content: "\e810"; } /* '' */ .icon-author:before { - content: '\e811'; + content: "\e811"; } /* '' */ .icon-casestudy-client:before { - content: '\e813'; + content: "\e813"; } /* '' */ .icon-casestudy-details:before { - content: '\e814'; + content: "\e814"; } /* '' */ .icon-casestudy-problem:before { - content: '\e816'; + content: "\e816"; } /* '' */ .icon-casestudy-solution:before { - content: '\e817'; + content: "\e817"; } /* '' */ .icon-category:before { - content: '\e818'; + content: "\e818"; } /* '' */ .icon-features-api:before { - content: '\e81a'; + content: "\e81a"; } /* '' */ .icon-features-discovery:before { - content: '\e81c'; + content: "\e81c"; } /* '' */ .icon-features-endpoints:before { - content: '\e81d'; + content: "\e81d"; } /* '' */ .icon-features-mockout:before { - content: '\e81e'; + content: "\e81e"; } /* '' */ .icon-features-more:before { - content: '\e820'; + content: "\e820"; } /* '' */ .icon-features-nofications:before { - content: '\e821'; + content: "\e821"; } /* '' */ .icon-features-onboarding:before { - content: '\e822'; + content: "\e822"; } /* '' */ .icon-features-quotas:before { - content: '\e823'; + content: "\e823"; } /* '' */ .icon-features-sharding:before { - content: '\e824'; + content: "\e824"; } /* '' */ .icon-grpc:before { - content: '\e826'; + content: "\e826"; } /* '' */ .icon-js-grpc:before { - content: '\e827'; + content: "\e827"; } /* '' */ .icon-js:before { - content: '\e828'; + content: "\e828"; } /* '' */ .icon-lua:before { - content: '\e829'; + content: "\e829"; } /* '' */ .icon-net-grpc:before { - content: '\e82a'; + content: "\e82a"; } /* '' */ .icon-python:before { - content: '\e82b'; + content: "\e82b"; } /* '' */ .icon-faq:before { - content: '\e82c'; + content: "\e82c"; } /* '' */ .icon-features-authentication:before { - content: '\e82d'; + content: "\e82d"; } /* '' */ .icon-features-monitoring:before { - content: '\e82e'; + content: "\e82e"; } /* '' */ .icon-features-transforms:before { - content: '\e82f'; + content: "\e82f"; } /* '' */ .icon-features-api-documentation:before { - content: '\e830'; + content: "\e830"; } /* '' */ .icon-search:before { - content: '\e832'; + content: "\e832"; } /* '' */ .icon-blog:before { - content: '\e833'; + content: "\e833"; } /* '' */ .icon-casestudy-metrics:before { - content: '\e834'; + content: "\e834"; } /* '' */ .icon-features-developer-portal:before { - content: '\e835'; + content: "\e835"; } /* '' */ .icon-features-microservice:before { - content: '\e836'; + content: "\e836"; } /* '' */ .icon-whitepapers:before { - content: '\e837'; + content: "\e837"; } /* '' */ .icon-twitter:before { - content: '\f099'; + content: "\f099"; } /* '' */ .icon-github:before { - content: '\f09b'; + content: "\f09b"; } - /* '' */ /* ========================================================================== @@ -413,7 +410,7 @@ blockquote:before { .fluid-video:before { padding-top: 56.25%; - content: ''; + content: ""; display: block; } @@ -460,14 +457,13 @@ iframe { Typography ========================================================================== */ body { - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; line-height: 1.5; font-size: 15px; letter-spacing: 0.015em; color: $brand-black; } - h1, h2, h3, @@ -478,7 +474,7 @@ h4 { p { margin-bottom: 16px; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; line-height: 2; } @@ -498,7 +494,7 @@ blockquote { } blockquote:before { - content: '\e803'; + content: "\e803"; height: 32px; font-size: 26px; position: relative; @@ -591,13 +587,13 @@ textarea { font: inherit; outline: none; border: none; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; } -input[type=text], -input[type=submit], -input[type=email], -input[type=password] { +input[type="text"], +input[type="submit"], +input[type="email"], +input[type="password"] { -webkit-appearance: none; border-radius: 0; } @@ -658,7 +654,6 @@ textarea:required:placeholder-shown { border-color: #000018; } - ::-webkit-input-placeholder { color: #b7b7b7; } @@ -699,14 +694,13 @@ textarea:required:placeholder-shown { .gfield_error input, .gfield_error textarea { - border-color: #d23059 + border-color: #d23059; } .validation_message { display: none; } - /* ========================================================================== Structure ========================================================================== */ @@ -734,7 +728,7 @@ body { } .section-getstarted:before { - content: ''; + content: ""; position: fixed; top: 0; bottom: 0; @@ -765,7 +759,7 @@ body { } .section-getstarted li:before { - content: ''; + content: ""; width: 2px; height: 2px; background: #8d9094; @@ -874,7 +868,6 @@ body { font-size: 18px; } - /* State */ .show-getstarted .section-getstarted { opacity: 1; @@ -908,7 +901,7 @@ body { } .section-getintouch .container:after { - content: '* all fields are required'; + content: "* all fields are required"; font-size: 13px; color: #676773; line-height: 90px; @@ -951,7 +944,7 @@ body { } #icon-tyk path { - stroke: #258B80; + stroke: #258b80; } .video-loaded .homepage-preloader { @@ -1001,12 +994,12 @@ body { } .homepage-video-mask-gradient { - background-image: url('images/homepage/mask.png'); + background-image: url("images/homepage/mask.png"); z-index: 0; } .homepage-video-mask-grey { - background-image: url('images/homepage/mask-grey.png'); + background-image: url("images/homepage/mask-grey.png"); opacity: 0; z-index: 1; } @@ -1122,7 +1115,7 @@ body { } .hero-scroll:before { - content: ''; + content: ""; position: absolute; width: 8px; height: 8px; @@ -1160,7 +1153,7 @@ body { } .scroll-nav a:after { - content: ''; + content: ""; position: absolute; width: 9px; height: 9px; @@ -1203,7 +1196,7 @@ body { /* Homepage - Products */ .layout-products { - background-image: url('images/homepage/products_bg.jpg'); + background-image: url("images/homepage/products_bg.jpg"); background-position: top left; background-repeat: repeat-x; -webkit-background-size: auto 50%; @@ -1213,11 +1206,11 @@ body { } .layout-products:before { - content: ''; + content: ""; position: absolute; left: 0; right: 0; - background-image: url('images/animations/cloud/stars.png'); + background-image: url("images/animations/cloud/stars.png"); height: 100%; display: block; top: 0; @@ -1343,12 +1336,12 @@ body { /* Product : Intro : Gradient Workaround */ .product-intro .product-caption { - background: linear-gradient(180deg, #000018 0%, #031E75 100%); + background: linear-gradient(180deg, #000018 0%, #031e75 100%); } /* Product : Tyk - Cloud */ .section-product.cloud { - background-image: url('images/homepage/products_clouds.png'); + background-image: url("images/homepage/products_clouds.png"); background-size: 100% auto; background-repeat: no-repeat; background-position: bottom left; @@ -1362,7 +1355,7 @@ body { left: 0; right: 0; display: block; - background-image: url('images/homepage/products_city.png'); + background-image: url("images/homepage/products_city.png"); background-size: auto 100%; background-repeat: no-repeat; background-position: top center; @@ -1486,7 +1479,6 @@ body { padding-right: 20px; } - /* ========================================================================== Case Study ========================================================================== */ @@ -1557,7 +1549,6 @@ body { margin: 0 10px 10px 0; } - /* ========================================================================== Page Layout ========================================================================== */ @@ -1596,7 +1587,7 @@ body { .wysiwyg ul, .wysiwyg ol, .wysiwyg table { - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; } .wysiwyg ul { @@ -1633,7 +1624,6 @@ body { overflow: auto; -webkit-overflow-scrolling: touch; font-family: inherit; - } .wysiwyg pre code { @@ -1703,20 +1693,20 @@ body { border-bottom: 2px solid $brand-black; } -.wysiwyg table tbody tr:last-of-type{ +.wysiwyg table tbody tr:last-of-type { border-bottom: 2px solid $brand-black; border-bottom-left-radius: 25px; } -.wysiwyg table tbody tr:last-child > td{ +.wysiwyg table tbody tr:last-child > td { border-bottom: 2px solid $brand-black; } -.wysiwyg table tbody tr:last-child td:first-child{ +.wysiwyg table tbody tr:last-child td:first-child { border-bottom-left-radius: 25px; } -.wysiwyg table tbody tr:last-child td:last-child{ +.wysiwyg table tbody tr:last-child td:last-child { border-bottom-right-radius: 25px; } @@ -1755,7 +1745,7 @@ body { } .aside-subsection:before { - content: ''; + content: ""; width: 22px; height: 1px; background: $black; @@ -1900,19 +1890,19 @@ body { /* Meta */ .blog-meta { line-height: 30px; - border-bottom: 1px solid #CCC; + border-bottom: 1px solid #ccc; color: #95959a; margin-bottom: 40px; } -.blog-meta>a, +.blog-meta > a, .blog-meta time, .blog-meta div { display: inline-block; margin-right: 50px; } -.blog-meta>a:before, +.blog-meta > a:before, .blog-meta time:before, .blog-meta div:before { margin-right: 10px; @@ -1986,12 +1976,12 @@ body { } .blog-sidebar-calendar tbody a { - border: 1px solid #258B80; + border: 1px solid #258b80; width: 32px; height: 32px; line-height: 30px; display: inline-block; - color: #258B80; + color: #258b80; border-radius: 50%; } @@ -2010,7 +2000,7 @@ body { font-size: 14px; color: #a4a4a8; font-weight: bold; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; text-align: left; letter-spacing: 0.175em; text-transform: uppercase; @@ -2027,7 +2017,7 @@ body { position: absolute; right: 0; top: -10px; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; font-size: 0; width: 32px; height: 32px; @@ -2043,11 +2033,11 @@ body { } .blog-sidebar-calendar #prev a:before { - content: '\e801'; + content: "\e801"; } .blog-sidebar-calendar #next a:before { - content: '\e802'; + content: "\e802"; } /* Tag Cloud */ @@ -2075,7 +2065,7 @@ body { } .blog-tagcloud .large { - color: #258B80; + color: #258b80; } /* Search */ @@ -2142,7 +2132,7 @@ body { .page-careers .hero { background: #f0f0f0; color: #000018; - background-image: url('images/heros/careers.jpg'); + background-image: url("images/heros/careers.jpg"); background-position: center center; background-size: auto 100%; } @@ -2155,12 +2145,11 @@ body { max-width: 390px; } - /* ========================================================================== Page : Contact ========================================================================== */ .page-contact { - background: #E1E1E1; + background: #e1e1e1; } .page-contact .hero .container { @@ -2201,7 +2190,7 @@ body { } .location h2:before { - content: ''; + content: ""; width: 26px; height: 14px; display: inline-block; @@ -2210,11 +2199,11 @@ body { } .location.london h2:before { - background-image: url('images/contact/contact-london.png'); + background-image: url("images/contact/contact-london.png"); } .location.singapore h2:before { - background-image: url('images/contact/contact-singapore.png'); + background-image: url("images/contact/contact-singapore.png"); } .location-address { @@ -2259,10 +2248,10 @@ body { } .page-about #flipflop-1 h2:after { - content: 'Pronunciation: /tAIk/'; + content: "Pronunciation: /tAIk/"; padding-left: 14px; font-size: 14px; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; font-weight: normal; } @@ -2279,7 +2268,7 @@ body { } .pricing-page-bg:before { - content: ''; + content: ""; position: absolute; display: block; background-position: bottom center; @@ -2306,7 +2295,7 @@ body { .section-pricing:before, .section-pricing:after, .pricing-intro.has-bullet:before { - content: ''; + content: ""; display: block; position: absolute; left: 182px; @@ -2403,7 +2392,7 @@ body { } .pricing-bg:before { - content: ''; + content: ""; height: 10px; position: absolute; left: 0; @@ -2453,7 +2442,7 @@ body { } .pricing-table-graphic:before { - content: ''; + content: ""; margin: 3px; background: $white; border-radius: 50%; @@ -2479,7 +2468,6 @@ body { color: #008594; } - /* Pricing Table : Professional */ .professional.pricing-table { width: 50%; @@ -2518,7 +2506,7 @@ body { } .professional .pricing-table-graphic span:after { - content: 'per annum'; + content: "per annum"; font-size: 18px; display: block; margin-top: -4px; @@ -2555,7 +2543,7 @@ body { } .pricing-table td.price:after { - content: 'per month'; + content: "per month"; } .pricing-table td.limit { @@ -2563,7 +2551,7 @@ body { } .pricing-table td.limit:after { - content: 'api calls per day'; + content: "api calls per day"; } .pricing-table .button { @@ -2572,13 +2560,13 @@ body { /* Pricing Table : Enterprise */ .enterprise .pricing-table-graphic { - background-image: url('images/pricing/icon-enterprise.png'); + background-image: url("images/pricing/icon-enterprise.png"); background-size: 100% auto; } .enterprise.pricing-bg { - background: #258B80; - background: linear-gradient(0deg, #258B80 8%, #2f3f9e 29%, #000018 90%); + background: #258b80; + background: linear-gradient(0deg, #258b80 8%, #2f3f9e 29%, #000018 90%); background-size: 150% auto; background-position: center center; } @@ -2645,19 +2633,25 @@ body { } .pricing-faq-answer:after { - content: ''; + content: ""; border-radius: 50%; - border: 3px solid #258B80; + border: 3px solid #258b80; } /* Pricing : Tyk Cloud */ .page-pricing.page-cloud .pricing-page-bg { background: #68c0e3 47%; - background: linear-gradient(110deg, #e1f3ff 0%, #68c0e3 47%, #056aa9 74%, #0549a7 100%); + background: linear-gradient( + 110deg, + #e1f3ff 0%, + #68c0e3 47%, + #056aa9 74%, + #0549a7 100% + ); } .page-pricing.page-cloud .pricing-page-bg:before { - background-image: url('images/animations/cloud/clouds.png'); + background-image: url("images/animations/cloud/clouds.png"); } /* Pricing : Tyk Hybrid */ @@ -2667,10 +2661,9 @@ body { } .page-pricing.page-hybrid .pricing-page-bg:before { - background-image: url('images/animations/cloud/clouds.png'); + background-image: url("images/animations/cloud/clouds.png"); } - /* Pricing : On Premise */ .page-pricing.page-on-premise .pricing-page-bg { background: #2c3569 11%; @@ -2678,7 +2671,7 @@ body { } .page-pricing.page-on-premise .pricing-page-bg:before { - background-image: url('images/pricing/clouds-alt.png'); + background-image: url("images/pricing/clouds-alt.png"); } /* ========================================================================== @@ -2708,7 +2701,7 @@ body { } .pricing-comparison .pricing-bg:before { - content: ''; + content: ""; width: 10px; height: 100%; display: block; @@ -2783,7 +2776,7 @@ body { .pricing-comparison-label:before, .pricing-comparison-label div:before, .pricing-comparison-label div:after { - content: ''; + content: ""; position: absolute; margin: auto; top: 0; @@ -2816,7 +2809,7 @@ body { } .pricing-comparison .pricing-comparison-intro:before { - content: ''; + content: ""; height: 10px; width: 100%; display: block; @@ -2839,7 +2832,13 @@ body { /* On Premise */ .pricing-comparison-onpremises .pricing-comparison-intro:before { background: #2c3569 0%; - background: linear-gradient(-90deg, #2c3569 0%, #ff6c7d 33%, #f3efc3 66%, $white 100%); + background: linear-gradient( + -90deg, + #2c3569 0%, + #ff6c7d 33%, + #f3efc3 66%, + $white 100% + ); } /* Cloud */ @@ -2850,7 +2849,7 @@ body { /* Hybrid */ .pricing-comparison-hybrid .pricing-comparison-intro:before { - background:#0569a9 0%; + background: #0569a9 0%; background: linear-gradient(-90deg, #0569a9 0%, #04dec4 33%, #f6f6e9 66%); } @@ -2884,7 +2883,7 @@ body { } .pricing-comparison-cloud .pricing-comparison-pro .limit:after { - content: ' API Calls per day'; + content: " API Calls per day"; } .pricing-comparison table { @@ -2905,8 +2904,8 @@ body { /* Enterprise */ .pricing-comparison-enterprise:before { - background: #258B80; - background: linear-gradient(-180deg, #258B80 0%, #052d96 40%, #000011 100%); + background: #258b80; + background: linear-gradient(-180deg, #258b80 0%, #052d96 40%, #000011 100%); } .pricing-comparison-enterprise h3 { @@ -2942,10 +2941,6 @@ body { margin-left: calc(-100% + -10px); } - - - - /* ========================================================================== Layout : Hero ========================================================================== */ @@ -3129,7 +3124,7 @@ body { } .layout-flipflop .container:before { - content: ''; + content: ""; padding-top: 36.4%; width: 100%; display: block; @@ -3211,7 +3206,6 @@ body { left: 0; } - /* ========================================================================== Layout : Button ========================================================================== */ @@ -3321,7 +3315,7 @@ body { .layout-footer:before, .layout-footer:after { - content: ''; + content: ""; position: absolute; top: 0; bottom: 0; @@ -3349,7 +3343,7 @@ body { ========================================================================== */ .layout-form { padding: 175px 0 116px 0; - background-image: url('images/layouts/contact.jpg'); + background-image: url("images/layouts/contact.jpg"); color: $white; } @@ -3466,8 +3460,9 @@ body { .layout-metrics { padding: 170px 0; text-align: center; - background: url('images/animations/cloud/stars.png'), #109eae; - background: url('images/animations/cloud/stars.png'), linear-gradient(60deg, #109eae 0%, #04dec4 100%); + background: url("images/animations/cloud/stars.png"), #109eae; + background: url("images/animations/cloud/stars.png"), + linear-gradient(60deg, #109eae 0%, #04dec4 100%); color: $white; background-position: top left; background-size: cover; @@ -3493,7 +3488,7 @@ body { bottom: 20px; border: 2px solid $white; border-radius: 50%; - content: ''; + content: ""; } .metric .v-center { @@ -3516,9 +3511,9 @@ body { ========================================================================== */ /* Hero */ .tyk-enterprise.hero { - background: #258B80; - background: #258B80; - background: linear-gradient(55deg, #258B80 0%, #2f3f9e 37%, #000018 100%); + background: #258b80; + background: #258b80; + background: linear-gradient(55deg, #258b80 0%, #2f3f9e 37%, #000018 100%); } /* Animation */ @@ -3541,7 +3536,7 @@ body { height: 1400px; left: -380px; top: -380px; - background-image: url('images/animations/enterprise/stars.png'); + background-image: url("images/animations/enterprise/stars.png"); } .tyk-enterprise-animation .layer2 { @@ -3549,7 +3544,7 @@ body { height: 907px; left: -133.5px; top: -133.5px; - background-image: url('images/animations/enterprise/clouds.png'); + background-image: url("images/animations/enterprise/clouds.png"); } .tyk-enterprise-animation .layer3 { @@ -3557,7 +3552,7 @@ body { height: 1056px; left: -208px; top: -208px; - background-image: url('images/animations/enterprise/clouds-2.png'); + background-image: url("images/animations/enterprise/clouds-2.png"); } .tyk-enterprise-animation .layer4 { @@ -3565,7 +3560,7 @@ body { height: 900px; left: -130px; top: -130px; - background-image: url('images/animations/enterprise/city.png'); + background-image: url("images/animations/enterprise/city.png"); } .tyk-enterprise-animation .layer1 { @@ -3597,7 +3592,13 @@ body { .tyk-cloud.hero { background: #e1f3ff; background: #e1f3ff; - background: linear-gradient(70deg, #e1f3ff 0%, #68c0e3 47%, #056aa9 74%, #0549a7 100%); + background: linear-gradient( + 70deg, + #e1f3ff 0%, + #68c0e3 47%, + #056aa9 74%, + #0549a7 100% + ); color: #000018; } @@ -3607,12 +3608,12 @@ body { /* Animation */ .tyk-cloud-animation .layer1 { - background: url('images/animations/cloud/stars.png') no-repeat top right; + background: url("images/animations/cloud/stars.png") no-repeat top right; background-size: 100% auto; } .tyk-cloud-animation .layer2 { - background: url('images/animations/cloud/clouds.png') repeat-x bottom left; + background: url("images/animations/cloud/clouds.png") repeat-x bottom left; -moz-animation: bgRight 200s infinite linear; -o-animation: bgRight 200s infinite linear; -webkit-animation: bgRight 200s infinite linear; @@ -3631,11 +3632,11 @@ body { } .cloud.layout-footer:before { - background-image: url('images/animations/cloud/stars.png'); + background-image: url("images/animations/cloud/stars.png"); } .cloud.layout-footer:after { - background-image: url('images/animations/cloud/footer.png'); + background-image: url("images/animations/cloud/footer.png"); } /* ========================================================================== @@ -3644,31 +3645,42 @@ body { .tyk-on-premises.hero { background: #2c3569; background: #2c3569; - background: linear-gradient(-110deg, #2c3569 0%, #ff6c7d 28%, #f3efc3 58%, $white 100%); + background: linear-gradient( + -110deg, + #2c3569 0%, + #ff6c7d 28%, + #f3efc3 58%, + $white 100% + ); color: #000018; } .tyk-on-premises-animation .layer1 { - background: url('images/animations/cloud/stars.png') no-repeat top right; + background: url("images/animations/cloud/stars.png") no-repeat top right; background-size: 100% auto; } .tyk-on-premises-animation .layer2 { - background: url('images/animations/onpremises/city.png') repeat-x top center; + background: url("images/animations/onpremises/city.png") repeat-x top center; background-size: auto 100%; } .on-premise.layout-footer { background: $white; background: #2c3569; - background: linear-gradient(110deg, #2c3569 0%, #ff6c7d 19%, #f3efc3 43%, $white 61%); + background: linear-gradient( + 110deg, + #2c3569 0%, + #ff6c7d 19%, + #f3efc3 43%, + $white 61% + ); } .on-premise.layout-footer:after { - background-image: url('images/animations/onpremises/footer.png'); + background-image: url("images/animations/onpremises/footer.png"); } - /* ========================================================================== Product : Tyk Hybrid ========================================================================== */ @@ -3680,7 +3692,7 @@ body { } .tyk-hybrid-animation .layer2 { - background: url('images/animations/hybrid/hybrid.png') repeat-x top center; + background: url("images/animations/hybrid/hybrid.png") repeat-x top center; background-size: auto 100%; } @@ -3691,14 +3703,13 @@ body { } .hybrid.layout-footer:before { - background-image: url('images/animations/cloud/stars.png'); + background-image: url("images/animations/cloud/stars.png"); } .hybrid.layout-footer:after { - background-image: url('images/animations/hybrid/footer.png'); + background-image: url("images/animations/hybrid/footer.png"); } - /* ========================================================================== Features ========================================================================== */ @@ -3714,7 +3725,7 @@ body { } .features-animation { - background: url('images/animations/features/bg.png') no-repeat top center; + background: url("images/animations/features/bg.png") no-repeat top center; background-size: auto 100%; width: 888px; height: 580px; @@ -3725,22 +3736,23 @@ body { } .features-animation .layer1 { - background: url('images/animations/features/glow.png') no-repeat top center; + background: url("images/animations/features/glow.png") no-repeat top center; opacity: 0; } .features-animation .layer2 { - background: url('images/animations/features/tyk.png') no-repeat 0 -100%; + background: url("images/animations/features/tyk.png") no-repeat 0 -100%; height: 50%; } .features-animation .layer3 { - background: url('images/animations/features/glow-outer.png') no-repeat top center; + background: url("images/animations/features/glow-outer.png") no-repeat top + center; opacity: 0; } .features-animation .layer4 { - background: url('images/animations/features/mask.png') no-repeat top center; + background: url("images/animations/features/mask.png") no-repeat top center; } .features-animation.loaded .layer1 { @@ -3767,7 +3779,6 @@ body { transition: background 2s cubic-bezier(1, 0.01, 0, 1.22); } - /* ========================================================================== Extend ========================================================================== */ @@ -3782,7 +3793,7 @@ body { } .extend-animation { - background: url('images/animations/extend/bg.png') no-repeat top center; + background: url("images/animations/extend/bg.png") no-repeat top center; width: 1150px; height: 455px; bottom: 0; @@ -3818,10 +3829,10 @@ body { position: absolute; top: -14px; left: 0; - background: url('images/icon-diamond.svg'); + background: url("images/icon-diamond.svg"); background-size: 100% auto; z-index: 0; - content: ''; + content: ""; } /* ========================================================================== @@ -3829,7 +3840,7 @@ body { ========================================================================== */ .woocommerce table { width: 100%; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; text-align: left; } @@ -3853,13 +3864,13 @@ body { .woocommerce input, .woocommerce textarea { - border: 1px solid #E1E1E1; + border: 1px solid #e1e1e1; height: 48px; line-height: 46px; } -.woocommerce input[type=checkbox], -.woocommerce input[type=radio] { +.woocommerce input[type="checkbox"], +.woocommerce input[type="radio"] { height: auto; } @@ -3870,7 +3881,7 @@ body { .woocommerce input:placeholder-shown:valid, .woocommerce textarea:placeholder-shown:valid { - border-color: #E1E1E1; + border-color: #e1e1e1; } .woocommerce .button { @@ -3912,7 +3923,7 @@ body { .woocommerce-message { padding: 20px 0 20px 0; - border-bottom: 1px solid #EFEFEF; + border-bottom: 1px solid #efefef; margin-bottom: 20px; } @@ -3943,7 +3954,7 @@ body { } .product .section-faqs { - border-top: 1px solid #EFEFEF; + border-top: 1px solid #efefef; padding: 30px 0 0 0; margin-top: 30px; } @@ -3965,7 +3976,7 @@ body { } .checkout-button { - background: #258B80; + background: #258b80; } .coupon { @@ -3999,12 +4010,12 @@ body { color: #131219; line-height: 1; text-transform: uppercase; - border-bottom: 1px solid #E1E1E1; + border-bottom: 1px solid #e1e1e1; } .actions { padding: 20px 0; - border-top: 1px solid #E1E1E1; + border-top: 1px solid #e1e1e1; } .remove { @@ -4013,7 +4024,7 @@ body { line-height: 40px; text-align: center; font-size: 22px; - color: #CCC; + color: #ccc; display: inline-block; } @@ -4040,14 +4051,14 @@ body { } .cart_totals .button { - background: #258B80; + background: #258b80; border: 0; color: $white; } .cart_totals table { - border-bottom: 1px solid #E1E1E1; - border-top: 1px solid #E1E1E1; + border-bottom: 1px solid #e1e1e1; + border-top: 1px solid #e1e1e1; } .wc-proceed-to-checkout { @@ -4076,8 +4087,8 @@ body { } .woocommerce-checkout-review-order-table { - border-bottom: 1px solid #E1E1E1; - border-top: 1px solid #E1E1E1; + border-bottom: 1px solid #e1e1e1; + border-top: 1px solid #e1e1e1; padding: 20px 0; margin: 20px 0; } @@ -4087,7 +4098,7 @@ body { } #place_order { - background: #258B80; + background: #258b80; border: 0; color: $white; } @@ -4138,26 +4149,30 @@ body { /* Select 2 */ .select2-container--default .select2-selection--single { border-radius: 0 !important; - border: 1px solid #EFEFEF !important; + border: 1px solid #efefef !important; height: 48px !important; line-height: 46px !important; } -.select2-container--default .select2-selection--single .select2-selection__rendered { +.select2-container--default + .select2-selection--single + .select2-selection__rendered { line-height: 48px !important; } -.select2-container--default .select2-selection--single .select2-selection__arrow { +.select2-container--default + .select2-selection--single + .select2-selection__arrow { height: 48px !important; } .select2-dropdown { - border: 1px solid #EFEFEF !important; + border: 1px solid #efefef !important; border-radius: 0 !important; } .wc-payment-form { - background: #EFEFEF; + background: #efefef; padding: 20px; border: 0; border-radius: 24px; @@ -4176,12 +4191,12 @@ body { .woocommerce-MyAccount-navigation ul { margin-bottom: 0; - border-bottom: 1px solid #EFEFEF; + border-bottom: 1px solid #efefef; } .woocommerce-MyAccount-navigation li { list-style-type: none; - border: 1px solid #EFEFEF; + border: 1px solid #efefef; border-bottom: 0; padding: 0 15px; margin: 0 4px 0 0; @@ -4195,7 +4210,7 @@ body { } .woocommerce-MyAccount-navigation .is-active:before { - content: ''; + content: ""; height: 1px; background: $white; position: absolute; @@ -4239,8 +4254,8 @@ body { .woocommerce-MyAccount-content .woocommerce-message { top: 0; - border-top: 1px solid #EFEFEF; - border-right: 1px solid #EFEFEF; + border-top: 1px solid #efefef; + border-right: 1px solid #efefef; } .woocommerce-MyAccount-content .col2-set { @@ -4262,16 +4277,18 @@ body { Transitions ========================================================================== */ .menu-underline { - -webkit-transition: left 0.5s cubic-bezier(1, 0.01, 0, 1.22), width 0.5s cubic-bezier(1, 0.01, 0, 1.22); - transition: left 0.5s cubic-bezier(1, 0.01, 0, 1.22), width 0.5s cubic-bezier(1, 0.01, 0, 1.22); + -webkit-transition: left 0.5s cubic-bezier(1, 0.01, 0, 1.22), + width 0.5s cubic-bezier(1, 0.01, 0, 1.22); + transition: left 0.5s cubic-bezier(1, 0.01, 0, 1.22), + width 0.5s cubic-bezier(1, 0.01, 0, 1.22); } .menu, .submenu, .open .submenu, .blog-sidebar { - -webkit-transition: transform 0.75s cubic-bezier(.77, 0, .175, 1); - transition: transform 0.75s cubic-bezier(.77, 0, .175, 1); + -webkit-transition: transform 0.75s cubic-bezier(0.77, 0, 0.175, 1); + transition: transform 0.75s cubic-bezier(0.77, 0, 0.175, 1); } .submenu li { @@ -4339,8 +4356,8 @@ body { /* Page Submenu */ .page-submenu { - -webkit-transition: transform 0.75s cubic-bezier(.77, 0, .175, 1); - transition: transform 0.75s cubic-bezier(.77, 0, .175, 1); + -webkit-transition: transform 0.75s cubic-bezier(0.77, 0, 0.175, 1); + transition: transform 0.75s cubic-bezier(0.77, 0, 0.175, 1); } /* Homepage */ @@ -4686,8 +4703,7 @@ body { Media Queries ========================================================================== */ -@media only screen and (min-width : 1336px) { - +@media only screen and (min-width: 1336px) { /* Fix Sidebar */ .hasSidebar .container:before { width: 413px; @@ -4697,7 +4713,7 @@ body { .hasSidebar aside:before, .blog-sidebar:before { - content: ''; + content: ""; z-index: -1; position: fixed; top: 0; @@ -4711,10 +4727,7 @@ body { } } -@media only screen and (max-width : 1336px) { - - - +@media only screen and (max-width: 1336px) { /* Layout : Metrics - Full Width */ .layout-metrics .container { max-width: none; @@ -4722,11 +4735,11 @@ body { /* Case Studies - Tuck in Padding */ .case-study { - padding: 26px 26px 100px 26px + padding: 26px 26px 100px 26px; } } -@media only screen and (max-width : 1100px) { +@media only screen and (max-width: 1100px) { /* .burger {width: 60px; height: 60px; position: fixed; top:0; right: 0; background: rgba(0,0,24,0.85); z-index: 3; display: inline-block; } .burger:before, .burger:after {content: ''; width: 23px; margin: auto; position: absolute; top:0; bottom: 0; left:0; right:0;} @@ -4759,7 +4772,7 @@ body { .menu:before, .menu:after { - content: ''; + content: ""; position: absolute; left: 26px; display: block; @@ -4767,7 +4780,7 @@ body { .menu:before { height: 1px; - background: #258B80; + background: #258b80; width: 30px; top: 97px; } @@ -4775,7 +4788,7 @@ body { .menu:after { height: 28px; width: 73px; - background: url('images/header-logo.svg'); + background: url("images/header-logo.svg"); top: 30px; } @@ -4783,7 +4796,7 @@ body { display: none; } - .menu>ul { + .menu > ul { text-align: left; margin-top: 94px; width: 100%; @@ -4841,8 +4854,8 @@ body { } .show-menu .burger:after { - content: '\e801'; - font-family: 'Inter', sans-serif; + content: "\e801"; + font-family: "Inter", sans-serif; font-size: 18px; color: $white; line-height: 50px; @@ -4893,13 +4906,10 @@ body { left: 10px; right: 10px; } - } - /* ----------- Smartphones (portrait and landscape) ----------- */ @include breakpoint(large, down) { - .m-show { display: block; } @@ -4960,7 +4970,7 @@ body { } .wysiwyg pre { - /* margin-left: -26px; */ + /* margin-left: -26px; */ margin-right: -26px; padding: 26px; } @@ -5026,7 +5036,7 @@ body { .hero-animation:before { width: 100%; - content: ''; + content: ""; display: block; } @@ -5269,7 +5279,7 @@ body { } .section-product.cloud .container { - background-image: url('images/homepage/tyk_cloud_mobile.png'); + background-image: url("images/homepage/tyk_cloud_mobile.png"); } .section-product.cloud .product-caption { @@ -5287,7 +5297,7 @@ body { /* On Premise */ .section-product.on-premise .container { - background-image: url('images/homepage/tyk_onpremise_mobile.jpg'); + background-image: url("images/homepage/tyk_onpremise_mobile.jpg"); background-color: $white; } @@ -5301,7 +5311,7 @@ body { /* Hybrid */ .section-product.hybrid .container { - background-image: url('images/homepage/tyk_hybrid_mobile.jpg'); + background-image: url("images/homepage/tyk_hybrid_mobile.jpg"); } .section-product.hybrid { @@ -5358,8 +5368,8 @@ body { } .page-home .tyk-enterprise-animation { - background: #258B80; - background: linear-gradient(0deg, #258B80 9%, #2f3f9e 41%, #000018 78%); + background: #258b80; + background: linear-gradient(0deg, #258b80 9%, #2f3f9e 41%, #000018 78%); } .page-home .tyk-enterprise-animation { @@ -5449,7 +5459,13 @@ body { .tyk-cloud.hero { background: #e1f3ff; - background: linear-gradient(-180deg, #e1f3ff 32%, #68c0e3 61%, #056aa9 80%, #0549a7 90%); + background: linear-gradient( + -180deg, + #e1f3ff 32%, + #68c0e3 61%, + #056aa9 80%, + #0549a7 90% + ); } .cloud.layout-footer { @@ -5475,17 +5491,29 @@ body { } .tyk-on-premises-animation .layer2 { - background-image: url('images/animations/onpremises/city_mobile.png'); + background-image: url("images/animations/onpremises/city_mobile.png"); } .tyk-on-premises.hero { background: #2c3569; - background: linear-gradient(0deg, #2c3569 15%, #ff6c7d 29%, #f3efc3 58%, $white 100%); + background: linear-gradient( + 0deg, + #2c3569 15%, + #ff6c7d 29%, + #f3efc3 58%, + $white 100% + ); } .on-premise.layout-footer { background: #2c3569; - background: linear-gradient(-180deg, #2c3569 4%, #ff6c7d 24%, #f3efc3 49%, $white 75%); + background: linear-gradient( + -180deg, + #2c3569 4%, + #ff6c7d 24%, + #f3efc3 49%, + $white 75% + ); background-size: auto 150%; background-position: center; } @@ -5508,7 +5536,7 @@ body { } .tyk-hybrid-animation .layer2 { - background-image: url('images/animations/hybrid/hybrid_mobile.png'); + background-image: url("images/animations/hybrid/hybrid_mobile.png"); } .tyk-hybrid.hero { @@ -5530,13 +5558,12 @@ body { background-position: 50% 60%; } - /* ========================================================================== Page : Enterprise ========================================================================== */ .tyk-enterprise.hero { - background: #258B80; - background: linear-gradient(-180deg, #258B80 9%, #2f3f9e 41%, #000018 78%); + background: #258b80; + background: linear-gradient(-180deg, #258b80 9%, #2f3f9e 41%, #000018 78%); background-size: auto 120%; background-position: center; } @@ -5603,7 +5630,7 @@ body { } .layout-flipflop figure:before { - content: ''; + content: ""; padding-top: 53.333333333333%; width: 100%; display: block; @@ -5714,8 +5741,8 @@ body { /* Form */ .layout-form { padding: 50px 0 40px 0; - background: #258B80; - background: linear-gradient(-180deg, #258B80 7%, #2f3f9e 35%, #000018 81%); + background: #258b80; + background: linear-gradient(-180deg, #258b80 7%, #2f3f9e 35%, #000018 81%); background-size: auto 150%; background-position: center; } @@ -5743,7 +5770,6 @@ body { margin-right: auto; } - /* Careers */ .layout-careers { padding: 46px 0 0 0; @@ -5821,7 +5847,6 @@ body { bottom: 20px; } - .pricing-intro { padding: 0 26px 49px 76px; } @@ -5907,7 +5932,6 @@ body { padding-top: 68%; } - .pricing-bg { padding: 30px; } @@ -6056,7 +6080,7 @@ body { } .pricing-button-row:before { - content: ''; + content: ""; width: 10px; height: 100%; display: block; @@ -6064,7 +6088,7 @@ body { left: 0; bottom: 0; position: absolute; - background: #FF1745; + background: #ff1745; } .pricing-button-row { @@ -6092,6 +6116,12 @@ body { padding-left: 0; float: none; padding-top: 110px; + + @include breakpoint(large, down) { + padding-top: calc( + #{$toc-header-height-mobile} + #{$header-height-small} + 1rem + ); + } } .page-aside img { @@ -6104,7 +6134,6 @@ body { columns: initial; } - /* ========================================================================== Page : Team ========================================================================== */ @@ -6390,7 +6419,7 @@ body { Get Started ========================================================================== */ .section-getstarted:before { - display: none + display: none; } .section-getstarted article { @@ -6427,11 +6456,9 @@ body { .getstarted-products div { margin-right: 26px; } - } -@media only screen and (max-width : 768px) { - +@media only screen and (max-width: 768px) { /* ========================================================================== Page : Contact - One Column ========================================================================== */ @@ -6471,7 +6498,6 @@ body { .location-map { height: 242px; } - } /* ========================================================================== @@ -6510,7 +6536,7 @@ body { -khtml-user-select: none; -ms-touch-action: pan-y; touch-action: pan-y; - -webkit-tap-highlight-color: transparent + -webkit-tap-highlight-color: transparent; } .slick-list { @@ -6518,16 +6544,16 @@ body { display: block; overflow: hidden; margin: 0; - padding: 0 + padding: 0; } .slick-list:focus { - outline: none + outline: none; } .slick-list.dragging { cursor: pointer; - cursor: hand + cursor: hand; } .slick-slider .slick-track, @@ -6536,72 +6562,71 @@ body { -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0) + transform: translate3d(0, 0, 0); } .slick-track { position: relative; top: 0; left: 0; - display: block + display: block; } .slick-track:before, .slick-track:after { display: table; - content: '' + content: ""; } .slick-track:after { - clear: both + clear: both; } .slick-loading .slick-track { - visibility: hidden + visibility: hidden; } .slick-slide { display: none; float: left; height: 100%; - min-height: 1px + min-height: 1px; } -[dir='rtl'] .slick-slide { - float: right +[dir="rtl"] .slick-slide { + float: right; } .slick-slide img { - display: block + display: block; } .slick-slide.slick-loading img { - display: none + display: none; } .slick-slide.dragging img { - pointer-events: none + pointer-events: none; } .slick-initialized .slick-slide { - display: block + display: block; } .slick-loading .slick-slide { - visibility: hidden + visibility: hidden; } .slick-vertical .slick-slide { display: block; height: auto; - border: 1px solid transparent + border: 1px solid transparent; } .slick-arrow.slick-hidden { - display: none + display: none; } - /* ========================================================================== venobox.css ========================================================================== */ @@ -6628,7 +6653,6 @@ body { opacity: 0; overflow-x: hidden; overflow-y: auto; - } /* ----- navigation ----- */ @@ -6654,7 +6678,7 @@ body { .vbox-prev:before, .vbox-next:before { - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; font-size: 26px; width: 50px; height: 50px; @@ -6663,14 +6687,13 @@ body { } .vbox-prev:before { - content: '\e801'; + content: "\e801"; } .vbox-next:before { - content: '\e802'; + content: "\e802"; } - /* ------- PLease do NOT edit this! (or do it at your own risk) ------ */ .vbox-open { overflow: hidden; @@ -6698,4 +6721,3 @@ body { height: auto; margin: auto; } - diff --git a/tyk-docs/assets/scss/_docs.scss b/tyk-docs/assets/scss/_docs.scss index 094194c394..666b658e57 100644 --- a/tyk-docs/assets/scss/_docs.scss +++ b/tyk-docs/assets/scss/_docs.scss @@ -10,8 +10,6 @@ justify-content: center; } - - .badge { background: $white; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); @@ -112,7 +110,7 @@ } .badge .nav.title { - background-color: #8438FA; + background-color: #8438fa; color: white; } @@ -197,7 +195,7 @@ margin-top: 40px !important; } -.grid.big .badge>.read { +.grid.big .badge > .read { display: none; } @@ -206,7 +204,7 @@ max-width: 300px; white-space: normal; @media (max-width: 555px) { - max-width: 100%; + max-width: 100%; } } @@ -274,7 +272,7 @@ } .grid.big .badge .bottom .read { - color: #258B80; + color: #258b80; font-size: 14px; font-weight: bold; margin-bottom: 10px; @@ -286,12 +284,6 @@ vertical-align: text-top; } - - - - - - .return-top { display: none; } @@ -304,12 +296,6 @@ top: 0px !important; } - - - - - - /* Edit on GitHub button */ .button.medium { color: white; @@ -321,12 +307,6 @@ line-height: 26px; } -/* iframe display */ -iframe { - margin-top: 20px; - margin-bottom: 20px; -} - /* Table top margin */ .wysiwyg table { margin-top: 20px; @@ -342,10 +322,10 @@ iframe { } /* Link icon */ -#main-content h2>a>img, -#main-content h3>a>img, -#main-content h4>a>img, -#main-content h5>a>img { +#main-content h2 > a > img, +#main-content h3 > a > img, +#main-content h4 > a > img, +#main-content h5 > a > img { vertical-align: middle; border: none !important; height: 17px; @@ -361,7 +341,6 @@ iframe { border-color: $white; } - /* Hero image */ .hero-sidebyside img { margin-right: 20px; @@ -379,12 +358,6 @@ iframe { width: 400px; } - - - - - - /* Suggest an Edit */ .suggest-edit { width: auto; @@ -521,22 +494,12 @@ iframe { margin-bottom: 32px; } - - - - - - - - - /* Documentation : Navigation */ .docs-navigation { padding: 80px 0; margin-top: 10px; border-top: 1px solid rgba(122, 121, 161, 0.4); display: none; - } .hasSidebar .docs-navigation { @@ -546,7 +509,8 @@ iframe { justify-content: center; flex-direction: row; } - #previousArticle, #nextArticle{ + #previousArticle, + #nextArticle { @media (max-width: 1024px) { max-width: 160px; margin: auto; @@ -558,11 +522,11 @@ iframe { } } -.docs-navigation>div { +.docs-navigation > div { display: table-row; } -.docs-navigation>div>* { +.docs-navigation > div > * { display: table-cell; vertical-align: middle; } @@ -622,15 +586,6 @@ iframe { font-family: "Inter", sans-serif; } - - - - - - - - - /* Return to Top buttons */ #return-to-top { @@ -675,16 +630,6 @@ iframe { } } - - - - - - - - - - /* Documentation : Share - Print*/ .docs-share-print { padding: 10px 0; @@ -751,7 +696,6 @@ iframe { border-radius: 20px; } - @media only screen and (max-width: 1000px) { .hero-sidebyside h1, .hero-sidebyside .hero-text { @@ -806,8 +750,6 @@ iframe { margin-right: 0; } - - .docs-navigation .button { margin-bottom: 5px; } @@ -893,9 +835,9 @@ iframe { .external-links::after { content: ""; - background: url("../img/external-link.svg") no-repeat 0 0; - width: 16px!important; - height: 16px!important; + background: url("../img/external-link.svg") no-repeat 0 0; + width: 16px !important; + height: 16px !important; display: inline-block; top: 0; background-size: 100%; @@ -903,10 +845,10 @@ iframe { .external-links-black::after { content: ""; - background: url("../img/external-white.svg") no-repeat 0 0; - width: 16px!important; - height: 16px!important; + background: url("../img/external-white.svg") no-repeat 0 0; + width: 16px !important; + height: 16px !important; display: inline-block; top: 0; background-size: 100%; -} \ No newline at end of file +} diff --git a/tyk-docs/assets/scss/_header.scss b/tyk-docs/assets/scss/_header.scss index ab6a72e421..1953b2adc5 100644 --- a/tyk-docs/assets/scss/_header.scss +++ b/tyk-docs/assets/scss/_header.scss @@ -43,7 +43,7 @@ margin-right: 0; } } - + .header__search { flex-grow: 1; } @@ -82,7 +82,6 @@ display: none; } - @media (min-width: 1001px) and (max-width: 1250px) { label[for="extend-links"] { display: flex; @@ -123,7 +122,6 @@ display: block; } } - } .header__tabs-menu { @@ -141,7 +139,7 @@ color: $brand-black; font-size: 18px; font-weight: bold; - font-family: 'Inter', sans-serif; + font-family: "Inter", sans-serif; white-space: nowrap; &:not(:first-child) { @@ -217,7 +215,7 @@ } .menu .menu-underline { - background: #258B80; + background: #258b80; height: 2px; position: absolute; bottom: 0; @@ -270,14 +268,10 @@ visibility: visible; } - - - /* ========================================================================== Header Media Queries ========================================================================== */ - @include breakpoint(large, down) { .burger { width: 40px; @@ -289,7 +283,6 @@ z-index: 3; display: inline-block; border-radius: 40px; - &:before, &:after { @@ -325,9 +318,6 @@ } } - - - .header { padding: 0; height: $header-height-small; @@ -357,23 +347,28 @@ width: calc(100% - 80px); } } - } - } .home_header { - border-bottom: 1px solid #E3CEFF; + border-bottom: 1px solid #e3ceff; + + @include breakpoint(large, down) { + position: fixed; + z-index: 99; + width: 100vw; + background: $improve-page-background; + } } + @include breakpoint(large, up) { .home_header { - padding-left: 50px; - padding-right: 20px; - + padding-left: 1rem; + padding-right: 1rem; } } -.header-refresh{ +.header-refresh { display: flex; align-items: center; justify-content: space-between; @@ -387,7 +382,6 @@ margin-right: 70px; } } - } .header__nav_container { display: flex; @@ -397,10 +391,10 @@ .header_link { color: var(--text-subdued, #515071); - font-feature-settings: 'clig' off, 'liga' off; + font-feature-settings: "clig" off, "liga" off; font-size: 14px; font-style: normal; font-weight: 500; line-height: 20px; padding: 2px; -} \ No newline at end of file +} diff --git a/tyk-docs/assets/scss/_side-menu.scss b/tyk-docs/assets/scss/_side-menu.scss index 2223c4a4df..2bcaa9272e 100644 --- a/tyk-docs/assets/scss/_side-menu.scss +++ b/tyk-docs/assets/scss/_side-menu.scss @@ -2,522 +2,515 @@ Tree View ========================================================================== */ .page-submenu { - display: flex; - flex-direction: column; - justify-content: space-between; - width: 20%; + display: flex; + flex-direction: column; + justify-content: space-between; + width: $sidebar-width; + + @include breakpoint(large) { + .section-page:not(.hasSidebar) & { + display: none; + } + } + + @include breakpoint(large, down) { + .section-page:not(.hasSidebar) & { + .header__tabs-menu { + flex-grow: 2; + } + } + } + + .menu-external { + padding: 1rem 0; + border-top: 1px solid $brandpurple-3; + min-height: 275px !important; @include breakpoint(large) { - .section-page:not(.hasSidebar) & { - display: none ; - } + display: none; } - @include breakpoint(large, down) { - .section-page:not(.hasSidebar) & { - .header__tabs-menu { - flex-grow: 2; - } - } + a { + font-size: 14px; + text-transform: uppercase; + font-weight: bold; + color: $brandpurple-7; + display: block; + text-align: left; + padding: 0.25rem 1rem; } + } - .menu-external { - padding: 1rem 0; - border-top: 1px solid $brandpurple-3; + .header__tabs-menu { + height: auto; + border-bottom: 0; - @include breakpoint(large) { - display: none; - } - - a { - font-size: 14px; - text-transform: uppercase; - font-weight: bold; - color: $brandpurple-7; - display: block; - text-align: left; - padding: 0.25rem 1rem; - } + a { + display: block; + padding: 0.5rem 0; + margin-inline-start: 0; + font-weight: normal; + + &:before { + bottom: 0px; + } } - .header__tabs-menu { - height: auto; - border-bottom: 0; + &--collapsable { + padding: 0; - a { - display: block; - padding: 0.5rem 0; - margin-inline-start: 0; - font-weight: normal; + .links-container { + display: flex; + flex-direction: column; + position: relative; - &:before { - bottom: 0px; - } + &--dropdown { + display: none; } - &--collapsable { - padding: 0; - - .links-container { - display: flex; - flex-direction: column; - position: relative; - - &--dropdown { - display: none; - } - - &.js-open .links-container--dropdown { - display: block; - position: absolute; - top: calc(100% - 2px); - left: 0; - width: 100%; - background: $white; - z-index: 2; - border-radius: 0 0 4px 4px; - } - } - - - a { - margin-right: 0; - padding: 0.5rem 1rem; - padding-inline-start: 30px; - - &:hover { - color: $brandgreen-4; - } - - &:before { - display: none; - } - - &.active { - display: block; - background-color: $white; - border-radius: 4px; - order: -1; - font-weight: bold; - - &::after { - content: ''; - pointer-events: bounding-box; - background-image: url('../img/icon-caret.svg'); - background-repeat: no-repeat; - background-position: right; - width: 100%; - height: 20px; - position: absolute; - right: 10px; - transition: scale 0.2s; - cursor: pointer; - } - } - } - - .links-container.js-open { - a.active::after { - scale: 1 -1; - } - - a.active { - border-radius: 4px 4px 0 0; - } - } - - @include breakpoint(large) { - display: none; - } + &.js-open .links-container--dropdown { + display: block; + position: absolute; + top: calc(100% - 2px); + left: 0; + width: 100%; + background: $white; + z-index: 2; + border-radius: 0 0 4px 4px; } - } - -} - -.aside-submenu { - flex-grow: 1; - padding-inline-end: 1rem; - overflow-y: scroll; - -} + } -.version-selector { - display: flex; - justify-content: space-between; - align-items: center; - padding-block: 1rem; - padding-inline-end: 1rem; - border-block-start: 1px solid $brandpurple-1; - color: $brand-black; + a { + margin-right: 0; + padding: 0.5rem 1rem; + padding-inline-start: 30px; - select { - border: 1px solid $brand-black; - padding: 0 0.25rem; - border-radius: 4px; - color: $brandpurple-7; - background-color: white; - } -} + &:hover { + color: $brandgreen-4; + } -.st-treed { - --caret-size: 20px; - font-size: 15px; + &:before { + display: none; + } - ul { - margin-top: 5px; - position: relative; - } + &.active { + display: block; + background-color: $white; + border-radius: 4px; + order: -1; + font-weight: bold; - li { - list-style: none; - width: 100%; - padding-left: 25px; - list-style-type: none; - line-height: 20px; - //margin-bottom: 20px; // - padding-bottom: 4px; - position: relative; - background: transparent !important; - // cursor: pointer; // - // display: block; // - - &:not(.st-file):after { + &::after { + content: ""; pointer-events: bounding-box; - content: ''; - background-image: url('../img/icon-caret.svg'); + background-image: url("../img/icon-caret.svg"); background-repeat: no-repeat; background-position: right; - inline-size: 100%; - block-size: var(--caret-size); + width: 100%; + height: 20px; position: absolute; - top: 0; - right: 0; - bottom: 0; - cursor: pointer; - scale: 1 -1; + right: 10px; transition: scale 0.2s; + cursor: pointer; + } } + } - &.category-Directory { - color: $brand-black; - &:hover > a { - color: $brandpurple-11; - font-weight: bold; - letter-spacing: initial; - } - - &:not(:has(li)) a { - border: 1px solid red; - display: block; - width: 100%; - height: 100%; - text-decoration: none; - padding: 10px 15px; - } + .links-container.js-open { + a.active::after { + scale: 1 -1; } - } - - .st-collapsed { - block-size: var(--caret-size); - overflow: hidden; - display: table; - // padding-bottom: 20px; // - line-height: 30px; - ul { - display: none; + a.active { + border-radius: 4px 4px 0 0; } + } - &:not(.st-file):after { - scale: 1; - } + @include breakpoint(large) { + display: none; + } } + } +} +.aside-submenu { + flex-grow: 1; + padding-inline-end: 1rem; + overflow-y: scroll; +} - a { - display: block; - position: relative; - pointer-events: auto; - width: calc(100% - 30px); +.version-selector { + display: flex; + justify-content: space-between; + align-items: center; + border-block-start: 1px solid $brandpurple-1; + color: $brand-black; + + select { + border: 1px solid $brand-black; + padding: 0 0.25rem; + border-radius: 4px; + color: $brandpurple-7; + background-color: white; + margin-left: 0.25rem; + } +} - &:hover { - color: $brandpurple-dark; - } +.st-treed { + --caret-size: 20px; + font-size: 15px; + + ul { + margin-top: 5px; + position: relative; + } + + li { + list-style: none; + width: 100%; + padding-left: 25px; + list-style-type: none; + line-height: 20px; + //margin-bottom: 20px; // + padding-bottom: 4px; + position: relative; + background: transparent !important; + // cursor: pointer; // + // display: block; // + + &:not(.st-file):after { + pointer-events: bounding-box; + content: ""; + background-image: url("../img/icon-caret.svg"); + background-repeat: no-repeat; + background-position: right; + inline-size: 100%; + block-size: var(--caret-size); + position: absolute; + top: 0; + right: 0; + bottom: 0; + cursor: pointer; + scale: 1 -1; + transition: scale 0.2s; } -} + &.category-Directory { + color: $brand-black; + &:hover > a { + color: $brandpurple-11; + font-weight: bold; + letter-spacing: initial; + } -.st-treed .category-Label { - &:after { - background-image: none !important; + &:not(:has(li)) a { + border: 1px solid red; + display: block; + width: 100%; + height: 100%; + text-decoration: none; + padding: 10px 15px; + } } + } - &.st-collapsed:after { - background-image: none !important; + .st-collapsed { + block-size: var(--caret-size); + overflow: hidden; + display: table; + // padding-bottom: 20px; // + line-height: 30px; + + ul { + display: none; } - ul > li { - padding-left: 0; + &:not(.st-file):after { + scale: 1; } + } + + a { + display: block; + position: relative; + pointer-events: auto; + width: calc(100% - 30px); - ul:before { - width: 0 !important; - background-color: white !important; + &:hover { + color: $brandpurple-dark; } + } +} + +.st-treed .category-Label { + &:after { + background-image: none !important; + } + + &.st-collapsed:after { + background-image: none !important; + } + + ul > li { + padding-left: 0; + } + + ul:before { + width: 0 !important; + background-color: white !important; + } } .st-file { - position: relative; - cursor: pointer; + position: relative; + cursor: pointer; } /* Tree : Icons */ -.st-treed>ul>li:before { - content: ''; - position: absolute; - top: 0; - left: 0; - height: 18px; - width: 18px; - background-repeat: no-repeat; - background-position: center; - background-size: contain; +.st-treed > ul > li:before { + content: ""; + position: absolute; + top: 0; + left: 0; + height: 18px; + width: 18px; + background-repeat: no-repeat; + background-position: center; + background-size: contain; } -.paint-red{ - border: 1px solid red!important; +.paint-red { + border: 1px solid red !important; } .no-icons { - .st-treed>ul>li { - padding-left: 0; - padding-bottom: 14px; - padding-top: 5px; - line-height: 20px; - - &:before { - display: none; - } + .st-treed > ul > li { + padding-left: 0; + padding-bottom: 14px; + padding-top: 5px; + line-height: 20px; + + &:before { + display: none; } + } } .st-treed > ul > li { - &:nth-child(1):before { - background-image: url('../images/tyk_docs_nav_home_icon.svg'); - } + &:nth-child(1):before { + background-image: url("../images/tyk_docs_nav_home_icon.svg"); + } - &:nth-child(2):before { - background-image: url('../images/tyk_docs_nav_apim_icon.svg'); - } + &:nth-child(2):before { + background-image: url("../images/tyk_docs_nav_apim_icon.svg"); + } - &:nth-child(3):before { - background-image: url('../images/tyk_docs_nav_getstarted_icon.svg'); - } + &:nth-child(3):before { + background-image: url("../images/tyk_docs_nav_getstarted_icon.svg"); + } - &:nth-child(4):before { - background-image: url('../images/tyk_docs_nav_tykstack_icon.svg'); - } + &:nth-child(4):before { + background-image: url("../images/tyk_docs_nav_tykstack_icon.svg"); + } - &:nth-child(5):before { - background-image: url('../images/tyk_docs_nav_keyc_icon.svg'); - } + &:nth-child(5):before { + background-image: url("../images/tyk_docs_nav_keyc_icon.svg"); + } - &:nth-child(6):before { - background-image: url('../images/tyk_docs_nav_faq_icion.svg'); - } + &:nth-child(6):before { + background-image: url("../images/tyk_docs_nav_faq_icion.svg"); + } } /* Tree : Vertical lines */ .st-treed { - & > ul { - & > li > a { - color: $brand-black;; - // padding-bottom: 10px; // - } - - & > li:hover > a { - color: $brandpurple-11; - font-weight: bold; - letter-spacing: initial; - } - - & > li li { - padding-left: 15px; - display: block; - padding-bottom: 10px; - } + & > ul { + & > li > a { + color: $brand-black; + // padding-bottom: 10px; // + } - & > .st-open > ul:before { - content: ""; - background: lighten($brandpurple-2, $amount: 12) ; - width: 1px; - height: 100%; - top: 0; - left: 0; - display: block; - position: absolute; - z-index: 1; - } + & > li:hover > a { + color: $brandpurple-11; + font-weight: bold; + letter-spacing: initial; } - .st-open { - &.child-active > ul:before, - &.active > ul:before { - background: $brandgreen-4; - } + & > li li { + padding-left: 15px; + display: block; + padding-bottom: 10px; + } - & > a { - font-weight: bold; - color: $brandpurple-dark; - letter-spacing: initial; - padding-bottom: 5px; - } + & > .st-open > ul:before { + content: ""; + background: lighten($brandpurple-2, $amount: 12); + width: 1px; + height: 100%; + top: 0; + left: 0; + display: block; + position: absolute; + z-index: 1; + } + } - &:last-child .st-open:last-child:before { - display: none; - } + .st-open { + &.child-active > ul:before, + &.active > ul:before { + background: $brandgreen-4; } - /* Tree : Active */ - .active > a { - color: $brandpurple-dark; - font-weight: bold; + & > a { + font-weight: bold; + color: $brandpurple-dark; + letter-spacing: initial; + padding-bottom: 5px; } -} + &:last-child .st-open:last-child:before { + display: none; + } + } + /* Tree : Active */ + .active > a { + color: $brandpurple-dark; + font-weight: bold; + } +} /* Side menu footer */ .page-submenu__footer { - padding-block: 1rem; - padding-inline: 0 1.5rem; - border-top: 1px solid $brandpurple-1; - - p { - line-height: 1.2; - color: $brand-black; - } + padding-block: 1rem; + padding-inline: 0 1.5rem; + border-top: 1px solid $brandpurple-1; - a { - display: inline-block; - padding-bottom: 0.25rem; - font-weight: bold; - color: $brandpurple-dark; - text-decoration: underline; - } + p { + line-height: 1.2; + color: $brand-black; + } + + a { + display: inline-block; + padding-bottom: 0.25rem; + font-weight: bold; + color: $brandpurple-dark; + text-decoration: underline; + } } @include breakpoint(large, down) { - .page-submenu { - --page-submenu-inline-padding: 7.6%; - --tabs-menu-outside-offset: calc(var(--page-submenu-inline-padding) - 20px); - - position: fixed; - top: 12%; - /* bottom: 0; */ - right: 0; - overflow: auto; - background-color: $brandpurple-1; - transform: translateX(200%); - width: 100vw; - max-width: 100%; - /* padding-block: 60px 0; */ - z-index: 10; - margin: 0; - max-height: 100vh; - - .version-selector { - padding-inline: var(--page-submenu-inline-padding); - border-top: 1px solid $brandpurple-3; - - select { - background-color: transparent; - } - } - - &__footer { - background-color: $white; - padding-inline: var(--page-submenu-inline-padding) - } + .page-submenu { + --page-submenu-inline-padding: 7.6%; + --tabs-menu-outside-offset: calc(var(--page-submenu-inline-padding) - 20px); + + position: fixed; + top: calc(#{$toc-header-height-mobile} + #{$header-height-small}); + /* bottom: 0; */ + right: 0; + overflow: auto; + background-color: $brandpurple-1; + transform: translateX(200%); + width: 100vw; + max-width: 100%; + /* padding-block: 60px 0; */ + z-index: 10; + margin: 0; + max-height: 100vh; + + .version-selector { + padding-inline: var(--page-submenu-inline-padding); + border-top: 1px solid $brandpurple-3; + + select { + background-color: transparent; + } + } - .show-submenu & { - transform: translateX(0); - } + &__footer { + background-color: $white; + padding-inline: var(--page-submenu-inline-padding); + } - .aside-submenu { - padding-inline: var(--page-submenu-inline-padding); - overflow-y: auto; + .show-submenu & { + transform: translateX(0); + } - .header__tabs-menu { - margin-inline: calc(-1 * var(--tabs-menu-outside-offset)); + .aside-submenu { + padding-inline: var(--page-submenu-inline-padding); + overflow-y: auto; - a.active { - &::after { - right: 0; - background-position: calc(100% - var(--tabs-menu-outside-offset)); - } - } - } - } + .header__tabs-menu { + margin-inline: calc(-1 * var(--tabs-menu-outside-offset)); - .menu-external { - padding-inline: var(--page-submenu-inline-padding); - - a { - padding-inline: 0; - } + a.active { + &::after { + right: 0; + background-position: calc(100% - var(--tabs-menu-outside-offset)); + } } + } } - .menu_top-cta { - padding-left: 4%; - } + .menu-external { + padding-inline: var(--page-submenu-inline-padding); - .submenu-toggle { - padding-left: 60px; - position: absolute; - top: -91px; - left: 0; - right: 0; - width: 100%; - text-align: left; - font-weight: bold; - z-index: 1; - - span { - position: fixed; - top: 0; - width: 60px; - height: 60px; - display: block; - left: 0; - z-index: 1; - } + a { + padding-inline: 0; + } } + } + .menu_top-cta { + padding-left: 4%; + } - .submenu-toggle, - .submenu-toggle span { - background: #e1e1e1 url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAADSBAMAAADNt4NxAAAAHlBMVEXh4eEAABgQECZhYW/c3NxiYm8PDyVoaHUODiVpaXYXwExtAAAAdklEQVR42u3XsQ2AIBAFUFeABiltnIANnMAl3MPNTaSVmCgNyXvNLy+QIz9MEwAAAAAAAAAA/LKt5Y4zPJpLt0l7SDUaUrdJS4g1GuKAk95uL/fbiKNuRONQsXg0AAN0bta5OhdA5/rn6lydCwAAAAAAAAAAX12TVi2ZVFNHAAAAAABJRU5ErkJggg=='); - background-size: auto 100%; - background-position: top left; - background-repeat: no-repeat; + .submenu-toggle { + padding-left: 60px; + position: absolute; + top: -91px; + left: 0; + right: 0; + width: 100%; + text-align: left; + font-weight: bold; + z-index: 1; + + span { + position: fixed; + top: 0; + width: 60px; + height: 60px; + display: block; + left: 0; + z-index: 1; } + } + + .submenu-toggle, + .submenu-toggle span { + background: #e1e1e1 + url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAADSBAMAAADNt4NxAAAAHlBMVEXh4eEAABgQECZhYW/c3NxiYm8PDyVoaHUODiVpaXYXwExtAAAAdklEQVR42u3XsQ2AIBAFUFeABiltnIANnMAl3MPNTaSVmCgNyXvNLy+QIz9MEwAAAAAAAAAA/LKt5Y4zPJpLt0l7SDUaUrdJS4g1GuKAk95uL/fbiKNuRONQsXg0AAN0bta5OhdA5/rn6lydCwAAAAAAAAAAX12TVi2ZVFNHAAAAAABJRU5ErkJggg=="); + background-size: auto 100%; + background-position: top left; + background-repeat: no-repeat; + } - .submenu-close { - display: none; - position: fixed; - z-index: 4; - font-size: 16px; - top: 0; - left: var(--page-submenu-inline-padding); - color: $brandpurple-2; - padding-right: 10px; - text-align: left; - - &::before { - position: absolute; - right: 0; - } + .submenu-close { + display: none; + position: fixed; + z-index: 4; + font-size: 16px; + top: 0; + left: var(--page-submenu-inline-padding); + color: $brandpurple-2; + padding-right: 10px; + text-align: left; + + &::before { + position: absolute; + right: 0; } -} \ No newline at end of file + } +} diff --git a/tyk-docs/assets/scss/_structure.scss b/tyk-docs/assets/scss/_structure.scss index fe24b3b212..24bedd3f3a 100644 --- a/tyk-docs/assets/scss/_structure.scss +++ b/tyk-docs/assets/scss/_structure.scss @@ -6,18 +6,22 @@ body { } } +@media only screen and (min-width: 700px) { + .section-page { + height: calc(100vh - #{$header-height}); + } +} + .section-page { - height: calc(100vh - #{$header-height} - #{$header-tabs-height}); overflow: hidden; - &.hasSidebar { background: $white; width: 100%; display: flex; @include breakpoint(large) { - padding-inline-start: var(--main-inline-padding); + padding-inline-start: 1rem; } } @@ -41,12 +45,12 @@ body { overflow-x: hidden; .hasSidebar & { - width: 80%; - padding-left: 30px; + width: 100%; + padding-left: 1.5rem; border-left: 1px solid $brandpurple-light; @include breakpoint(large) { - padding-inline-end: var(--main-inline-padding); + padding-inline-end: $page-content-right-padding; } } @@ -60,10 +64,8 @@ body { .wysiwyg a:not(.button):not(.badge):not(.home_btn):not(.home_link) { color: $brandpurple-dark !important; text-decoration: underline; - } - &__container { width: 100%; } @@ -75,7 +77,10 @@ body { @include breakpoint(large) { .hasSidebar &__main { display: grid; - grid-template-columns: minmax(400px, 4fr) minmax(200px, 1fr); + // 200px minimum - padding of .page-content + grid-template-columns: minmax(400px, 4fr) calc( + #{$sidebar-width} - #{$page-content-right-padding} + ); &.no-toc { grid-template-columns: 1fr; @@ -83,8 +88,8 @@ body { } .hasSidebar &__container { - padding-right: 2rem; - padding-top: 60px; + padding-right: 1.5rem; + padding-top: 1.5rem; } } } @@ -127,15 +132,13 @@ body { margin: 0 auto; max-width: 1240px; width: 100%; - } - .last-modified-date { margin-bottom: 1px !important; margin-top: 5px !important; font-size: 12px; - color: #44546F; + color: #44546f; } .metadata_heading { @@ -144,16 +147,14 @@ body { font-weight: bold; } - .see_also_heading { text-decoration: none !important; padding-top: 25px !important; margin-bottom: 15px !important; - a { text-decoration: none !important; - color: $brand-black !important;; + color: $brand-black !important; &:hover { color: $brandpurple-dark !important; @@ -163,7 +164,7 @@ body { .related_section { margin-top: 30px; - border-top: 1px solid #A8A8CF; + border-top: 1px solid #a8a8cf; } .improve-this-page::before { @@ -176,7 +177,7 @@ body { } .responsive-frame { - max-width: 75% ; + max-width: 75%; height: auto; max-height: 201px; } @@ -193,6 +194,5 @@ body { padding-top: 0 !important; padding-left: 0 !important; padding-right: 0 !important; - } } diff --git a/tyk-docs/assets/scss/_table-of-contents.scss b/tyk-docs/assets/scss/_table-of-contents.scss index 94a2eb81c3..31a56c1d21 100644 --- a/tyk-docs/assets/scss/_table-of-contents.scss +++ b/tyk-docs/assets/scss/_table-of-contents.scss @@ -1,323 +1,330 @@ /* Documentation : Table of Contents */ .documentation-table-of-contents-container { - width: 250px; - position: relative; - - .page-documentation:not(.hasSidebar) & { - display: none; - } - - @include breakpoint(large, down) { - position: fixed; - top: 11.5%; - left: 0; - width: 100%; - background-color: $brandpurple-1; - } - - @media only screen and (max-width: 425px) { - position: fixed; - top: 11.5%; - left: 0; - width: 100%; - background-color: $brandpurple-1; - } - - @include breakpoint(large) { - padding-bottom: 1rem; - } + position: relative; + + .page-documentation:not(.hasSidebar) & { + display: none; + } + + @include breakpoint(large, down) { + position: fixed; + top: $header-height-small; + left: 0; + width: 100%; + background-color: $brandpurple-1; + } + + @media only screen and (max-width: 425px) { + position: fixed; + top: $header-height-small; + left: 0; + width: 100%; + background-color: $brandpurple-1; + } + + @include breakpoint(large) { + padding-bottom: 1rem; + } } .documentation-table-of-contents { - padding: 0.5rem 1rem 0.5rem 1.5rem; - - .sub_toc__item:hover,.sub-sub-toc-item:hover,.sub-sub-sub-toc-item:hover { - color: #8438FA !important; - } - - .sub_toc__item.js-active,.sub-sub-toc-item.js-active,.sub-sub-sub-toc-item.js-active { - color: #8438FA !important; - } - - .accordion-content { - margin-bottom: 20px; - } - - .accordion-item { - .toc__item { - line-height: 20px; - position: relative; - padding: 0; - margin-bottom: 20px; - padding-right: 20px; - font-size: 14px; - - &.accordion-up { - &:after { - transform: rotate(180deg); - } - } - - &.accordionHolder { - &:after { - display: none; - } - } - - &:after { - pointer-events: auto; - content: ''; - background-image: url("../img/icon-caret.svg"); - background-repeat: no-repeat; - background-position: right; - inline-size: 100%; - block-size: var(--caret-size); - position: absolute; - top: 0; - right: 0; - cursor: pointer; - transition: scale 0.2s; - width: 20px; - height: 20px; - } - } - - .accordion-content { - display: none; - - a { - font-size: 12px; - margin-bottom: 10px; - display: block; - } - - >* { - padding-left: 18px; - } - - .sub-accordionHolder { - position: relative; - padding-right: 30px; - - &:after { - pointer-events: auto; - content: ''; - background-image: url(../img/icon-caret.svg); - background-repeat: no-repeat; - background-position: right; - inline-size: 100%; - block-size: var(--caret-size); - position: absolute; - top: 0; - right: 0; - cursor: pointer; - transition: scale 0.2s; - width: 20px; - height: 20px; - } - } - - &.accordion-up { - .sub-accordionHolder { - position: relative; - } - } - } - - .accordion-content.accordion-up { - >.sub-accordionHolder { - &:after { - transform: rotate(180deg); - } - } - - >.sub-accordion { - >.sub-accordionHolder { - &:after { - transform: rotate(180deg); - } - } - } - } - - .sub-accordion-content>* { - padding-left: 25px; - } - - .sub-accordion-content, - .sub-sub-accordion-content { - display: none; - } - - .accordion-up .sub-accordion-content, - .accordion-up .sub-accordion-content a, - .sub-accordion .sub-sub-accordion-content { - display: block; - } - - margin-bottom: 20px; - - >* { - font-size: 15px !important; - transition: all 400ms ease; - - &:hover { - font-weight: 700; - color: #000 !important; - } - - + { - * { - position: relative; - - &:before { - content: ""; - background: #cfcfe5; - width: 1px; - height: 100%; - top: 0; - left: 0; - display: block; - position: absolute; - z-index: 1; - } - - .sub_toc__item { - font-size: 15px !important; - color: #03031c; - margin: 0 !important; - font-weight: 400; - padding-bottom: 10px !important; - padding-left: 14px; - - &:hover, - &.js-active { - color: #8438FA; - } - } - } - } - - &:last-child { - .sub_toc__item { - padding-bottom: 10px !important; - } - } - } - } - - .toc__content { - .accordion-group { - - .accordion-content { - margin-bottom: 0; - - a { - font-size: 15px !important; - color: #03031c; - margin: 0 !important; - font-weight: 400; - padding-bottom: 10px !important; - padding-left: 14px; - } - } - } - } - - @include breakpoint(large) { - border-left: 1px solid $brandpurple-2; - position: sticky; - top: 0; - } - - .toc { - &__content { - height: 100%; - overflow-y: scroll; - overflow-x: hidden; - max-height: calc(100vh - #{$header-height} - #{$header-tabs-height} - 120px); - scrollbar-width: none; - - &::-webkit-scrollbar { - display: none; - } - - @include breakpoint(large, down) { - display: none; - } - } - - &__label { - display: block; - position: relative; - text-transform: uppercase; - color: $brandpurple-11; - font-weight: 600; - - @include breakpoint(large) { - margin-bottom: 1rem; - } - - @include breakpoint(large, down) { - cursor: pointer; - - &::after { - content: ''; - position: relative; - display: inline-block; - width: 20px; - height: 20px; - left: 15px; - top: 5px; - background-image: url('../img/icon-caret.svg'); - background-repeat: no-repeat; - background-position: center; - transition: rotate 0.2s; - } - } - - &.js-open { - border-bottom: 1px solid $brandpurple-2; - padding-bottom: 0.5rem; - margin-bottom: 1rem; - - &~.toc__content { - display: block; - } - - &::after { - rotate: 180deg; - } - } - } - - &__item { - display: block; - padding: 0.5rem 0; - font-size: 12px; - color: $brand-black; - word-wrap: break-word; - - &.js-active { - font-weight: bold; - color: $brandpurple-dark; - } - - &:hover { - color: $brandpurple-dark; - } - } - } + padding: 0.5rem 0 0.5rem 1rem; + + @include breakpoint(large, up) { + height: calc(100vh - #{$header-height}); + } + + .sub_toc__item:hover, + .sub-sub-toc-item:hover, + .sub-sub-sub-toc-item:hover { + color: #8438fa !important; + } + + .sub_toc__item.js-active, + .sub-sub-toc-item.js-active, + .sub-sub-sub-toc-item.js-active { + color: #8438fa !important; + } + + .accordion-content { + margin-bottom: 20px; + } + + .accordion-item { + .toc__item { + line-height: 20px; + position: relative; + padding: 0; + margin-bottom: 20px; + padding-right: 20px; + font-size: 14px; + + &.accordion-up { + &:after { + transform: rotate(180deg); + } + } + + &.accordionHolder { + &:after { + display: none; + } + } + + &:after { + pointer-events: auto; + content: ""; + background-image: url("../img/icon-caret.svg"); + background-repeat: no-repeat; + background-position: right; + inline-size: 100%; + block-size: var(--caret-size); + position: absolute; + top: 0; + right: 0; + cursor: pointer; + transition: scale 0.2s; + width: 20px; + height: 20px; + } + } + + .accordion-content { + display: none; + + a { + font-size: 12px; + margin-bottom: 10px; + display: block; + } + + > * { + padding-left: 18px; + } + + .sub-accordionHolder { + position: relative; + padding-right: 30px; + + &:after { + pointer-events: auto; + content: ""; + background-image: url(../img/icon-caret.svg); + background-repeat: no-repeat; + background-position: right; + inline-size: 100%; + block-size: var(--caret-size); + position: absolute; + top: 0; + right: 0; + cursor: pointer; + transition: scale 0.2s; + width: 20px; + height: 20px; + } + } + + &.accordion-up { + .sub-accordionHolder { + position: relative; + } + } + } + + .accordion-content.accordion-up { + > .sub-accordionHolder { + &:after { + transform: rotate(180deg); + } + } + + > .sub-accordion { + > .sub-accordionHolder { + &:after { + transform: rotate(180deg); + } + } + } + } + + .sub-accordion-content > * { + padding-left: 25px; + } + + .sub-accordion-content, + .sub-sub-accordion-content { + display: none; + } + + .accordion-up .sub-accordion-content, + .accordion-up .sub-accordion-content a, + .sub-accordion .sub-sub-accordion-content { + display: block; + } + + margin-bottom: 20px; + + > * { + font-size: 15px !important; + transition: all 400ms ease; + + &:hover { + font-weight: 700; + color: #000 !important; + } + + + { + * { + position: relative; + + &:before { + content: ""; + background: #cfcfe5; + width: 1px; + height: 100%; + top: 0; + left: 0; + display: block; + position: absolute; + z-index: 1; + } + + .sub_toc__item { + font-size: 15px !important; + color: #03031c; + margin: 0 !important; + font-weight: 400; + padding-bottom: 10px !important; + padding-left: 14px; + + &:hover, + &.js-active { + color: #8438fa; + } + } + } + } + + &:last-child { + .sub_toc__item { + padding-bottom: 10px !important; + } + } + } + } + + .toc__content { + .accordion-group { + .accordion-content { + margin-bottom: 0; + + a { + font-size: 15px !important; + color: #03031c; + margin: 0 !important; + font-weight: 400; + padding-bottom: 10px !important; + padding-left: 14px; + } + } + } + } + + @include breakpoint(large) { + border-left: 1px solid $brandpurple-2; + position: sticky; + top: 0; + } + + .toc { + &__content { + height: 100%; + overflow-y: scroll; + overflow-x: hidden; + max-height: calc( + 100vh - #{$header-height} - #{$right-sidebar-header-height-with-padding}px + ); + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } + + @include breakpoint(large, down) { + display: none; + } + } + + &__label { + display: block; + position: relative; + text-transform: uppercase; + color: $brandpurple-11; + font-weight: 600; + + @include breakpoint(large) { + margin-bottom: 0.5rem; + } + + @include breakpoint(large, down) { + cursor: pointer; + + &::after { + content: ""; + position: relative; + display: inline-block; + width: 20px; + height: 20px; + left: 15px; + top: 5px; + background-image: url("../img/icon-caret.svg"); + background-repeat: no-repeat; + background-position: center; + transition: rotate 0.2s; + } + } + + &.js-open { + border-bottom: 1px solid $brandpurple-2; + padding-bottom: 0.5rem; + margin-bottom: 1rem; + + & ~ .toc__content { + display: block; + } + + &::after { + rotate: 180deg; + } + } + } + + &__item { + display: block; + padding: 0.5rem 0; + font-size: 12px; + color: $brand-black; + word-wrap: break-word; + + &.js-active { + font-weight: bold; + color: $brandpurple-dark; + } + + &:hover { + color: $brandpurple-dark; + } + } + } } - body:not(.hasSidebar) .documentation-table-of-contents { - display: none !important; + display: none !important; } @media only screen and (max-width: 768px) { - .documentation-table-of-contents a { - width: 100%; - text-align: left; - } -} \ No newline at end of file + .documentation-table-of-contents a { + width: 100%; + text-align: left; + } +} diff --git a/tyk-docs/assets/scss/_variables.scss b/tyk-docs/assets/scss/_variables.scss index 254488fb25..080372ed6b 100644 --- a/tyk-docs/assets/scss/_variables.scss +++ b/tyk-docs/assets/scss/_variables.scss @@ -3,29 +3,28 @@ /* Colors */ //new brand colors -$brandpurple-dark:#8438FA; -$brandpurple-light:#E3CEFF; -$brand-black:#03031c; -$brand-light-green:#20EDBA; - +$brandpurple-dark: #8438fa; +$brandpurple-light: #e3ceff; +$brand-black: #03031c; +$brand-light-green: #20edba; $white: #fff; $black: #000; -$brandpurple-1: #EDEDF9; -$brandpurple-2: #A8A8CF; -$brandpurple-3: #8A89B5; -$brandpurple-4: #7A79A1; +$brandpurple-1: #ededf9; +$brandpurple-2: #a8a8cf; +$brandpurple-3: #8a89b5; +$brandpurple-4: #7a79a1; $brandpurple-7: #505071; // brand purplegrey $purple-medium: #505071; -$brandpurple-9: #43435B; -$brandpurple-11: #36364C; +$brandpurple-9: #43435b; +$brandpurple-11: #36364c; $purple-dark: #36364c; -$brandgreen-1: #D7F8F3; -$brandgreen-2: #00CDB0; // brand green -$green: #00CDB0; -$brandgreen-3: #2CA597; // green muted +$brandgreen-1: #d7f8f3; +$brandgreen-2: #00cdb0; // brand green +$green: #00cdb0; +$brandgreen-3: #2ca597; // green muted $brandgreen-4: #258c80; $yellow: #d6b218; @@ -40,41 +39,41 @@ $border-primary: #cdcdcd; /* Elements */ $global-radius: 20px; - -$header-height: 120px; -$header-height-small: 60px; +$header-height: 64px; +$header-height-small: 63px; $header-tabs-height: 16px; - - +$right-sidebar-header-height-with-padding: 38.5; +$page-content-right-padding: 0.5rem; +$sidebar-width: 200px; +$toc-header-height-mobile: 42.5px; /* Breakpoints */ $breakpoints: ( - "small": 0, - "medium": 640px, - "large": 1024px, - "xlarge": 1250px, - "xxlarge": 1921px, + "small": 0, + "medium": 640px, + "large": 1024px, + "xlarge": 1250px, + "xxlarge": 1921px, ); - // invoque syntax: // @include breakpoint(medium) // @include breakpoint(medium, down) -@mixin breakpoint($size, $dir: 'up') { - @if $dir == down { - @media only screen and (max-width: map-get($breakpoints, $size)) { - @content; - } - } @else { - @media only screen and (min-width: map-get($breakpoints, $size)) { - @content; - } - } +@mixin breakpoint($size, $dir: "up") { + @if $dir == down { + @media only screen and (max-width: map-get($breakpoints, $size)) { + @content; + } + } @else { + @media only screen and (min-width: map-get($breakpoints, $size)) { + @content; + } + } } :root { - --main-inline-padding: 30px; - @media only screen and (min-width: 1250px) { - --main-inline-padding: 50px; - } + --main-inline-padding: 30px; + @media only screen and (min-width: 1250px) { + --main-inline-padding: 50px; + } } diff --git a/tyk-docs/content/api-management/authentication-authorization.md b/tyk-docs/content/api-management/authentication-authorization.md new file mode 100644 index 0000000000..2032c27be1 --- /dev/null +++ b/tyk-docs/content/api-management/authentication-authorization.md @@ -0,0 +1,1706 @@ +--- +title: Authentication and Authorization +date: 2017-03-23T15:23:32Z +description: Learn how to apply security options to lock down your APIs with Tyk. Here you will find everything there is to know about Authentication and Authorization in Tyk. +tags: ["Authentication", "Authorization", "Tyk Authentication", "Tyk Authorization", "Secure APIs"] +aliases: + - /security/your-apis/ + - /basic-config-and-security/security/authentication-authorization/ + - /basic-config-and-security/security/authentication-&-authorization/ + - /basic-config-and-security/security/authentication--authorization/ +--- + + +Tyk offers various authentication and authorization methods to secure your APIs. This page provides an overview of the industry-standard options available, helping you choose what works best for you. + +Use Ctrl+F or the sidebar to find specific topics, like “JWT” for JSON Web Tokens or “mTLS” for mutual TLS. + +You can also use the links below to jump directly to sections on Tyk-supported methods for securing your APIs. + +{{< grid >}} + +{{< badge title="OAuth 2.0" href="api-management/authentication-authorization/#set-up-oauth-20-authorization" >}} +Delegate authentication using a widely adopted framework. +{{< /badge >}} + +{{< badge title="Bearer Tokens" href="api-management/authentication-authorization/#use-bearer-tokens" >}} +Implement token-based authentication for API access. +{{< /badge >}} + +{{< badge title="External OAuth" href="api-management/authentication-authorization/#integrate-external-oauth-middleware" >}} +Integrate with external providers for centralized authentication. +{{< /badge >}} + +{{< badge title="HMAC" href="api-management/authentication-authorization/#sign-requests-with-hmac" >}} +Verify message integrity using shared secret keys. +{{< /badge >}} + +{{< badge title="JWT" href="api-management/authentication-authorization/#use-json-web-tokens-jwt" >}} +Securely transmit information between parties. +{{< /badge >}} + +{{< badge title="mTLS" href="api-management/authentication-authorization/#enable-mutual-tls" >}} +Establish secure channels with two-way certificate verification. +{{< /badge >}} + +{{< badge title="Open Access" href="api-management/authentication-authorization/#use-open-keyless-authentication" >}} +Allow unrestricted access for public APIs. +{{< /badge >}} + + +{{< badge title="Basic Auth" href="api-management/authentication-authorization/#use-basic-authentication" >}} +Secure APIs with username and password credentials. +{{< /badge >}} + + + +{{< /grid >}} + +## Set Up OAuth 2.0 Authorization + +Tyk offers comprehensive support for OAuth 2.0, providing two main approaches to integrate this authorization framework: + +### Integrating OAuth 2.0 +#### Option 1: Integrate Existing OAuth 2.0 Flow + +1. **Manage Tokens Within Your Application:** Utilize your existing OAuth 2.0 implementation or a preferred library to generate and manage tokens. +2. **Create Sessions in Tyk:** Once your API issues a token, create corresponding key sessions within Tyk using the Gateway REST API. +3. **Configure API Access in Tyk:** + * Set "Auth Token" as your API's authentication mode within Tyk. + * Configure the "Authorization" header. + * Consider adding OAuth-specific endpoints (`/access`, `/authorize`) to your API's `ignored_paths` list for direct access if required. + +#### Option 2: Using Tyk as The OAuth 2.0 Provider + +1. **Simplify Authorization with Tyk:** Designate Tyk as your OAuth 2.0 provider, streamlining token generation and management. +2. **Seamless Application Integration:** Integrate your application with Tyk's API and notification endpoints for streamlined OAuth 2.0 functionality. + + +{{< youtube C4CUDTIHynk >}} + + +### Understanding the OAuth 2.0 Flow within Tyk + +* **Client ID Registration:** Begin by registering a unique Client ID within Tyk for each resource owner. +* **Request Validation and User Authentication:** Tyk rigorously validates all incoming OAuth 2.0 requests to ensure they adhere to the standard. Valid requests are then directed to your application’s authorization page for user login and permission granting. +* **Authorization Code Generation and Redirection:** Upon successful authentication, Tyk generates an authorization code, providing your application with a redirect URL for seamless user redirection. +* **Access Token Exchange and Notification:** Clients can then use the generated authorization code to request an access token from Tyk. Upon successful token generation, Tyk notifies your application via webhooks. +* **Simplified Flow for Specific Applications:** Tyk offers a streamlined access token flow, well-suited for mobile and single-page applications, though it does not accommodate refresh tokens. + +#### Enabling OAuth 2.0 via the Dashboard + +1. **Select OAuth 2.0 for Your API:** In the API Designer, go to the Core Settings tab for your API and choose "OAuth 2.0" as the authentication mode. + + {{< img src="/img/dashboard/system-management/oauth-auth-mode.png" alt="Set Authentication Mode" >}} + +2. **Configure Grant Type Settings**: Define allowed access and authorize types aligned with your chosen OAuth 2.0 grant type (e.g., Authorization Code). +3. **Set Redirection URLs:** For grant types involving redirects, provide the OAuth login redirect URL and the OAuth notification URL. +4. **Create an Access Policy:** Establish a policy that explicitly grants access to this API. +5. **Register a New OAuth Client:** Go to the "OAuth Clients" section for your API and add a new client. + * Specify a valid redirect URI. + * Associate the client with the access policy you created. + + {{< img src="/img/dashboard/system-management/oauth-api-oauth-clients.png" alt="OAuth Clients" >}} + {{< img src="/img/dashboard/system-management/oauth-add-new-client.png" alt="Add New OAuth Client" >}} + +6. **Access Client Credentials**: After client creation, view the generated Client ID and Secret. + + {{< img src="/img/dashboard/system-management/oauth-client-secret-details.png" alt="View Client ID and Secret" >}} + +#### Enabling OAuth 2.0 via an API Definition + +For programmatic control, configure OAuth 2.0 directly within your API's JSON definition: + +```yaml +{ + "name": "OAuth Test API", + // ... other API settings + "use_oauth2": true, + "oauth_meta": { + "allowed_access_types": ["authorization_code", "refresh_token"], + "allowed_authorize_types": ["code", "token"], + "auth_login_redirect": "http://yourapp.com/login" + }, + "notifications": { + "shared_secret": "your-shared-secret", + "oauth_on_keychange_url": "http://yourapp.com/oauth_notifications" + } + // ... other API settings +} +``` + +- **`name`**: Specifies the name of the API, in this case, "OAuth Test API." +- **`use_oauth2`**: Enables OAuth 2.0 authentication for this API (`true` indicates OAuth 2.0 is used). +- **`oauth_meta`**: Contains OAuth 2.0-specific configuration options: + - **`allowed_access_types`**: Defines which OAuth 2.0 access types are allowed, such as `authorization_code` and `refresh_token`. + - **`allowed_authorize_types`**: Defines which OAuth 2.0 authorization methods are permitted, like `code` (authorization code) and `token` (implicit flow). + - **`auth_login_redirect`**: Specifies the URL to which users are redirected after successful login, typically the login page of your application. +- **`notifications`**: Manages notifications for OAuth events: + - **`shared_secret`**: A secret key shared between Tyk and your app, used to secure notifications. + - **`oauth_on_keychange_url`**: The URL to which Tyk sends a notification when an OAuth key changes (e.g., token revocation or regeneration). + + + +### Manage Quotas and Limits + +Utilize Tyk's `/tyk/oauth/authorize-client/` endpoint with the `key_rules` parameter to define key rules for tokens generated during the OAuth flow. These rules encompass rate limits, quotas, expiry times, and access rights: + +```yaml +{ + "allowance": 1000, + "rate": 1000, + "per": 60, + "expires": -1, + "quota_max": -1, + "quota_renews": 1406121006, + "quota_remaining": 0, + "quota_renewal_rate": 60, + "access_rights": { + "APIID1": { + "api_name": "HMAC API", + "api_id": "APIID1", + "versions": [ + "Default" + ] + } + }, + "org_id": "1", + "oauth_client_id": "client-id-here", + "hmac_enabled": false, + "hmac_string": "" +} +``` +{{< note success >}} +**Note** +Instead of passing a `key_rules` parameter when authorizing a client, Tyk can now have an API policy that manages access rules bound to the Client ID doing the accessing, if a bound policy ID is used when generating the OAuth client, when a token is generated for the client then Tyk will generate a token based on the policy data. This is especially useful in generative contexts such as the `client_credentials` grant. +{{< /note >}} + +### Configure Notifications + +To receive notifications about token changes (e.g., new tokens, refresh tokens) configure the `notifications` section in your API definition: + +* `oauth_on_keychange_url`: Set the URL where Tyk will send notifications. +* `shared_secret`: Use this secret for secure communication between Tyk and your application; the secret is sent as a header (`X-Tyk-Shared-Secret`) with every notification. + +Example notification: + +```yaml +{ + "auth_code": "", + "new_oauth_token": "", + "refresh_token": "", + "old_refresh_token": "", + "notification_type": "" +} +``` + +{{< note success >}} +**Note** + +* **Fine-Grained Access Control:** Manage access using Tyk's built-in access controls, including versioning and named API IDs, going beyond Client ID-based control. +* **Usage Analytics:** Leverage Tyk's analytics capabilities to monitor OAuth 2.0 usage effectively, grouping data by Client ID. +* **Multi-API Access**: Enable access to multiple APIs using a single OAuth token. Configure one API for OAuth 2.0 token issuance and the other APIs with the "Auth Token" method, linking them through a common policy. +{{< /note >}} + + +### Supported Grant Types + +Tyk offers extensive support for various OAuth 2.0 grant types, catering to diverse use cases: + +* Authorization Code +* Refresh Token +* Username and Password +* Client Credentials +* Authorization Token Flow (Ideal for server-side web applications) + + +#### Use Authorization Code Grant + +The Authorization Code Grant Type is a widely used OAuth 2.0 flow for web applications. It allows client applications to access user resources securely. + +This process requires three steps: + +* Redirect to a login page +* Request an authorization code +* Exchange the code for a token + +The below image shows the request/response interactions between Client, Gateway, identity server, and notification server. + +{{< img src="/img/diagrams/diagram_docs_authorization-code-grant-type@2x.png" alt="Authorization grant type flow" >}} + +##### Redirect the User to a Login Page + +First, the client application must redirect the user to the authorization server's login page. This is where the user will authenticate and authorize the client. + +```bash +curl -X POST \ + https://tyk.cloud.tyk.io/oauth-api/oauth/authorize/ \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'response_type=code&client_id=ed59158fa2344e94b3e6278e8ab85142&redirect_uri=http%3A%2F%2Fexample.com%2Fclient-redirect-uri' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| **Method** | `POST` | +| **URL** | Uses the special OAuth endpoint `/oauth/authorize` appended to the API URI, e.g., `https:////oauth/authorize`. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------------------------------------- | +| `response_type` | `code` | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | +| `redirect_uri` | The OAuth client redirect URI, e.g., `http://example.com/client-redirect-uri`, URL encoded as `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | + +**Response:** + +This request generates a `307 Temporary Redirect` to the OAuth client redirect URI. The user is redirected to authenticate and authorize the client, and the data forwarded will be used to request an authorization code. + +##### Request an Authorization Code + +After the user authorizes the request, the authorization server provides an authorization code. The client application needs to request this code from the authorization server. + +```bash +curl -X POST \ + https://admin.cloud.tyk.io/api/apis/oauth/25b854d3fdc84703679f49ea33981aa9/authorize-client/ \ + -H 'Authorization: 70c3d834d46a4d6076e1585b0ef2e93e' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'response_type=code&client_id=ed59158fa2344e94b3e6278e8ab85142&redirect_uri=http%3A%2F%2Fexample.com%2Fclient-redirect-uri' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ---------------------------------------------------------------------------------------------------- | +| **Method** | `POST` | +| **URL** | Uses the Dashboard API client authorization endpoint `/authorize-client/`. | +| **Authorization** | The Dashboard user credentials, e.g., `70c3d834d46a4d6076e1585b0ef2e93e`. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------------------------------------- | +| `response_type` | `code` | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | +| `redirect_uri` | The OAuth client redirect URI, e.g., `http://example.com/client-redirect-uri`, URL encoded as `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | + +**Response:** + +The response provides the authorization code as `code` and the redirect URL as `redirect_to`. The client application will use this information to obtain an access token. + +```yaml +{ + "code": "EaG1MK7LS8GbbwCAUwDo6Q", + "redirect_to": "http://example.com/client-redirect-uri?code=EaG1MK7LS8GbbwCAUwDo6Q" +} +``` + +##### Exchange the Authorization Code for an Access Token + +Once the client application has the authorization code, it can exchange this code for an access token, which is used to access the API. + +```bash +curl -X POST \ + https://tyk.cloud.tyk.io/oauth-api/oauth/token/ \ + -H 'Authorization: Basic ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'grant_type=authorization_code&client_id=ed59158fa2344e94b3e6278e8ab85142&code=EaG1MK7LS8GbbwCAUwDo6Q&redirect_uri=http%3A%2F%2Fexample.com%2Fclient-redirect-uri' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Method** | `POST` | +| **URL** | Uses the special OAuth endpoint `/oauth/token` appended to the API URI, e.g., `https:////oauth/token`. | +| **Authorization** | Basic authorization, using the client ID and client secret of the OAuth client base64 encoded with a colon separator. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------------------------------------------------------- | +| `grant_type` | `authorization_code` | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | +| `code` | The authorization code (`code`) provided in the response to the previous request, e.g., `EaG1MK7LS8GbbwCAUwDo6Q`. | +| `redirect_uri` | The OAuth client redirect URI, e.g., `http://example.com/client-redirect-uri`, URL encoded as `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | + +**Response:** + +The response provides the token as `access_token` in the returned JSON, which can then be used to access the API: + +```yaml +{ + "access_token": "580defdbe1d21e0001c67e5c2a0a6c98ba8b4a059dc5825388501573", + "expires_in": 3600, + "refresh_token": "NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2", + "token_type": "bearer" +} +``` + +**Notification:** + +This grant will generate a notification sent from the Gateway to the OAuth Notifications URL, containing the OAuth Notifications Shared Secret as a header for verification purposes. + +```yaml +{ + "auth_code": "EaG1MK7LS8GbbwCAUwDo6Q", + "new_oauth_token": "580defdbe1d21e0001c67e5c2a0a6c98ba8b4a059dc5825388501573", + "refresh_token": "NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2", + "old_refresh_token": "", + "notification_type": "new" +} +``` + +#### Use Refresh Token Grant + +The Refresh Token Grant Type is used to obtain a new access token when the current access token has expired or is about to expire. This allows clients to maintain a valid access token without requiring the user to re-authenticate. + +This process involves two main steps: + +* Obtain a Refresh Token during the initial authorization. +* Use the Refresh Token to request a new Access Token. + +{{< img src="/img/diagrams/diagram_docs_refresh-token-grant-type@2x.png" alt="Refresh Token grant type flow" >}} + +##### Request a Refresh Token + +When you initially request an access token using the Authorization Code Grant Type, you can also receive a refresh token. This refresh token can be used later to obtain a new access token without requiring the user to re-authenticate. + +```bash +curl -X POST \ + https://tyk.cloud.tyk.io/oauth-api/oauth/token/ \ + -H 'Authorization: Basic ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'grant_type=authorization_code&client_id=ed59158fa2344e94b3e6278e8ab85142&code=EaG1MK7LS8GbbwCAUwDo6Q&redirect_uri=http%3A%2F%2Fexample.com%2Fclient-redirect-uri' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Method** | `POST` | +| **URL** | Uses the special OAuth endpoint `/oauth/token` appended to the API URI, e.g., `https:////oauth/token`. | +| **Authorization** | Basic authorization, using the client ID and client secret of the OAuth client base64 encoded with a colon separator. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------------------------------------------------------- | +| `grant_type` | `authorization_code` | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | +| `code` | The authorization code provided in the response to the previous request, e.g., `EaG1MK7LS8GbbwCAUwDo6Q`. | +| `redirect_uri` | The OAuth client redirect URI, e.g., `http://example.com/client-redirect-uri`, URL encoded as `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | + +**Response:** + +The response includes an access token, a refresh token, and additional information about the token's lifespan. + +```yaml +{ + "access_token": "abcd1234token", + "expires_in": 3600, + "refresh_token": "NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2", + "token_type": "bearer" +} +``` + +##### Use the Refresh Token to Request a New Access Token + +When the access token expires, the client can use the refresh token to obtain a new access token without requiring user interaction. + +```bash +curl -X POST \ + https://tyk.cloud.tyk.io/oauth-api/oauth/token/ \ + -H 'Authorization: Basic ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'grant_type=refresh_token&refresh_token=NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2&client_id=ed59158fa2344e94b3e6278e8ab85142' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Method** | `POST` | +| **URL** | Uses the special OAuth endpoint `/oauth/token` appended to the API URI, e.g., `https:////oauth/token`. | +| **Authorization** | Basic authorization, using the client ID and client secret of the OAuth client base64 encoded with a colon separator. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| --------------- | ---------------------------------------------------------------------------------------------------------------- | +| `grant_type` | `refresh_token` | +| `refresh_token` | The refresh token obtained in the initial authorization, e.g., `NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2`. | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | + +**Response:** + +The response provides a new access token that can be used to access the API. + +```yaml +{ + "access_token": "new_abcd1234token", + "expires_in": 3600, + "token_type": "bearer" +} +``` + + +#### Use Client Credentials Grant + +The Client Credentials Grant Type is used when the client application needs to access resources on behalf of itself rather than on behalf of a user. This flow is ideal for server-to-server interactions. + +The process is only a single step: + +* Request an Access Token + +{{< img src="/img/diagrams/diagram_docs_client-credentials-grant-type@2x.png" alt="Client Credentials grant type flow" >}} + +##### Request an Access Token + +The client application authenticates directly with the authorization server using its client credentials (client ID and secret) to request an access token. + +```bash +curl -X POST \ + https://tyk.cloud.tyk.io/oauth-api/oauth/token/ \ + -H 'Authorization: Basic ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'grant_type=client_credentials&client_id=ed59158fa2344e94b3e6278e8ab85142' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Method** | `POST` | +| **URL** | Uses the special OAuth endpoint `/oauth/token` appended to the API URI, e.g., `https:////oauth/token`. | +| **Authorization** | Basic authorization, using the client ID and client secret of the OAuth client base64 encoded with colon separator. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| -------------- | -------------------------------------------------------------------------------------- | +| `grant_type` | `client_credentials` | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | + +**Response:** + +The response provides an access token that can be used by the client to access resources. + +```yaml +{ + "access_token": "abcd1234token", + "expires_in": 3600, + "token_type": "bearer" +} +``` + +##### Use the Access Token + +The client can now use the access token to access the API on behalf of itself. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: Bearer abcd1234token' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Bearer token, e.g., `Bearer abcd1234token`. | + + +#### Use Username and Password Grant + +The Username and Password Grant Type is used in scenarios where the client application collects the user's credentials directly. This flow is suitable for first-party applications. + +The process is only a single step: + +* Request an Access Token + +{{< img src="/img/diagrams/diagram_docs_username-_-password-grant-type@2x.png" alt="Username and Password grant type flow" >}} + +##### Request an Access Token + +The client application sends the user's credentials (username and password) to the authorization server in exchange for an access token. + +```bash +curl -X POST \ + https://tyk.cloud.tyk.io/oauth-api/oauth/token/ \ + -H 'Authorization: Basic ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'grant_type=password&username=user@example.com&password=yourpassword&client_id=ed59158fa2344e94b3e6278e8ab85142' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Method** | `POST` | +| **URL** | Uses the special OAuth endpoint `/oauth/token` appended to the API URI, e.g., `https:////oauth/token`. | +| **Authorization** | Basic authorization, using the client ID and client secret of the OAuth client base64 encoded with colon separator. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| -------------- | ----------------------------------------------------------- | +| `grant_type` | `password` | +| `username` | The user's username, e.g., `user@example.com`. | +| `password` | The user's password. | +| `client_id` | The OAuth client ID, e.g., `ed59158fa2344e94b3e6278e8ab85142`. | + +**Response:** + +The response provides an access token that can be used by the client to access resources. + +```yaml +{ + "access_token": "abcd1234token", + "expires_in": 3600, + "token_type": "bearer" +} +``` + +##### Use the Access Token + +The client can now use the access token to access the API on behalf of the user. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: Bearer abcd1234token' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Bearer token, e.g., `Bearer abcd1234token`. | + + + +### Revoke OAuth Tokens + +OAuth tokens can be revoked by the client or server when they are no longer needed, preventing further access to the protected resources. + +#### Submit a Request to Revoke the Token + +The client or server sends a request to the authorization server’s revocation endpoint to invalidate the token. + +```bash +curl -X POST \ + https://auth-server.com/oauth2/revoke \ + -H 'Authorization: Basic ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -d 'token=ACCESS_TOKEN&token_type_hint=access_token&client_id=CLIENT_ID&client_secret=CLIENT_SECRET' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Method** | `POST` | +| **URL** | The revocation endpoint of the authorization server. | +| **Authorization** | Basic authorization, using the client ID and client secret of the OAuth client base64 encoded with colon separator. | +| **Content-Type** | `application/x-www-form-urlencoded` | + +**Data:** + +| Parameter | Value | +| ----------------- | ------------------------------------------ | +| `token` | The access token to revoke, e.g., `ACCESS_TOKEN`. | +| `token_type_hint` | The type of token being revoked, typically `access_token`. | +| `client_id` | The OAuth client ID, e.g., `CLIENT_ID`. | +| `client_secret` | The client secret, e.g., `CLIENT_SECRET`. | + + +## Use Basic Authentication + +Basic Authentication is a straightforward method where the user's credentials (username and password) are sent in an HTTP header encoded in Base64. + +### Access a Protected Resource + +The client application sends an HTTP request with an `Authorization` header containing the word "Basic" followed by a base64-encoded string of the username and password. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=' +``` + +**Request:** + +| Parameter | Value | +| --------------- | -------------------------------------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Basic authorization using base64 encoded credentials, e.g., `dXNlcm5hbWU6cGFzc3dvcmQ=`. | + +## Use Bearer Tokens + +Bearer tokens are a type of access token that allows the bearer to access a protected resource. In OAuth 2.0, the token is typically passed in the Authorization header. + +### Access a Protected Resource + +The client application sends an HTTP request with an `Authorization` header containing the word "Bearer" followed by the access token. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: Bearer ACCESS_TOKEN' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------ | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Bearer token, e.g., `Bearer ACCESS_TOKEN`. | + +## Integrate External OAuth Middleware + +Tyk can integrate with external OAuth providers to delegate authentication and authorization. This allows you to leverage existing OAuth infrastructures while using Tyk as the API gateway. + +### Connect Tyk to an External OAuth Provider + +Set up Tyk to interact with the external OAuth provider's token introspection endpoint. This allows Tyk to validate tokens issued by providers such as Auth0 or Okta. + +**Example:** + +* Configure the external OAuth provider's token introspection endpoint in Tyk. +* Set up the necessary client credentials in Tyk's dashboard or configuration file. + + +* Configure the external OAuth provider's token introspection endpoint in Tyk Classic. +```json +"external_oauth": { + "enabled": true, + "providers": [ + { + "jwt": { + "enabled": false, + "signing_method": "", + "source": "", + "issued_at_validation_skew": 0, + "not_before_validation_skew": 0, + "expires_at_validation_skew": 0, + "identity_base_field": "" + }, + "introspection": { + "enabled": true, + "url": "http://localhost:8080/realms/tyk/protocol/openid-connect/token/introspect", + "client_id": "introspection-client", + "client_secret": "DKyFN0WXu7IXWzR05QZOnnSnK8uAAZ3U", + "identity_base_field": "sub", + "cache": { + "enabled": true, + "timeout": 3 + } + } + } + ] +} +``` + +* Set up the necessary [client credentials in Tyk's dashboard](api-management/authentication-authorization/#use-client-credentials-grant) or configuration file. + + + +### Use the Validated Token to Access Protected Resources + +After Tyk validates the token with the external provider, the client can access the protected resources as usual. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: Bearer VALIDATED_ACCESS_TOKEN' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------ | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Bearer token, e.g., `Bearer VALIDATED_ACCESS_TOKEN`. | + +## Authenticate Using Go Plugins + +Go Plugin Authentication allows you to implement custom authentication logic using the Go programming language. This method is useful for scenarios where you need to implement specialized authentication mechanisms that are not natively supported by Tyk. +To learn more about using Tyk Golang Plugins, go [here](plugins/supported-languages/golang/#authentication-with-a-golang-plugin) + + +## Sign Requests with HMAC + +HMAC (Hash-based Message Authentication Code) is a mechanism that allows for verifying the integrity and authenticity of a message. It uses a shared secret key between the client and server to generate a unique hash for each request. + +### Generate and Include HMAC Signature in the Request + +The client generates an HMAC signature using a shared secret and includes it in the request's `Authorization` header. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: HMAC ' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ------------------------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | HMAC signature, e.g., `HMAC `. | + +### Server Validates the HMAC Signature + +The server regenerates the signature using the same secret and compares it with the one sent by the client. If they match, the request is considered authentic. + + +## Use JSON Web Tokens (JWT) + +JSON Web Tokens (JWT) are a compact, URL-safe means of representing claims to be transferred between two parties. They are commonly used in API authentication and authorization. + +### Protecting an API with JWT + +To protect an API with JWT, we need to execute the following steps: +* Set Authentication Mode +* Set the JWT Signing Method +* Set the Identity Source and Policy Field Name +* Set a Default Policy +* Generate a JWT + + +#### Set Authentication Mode + +Select JSON Web Tokens as the Authentication mode: + +{{< img src="/img/2.10/jwt_auth_method.png" alt="Target Details: JSON Web Token" >}} + +#### Set the JWT Signing Method + +[Set the cryptographic signing method](#jwt-signing-method) to `HMAC (shared)` and the public secret as `tyk123` + +{{< img src="/img/2.10/jwt_signing_method.png" alt="JWT signing method dropdown" >}} + +#### Set the Identity Source and Policy Field Name + +The "sub" is unique to our end user or client. The policy rate limiting and authorization will apply to this unique bearer. + +{{< img src="/img/2.10/jwt_identity_source.png" alt="Policy and identity claim form" >}} + +We are telling Tyk to extract this unique ID from the `sub` Header, which is the JWT standard. [Read more here](#identity-source-and-policy-field-name) + +#### Set a Default Policy + +If Tyk cannot find a `pol` claim, it will apply this Default Policy. Select a policy that gives access to this API we are protecting, or [go create one first]({{< ref "getting-started/create-security-policy" >}}) if it doesn't exist. + +{{< img src="/img/2.10/jwt_default_policy.png" alt="Default Policy" >}} + +Make sure to save the changes to the API Definition. + +#### Generate a JWT + +Let's generate a JWT so we can test our new protected API. + +Head on over to [https://jwt.io/](https://jwt.io/). Sign the default JWT with our HMAC Shared Secret `tyk123` in the VERIFY SIGNATURE section. Your screen should look similar to this: + +{{< img src="/img/dashboard/system-management/jwt_jwtio_example.png" alt="Auth Configuration" >}} + +Copy the Encoded JWT and let's make a cURL against the Tyk API Definition: + +``` +$ curl http://localhost:8080/my-jwt-api/get \ +--header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.7u0ls1snw4tPEzd0JTFaf19oXoOvQYtowiHEAZnan74" +``` + +### Use the JWT + +The client includes the JWT in the Authorization header when making requests to the API. + +```bash +curl -X GET \ + https://api.example.com/protected-resource \ + -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' +``` + +**Request:** + +| Parameter | Value | +| --------------- | ----------------------------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Bearer token, e.g., `Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`. | + +### JWT and Auth0 with Tyk + +This will walk you through securing your APIs with JWTs via Auth0. We also have the following video that will walk you through the process. + +{{< youtube jm4V7XzbrZw>}} + +#### Prerequisites + +* A free account with Auth0 +* A Tyk Self-Managed or Cloud installation + +#### Create an Application in Auth0 + +1. Log in to your Auth0 account. +2. Select APIs from the Applications menu. + + {{< img src="/img/auth0/auth0-create-api.png" alt="Auth0 Create API" >}} + +3. Click Create API and enter a name and identifier for your API. + + {{< img src="/img/auth0/api-details.png" alt="Auth0 API details" >}} + +4. From the Test tab, follow the instructions on how to get an access token. + + {{< img src="img/auth0/auth0-test-curl.png" alt="Auth0 Test with cURL" >}} + +5. From the cURL tab, copy the token request command. + + ```bash + curl --request POST \ + --url https://dev-yjd8e8u5.us.auth0.com/oauth/token \ + --header 'content-type: application/json' \ + --data '{"client_id":{CLIENT_ID},"client_secret":{CLIENT_SECRET},"audience":{AUDIENCE},"grant_type":"client_credentials"}' + ``` + +6. Paste the command in a terminal window to generate your token. Save this token locally. + + ```yaml + { + "access_token": "xxxxxxxxxxx", + "token_type": "Bearer" + } + ``` + +7. After creating your API, a new Auth0 Application will be created. Go to the Applications section to view it. + + {{< img src="/img/auth0/new-application.png" alt="New Auth0 Application" >}} + +8. Copy the Domain from the Basic Information. You will use this when adding an API to Tyk. + + {{< img src="/img/auth0/auth0-basic-info.png" alt="Auth0 Application Basic Information" >}} + +#### Create Your API in Tyk + +1. Log in to your Tyk Dashboard. +2. Create a new HTTP API (the default `http://httpbin.org` upstream URL is fine). + + {{< img src="/img/auth0/tyk-create-api.png" alt="Tyk Create HTTP API" >}} + +3. From the Authentication section, select JSON Web Token (JWT) as your authentication mode. +4. Select RSA public Key as the JWT signing method. +5. Enter your Auth0 Application Domain from Step 8 above to complete the `jwks_uri` endpoint `https://<>/.well-known/jwks.json` +6. Copy your `jwks_uri` into the Public Key field. + + {{< img src="/img/auth0/tyk-api-auth.png" alt="Tyk API Authentication" >}} + +7. Add an Identity Source and Policy Field Name. The defaults of `sub` and `pol` are fine. +8. Save your API. +9. From the System Management section, select Policies. +10. Click Add Policy. +11. Select your Auth0 API. + + {{< img src="/img/auth0/tyk-api-auth.png" alt="Tyk Policy access rights" >}} + +12. You can keep the rest of the access rights at the defaults. +13. Click the Configurations tab and enter a Policy Name and a Keys Expiry after the period. + + {{< img src="/img/auth0/policy-access-rights.png" alt="Tyk Policy Configuration" >}} + +14. Click Create Policy. +15. Edit your JWT Auth0 API and add the policy you created as the Default Policy from the Authentication section. + + {{< img src="/img/auth0/api-default-policy.png" alt="Tyk API Default Policy Configuration" >}} + +16. From the top of the API, copy the API URL. +17. From a terminal window, use the API URL and the Auth0 generated token. + + ```bash + curl -X GET {API URL} -H "Accept: application/json" -H "Authorization: Bearer {token}" + ``` + + If using the `httpbin` upstream URL as in the example Tyk API, you should see the HTML returned for the httpbin service in your terminal. + + If there is an error with the request, you will see the following error message. + + ```yaml + { + "error": "Key not authorized: Unexpected signing method." + } + ``` + +### JWT and Keycloak with Tyk + +This guide will walk you through securing your APIs with JWTs via Keycloak. + +#### Prerequisites + +* A Keycloak installation +* A Tyk Self-Managed or Cloud installation + +#### Create an Application in Keycloak + +1. Access your Keycloak admin dashboard. +2. Navigate to the Administration console. + + {{< img src="/img/keycloak-jwt/navigate-to-admin-console.png" alt="Navigate to Keycloak Administration console" >}} + +3. Create a Keycloak realm from the top left-hand side dropdown. + + {{< img src="/img/keycloak-jwt/create-jwt-realm.png" alt="Create Keycloak Realm" >}} + +4. Create a Keycloak client. + + {{< img src="/img/keycloak-jwt/create-client.png" alt="Create Client" >}} + +5. Enter the necessary client details. + + {{< img src="/img/keycloak-jwt/create-client-step-1.png" alt="Add client details" >}} + +6. Enable client authentication and Service account roles under Authentication flow. + + {{< img src="/img/keycloak-jwt/create-client-step-2.png" alt="Update client permissions" >}} + +7. Set the redirection URL rules. + + {{< img src="/img/keycloak-jwt/create-client-step-3.png" alt="Add redirection URL rules" >}} + +8. Save. + + {{< img src="/img/keycloak-jwt/client.png" alt="Example client" >}} + +9. Retrieve the client secret from the Credentials tab under the client you just created. + + {{< img src="/img/keycloak-jwt/client-secret.png" alt="Retrieve client secret" >}} + +10. Generate your JWT using `curl`. This is the token you will use to access your services through the Tyk Gateway. You can generate your JWT using either of the following methods. Make sure to replace the `KEYCLOAK` prefixed parameters with the appropriate values. + + **Password Grant Type:** + + ```bash + curl -L --insecure -s -X POST 'https://KEYCLOAK_URL/realms/KEYCLOAK_REALM/protocol/openid-connect/token' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + --data-urlencode 'client_id=KEYCLOAK_CLIENT_ID' \ + --data-urlencode 'grant_type=password' \ + --data-urlencode 'client_secret=KEYCLOAK_SECRET' \ + --data-urlencode 'scope=openid' \ + --data-urlencode 'username=KEYCLOAK_USERNAME' \ + --data-urlencode 'password=KEYCLOAK_PASSWORD' + ``` + + **Client Credentials Grant Type:** + + ```bash + curl -L --insecure -s -X POST 'https://KEYCLOAK_URL/realms/KEYCLOAK_REALM/protocol/openid-connect/token' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + --data-urlencode 'client_id=KEYCLOAK_CLIENT_ID' \ + --data-urlencode 'grant_type=client_credentials' \ + --data-urlencode 'client_secret=KEYCLOAK_SECRET' + ``` + + A typical response will look something like this: + + ```yaml + { + "access_token": "...", + "expires_in": 300, + "refresh_expires_in": 1800, + "refresh_token": "...", + "token_type": "Bearer", + "id_token": "...", + "not-before-policy": 0, + "session_state": "...", + "scope": "openid profile email" + } + ``` + +#### Create Your API in Tyk + +1. Log in to your Tyk Dashboard. +2. Create a new HTTP API (the default `http://httpbin.org` upstream URL is fine). + + {{< img src="/img/keycloak-jwt/create-api-step-1.png" alt="Create a new HTTP API" >}} + +3. Scroll to the Authentication mode section and select JWT from the list. +4. Select RSA public Key as JWT Signing method. +5. Add your JSON Web Key Sets (JWKS) URL in the Public Key box. This can be found through the well-known config endpoint or is typically `https://KEYCLOAK_URL/realms/KEYCLOAK_REALM/protocol/openid-connect/certs`. +6. Add an Identity Source and Policy Field Name. The defaults of `sub` and `pol` are fine. +7. Click on the update button to save the API. + + {{< img src="/img/keycloak-jwt/create-api-step-2.png" alt="Create API" >}} + +8. Create a policy to manage access to your API. +9. Navigate to the Policies section on the left-hand side menu. +10. Click on Add Policy on the top right-hand side of your screen. +11. Select your API from the Add API Access Rights list. + + {{< img src="/img/keycloak-jwt/create-policy-step-1.png" alt="Select API for Security Policy" >}} + +12. Click on the Configurations tab and choose a policy name and TLL. + + {{< img src="/img/keycloak-jwt/create-policy-step-2.png" alt="Create API Security Policy" >}} + {{< img src="/img/keycloak-jwt/create-policy-step-3.png" alt="API Security Policy Result" >}} + +13. Add the default policy to the API. + + {{< img src="/img/keycloak-jwt/create-api-step-3.png" alt="Add default policy to API" >}} + +14. Test access to the API using curl. +15. Retrieve the API URL. + + {{< img src="/img/keycloak-jwt/create-api-step-4.png" alt="Add default Policy to API" >}} + +16. Test with curl. Make sure to replace `TOKEN` with the JWT you received from the curl earlier. + + ```bash + curl 'http://tyk.gateway.local/keycloak-jwt/get' \ + -H "Authorization: Bearer TOKEN" + ``` + +#### Running in k8s + +If you are looking to POC this functionality in Kubernetes, you can run a fully worked-out example using our tyk-k8s-demo library. You can read more [here]({{< ref "getting-started/quick-start/tyk-k8s-demo" >}}). + +### Split Token + +OAuth2, OIDC, and their foundation, JWT, have been industry standards for many years and continue to evolve, particularly with the iterative improvements in the OAuth RFC, aligning with FHIR and Open Banking principles. The OAuth flow remains a dominant approach for secure API access. + +In the OAuth flow, two types of access tokens are commonly used: opaque and JWT (more precisely, JWS). However, the use of JWTs has sparked debates regarding security, as JWTs can leak information when base64 decoded. While some argue that JWTs should not contain sensitive information, others consider JWTs inherently insecure for authorization. + +#### Introduction to Split Token Flow + +JWT Access Tokens can carry sensitive information, making them vulnerable if compromised. The Split Token Flow offers a solution by storing only the JWT signature on the client side while keeping the header and payload on the server side. This approach combines the flexibility of JWTs with the security of opaque tokens, ensuring that sensitive data is not exposed. + +#### How Tyk Implements Split Token Flow + +Tyk API Gateway is well-positioned to broker the communication between the client and the authorization server. It can handle requests for new access tokens, split the JWT, and return only the signature to the client, storing the rest of the token internally. + +Here’s how you can implement the Split Token Flow using the client credentials flow: + +##### Request a JWT Access Token + +```bash +$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ +https://keycloak-host/auth/realms/tyk/protocol/openid-connect/token \ +-d grant_type=client_credentials \ +-d client_id=efd952c8-df3a-4cf5-98e6-868133839433 \ +-d client_secret=0ede3532-f042-4120-bece-225e55a4a2d6 -s | jq +``` + +This request returns a JWT access token. + +##### Split the JWT + +The JWT consists of three parts: + +* Header: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9` +* Payload: `eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbWFpbCI6ImhlbGxvQHdvcmxkLmNvbSJ9` +* Signature: `EwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0` + +Using the Split Token Flow, only the signature is returned to the client, while the header and payload are stored server-side by Tyk. + +{{< img src="/img/2.10/split_token2.png" alt="Split Token Example" >}} + +##### Create a Virtual Endpoint in Tyk + +Create a virtual endpoint or API in Tyk to handle the token request. This endpoint receives the auth request, exchanges credentials with the authorization server, and returns the split token. + +**Example script for the Virtual Endpoint:** + +```javascript +function login(request, session, config) { + var credentials = request.Body.split("&") + .map(function(item, index) { + return item.split("="); + }).reduce(function(p, c) { + p[c[0]] = c[1]; + return p; + }, {}); + + var newRequest = { + "Headers": {"Content-Type": "application/x-www-form-urlencoded"}, + "Method": "POST", + "FormData": { + grant_type: credentials.grant_type, + client_id: credentials.client_id, + client_secret: credentials.client_secret + }, + "Domain": "https://keycloak-host", + "resource": "/auth/realms/tyk/protocol/openid-connect/token", + }; + + var response = TykMakeHttpRequest(JSON.stringify(newRequest)); + var usableResponse = JSON.parse(response); + + if (usableResponse.Code !== 200) { + return TykJsResponse({ + Body: usableResponse.Body, + Code: usableResponse.Code + }, session.meta_data) + } + + var bodyObj = JSON.parse(usableResponse.Body); + var accessTokenComplete = bodyObj.access_token; + var signature = accessTokenComplete.split(".")[2]; + + log("completeAccessToken: " + accessTokenComplete); + + // Create key inside Tyk + createKeyInsideTyk(signature, bodyObj); + + // Override signature + bodyObj.access_token = signature; + delete bodyObj.refresh_expires_in; + delete bodyObj.refresh_token; + delete bodyObj.foo; + + var responseObject = { + Body: JSON.stringify(bodyObj), + Code: usableResponse.Code + } + return TykJsResponse(responseObject, session.meta_data); +} +``` + +This script handles the login process, splits the JWT, and stores the necessary information in Tyk. + +Once the setup is complete, you can test the Split Token Flow by making API calls using the opaque token returned by the virtual endpoint. Tyk will validate the token and reconstruct the full JWT for upstream services. + +```bash +$ curl localhost:8080/basic-protected-api/get -H "Authorization: MEw….GJ0" +``` + +This request uses the opaque token, which Tyk validates and then injects the full JWT into the Authorization header for the API request. + +{{< img src="/img/2.10/split_token3.png" alt="Split Token Key Metadata" >}} + +{{< img src="/img/2.10/split_token1.png" alt="Split Token API Injection" >}} + + + +### Configure your JWT Setup +Learn how to configure and manage JWT authentication in your Tyk API Gateway. + + +#### Set Up JWT Signing Method +Select the cryptographic method to verify JWT signatures from the following options: + +- RSA public key +- HMAC shared secret +- ECDSA +- [Public JWKS URL](#dynamic-public-key-rotation-using-public-jwks-url) + +{{< note success >}} +**Note**: Leave the field blank to configure at the key level. +{{< /note >}} + +To generate an RSA keypair, use the following commands: +```bash +openssl genrsa -out key.rsa +openssl rsa -in key.rsa -pubout > key.rsa.pub +``` + + +#### Set Up Individual JWT Secrets +Enable Tyk to validate an inbound token using stored keys: + +1. Set up your token with the following fields: + ```{.json} + "jwt_data": { + "secret": "Secret" + } + ``` +2. Ensure the `kid` header field is included in the JWT for validation. + - If the `kid` header is missing, Tyk will check the `sub` field. This is not recommended but supported. + +The advantage of using RSA is that only the hashed ID and public key of the end user are stored, ensuring high security. + + +#### Configure Identity Source and Policy Field Name +Define the identity and policy applied to the JWT: + +- **Identity Source**: Select which identity claim to use (e.g., `sub`) for rate-limiting and quota counting. +- **Policy Field Name**: Add a policy ID claim to the JWT that applies a specific security policy to the session. + + +#### Enable Dynamic Public Key Rotation Using JWKs +Instead of a static public key, configure a public JSON Web Key Sets (JWKs) URL to dynamically verify JWT tokens: + +1. Use the JWKs URL to dynamically maintain and rotate active public keys. +2. Ensure JWTs contain the `kid` header, matching the `kid` in the JWK payload for verification. + + +{{< img src="/img/2.10/jwt_rsa_public_key.png" alt="JWKS Public Key Rotation" >}} + + +For example, cURLing the JWKs URL returns: + +```{.copyWrapper} +$ curl http://keycloak_host:8081/auth/realms/master/protocol/openid-connect/certs +{ + "keys": [ + { + "kid": "St1x2ip3-wzbrvdk4yVa3-inKWdOwbkD3Nj3gpFJwYM", + "kty": "RSA", + "alg": "RS256", + "use": "sig", + "n": "k-gUvKl9-sS1u8odZ5rZdVCGTe...m2bMmw", + "e": "AQAB", + "x5c": [ + "MIICmzCCAYMCBgFvyVrRq....K9XQYuuWSV5Tqvc7mzPd/7mUIlZQ=" + ], + "x5t": "6vqj9AeFBihIS6LjwZhwFLmgJXM", + "x5t#S256": "0iEMk3Dp0XWDITtA1hd0qsQwgES-BTxrz60Vk5MjGeQ" + } + ] +} +``` + +This is a JWKS complaint payload as it contains the "x5c" entry which contains the public key. Also, the issuer generates the ID Token or Access Token with a header that includes a "kid" that matches the one in the JWKS payload. + +Here's an example of a header belonging to an access token generated by the issuer above. +```{.json} +{ + "alg": "RS256", + "typ": "JWT", + "kid": "St1x2ip3-wzbrvdk4yVa3-inKWdOwbkD3Nj3gpFJwYM" +} +``` + +The Bearer tokens will be signed by the private key of the issuer, which in this example is our keycloak host. This bearer token can be verified by Tyk using the public key available in the above payload under "x5C". + +All of this happens automatically. You just need to specify to Tyk what the JWKs url is, and then apply a "sub" and default policy in order for everything to work. See Step #3, 4, and 5 under option #1 for explanations and examples. + + + +#### Adjust JWT Clock Skew Configuration +Prevent token rejection due to clock skew between servers by configuring clock skew values: + +- `jwt_issued_at_validation_skew` +- `jwt_expires_at_validation_skew` +- `jwt_not_before_validation_skew` + +All values are in seconds. The default is `0`. + + +#### Map JWT Scopes to Policies +Assign JWT scopes to security policies to control access: + +1. Specify scope-to-policy mapping: + +```{.copyWrapper} + "jwt_scope_to_policy_mapping": { + { + "admin": "59672779fa4387000129507d", + "developer": "53222349fa4387004324324e" + }, + "jwt_scope_claim_name": "our_scope" +} +``` + - `"jwt_scope_to_policy_mapping"` provides mapping of scopes (read from claim) to actual policy ID. I.e. in this example we specify that scope "admin" will apply policy `"59672779fa4387000129507d"` to a key +- `"jwt_scope_claim_name"` identifies the JWT claim name which contains scopes. This API Spec field is optional with default value `"scope"`. This claim value could be any of the following: + - a string with space delimited list of values (by standard) + - a slice of strings + - a string with space delimited list of values inside a nested key. In this case, provide `"jwt_scope_claim_name"` in dot notation. For eg. `"scope1.scope2"`, `"scope2"` will be having the list of values nested inside `"scope1"` + - a slice of strings inside a nested key. In this case, provide `"jwt_scope_claim_name"` in dot notation. For eg. `"scope1.scope2"`, `"scope2"` will be having a slice of strings nested inside `"scope1"` + +2. Set the claim name that contains the scopes (default: `scope`): + ```{.json} + "jwt_scope_claim_name": "our_scope" + ``` + +{{< note success >}} +**Note** + +Several scopes in JWT claim will lead to have several policies applied to a key. In this case all policies should have `"per_api"` set to `true` and shouldn't have the same `API ID` in access rights. I.e. if claim with scopes contains value `"admin developer"` then two policies `"59672779fa4387000129507d"` and `"53222349fa4387004324324e"` will be applied to a key (with using our example config above). +{{< /note >}} + + + +#### Visualize JWT Flow in Tyk API Gateway +View the diagram below for an overview of JWT flow in Tyk: + +{{< img src="/img/diagrams/diagram_docs_JSON-web-tokens@2x.png" alt="JSON Web Tokens Flow" >}} + + +## Combine Authentication Methods + +### Multiple (Chained) Authentication + +As of Tyk v2.3, it is possible to have multiple authentication middleware chained together. For example, you can use an Access Token in combination with Basic Auth or with a JSON Web Token. Below is a video demonstration of this functionality: + +{{< youtube vYGYYXcJ6Wc>}} + +#### Enable Multi (Chained) Authentication with the Dashboard + +To enable multi-chained authentication in your GUI, follow these steps: + +1. Browse to the "Authentication" Section + + First, navigate to the Endpoint Designer and view the "Core Settings" tab. In this section, you can choose various authentication methods. For this setup, you will configure multiple auth providers, which works slightly differently than setting up a single auth method. + +2. Select the Multiple Auth Mechanisms Option + + Select the Use Multiple Auth Mechanisms option from the drop-down list. This will open a window that provides checkboxes for each supported auth type to be chained. Note that it is not possible to set the order of chained auth methods. + + {{< img src="/img/2.10/multiple_auth_methods.png" alt="Select Multiple Auth" >}} + +3. Select Your Preferred Auth Methods and Base Identity Provider + + Choose the authentication methods you want to chain together and select the base identity provider. The baseline provider will be the one that provides the current request context with the session object, defining the "true" access control list, rate limit, and quota to apply to the user. + + {{< img src="/img/2.10/select_multiple_auth_methods.png" alt="Select Auth Methods" >}} + + Once these are set up, you will see the traditional configuration screens for each of the auth methods selected in the checkboxes. Configure them as you would regular authentication modes. + +#### Enable Multi (Chained) Authentication in Your API Definition + +To enable this mode, set the `base_identity_provided_by` field in your API Definitions to one of the supported chained enums below: + +* `AuthToken` +* `HMACKey` +* `BasicAuthUser` +* `JWTClaim` +* `OIDCUser` +* `OAuthKey` +* `UnsetAuth` + +The provider set here will then be the one that provides the session object that determines rate limits, ACL rules, and quotas. + +Tyk will chain the auth mechanisms as they appear in the code and will default to an auth token if none are specified. You can explicitly set auth token support by setting `use_standard_auth` to `true`. + + +## Use Open (Keyless) Authentication + +Open or keyless authentication allows access to APIs without any authentication. This method is suitable for public APIs where access control is not required. + +### Configure the API as Open or Keyless in Tyk + +In Tyk, configure the API to not require any authentication for access. +To implement keyless access, simply set the flag in your API Definition: + +```{.copyWrapper} +{ + ... + "use_keyless": true, + "auth": { + "auth_header_name": "" + }, + ... +} +``` +This will stop checking keys that are proxied by Tyk. + +{{< note success >}} +**Note** + +Keyless APIs cannot be selected for [Access Rights]({{< ref "getting-started/create-security-policy" >}}) in a security policy. +{{< /note >}} + +### Request a Public Resource + +Access the API directly without any authentication tokens or credentials. + +```bash +curl -X GET \ + https://api.example.com/public-resource +``` + +**Request:** + +| Parameter | Value | +| ---------- | ------------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the public resource. | + + +**Request:** + +| Parameter | Value | +| --------------- | ---------------------------------- | +| **Method** | `GET` | +| **URL** | The API endpoint for the protected resource. | +| **Authorization** | Bearer token, e.g., `Bearer ID_TOKEN`. | + +## Use Python CoProcess and JSVM Plugin Authentication + +Tyk allows for custom authentication logic using Python and JavaScript Virtual Machine (JSVM) plugins. This method is useful for implementing unique authentication mechanisms that are tailored to your specific requirements. + +* See [Custom Authentication with a Python plugin]({{< ref "plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial" >}}) for a detailed example of a custom Python plugin. +* See [JavaScript Middleware]({{< ref "plugins/supported-languages/javascript-middleware" >}}) for more details on using JavaScript Middleware. + + + + +## Set Physical Key Expiry and Deletion + +Tyk supports managing API keys with specific expiry dates and allows for the deletion of keys when they are no longer needed. This ensures that access to your APIs is properly controlled and limited to authorized users. + +### Configure Key Expiry in Tyk + +Set an expiry date for API keys during their creation or update. + +**Example Configuration:** + +```yaml +{ + "key": "USER_API_KEY", + "expires": 1625151600, + "delete": true +} +``` + +### Automatically or Manually Delete Expired Keys + +Tyk can be configured to automatically delete expired keys, or you can manually delete them through the Tyk dashboard or API. + + + +## Enable Mutual TLS + +Mutual TLS (mTLS) is a robust security feature that ensures both the client and server authenticate each other using TLS certificates. This two-way authentication process provides enhanced security for API communications by verifying the identity of both parties involved in the connection. + +### Why Use Mutual TLS? + +Mutual TLS is particularly valuable in environments where security is paramount, such as microservices architectures, financial services, healthcare, and any scenario requiring zero-trust security. It not only encrypts the data in transit but also ensures that the communicating parties are who they claim to be, mitigating the risks of unauthorized access and data breaches. + +### Concepts + +#### How Does Mutual TLS Work? + +Mutual TLS operates by requiring both the client and server to present and verify TLS certificates during the handshake process. Here’s how it works: + +**Client Authentication:** + +1. When a client attempts to connect to the server, the server requests the client’s TLS certificate. +2. The client provides its certificate, which the server verifies against a trusted Certificate Authority (CA). + +**Server Authentication:** + +1. Simultaneously, the client also verifies the server’s certificate against a trusted CA. + +This mutual verification ensures that both parties are legitimate, securing the connection from both ends. + +#### Benefits of Mutual TLS + +* **Enhanced Security:** Provides two-way authentication, ensuring both the client and server are verified and trusted. +* **Data Integrity:** Protects the data exchanged between client and server by encrypting it, preventing tampering or interception. +* **Compliance:** Helps meet stringent security and compliance requirements, especially in regulated industries. + +### Client mTLS + +There are two ways to set up client mTLS in Tyk: static and dynamic. Each method is suited to different use cases, as outlined below: + +| Use Case | Static | Dynamic | +| ------------------------------------------------------------------ | :----: | :-----: | +| Let developers upload their own public certificates through the Developer Portal | ❌ | ✅ | +| Combine client mTLS with another authentication method | ✅ | ✅ | +| Allow certs at the API level (one or more APIs per cert) | ✅ | ❌ | +| Allow certs at an individual level (one or more APIs per cert) | ❌ | ✅ | + +#### Dynamic Client mTLS + +Dynamic Client mTLS in Tyk allows you to authenticate users based solely on the provided client certificate, without the need for an additional authentication key. Tyk can identify the user, apply policies, and monitor usage just as with regular API keys. + +To set up Dynamic Client mTLS, we need to follow these steps: +* Protect the API: Configure the API in the API Designer by setting the authentication type to Auth Token and enabling Client Certificate. + +* Generate a Self-Signed Certificate: Use OpenSSL to generate a self-signed certificate and key if you don't have one. + +* Add a Key in the Dashboard: In the Tyk Dashboard, create a key for the API and upload only the public certificate. + +* Make an API Request: Use curl with your certificate and key to make an API request to the protected API, ensuring the request returns a 200 response. + +* Allow Developers to Upload Certificates: Create a policy and catalog entry for the API, allowing developers to request keys and upload their public certificates through the Developer Portal. Developers can then make API requests using their cert and private key. + + +##### Protect the API + +In the API Designer, set the Authentication Type to Auth Token under Target Details > Authentication mode. Then select Enable Client Certificate. + +{{< img src="/img/2.10/client_cert.png" alt="Enable Client Certificate" >}} + +##### Generate a Self-Signed Key Pair + +If you don’t already have a certificate, generate a self-signed key pair using the following command: + +```bash +openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes +``` + +##### Add a Key through the Dashboard + +In the Tyk Dashboard, add a key for the API you set up in step #1. When uploading the certificate, ensure you only upload the public certificate. + + +{{< note success >}} +**Note** +The certificate you upload for this key must only be the public certificate. +{{< /note >}} + + +##### Make an API Request Using the Certificate + +Now you can make a cURL request to the API using the certificate and private key: + +```bash +curl -k --cert cert.pem --key key.pem https://localhost:8080/mtls-api/my-endpoint +``` + +A successful request should return a 200 response. + +##### Allow Developers to Upload Certificates + +Instead of manually creating keys, you can allow developers to upload their own certificates via the Developer Portal. + +1. **Create a Policy:** Create a policy for the API you set up earlier. +2. **Create a Catalog Entry:** Create a catalog entry for this policy. +3. **Request a Key through the Portal:** As a developer, request a key for the API through the Portal. This will present a screen where the developer can upload their public certificate. + + {{< img src="/img/2.10/client_mtls_add_cert.png" alt="Add Key Certificate" >}} + +4. **Make an API Request Using the Uploaded Certificate:** After adding the public certificate, developers can make API requests using their cert + private key: + + ```bash + curl -k --cert cert.pem --key key.pem https://localhost:8080/mtls-api/my-endpoint + ``` + + A successful request should return a 200 response. + +#### Static mTLS + +Static mTLS allows client certificates to be used at the API level. This method is straightforward and can be combined with another authentication method if needed. + +##### Configure the API + +In the API authentication settings, choose mTLS as the authentication type and optionally select an additional authentication method. If you want to use only client certificates without another authentication method, select "keyless" as the other option. + +##### Set the Base Identity + +The base identity can be anything, as the client certificate will be the primary authentication method. + +{{< img src="/img/2.10/client_mtls_multiple_auth.png" alt="enable_cert" >}} + +##### FAQ + +* **Why am I getting an error stating that certificates are not enabled for this API?** + + This issue can occur because client mTLS is an extension of Auth Token authentication mode. To enable this feature, ensure the API definition has `auth.use_certificate` set to `true`. + +* **Can I upload a full certificate chain when creating a key for dynamic client mTLS?** + + Yes, you can do this when manually creating a key as an Admin Dashboard user. However, through the Portal, you must upload only the public key (certificate). + +* **Can I use a root CA with client mTLS?** + + Yes, Tyk allows you to upload a root CA certificate for static mTLS authentication. This setup allows clients with certificates signed by the registered CA to be validated. + + **Key Points:** + + * The root CA certificate can be uploaded as a client certificate. + * Clients presenting certificates signed by this CA will be validated. + * Tyk traverses the certificate chain for validation. +{{< note success >}} + **Note** + Root CA certificates are compatible only with Static mTLS and not with Dynamic mTLS. +{{< /note >}} + + +### Upstream mTLS + +If your upstream API is protected with mutual TLS (mTLS), you can configure Tyk to send requests with the specified client certificate. This ensures secure communication between Tyk and your upstream services. + +#### Key Features of Upstream mTLS + +* **Certificate Per Host:** You can specify one certificate per host and define a default certificate. +* **API-Level or Global Configuration:** Upstream certificates can be defined at the API level or globally via the Gateway configuration file. +* **JSVM Middleware Support:** Specified client certificates will be used not only for internal Tyk calls but also for HTTP calls inside your JSVM middleware. + +#### How To Set Up Upstream mTLS + +To set up upstream mTLS in your API definition, you should configure the `upstream_certificates` field in the following format: + +```yaml +{ + "upstream_certificates": { + "example.com": "" + } +} +``` + +If you want to configure this at a global level, specify it via the `security.certificates.upstream` field in your Gateway configuration file. + +#### Via Dashboard + +To configure upstream mTLS using the Tyk Dashboard: + +1. Navigate to the API Designer. +2. Go to the Advanced Options panel. +3. Find the Upstream Certificates section and attach the appropriate certificate. + + {{< img src="/img/2.10/attach_upstream_cert.png" alt="upstream_cert" >}} + +#### Domain Configuration + +When specifying the domain for the upstream certificate, do **NOT** include the protocol (e.g., `https://`). Including the protocol will prevent Tyk from matching the certificates to the correct domain. + +**Incorrect:** `https://api.production.myupstream.com` + +**Correct:** `api.production.myupstream.com` + +If the request is made via a non-standard HTTP port, you need to include the port in the domain: + +**Correct:** `api.production.myupstream.com:8443` + +#### Wildcards + +You may use wildcards in combination with text to match the domain, but this only works one level deep. + +For example, if your domain is `api.production.myupstream.com`: + +**Correct:** `*.production.myupstream.com` + +**Incorrect:** `*.myupstream.com` + +#### Default Upstream Certificate + +To set a default client certificate, use `*` instead of a domain name: + +```yaml +{ + "upstream_certificates": { + "*": "" + } +} +``` + +This configuration will apply the specified certificate to all upstream requests that do not match a more specific domain. + +## Conclusion + +Tyk empowers you to safeguard your APIs effectively with its wide array of industry-standard authentication and authorization methods, offering the flexibility to choose the best fit for your security needs. + +This revised structure aims to: + +* **Provide a Clear Overview:** Introduce all authentication methods upfront. +* **Maintain Technical Depth:** Retain all original details, including code snippets, configuration steps, and explanations. +* **Emphasize User Actions:** Frame subheadings around what users can *do* with each method. diff --git a/tyk-docs/content/api-management/automation-tools.md b/tyk-docs/content/api-management/automation-tools.md new file mode 100644 index 0000000000..fbf3a48098 --- /dev/null +++ b/tyk-docs/content/api-management/automation-tools.md @@ -0,0 +1,1333 @@ +--- +description: Tyk Tools that help with automating deployment and API Management operations +linkTitle: Automation Tools +tags: +- Tyk API Management +- Open Source +- Self-Managed +- Tyk Cloud +- API Gateway +title: Automation Tools +date: 2020-06-24 +--- + + +Tyk offers a powerful suite of tools and features to automate your API lifecycle management, enabling efficient, consistent, and secure API operations across multiple environments. This guide will walk you through automating various aspects of API management using Tyk's comprehensive toolset. + +This page covers: +- Automating API management in Kubernetes environments with Tyk Operator +- Synchronizing Tyk configurations across different environments using Tyk Sync +- Programmatically managing Tyk resources via APIs +- Automating multi-environment deployments + +Use Ctrl+F or the sidebar to quickly find specific topics. For example, search "Tyk Operator" for Kubernetes-based automation, "Tyk Sync" for configuration synchronization details. + +## Prerequisites + +Before diving into lifecycle automations with Tyk, ensure you have the following: + +- A Tyk installation (Self-Managed or Cloud) + - If you don't have Tyk installed, follow our [installation guide](https://tyk.io/docs/tyk-on-premises/installation/) + - For Tyk Cloud, sign up [here](https://tyk.io/sign-up/) + +- Access to a Kubernetes cluster (for Tyk Operator sections) + - If you're new to Kubernetes, check out the official [Kubernetes documentation](https://kubernetes.io/docs/setup/) + +- Helm (for installing Tyk Operator) + - If you don't have Helm installed, follow the [official Helm installation guide](https://helm.sh/docs/intro/install/) + - Verify your installation by running `helm version` in your terminal + +- Tyk Dashboard access and API credentials + - Learn how to set up the Tyk Dashboard [here](https://tyk.io/docs/tyk-dashboard/) + - For API credentials, see our guide on [creating API tokens](https://tyk.io/docs/tyk-dashboard/managing-users/#create-an-api-token) + +- Basic knowledge of Kubernetes, YAML, and API concepts + - For Kubernetes, visit the [official tutorials](https://kubernetes.io/docs/tutorials/) + - For YAML, check out this [YAML tutorial](https://yaml.org/spec/1.2/spec.html) + - For API concepts, review our [API management basics](https://tyk.io/docs/getting-started/key-concepts/) + +If you're missing any of these prerequisites, please follow the provided links to set up the necessary components before proceeding with the lifecycle automation steps. + + +## Getting Started + +Before diving into the quick start guides for using the tyk-operator, take a look at these tables to get an overview of the API types, management features, authentication methods, and routing options supported by the Tyk Operator. This will help you understand which features are available, their supported versions, and how to implement them effectively in your setup. + +### Tyk Operator Overview +Here is the continuation of the tables in markdown format with brief explanations: + +#### API Types + +| Type | Support | Supported From | Comments | +|--------------------------------|---------|----------------|------------------------------| +| HTTP | ✅ | v0.1 | Standard HTTP proxy for API requests. | +| HTTPS | ✅ | v0.4 | Secure HTTP proxy using SSL/TLS encryption. | +| TCP | ✅ | v0.1 | Handles raw TCP traffic, useful for non-HTTP APIs. | +| TLS | ✅ | v0.1 | Handles encrypted TLS traffic for secure communication. | +| GraphQL - Proxy | ✅ | v0.1 | Proxy for GraphQL APIs, routing queries to the appropriate service. | +| Universal Data Graph v1 | ✅ | v0.1 | Supports Universal Data Graph v1 for unified data access. | +| Universal Data Graph v2 | ✅ | v0.12 | Supports the newer Universal Data Graph v2 for more advanced data handling. | +| GraphQL - Federation | ✅ | v0.12 | Supports GraphQL Federation for querying multiple services as one API. | + +#### Management of APIs + +| Type | Support | Supported From | Comments | +|--------------------------------|---------|----------------|------------------------------| +| API Name | ✅ | v0.1 | Assign and manage names for your APIs. | +| API Status (inactive/active) | ✅ | v0.2 | Toggle API status between active and inactive. | +| API Categories | ✅ | v0.1 | Categorize APIs for easier management. | +| API ID | ✅ | v0.1 | Assign unique IDs to APIs for tracking and management. | +| API Ownership | ✅ | v0.12 | Define ownership of APIs within teams or organizations. | +| API Versioning | ✅ | v0.1 | Enable version control for APIs. | + +#### Traffic Routing + +| Type | Supported | Supported From | Comments | +| --------------------------- | --------- | -------------- | ---------------------------- | +| Path-Based Proxy | ✅ | v0.1 | Route traffic based on URL path. | +| Host-Based Proxy | ✅ | v0.1 | Route traffic based on the request host. | +| Target URL | ✅ | v0.1 | Redirect traffic to a specific target URL. | + +#### Client to Gateway Authentication and Authorization + +| Type | Supported | Supported From | Comments | +| ----------------------------- | --------- | -------------- | ----------------------------------------------- | +| Keyless | ✅ | v0.1 | No authentication required, open access. | +| Auth Token | ✅ | v0.1 | Requires an authentication token (Bearer token).| +| JWT | ✅️ | v0.5 | Uses JSON Web Tokens for secure authentication. | +| OpenID Connect | ❌ | - | Recommended to use JWT for OIDC authentication. | +| OAuth2 | ❌ | - | OAuth2 not supported, JWT is recommended. | +| Client mTLS | ✅ | v0.11 | Supports static client mutual TLS authentication. | +| HMAC | ❌ | - | HMAC authentication is not implemented. | +| Basic Authentication | ✅ | v0.12 | Only supports enabling with default metadata. | +| Custom Authentication Plugin (Go) | ✅ | v0.11 | Custom authentication plugin written in Go. | +| Custom Authentication Plugin (gRPC) | ✅ | v0.1 | Custom authentication plugin using gRPC. | +| Multiple Authentication | ✅ | v0.14 | Chain multiple authentication methods. | +| IP Allowlist | ✅ | v0.5 | Allows access only from specific IP addresses. | +| IP Blocklist | ✅ | v0.5 | Blocks access from specific IP addresses. | + +#### Gateway to Upstream Authentication + +| Type | Supported | Supported From | Comments | +|-------------------------------------------------|-----------|----------------|------------------------------| +| Upstream Certificates mTLS | ✅ | v0.9 | Mutual TLS authentication for upstream connections. | +| Public Key Certificate Pinning | ✅ | v0.9 | Ensures that the upstream certificate matches a known key. | +| Upstream Request Signing | ❌ | - | Upstream request signing is not implemented. | + +#### API-level (Global) Features + +| Feature | Supported | Supported From | Comments | +|--------------------------------------|-----------|----------------|------------------------------------------------------------------------| +| Detailed recording (in Log Browser) | ✅ | v0.4.0 | Records detailed API traffic logs for analysis. | +| Config Data | ✅ | v0.8.2 | Stores additional configuration data for APIs. | +| Context Variables | ✅ | v0.1 | Enables dynamic context-based variables in APIs. | +| Cross Origin Resource Sharing (CORS) | ✅ | v0.2 | Manages CORS settings for cross-domain requests. | +| Service Discovery | ⚠️ | - | Service discovery is untested in this version. | +| Segment Tags | ✅ | v0.1 | Tags APIs for segmentation across environments. | +| Internal API (not exposed by Gateway)| ✅ | v0.6.0 | Internal APIs are not exposed via the Gateway. | +| Global (API-level) Header Transform | ✅ | v0.1.0 | Transforms request and response headers at the API level. | +| Global (API-level) Rate Limit | ✅ | v0.10 | Sets rate limits globally for APIs. | +| Custom Plugins | ✅ | v0.1 | Supports the use of custom plugins for API processing. | +| Analytics Plugin | ✅ | v0.16.0 | Integrates analytics plugins for API monitoring. | +| Batch Requests | ❌ | - | Batch requests are not supported. | +| Custom Analytics Tags (Tag Headers) | ✅ | v0.10.0 | Custom tags for API analytics data. | +| Expire Analytics After | ❌ | - | Not supported in this version. | +| Do not track Analytics (per API) | ✅ | v0.1.0 | Disable analytics tracking on specific APIs. | +| Webhooks | ❌ | - | Webhook support is not available. | +| Looping | ✅ | v0.6 | Enables internal looping of API requests. | +| Round Robin Load Balancing | ✅ | - | Supports round-robin load balancing across upstream servers. | + +#### Endpoint-level Features + +| Endpoint Middleware | Supported | Supported From | Comments | +|-----------------------------------|-----------|----------------|------------------------------------------------| +| Allow list | ✅️ | v0.8.2 | Allows requests only from approved sources. | +| Block list | ✅️ | v0.8.2 | Blocks requests from disapproved sources. | +| Cache | ✅ | v0.1 | Caches responses to reduce latency. | +| Advance Cache | ✅ | v0.1 | Provides advanced caching capabilities. | +| Circuit Breaker | ✅ | v0.5 | Prevents service overload by breaking circuits. | +| Track Endpoint | ✅ | v0.1 | Tracks API endpoint usage for analysis. | +| Do Not Track Endpoint | ✅ | v0.1 | Disables tracking for specific endpoints. | +| Enforced Timeouts | ✅ | v0.1 | Ensures timeouts for long-running requests. | +| Ignore Authentication | ✅ | v0.8.2 | Bypasses authentication for selected endpoints.| +| Internal Endpoint | ✅ | v0.1 | Restricts access to internal services. | +| URL Rewrite | ✅️ | v0.1 | Modifies request URLs before processing. | +| Validate Request | ✅ | v0.8.2 | Validates incoming requests before forwarding. | +| Rate Limit | ❌ | - | Rate limiting is not supported per endpoint. | +| Request Size Limit | ✅️ | v0.1 | Limits the size of requests to prevent overload.| +| Request Method Transform | ✅ | v0.5 | Modifies HTTP methods for incoming requests. | +| Request Header Transform | ✅ | v0.1 | Transforms request headers. | +| Request Body Transform | ✅ | v0.1 | Transforms request bodies for processing. | +| Request Body JQ Transform | ⚠️ | v0.1 | Requires JQ support on the Gateway Docker image.| +| Response Header Transform | ✅ | v0.1 | Transforms response headers. | +| Response Body Transform | ✅ | v0.1 | Transforms response bodies. | +| Response Body JQ Transform | ⚠️ | v0.1 | Requires JQ support on the Gateway Docker image.| +| Mock Response | ✅ | v0.1 | Simulates API responses for testing. | +| Virtual Endpoint | ✅ | v0.1 | Allows creation of dynamic virtual endpoints. | +| Per-Endpoint Plugin | ❌ | - | Plugin support per endpoint is not available. | +| Persist Graphql | ❌ | - | Not supported in this version. | + + +### Set up Tyk Operator in your Kubernetes cluster + +Tyk Operator extends Kubernetes with custom resources to manage Tyk APIs declaratively. Here's how to install it: + +1. Install Tyk Operator using Helm: + +```bash +helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ +helm repo update +helm install tyk-operator tyk-helm/tyk-operator +``` + +This command adds the Tyk Helm repository, updates it, and installs the Tyk Operator in your Kubernetes cluster. + +2. Verify the installation: + +```bash +kubectl get pods | grep tyk-operator +``` + +This command lists all pods in your cluster, filtering for the Tyk Operator pod. You should see the pod running. + +### Create your first API using Tyk Operator + +Creating an API takes the same approach whether you are using Tyk Open Source or Self Managed. First, specify the details of your API using the ApiDefinition CRD, then deploy it to create the corresponding Kubernetes resource. Tyk Operator will take control of the CRD and create the actual API in the Tyk data plane. + + +#### Create an ApiDefinition resource in YAML format +Create a file called `httpbin.yaml`, then add the following: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +You can also use other sample files from `our repository`. + +#### Deploy the ApiDefinition resource +We are going to create an ApiDefinition from the httpbin.yaml file, by running the following command: + +```console +$ kubectl apply -f httpbin.yaml +``` + +Or, if you don’t have the manifest with you, you can run the following command: + +```yaml +cat < +Annotations: +API Version: tyk.tyk.io/v1alpha1 +Kind: ApiDefinition +Metadata: + ... +Spec: + ... + Name: httpbin + ... +Status: + api_id: ZGVmYXVsdC9odHRwYmlu +Events: +``` + +You can obtain the API name and API ID from `name` and `status.api_id` field. + +In our example, it is as follows: + +- {API-NAME}: httpbin +- {API-ID}: ZGVmYXVsdC9odHRwYmlu + +When you have successfully created a key, you can use it to access the `httpbin` API. + +```curl +curl -H "Authorization: Bearer {Key ID}" localhost:8080/httpbin/get +{ + "args": {}, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip", + "Authorization": "Bearer {Key ID}", + "Host": "httpbin.org", + "User-Agent": "curl/7.77.0", + "X-Amzn-Trace-Id": "Root=1-6221de2a-01aa10dd56f6f13f420ba313" + }, + "origin": "127.0.0.1, 176.42.143.200", + "url": "http://httpbin.org/get" +} +``` + + +### Automate API Security Configuration + +In this section, you will Automate API security using Kubernetes CRDs and YAML files. +This involves: +* Creating a Policy resource in YAML format +* Deploy security policies with kubectl to enforce rate limits, quotas, and throttling. +* Manage access controls with path-based permissions. +* Streamline policy management using tags, metadata, and quick verification. + + +#### Create a SecurityPolicy resource in YAML format + +Create a file called `ratelimit.yaml`, then add the following: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: httpbin +spec: + name: Rate Limit, Quota and Throttling policy + state: active + active: true + access_rights_array: + - name: httpbin + namespace: default + versions: + - Default + quota_max: 10 + quota_renewal_rate: 60 + rate: 5 + per: 5 + throttle_interval: 2 + throttle_retry_limit: 2 +``` + +You can link this Security Policy to any APIs you have defined in `access_rights_array`. In this example, the security policy is applied to `httpbin` API in `default` namespace. + +#### Deploy the SecurityPolicy resource +You can do so by applying the above manifest: + +```console +$ kubectl apply -f ratelimit.yaml +``` + +Or, if you don’t have the manifest with you, you can run the following command: + +```yaml +cat < 27017 +``` + +Ensure your Kubernetes cluster allows TCP traffic on the specified port. + +#### Universal Data Graph (UDG) APIs + +UDG allows you to create a GraphQL API from multiple data sources, including REST APIs. + +To create a UDG API: + +1. Create a file named `udg-api.yaml`: + +If you are on Tyk 3.2 and above, you can use the following manifest to create an UDG API. This example configures a Universal Data Graph from a GraphQL datasource and a REST Datasource. + +```yaml {hl_lines=["20-39", "46-80"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: udg +spec: + name: Universal Data Graph v2a + use_keyless: true + protocol: http + active: true + proxy: + target_url: "" + listen_path: /udg + strip_listen_path: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default + graphql: + enabled: true + execution_mode: executionEngine + schema: | + type Country { + name: String + code: String + restCountry: RestCountry + } + type Query { + countries: [Country] + } + type RestCountry { + altSpellings: [String] + subregion: String + population: Int + } + version: "2" + last_schema_update: "2022-10-12T14:27:55.511+03:00" + type_field_configurations: [] + playground: + enabled: true + path: /playground + engine: + field_configs: + - disable_default_mapping: false + field_name: countries + path: + - "countries" + type_name: Query + - disable_default_mapping: true #very important for rest APIs + field_name: restCountry + path: [] + type_name: Country + data_sources: + - kind: "GraphQL" + name: "countries" + internal: false + root_fields: + - type: Query + fields: + - "countries" + config: + url: "https://countries.trevorblades.com/" + method: "POST" + headers: {} + body: "" + - kind: "REST" + internal: false + name: "restCountries" + root_fields: + - type: "Country" + fields: + - "restCountry" + config: + url: "https://restcountries.com/v2/alpha/{{ .object.code }}" + method: "GET" + body: "" + headers: {} +``` +##### UDG v1 (Tyk 3.1 or before) +If you are on Tyk 3.1, you can use the following manifest to create an UDG API. This example creates a Universal Data Graph with GraphQL datasource and HTTP JSON datasource. +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: udg +spec: + name: Universal Data Graph Example + use_keyless: true + protocol: http + active: true + proxy: + target_url: "" + listen_path: /udg + strip_listen_path: true + graphql: + enabled: true + execution_mode: executionEngine + schema: | + type Country { + name: String + code: String + restCountry: RestCountry + } + type Query { + countries: [Country] + } + type RestCountry { + altSpellings: [String] + subregion: String + population: String + } + type_field_configurations: + - type_name: Query + field_name: countries + mapping: + disabled: false + path: countries + data_source: + kind: GraphQLDataSource + data_source_config: + url: "https://countries.trevorblades.com" + method: POST + status_code_type_name_mappings: [] + - type_name: Country + field_name: restCountry + mapping: + disabled: true + path: "" + data_source: + kind: HTTPJSONDataSource + data_source_config: + url: "https://restcountries.com/v2/alpha/{{ .object.code }}" + method: GET + default_type_name: RestCountry + status_code_type_name_mappings: + - status_code: 200 + playground: + enabled: true + path: /playground +``` +This setup creates a simple UDG API that resolves the `hello` query using httpbin.org's `/get` endpoint. + +2. Apply the YAML: + +```bash +kubectl apply -f udg-api.yaml +``` + +3. Verify the API: + +```bash +kubectl get apidefiniton udg-api +``` + +4. Test the GraphQL endpoint: + +```bash +curl -X POST http://:/udg/graphql \ + -H "Content-Type: application/json" \ + -d '{"query": "{ hello }"}' +``` + +#### GraphQL APIs + +For existing GraphQL services, Tyk can act as a proxy, adding authentication and rate limiting. + +To set up a GraphQL API: + +1. Create a file named `graphql-api.yaml`: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: graphql-api +spec: + name: GraphQL API + active: true + protocol: http + proxy: + target_url: http://graphql-engine:8080 + listen_path: /graphql + graphql: + enabled: true + execution_mode: proxyOnly + schema: | + type Query { + hello: String! + } +``` + +This configuration proxies requests to an existing GraphQL server. + +2. Apply the YAML: + +```bash +kubectl apply -f graphql-api.yaml +``` + +3. Verify the API: + +```bash +kubectl get apidefiniton graphql-api +``` + +4. Test the GraphQL endpoint: + +```bash +curl -X POST http://:/graphql \ + -H "Content-Type: application/json" \ + -d '{"query": "{ hello }"}' +``` + + + +## Synchronize Tyk Environment With GitHub Repository + +Tyk Sync is a powerful tool for exporting and importing Tyk configurations, enabling you to synchronize settings across different environments. + +### Set up Tyk Sync +#### Installation +Currently the application is available via [Docker](https://hub.docker.com/r/tykio/tyk-sync) and [Packagecloud](https://packagecloud.io/tyk/tyk-sync). + +#### Docker + +To install Tyk Sync using Docker, follow these steps: + +##### Pull the Docker image from the Tyk repository + +Make sure to specify the version tag you need. For example, to pull version v1.5.0, use the following command: + +```bash +SYNC_VERSION=v1.5.0 +docker pull tykio/tyk-sync:$SYNC_VERSION +``` + +All docker images are available on the [Tyk Sync Docker Hub](https://hub.docker.com/r/tykio/tyk-sync/tags) page. + +##### Run Tyk Sync + +```bash +SYNC_VERSION=v1.5.0 +docker run tykio/tyk-sync:$SYNC_VERSION [command] [flag] +``` + +If you want to dump your API configurations to the local file system or sync configurations saved locally to Tyk, use Docker [bind mounts](https://docs.docker.com/storage/bind-mounts): + +```bash +docker run -v /path/to/local/directory:/app/data tykio/tyk-sync:$SYNC_VERSION [command] [flag] +``` +Replace [command] with the specific Tyk Sync command you want to execute. + + +#### Specifying target Tyk installation + +##### Tyk Dashboard +For Dashboard users, you can provide the necessary connection details using the `--dashboard` and `--secret` options. + +```bash +tyk-sync --dashboard --secret [command] [flags] +``` + +DASHBOARD_URL is the fully qualified dashboard target URL (e.g. `http://localhost:3000`) and SECRET refers to the API access key use to access your Dashboard API. For dashboard users, you can get it from the “Users” page under “Tyk Dashboard API Access Credentials”. + +If you prefer not to provide the secret via the command line, you can set the environment variable `TYKGIT_DB_SECRET` instead. This method keeps your secret secure and avoids exposure in command history. + +```bash +export TYKGIT_DB_SECRET= +tyk-sync --dashboard [command] [flags] +``` + +##### Open Source Gateway +For open source Gateway users, you can provide the necessary connection details using the `--gateway` and `--secret` options. + +```bash +tyk-sync --gateway --secret [command] [flags] +``` + +GATEWAY_URL is the fully qualified gateway target URL (e.g. `http://localhost:8080`) and SECRET refers to the API secret (`secret` parameter in your tyk.conf file) used to access your Gateway API. + +If you prefer not to provide the secret via the command line, you can set the environment variable `TYKGIT_GW_SECRET` instead. This method keeps your secret secure and avoids exposure in command history. + +```bash +export TYKGIT_GW_SECRET= +tyk-sync --gateway [command] [flags] +``` + +2. Export configurations from your development environment: + +```bash +tyk-sync dump -d http://localhost:3000 -s -t dev-backup +``` + +This command exports all configurations from your development Tyk Dashboard to a local directory named `dev-backup`. + +3. Import configurations to your staging environment: + +```bash +tyk-sync publish -d http://staging-dashboard:3000 -s -p dev-backup +``` + +This command imports the configurations from the `dev-backup` directory to your staging Tyk Dashboard. + + +### Tyk Sync Commands + +#### Dump Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | `tyk-sync dump` | +| **Usage** | ```tyk-sync dump -d DASHBOARD_URL [-s SECRET] [-t PATH]``` | +| **Flags** | `-d, --dashboard DASHBOARD_URL`: Tyk Dashboard URL (required)
`-h, --help`: Help for the dump command
`-t, --target PATH`: Target directory for output files (optional)
`-s, --secret SECRET`: API secret for Dashboard access (optional)
`--apis IDS`: Specific API IDs to dump
`--oas-apis IDS`: Specific OAS API IDs to dump
`--policies IDS`: Specific policy IDs to dump
`--templates IDS`: Specific template IDs to dump | +| **Example** | ```tyk-sync dump --dashboard http://tyk-dashboard:3000 --secret your-secret ```| +| **Example** | ```tyk-sync dump --dashboard http://tyk-dashboard:3000 --secret your-secret --target /path/to/backup --apis c2ltcGxlLWdyYXBoLWRldi90eWthcGktc2NoZW1h,baa5d2b65f1b45385dac3aeb658fa04c ``` | + +#### Examples Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | `tyk-sync examples` | +| **Usage** | ```tyk-sync examples [flags]```
```tyk-sync examples [command]``` | +| **Subcommands**| `publish`: Publish a specific example
`show`: Show details of a specific example | +| **Flags** | `-h, --help`: Help for examples command | +| **Example** | ```tyk-sync examples ``` | + +#### Examples Show Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | ```tyk-sync examples show``` | +| **Usage** | ```tyk-sync examples show [flags]``` | +| **Flags** | `-h, --help`: Help for show command
`-l, --location string`: Location of the example | +| **Example** | ```tyk-sync examples show --location="udg/vat-checker" ``` | + +#### Examples Publish Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | ```tyk-sync examples publish``` | +| **Usage** | ```tyk-sync examples publish [flags]``` | +| **Flags** | `-b, --branch string`: Branch to use (default "refs/heads/main")
`-d, --dashboard string`: Dashboard target URL
`-g, --gateway string`: Gateway target URL
`-h, --help`: Help for publish command
`-k, --key string`: Key file location for auth
`-l, --location string`: Location of the example
`-s, --secret string`: API secret
`--test`: Use test publisher, output to stdio | +| **Example** | ```tyk-sync examples publish -d="http://localhost:3000" -s="b2d420ca5302442b6f20100f76de7d83" -l="udg/vat-checker" ``` | + +#### Publish Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | ```tyk-sync publish``` | +| **Usage** | ```tyk-sync publish {-d DASHBOARD_URL \| -g GATEWAY_URL} [-s SECRET] [-b BRANCH] [-k SSHKEY] [-o ORG_ID] REPOSITORY_URL```

```tyk-sync publish {-d DASHBOARD_URL \| -g GATEWAY_URL} [-s SECRET] [-o ORG_ID] -p PATH``` | +| **Flags** | `-b, --branch BRANCH`: Git branch (default "refs/heads/master")
`-d, --dashboard DASHBOARD_URL`: Dashboard URL
`-g, --gateway GATEWAY_URL`: Gateway URL
`-h, --help`: Help for publish command
`-k, --key SSHKEY`: SSH key file location
`-p, --path PATH`: Source file directory
`-s, --secret SECRET`: API secret
`--test`: Use test publisher
`--apis IDS`: Specific API IDs to publish
`--oas-apis IDS`: Specific OAS API IDs to publish
`--policies IDS`: Specific policy IDs to publish
`--templates IDS`: Specific template IDs to publish | +| **Example** | ```tyk-sync publish -d http://tyk-dashboard:3000 -s your-secret -p /app/data --apis 726e705e6afc432742867e1bd898cb23 ```| +| **Example** | ```tyk-sync publish -d http://tyk-dashboard:3000 -s your-secret -b develop https://github.com/your-repo/your-apis ``` | + +#### Sync Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | `tyk-sync sync` | +| **Usage** | ```tyk-sync sync {-d DASHBOARD_URL \| -g GATEWAY_URL} [-s SECRET] [-b BRANCH] [-k SSHKEY] [-o ORG_ID] REPOSITORY_URL```

```tyk-sync sync {-d DASHBOARD_URL \| -g GATEWAY_URL} [-s SECRET] [-o ORG_ID] -p PATH``` | +| **Flags** | `-b, --branch BRANCH`: Git branch (default "refs/heads/master")
`-d, --dashboard DASHBOARD_URL`: Dashboard URL
`-g, --gateway GATEWAY_URL`: Gateway URL
`-h, --help`: Help for sync command
`-k, --key SSHKEY`: SSH key file location
`-o, --org ORG_ID`: Override organization ID
`-p, --path PATH`: Source file directory
`-s, --secret SECRET`: API secret
`--test`: Use test publisher
`--apis IDS`: Specific API IDs to sync (to be deprecated)
`--policies IDS`: Specific policy IDs to sync (to be deprecated) | +| **Example** | ```tyk-sync sync -d http://tyk-dashboard:3000 -s your-secret https://github.com/your-repo/your-apis ```| +| **Example** | ```tyk-sync sync -d http://tyk-dashboard:3000 -s your-secret -p /path/to/your/apis ``` | + +#### Update Command + +| Aspect | Details | +|---------------|------------------------------------------------------------------------------------------------------| +| **Command** | `tyk-sync update` | +| **Usage** | ```tyk-sync update {-d DASHBOARD_URL \| -g GATEWAY_URL} [-s SECRET] [-b BRANCH] [-k SSHKEY] [-o ORG_ID] REPOSITORY_URL```

```tyk-sync update {-d DASHBOARD_URL \| -g GATEWAY_URL} [-s SECRET] [-o ORG_ID] -p PATH``` | +| **Flags** | `-b, --branch BRANCH`: Git branch (default "refs/heads/master")
`-d, --dashboard DASHBOARD_URL`: Dashboard URL
`-g, --gateway GATEWAY_URL`: Gateway URL
`-h, --help`: Help for update command
`-k, --key SSHKEY`: SSH key file location
`-p, --path PATH`: Source file directory
`-s, --secret SECRET`: API secret
`--test`: Use test publisher
`--apis IDS`: Specific API IDs to update
`--oas-apis IDS`: Specific OAS API IDs to update
`--policies IDS`: Specific policy IDs to update
`--templates IDS`: Specific template IDs to update | +| **Example** | ```tyk-sync update -d http://tyk-dashboard:3000 -s your-secret -p /app/data --apis 726e705e6afc432742867e1bd898cb23```| +| **Example** | ```tyk-sync update -d http://tyk-dashboard:3000 -s your-secret -b develop https://github.com/your-repo/your-apis ``` | + + + +## Using Tyk APIs to Manage Resources + +Tyk provides comprehensive APIs for programmatic management of resources. Here's an example of creating an API using the Dashboard API. + +### Create an API using the Dashboard API + +```bash +curl -H "Authorization: ${DASHBOARD_USER_API_KEY}" \ + -H "Content-Type: application/json" \ + -X POST \ + -d '{ + "api_definition": { + "name": "Test API", + "slug": "test-api", + "auth": { + "auth_header_name": "Authorization" + }, + "version_data": { + "not_versioned": true, + "versions": { + "Default": { + "name": "Default" + } + } + }, + "proxy": { + "listen_path": "/test-api/", + "target_url": "http://httpbin.org/", + "strip_listen_path": true + }, + "active": true + } + }' https://admin.cloud.tyk.io/api/apis +``` + +This curl command sends a POST request to the Tyk Dashboard API to create a new API. The JSON payload defines the API's properties, including its name, authentication settings, and proxy configuration. + +## Automate Multi-Environment Deployments + +Automating deployments across multiple environments ensures consistency and reduces manual errors. Here's how to set up a basic CI/CD pipeline using GitHub Actions. + +### Set up a CI/CD pipeline for API deployment + +1. Create a `.github/workflows/deploy-apis.yml` file: + +```yaml +name: Deploy APIs +on: + push: + branches: [ main ] +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Tyk Sync + run: | + go install github.com/TykTechnologies/tyk-sync + - name: Deploy to Tyk + run: | + tyk-sync sync -d ${{ secrets.TYK_DASHBOARD_URL }} -s ${{ secrets.TYK_DASHBOARD_SECRET }} -p ./ +``` + +This GitHub Actions workflow file defines a job that runs on every push to the main branch. It installs Tyk Sync and uses it to synchronize your API configurations with your Tyk Dashboard. + +2. Configure your GitHub repository secrets with your Tyk Dashboard URL and secret. + +In your GitHub repository settings, add two secrets: +- `TYK_DASHBOARD_URL`: The URL of your Tyk Dashboard +- `TYK_DASHBOARD_SECRET`: Your Tyk Dashboard API secret + + +## Troubleshooting and FAQ + +### Tyk Operator changes not applied + +**Problem:** Changes made through Tyk Operator are not reflected in your Tyk installation. + +**Solution:** + +1. Check Kubernetes events: + ```bash + kubectl get events --sort-by=.metadata.creationTimestamp + ``` + This command shows recent events in your cluster, which may provide clues about why the changes weren't applied. + +2. Verify Operator logs: + ```bash + kubectl logs -l app=tyk-operator + ``` + This command shows logs from the Tyk Operator pod, which may contain error messages or other useful information. + +### How are Tyk configurations synchronized to Git? + +Tyk Sync allows you to dump configurations to a local directory, which can then be committed to a Git repository. This enables version control and easy synchronization across environments. + +For example: +1. Dump configurations: `tyk-sync dump -d http://dashboard:3000 -s secret -t ./configs` +2. Commit to Git: + ``` + cd configs + git add . + git commit -m "Update Tyk configurations" + git push + ``` + +### Can I sync multiple APIs to a single Git repository? + +Yes, you can store multiple API definitions, policies, and other Tyk resources in a single Git repository. Tyk Sync and Tyk Operator can work with multiple resources in the same directory. + +Your repository structure might look like this: +``` +tyk-configs/ +├── apis/ +│ ├── api1.yaml +│ └── api2.yaml +├── policies/ +│ ├── policy1.yaml +│ └── policy2.yaml +└── tyk-operator/ + └── operator-context.yaml +``` + +### How do I handle environment-specific configurations? + +Use Tyk Operator's `OperatorContext` resource to define environment-specific variables. You can also use Kubernetes secrets and ConfigMaps to manage sensitive or environment-specific data. + +Example `OperatorContext`: +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: production-context +spec: + env: + TYK_DB_ORGID: "prod-org-id" + TYK_DB_APIAUTH: "prod-api-secret" +``` + +This YAML defines environment-specific variables for a production context, which can be referenced in your API definitions and policies. + + +### Can I use Tyk Operator with multiple Tyk installations? + +Yes, you can use Tyk Operator to manage multiple Tyk installations. You'll need to create separate `OperatorContext` resources for each installation: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: prod-context +spec: + env: + TYK_MODE: pro + TYK_URL: http://tyk-gateway-prod:8080 + TYK_AUTH: prod-secret +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: staging-context +spec: + env: + TYK_MODE: pro + TYK_URL: http://tyk-gateway-staging:8080 + TYK_AUTH: staging-secret +``` + +Then, you can specify which context to use in your API and Policy resources: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: my-api +spec: + name: My API + context: prod-context + # ... other API configuration +``` + +### How do I roll back changes made with Tyk Sync? + +To roll back changes made with Tyk Sync: + +1. If you're using Git, check out the previous version of your configurations: + ```bash + git checkout + ``` + +2. Use Tyk Sync to publish the previous version: + ```bash + tyk-sync sync -d http://dashboard:3000 -s -p ./ + ``` + +It's a good practice to maintain separate branches or tags for different environments to make rollbacks easier. + +### Can I use Tyk Operator with non-Kubernetes Tyk installations? + +While Tyk Operator is designed to work within a Kubernetes environment, you can still use it to manage non-Kubernetes Tyk installations. You'll need to: + +1. Run Tyk Operator in a Kubernetes cluster. +2. Configure the `OperatorContext` to point to your external Tyk installation: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: external-tyk +spec: + env: + TYK_MODE: pro + TYK_URL: http://external-tyk-gateway:8080 + TYK_AUTH: external-secret +``` + +This allows you to manage your external Tyk installation using Kubernetes resources. + +### How do I migrate from Tyk Classic to Tyk OAS definitions? + +To migrate from Tyk Classic to Tyk OAS definitions: + +1. Export your existing API definitions using Tyk Sync: + ```bash + tyk-sync dump -d http://dashboard:3000 -s -t ./classic-apis + ``` + +2. Use the Tyk OAS Converter tool (if available) or manually convert your Classic definitions to OAS format. + +3. Update your CI/CD pipelines and Tyk Operator configurations to work with the new OAS definitions. + +4. Gradually replace Classic definitions with OAS definitions in your Tyk installation. + diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization.md b/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization.md deleted file mode 100755 index 33f2e7c171..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -date: 2017-03-23T15:23:32Z -title: Authentication & Authorization -tags: ["Authentication", "Authorization"] -description: "How you can apply security options to lock down your APIs with Tyk" -menu: - main: - parent: "Security" -weight: 5 -aliases: - - /security/your-apis/ - - /basic-config-and-security/security/authentication-authorization/ - - /basic-config-and-security/security/authentication-&-authorization/ ---- - -Tyk has multiple security options to lock-down your APIs out of the box, these are designed to work as best as possible with open standards. diff --git a/tyk-docs/content/create-account.md b/tyk-docs/content/create-account.md new file mode 100644 index 0000000000..8bc86ebf85 --- /dev/null +++ b/tyk-docs/content/create-account.md @@ -0,0 +1,90 @@ +--- +aliases: +- /create-account +date: 2020-06-24 +description: How to decide on which Tyk deployment option is best for you +linkTitle: Getting Started +tags: +- Tyk API Management +- Open Source +- Self-Managed +- Tyk Cloud +- API Gateway +title: Create Tyk Account +--- + + +Welcome to Tyk! This guide will walk you through the process of creating your account and getting started with our powerful API management platform. + +## Choosing Your Tyk Solution + +Tyk offers multiple deployment options to suit your needs: + +- **Tyk Cloud**: A fully managed service for easy API management at any scale. +- **Tyk Self-Managed**: Install the full lifecycle API management solution in your own infrastructure. +- **Tyk Open Source**: The core API Gateway, freely available and open source. + +For this guide, we'll focus on creating an account for Tyk Cloud, which offers a free 14-day trial. + +## Creating Your Tyk Cloud Account + +### Step 1: Visit the Sign-Up Page + +Navigate to the Tyk sign-up page at [https://tyk.io/sign-up/](https://tyk.io/sign-up/). + +### Step 2: Choose "Start Your 48-hour Free Trial" + +On the sign-up page, select the "Start your 48-hour free trial" option to begin your Tyk Cloud experience. + +### Step 3: Complete the Account Creation Form + +Fill out the account creation form with your details: + +- First Name +- Last Name +- Email Address +- Password +- Company Name (if applicable) +- Work Role and How We Can Help + +### Step 4: Choose Your Setup + +After completing the form, you can select which setup you'd like to kickoff your Tyk journey with. + + +{{< img src="/img/2.10/create-account-setup-choice.png" alt="Create Account Setup" >}} + + +### Step 5: Verify Your Email + +Check your email inbox for a verification message from Tyk. Click the verification link to confirm your email address. + +### Step 6: Access the Developer Portal + +Once your account is set up, you can access the Tyk Developer Portal. This portal allows you to manage your APIs, view analytics, and customize your API consumer experience. + +## What Happens Next? + +Once you've created your account, Tyk will automatically: + +1. Assign you as a Billing Admin for the Organisation. +2. Set up your account on the free 14-day Tyk Cloud trial plan. + +## Accessing Your Tyk Cloud Dashboard + +After verifying your email, you can log in to your Tyk Cloud Dashboard. This is where you'll manage your APIs, analytics, and more. + +## Next Steps + +Now that you have your Tyk account set up, here are some recommended next steps: + +- **Explore the Dashboard**: Familiarize yourself with the [Tyk Cloud interface](/tyk-dashboard.md). +- **Create Your First API**: Follow our guide on [setting up and securing your first API](/configure-api.md). +- **Customize Your Portal**: Learn how to customize the developer portal for your API consumers. +- **Set Up Email Notifications**: Configure email notifications for important events and updates. + +## Need Help? + +If you encounter any issues or have questions during the setup process, don't hesitate to reach out to our support team at support@tyk.io. + +Remember, Tyk offers powerful features for API management, security, and performance. Take advantage of your trial period to explore all that Tyk has to offer! \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic.md index b02e3bbd18..9e761e0cb6 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic.md @@ -57,7 +57,7 @@ In this example the endpoint caching middleware has been configured to cache all For ultimate control over what Tyk caches, you should use the advanced configuration options for the per-endpoint cache. You can separately configure, for each HTTP method for an endpoint: - an individual cache refresh (timeout) - a list of HTTP response codes that should be cached -- a pattern match to cache only requests containing specific data in the [request body]({{< ref " basic-config-and-security/reduce-latency/caching/advanced-cache#selective-caching-by-body-value" >}}) +- a pattern match to cache only requests containing specific data in the [request body]({{< ref "basic-config-and-security/reduce-latency/caching/advanced-cache#selective-caching-by-body-value" >}}) To enable the advanced middleware you must add a new `advance_cache_config` object to the `extended_paths` section of your API definition. diff --git a/tyk-docs/content/product-stack/tyk-streaming/configuration/outputs/redis-pubsub.md b/tyk-docs/content/product-stack/tyk-streaming/configuration/outputs/redis-pubsub.md index 4cf69e3d8e..4dd89cf37b 100644 --- a/tyk-docs/content/product-stack/tyk-streaming/configuration/outputs/redis-pubsub.md +++ b/tyk-docs/content/product-stack/tyk-streaming/configuration/outputs/redis-pubsub.md @@ -244,7 +244,7 @@ password: foo ### channel The channel to publish messages to. -This field supports [interpolation functions]({{< ref "/product-stack/tyk-streaming/configuration/common-configuration/interpolation.mdinterpolation#bloblang-queries" >}}). +This field supports [interpolation functions]({{< ref "product-stack/tyk-streaming/configuration/common-configuration/interpolation.md#interpolation#bloblang-queries" >}}). Type: `string` diff --git a/tyk-docs/content/quickstart-configure-first-api.md b/tyk-docs/content/quickstart-configure-first-api.md new file mode 100644 index 0000000000..9b57eff721 --- /dev/null +++ b/tyk-docs/content/quickstart-configure-first-api.md @@ -0,0 +1,208 @@ +--- +aliases: +- /quickstart-configure-first-api +date: 2020-06-24 +description: How to decide on which Tyk deployment option is best for you +linkTitle: Getting Started +tags: +- Tyk API Management +- Open Source +- Self-Managed +- Tyk Cloud +- API Gateway +title: Tyk QuickStart Configure Your First API +--- + + +Overview +This guide helps you get started with Tyk Cloud by covering the basics: + +- **Set up your API**: Create and configure a new API in the Tyk Cloud Dashboard. +- **Create API keys**: Generate API keys and assign them to your APIs for secure access. +- **Set security policies**: Manage access, rate limits, and quotas with security policies. +- **Monitor API performance**: Track traffic, logs, and performance analytics. + +Follow these steps to quickly create and manage your APIs in Tyk Cloud. + +## Prerequisites + +Before you begin, make sure you have: +- A Tyk Cloud account. +- Admin access to the Tyk Cloud dashboard. +- A backend service that your API will proxy (e.g., a RESTful API). + + +## Create a Project (Set Up Your API) + +Start by creating a new API in Tyk Cloud: + +1. **Log in to the Tyk Cloud Dashboard**. +2. **Navigate to APIs** and click **Create New API**. +3. **Configure API Details**: + - **API Name**: Name your API (e.g., `My First API`). + - **Target URL**: Provide the URL of your backend service (e.g., `https://my-backend-service.com`). + - **API Slug**: Define the path through which your API will be accessible (e.g., `/my-first-api/`). +4. **Authentication**: Choose the desired authentication method (e.g., **API Key**). + +#### Example API Creation Payload + +```json +{ + "name": "My First API", + "slug": "my-first-api", + "protocol": "https", + "target_url": "https://my-backend-service.com", + "listen_path": "/my-first-api/", + "strip_listen_path": true +} +``` + +Save your API configuration once complete. + + +## Create an API Key + +The Tyk Dashboard provides the simplest way to generate a new API key. Follow these steps: + +1. **Select "Keys"** from the **System Management** section. + + {{< img src="/img/2.10/keys_menu.png" alt="Keys Menu" >}} + +2. **Click "CREATE"** to generate a new key. + + {{< img src="/img/2.10/add_key.png" alt="Add Key" >}} + +3. **Add a Policy or API to Your Key**: + - You can either add your key to an existing **Policy** or assign it to an individual **API**. + - For this guide, we will assign the key to an API. You can: + - Scroll through your **API Name list**, + - Use the **Search field**, + - Or **Group by Authentication Type** or **Category** to filter APIs. + - Leave all other options at their default settings. + +4. **Add Configuration Details**: + - **Enable Detailed Logging**: This is optional and disabled by default. + - **Key Alias**: Assign an alias to your key for easier identification. + - **Key Expiry**: Set an expiry time from the drop-down list. This is required. + - **Tags**: Add tags for filtering data in Analytics. Tags are case-sensitive. + - **Metadata**: Add metadata such as user IDs, which can be used by middleware components. + +5. **Click "CREATE"**: + - Once the key is created, a **Key successfully generated** pop-up will be displayed showing your key. **Copy the key** to your clipboard and save it for future reference as it will not be shown again. + + {{< img src="/img/2.10/create_key.png" alt="Create Key" >}} + + + {{< img src="/img/2.10/key_success.png" alt="Key Success" >}} + + +## Create a Security Policy + +A security policy encapsulates several options that can be applied to an API key, acting as a template that defines rate limits, quotas, and access rights for keys. Here’s how to create one: + + +1. **Select "Policies"** from the **System Management** section of the Tyk Dashboard. + + {{< img src="/img/2.10/policies_menu.png" alt="Policies Menu" >}} + +2. **Click "Add Policy"** to create a new policy. + + {{< img src="/img/2.10/add_policy.png" alt="Add Policy Button" >}} + +3. **Select the API** to which the policy should apply: + - Scroll through your API list or use the **Search field**. + - You can also group by **Authentication Type** or **Category**. + + + {{< img src="/img/2.10/select_api_policy.png" alt="Select API Key" >}} + + + +4. **Set Global Rate Limits and Quota**: + - **Rate Limiting**: Define the number of requests per second allowed for a key using this policy. + - **Usage Quotas**: Set the maximum number of requests allowed over a specific period (e.g., a day, week, or month). + - **Throttling**: Configure throttling to queue and retry requests if limits are exceeded. + + {{< img src="/img/2.10/global_limits_policies.png" alt="Global Limits Policies" >}} + +5. **Path-Based Permissions**: Restrict access to specific paths or methods within an API. You can define which HTTP methods and paths a key is allowed to access. + + {{< img src="/img/2.10/path_and_method.png" alt="Path And Method" >}} + + +6. **Add Configuration Details**: + - **Policy Name**: Give the policy a descriptive name. + - **Policy State**: Choose whether the policy is active, in draft, or denies access. + - **Key Expiry**: Set the expiration period for keys assigned to this policy. + - **Tags**: Add tags to categorize and filter policies in Analytics. + - **Metadata**: Add metadata such as user IDs to the policy for use by middleware components. + +7. **Save the Policy** by clicking **CREATE**. Your policy is now ready to be applied to keys, OAuth clients, or JWT tokens. + + +## Monitor Traffic and Analyze API Performance + +With your API live, monitor its traffic and analyze performance: + +### View Traffic Analytics + +1. **Navigate to the Analytics Section** in the dashboard. +2. **View Traffic Metrics**: Review metrics such as request count, response times, and error rates. +3. **Analyze Data**: Use traffic trends to identify performance issues or optimize API behavior. + +#### Example Traffic Analytics Response + +```json +{ + "requests": 1500, + "errors": 5, + "latency": { + "average": 120, + "p95": 180 + } +} +``` + +- **Requests**: The total number of API requests made within the monitored period. + +- **Errors**: The number of failed requests, indicating issues or errors encountered during API calls. + +- **Latency**: + - **Average**: The average time (in milliseconds) it takes for the API to respond to a request. + - **95th Percentile (p95)**: The time within which 95% of the requests are responded to, providing insight into the upper range of response times. + + + +### View Log Data + +1. **Go to the Logs Section** of your API. +2. **Search and Filter Logs**: Use filters to drill down by response status, endpoint, or client IP. +3. **Review Detailed Logs**: View full request and response data to troubleshoot issues. + +#### Example Log Entry + +```json +{ + "timestamp": "2024-09-05T12:00:00Z", + "method": "GET", + "path": "/my-api/users", + "status": 200, + "response_time": 95 +} +``` +- **Timestamp**: The date and time when the API request was made (ISO 8601 format). + +- **Method**: The HTTP method used for the request (e.g., GET, POST). + +- **Path**: The API endpoint that was accessed. + +- **Status**: The HTTP status code returned by the API, indicating the result of the request (e.g., 200 for success). + +- **Response Time**: The time (in milliseconds) taken for the API to respond to the request. + + +## Next Steps + +Congratulations! You've successfully created, secured, and deployed your first API in Tyk Cloud. Next, explore more advanced features like [rate-limiting](getting-started/key-concepts/rate-limiting/) or [OAuth2](api-management/authentication-authorization). + +Explore more features in your dashboard to optimize and scale your API offerings. diff --git a/tyk-docs/content/using-tyk-dashboard.md b/tyk-docs/content/using-tyk-dashboard.md new file mode 100644 index 0000000000..e17110730f --- /dev/null +++ b/tyk-docs/content/using-tyk-dashboard.md @@ -0,0 +1,105 @@ +--- +aliases: +- /using-tyk-dashboard +date: 2020-06-24 +description: How to decide on which Tyk deployment option is best for you +linkTitle: Getting Started +tags: +- Tyk API Management +- Open Source +- Self-Managed +- Tyk Cloud +- API Gateway +title: Using Tyk Dashboard +--- + +The Tyk Dashboard is your central hub for managing APIs, monitoring performance, and configuring security settings. This guide will walk you through the key features available on the Tyk Dashboard. + +## Access the Dashboard + +Log in to your Tyk Dashboard using your credentials. Familiarize yourself with the interface, where the main navigation menu is located on the left side, and the top bar provides quick access to user settings and notifications. + +## Manage APIs + +### Create a New API + +Begin by navigating to the "APIs" section under "System Management." Click "ADD NEW API" to start configuring a new API. Enter the API name, select the API type (e.g., HTTP, GraphQL), specify the upstream URL, and define the listen path. Save your settings to proceed to advanced configurations. + +### Edit Existing APIs + +View and manage all your APIs in the "APIs" section. Use the search function to quickly find specific APIs. You can edit, clone, or delete APIs as needed to keep your environment organized and up-to-date. + +## Configure Security + +### Set Up API Authentication + +In the API settings, navigate to the "Authentication" tab. Choose from various authentication methods such as API Key, OAuth 2.0, JWT, or Mutual TLS to secure your APIs. + + +### Define Security Policies + +Access the "Policies" section under "System Management" to create or edit security policies. Set rate limits, quotas, and access rights to control how APIs are consumed. + +## Monitor and Analyze + +### View API Analytics + +Click on "Analytics" in the main menu to access detailed insights into API usage. Use filters to analyze traffic patterns, errors, and other usage statistics. Export data for further analysis if needed. + +### Set Up Monitoring + +Navigate to the "Monitors" section to create alerts for API health and performance metrics. This helps in maintaining optimal API performance and quickly addressing any issues. + +## Customize the Developer Portal + +### Personalize the Portal + +Go to "Portal Management" to customize the appearance and functionality of your developer portal. Manage API documentation and catalogues to enhance developer experience. + +### Manage Developer Accounts + +Access the "Developers" section to view, add, or manage developer accounts. Control their access to APIs and monitor their activity. + +## Key Management + +### Generate API Keys + +Navigate to "Keys" under "System Management" to create new API keys. Assign policies and set expiration dates to manage access effectively. + +## Utilize Universal Data Graph + +Access "Data Graphs" in the main menu to create and manage GraphQL schemas. Configure data sources and resolvers to optimize API data handling. + +## Manage Multiple Environments + +Use the environment selector in the top bar to switch between different configurations for development, staging, and production environments. + +## Handle User and Role Management + +### Manage Users + +Go to "Users" in "System Management" to add new users or modify existing user permissions. + +### Configure Roles + +Navigate to "Roles" to create custom roles with specific permissions. Assign these roles to users for granular access control. + +## Explore Advanced Features + +### Implement Single Sign-On (SSO) + +Configure SSO in the Dashboard settings for seamless enterprise-level access control. + +### Sync Multi-Data Centers + +Set up and manage multiple data centers for global API deployment, ensuring high availability and performance. + +### Integrate Version Control + +Use the Dashboard API to integrate with version control systems, allowing for better management of API definitions and configurations. + +## Best Practices + +Regularly review and update security policies, use tags for better organization, leverage analytics for performance optimization, keep the Developer Portal updated, and implement role-based access control for efficient team management. + +By mastering these features, you can effectively manage, secure, and optimize your APIs using the Tyk Dashboard. For more detailed information on each feature, refer to the official Tyk documentation. \ No newline at end of file diff --git a/tyk-docs/data/menu.yaml b/tyk-docs/data/menu.yaml index 8ea8173537..b85937f456 100644 --- a/tyk-docs/data/menu.yaml +++ b/tyk-docs/data/menu.yaml @@ -2,1293 +2,1311 @@ --- menu: - title: "Home" - path: / - category: Tab - show: True - menu: - - title: "Tyk API Gateway Documentation" - path: / - category: Page - show: True - - title: "Deployment and Operations" path: /apim category: Tab show: True menu: - - title: "Overview" - path: /apim - category: Page + - title: "Create Account" + path: /create-account + Category: Page + show: True + - title: "Configure first API" + path: /quickstart-configure-first-api + Category: Page show: True - - title: "Tyk Open Source API Gateway" + - title: "Using Tyk Dashboard" + path: /using-tyk-dashboard + Category: Page + show: False + - title: "Deployment and Operations" + path: /apim category: Directory show: True menu: - title: "Overview" - path: /apim/open-source - category: Page - show: True - - title: "Quick start" - path: /deployment-and-operations/tyk-open-source-api-gateway/quick-start + path: /apim category: Page show: True - - title: "Other installation options" + - title: "Tyk Open Source API Gateway" category: Directory show: True menu: - title: "Overview" - path: /apim/open-source/installation + path: /apim/open-source category: Page show: True - - title: "Docker" - path: /tyk-oss/ce-docker + - title: "Quick start" + path: /deployment-and-operations/tyk-open-source-api-gateway/quick-start category: Page show: True - - title: "Kubernetes" + - title: "Other installation options" category: Directory show: True menu: - title: "Overview" - path: /tyk-oss/ce-kubernetes - category: Page - show: True - - title: "Quick Start with Tyk OSS Helm Chart" - path: /tyk-oss/ce-helm-chart-new - category: Page - show: True - - title: "Ingress Controller with Tyk Operator" - path: /tyk-oss/ce-kubernetes-ingress + path: /apim/open-source/installation category: Page show: True - - title: "Legacy Tyk Headless Helm Chart" - path: /tyk-oss/ce-helm-chart - category: Page - show: True - - title: "Ansible" - path: /tyk-oss/ce-ansible - category: Page - show: True - - title: "Debian / Ubuntu" - path: /tyk-oss/ce-debian-ubuntu - category: Page - show: True - - title: "Red Hat (RHEL / CentOS)" - path: /tyk-oss/ce-redhat-rhel-centos - category: Page - show: True - - title: "Configure Redis Cluster" - path: /tyk-stack/tyk-gateway/configuration/redis-cluster - category: Page - show: True - - title: "Configure Redis Sentinel" - path: /tyk-stack/tyk-gateway/configuration/redis-sentinel - category: Page - show: True - - title: "Via GitHub" - path: /tyk-oss/ce-github - category: Page - show: True - - title: "Open source operations tooling" - category: Page - show: False - - title: "Tyk Cloud Platform" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-cloud - category: Page - show: True - - title: "What Is Tyk Cloud?" - path: /tyk-cloud/what-is-tyk-cloud - show: True - - title: "Free Trial" - path: /deployment-and-operations/tyk-cloud-platform/quick-start - category: Page - show: True - - title: "Deployment lifecycle" - category: Directory - show: True - menu: - - title: "Planning phase" - category: Directory - show: True - menu: - - title: "Getting started" - category: Directory - show: True - menu: - - title: "Getting started with Tyk Cloud" - path: /tyk-cloud/getting-started - category: Page - show: True - - title: " Task 1 - Create Your Account" - path: /tyk-cloud/getting-started-tyk-cloud/create-account - category: Page - show: True - - title: "Task 2 - Set up Your Organisation" - path: /tyk-cloud/getting-started-tyk-cloud/setup-org - category: Page - show: True - - title: "Task 3 - Set up Your First Team" - path: /tyk-cloud/getting-started-tyk-cloud/setup-team - category: Page - show: True - - title: "Task 4 - Set Up Environment and Configure Deployments" - path: /tyk-cloud/getting-started-tyk-cloud/setup-environment - category: Page - show: True - - title: "Task 5 - Deploy your Cloud Data Plane and add your first API" - path: /tyk-cloud/getting-started-tyk-cloud/first-api - category: Page - show: True - - title: "Task 6 - Test your API" - path: /tyk-cloud/getting-started-tyk-cloud/test-api - category: Page - show: True - - title: "Task 7 - View Analytics" - path: /tyk-cloud/getting-started-tyk-cloud/view-analytics - category: Page - show: True - - title: "What we covered" - path: /tyk-cloud/getting-started-tyk-cloud/to-conclude - category: Page - show: True - - title: "Availability of infrastructure" + - title: "Docker" + path: /tyk-oss/ce-docker category: Page - show: False - - title: "Teams and users" - category: Directory show: True - menu: - - title: "Overview" - path: /tyk-cloud/teams--users - category: Page - show: True - - title: "Managing teams" - path: /tyk-cloud/teams--users/managing-teams - category: Page - show: True - - title: "Managing users" - path: /tyk-cloud/teams--users/managing-users - category: Page - show: True - - title: "Tyk Cloud user roles" - path: /tyk-cloud/teams--users/user-roles - category: Page - show: True - - title: "Tyk Cloud Single Sign-On (SSO)" - path: /tyk-cloud/teams--users/single-sign-on - category: Page - show: True - - title: "Environments and deployments" + - title: "Kubernetes" category: Directory show: True menu: - title: "Overview" - path: /tyk-cloud/environments--deployments - category: Page - show: True - - title: "Managing organisations" - path: /tyk-cloud/environments--deployments/managing-organisations - category: Page - show: True - - title: "Managing environments" - path: /tyk-cloud/environments--deployments/managing-environments + path: /tyk-oss/ce-kubernetes category: Page show: True - - title: "Managing control planes" - path: /tyk-cloud/environments--deployments/managing-control-planes + - title: "Quick Start with Tyk OSS Helm Chart" + path: /tyk-oss/ce-helm-chart-new category: Page show: True - - title: "Managing cloud data planes" - path: /tyk-cloud/environments--deployments/managing-gateways + - title: "Ingress Controller with Tyk Operator" + path: /tyk-oss/ce-kubernetes-ingress category: Page show: True - - title: "Managing Your APIs" - path: /tyk-cloud/environments--deployments/managing-apis + - title: "Legacy Tyk Headless Helm Chart" + path: /tyk-oss/ce-helm-chart category: Page show: True - - title: "Manage subscriptions and add-ons" - category: Page - show: False - - title: "Initial portal configuration" - path: /tyk-cloud/initial-portal-config + - title: "Ansible" + path: /tyk-oss/ce-ansible category: Page show: True - - title: "Deployment phase" - category: Directory - show: True - menu: - - title: "Deploy features to the Tyk Cloud" - category: Page - show: False - - title: "Enable configuration and workflows between deployments" + - title: "Debian / Ubuntu" + path: /tyk-oss/ce-debian-ubuntu category: Page - show: False - - title: "Deploy hybrid gateways" - path: /tyk-cloud/environments-deployments/hybrid-gateways + show: True + - title: "Red Hat (RHEL / CentOS)" + path: /tyk-oss/ce-redhat-rhel-centos category: Page show: True - - title: "Securing your APIs" - path: /tyk-cloud/securing-your-apis + - title: "Configure Redis Cluster" + path: /tyk-stack/tyk-gateway/configuration/redis-cluster category: Page show: True - - title: "Using custom domains" - path: /tyk-cloud/using-custom-domains + - title: "Configure Redis Sentinel" + path: /tyk-stack/tyk-gateway/configuration/redis-sentinel category: Page show: True - - title: "Deploy hybrid gateways using legacy helm chart" - path: /tyk-cloud/environments-deployments/hybrid-gateways-helm + - title: "Via GitHub" + path: /tyk-oss/ce-github category: Page show: True - - title: "Operations and BAU" + - title: "Open source operations tooling" + category: Page + show: False + - title: "Tyk Cloud Platform" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-cloud + category: Page + show: True + - title: "What Is Tyk Cloud?" + path: /tyk-cloud/what-is-tyk-cloud + show: True + - title: "Free Trial" + path: /deployment-and-operations/tyk-cloud-platform/quick-start + category: Page + show: True + - title: "Deployment lifecycle" category: Directory show: True menu: - - title: "Manage, audit and govern cloud infrastructure" - category: Page - show: False - - title: "Observability of cloud Data" - category: Page - show: False - - title: "Using plugins" + - title: "Planning phase" category: Directory show: True menu: - - title: "Using Plugins" - path: /tyk-cloud/using-plugins - category: Page - show: True - - title: "Setup your control plane" - path: /tyk-cloud/configuration-options/using-plugins/setup-control-plane - category: Page + - title: "Getting started" + category: Directory show: True - - title: "Uploading your bundle" - path: /tyk-cloud/configuration-options/using-plugins/uploading-bundle + menu: + - title: "Getting started with Tyk Cloud" + path: /tyk-cloud/getting-started + category: Page + show: True + - title: " Task 1 - Create Your Account" + path: /tyk-cloud/getting-started-tyk-cloud/create-account + category: Page + show: True + - title: "Task 2 - Set up Your Organisation" + path: /tyk-cloud/getting-started-tyk-cloud/setup-org + category: Page + show: True + - title: "Task 3 - Set up Your First Team" + path: /tyk-cloud/getting-started-tyk-cloud/setup-team + category: Page + show: True + - title: "Task 4 - Set Up Environment and Configure Deployments" + path: /tyk-cloud/getting-started-tyk-cloud/setup-environment + category: Page + show: True + - title: "Task 5 - Deploy your Cloud Data Plane and add your first API" + path: /tyk-cloud/getting-started-tyk-cloud/first-api + category: Page + show: True + - title: "Task 6 - Test your API" + path: /tyk-cloud/getting-started-tyk-cloud/test-api + category: Page + show: True + - title: "Task 7 - View Analytics" + path: /tyk-cloud/getting-started-tyk-cloud/view-analytics + category: Page + show: True + - title: "What we covered" + path: /tyk-cloud/getting-started-tyk-cloud/to-conclude + category: Page + show: True + - title: "Availability of infrastructure" category: Page + show: False + - title: "Teams and users" + category: Directory show: True - - title: "API middleware test" - path: /tyk-cloud/configuration-options/using-plugins/api-test - category: Page + menu: + - title: "Overview" + path: /tyk-cloud/teams--users + category: Page + show: True + - title: "Managing teams" + path: /tyk-cloud/teams--users/managing-teams + category: Page + show: True + - title: "Managing users" + path: /tyk-cloud/teams--users/managing-users + category: Page + show: True + - title: "Tyk Cloud user roles" + path: /tyk-cloud/teams--users/user-roles + category: Page + show: True + - title: "Tyk Cloud Single Sign-On (SSO)" + path: /tyk-cloud/teams--users/single-sign-on + category: Page + show: True + - title: "Environments and deployments" + category: Directory show: True - - title: "Create a python code bundle" - path: /tyk-cloud/configuration-options/using-plugins/python-code-bundle + menu: + - title: "Overview" + path: /tyk-cloud/environments--deployments + category: Page + show: True + - title: "Managing organisations" + path: /tyk-cloud/environments--deployments/managing-organisations + category: Page + show: True + - title: "Managing environments" + path: /tyk-cloud/environments--deployments/managing-environments + category: Page + show: True + - title: "Managing control planes" + path: /tyk-cloud/environments--deployments/managing-control-planes + category: Page + show: True + - title: "Managing cloud data planes" + path: /tyk-cloud/environments--deployments/managing-gateways + category: Page + show: True + - title: "Managing Your APIs" + path: /tyk-cloud/environments--deployments/managing-apis + category: Page + show: True + - title: "Manage subscriptions and add-ons" category: Page - show: True - - title: "Python custom authentication" - path: /tyk-cloud/configuration-options/using-plugins/python-custom-auth + show: False + - title: "Initial portal configuration" + path: /tyk-cloud/initial-portal-config category: Page show: True - - title: "Accounts and billing" + - title: "Deployment phase" category: Directory show: True menu: - - title: "Overview" - path: /tyk-cloud/account-billing + - title: "Deploy features to the Tyk Cloud" category: Page - show: True - - title: "Our plans" - path: /tyk-cloud/account-billing/plans + show: False + - title: "Enable configuration and workflows between deployments" category: Page - show: True - - title: "Payment method" - path: /tyk-cloud/account-billing/add-payment-method + show: False + - title: "Deploy hybrid gateways" + path: /tyk-cloud/environments-deployments/hybrid-gateways category: Page show: True - - title: "Upgrade free trial" - path: /tyk-cloud/account-billing/upgrade-free-trial + - title: "Securing your APIs" + path: /tyk-cloud/securing-your-apis category: Page show: True - - title: "Managing billing admins" - path: /tyk-cloud/account-billing/managing-billing-admins + - title: "Using custom domains" + path: /tyk-cloud/using-custom-domains category: Page show: True - - title: "Retirement" - path: /tyk-cloud/account-billing/retirement + - title: "Deploy hybrid gateways using legacy helm chart" + path: /tyk-cloud/environments-deployments/hybrid-gateways-helm category: Page show: True - - title: "Monitoring" + - title: "Operations and BAU" category: Directory show: True menu: - - title: "What metrics are monitored?" - path: /tyk-cloud/environments--deployments/monitoring-how-it-works - category: Page - show: True - - title: "Viewing usage" - path: /tyk-cloud/environments--deployments/monitoring-usage + - title: "Manage, audit and govern cloud infrastructure" category: Page - show: True - - title: "Troubleshooting and support" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-cloud/troubleshooting--support + show: False + - title: "Observability of cloud Data" category: Page + show: False + - title: "Using plugins" + category: Directory show: True - - title: "Tyk Cloud FAQs" - path: /tyk-cloud/troubleshooting--support/faqs - category: Page + menu: + - title: "Using Plugins" + path: /tyk-cloud/using-plugins + category: Page + show: True + - title: "Setup your control plane" + path: /tyk-cloud/configuration-options/using-plugins/setup-control-plane + category: Page + show: True + - title: "Uploading your bundle" + path: /tyk-cloud/configuration-options/using-plugins/uploading-bundle + category: Page + show: True + - title: "API middleware test" + path: /tyk-cloud/configuration-options/using-plugins/api-test + category: Page + show: True + - title: "Create a python code bundle" + path: /tyk-cloud/configuration-options/using-plugins/python-code-bundle + category: Page + show: True + - title: "Python custom authentication" + path: /tyk-cloud/configuration-options/using-plugins/python-custom-auth + category: Page + show: True + - title: "Accounts and billing" + category: Directory show: True - - title: "Tyk Cloud MDCB Supported versions" - path: /tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions - category: Page + menu: + - title: "Overview" + path: /tyk-cloud/account-billing + category: Page + show: True + - title: "Our plans" + path: /tyk-cloud/account-billing/plans + category: Page + show: True + - title: "Payment method" + path: /tyk-cloud/account-billing/add-payment-method + category: Page + show: True + - title: "Upgrade free trial" + path: /tyk-cloud/account-billing/upgrade-free-trial + category: Page + show: True + - title: "Managing billing admins" + path: /tyk-cloud/account-billing/managing-billing-admins + category: Page + show: True + - title: "Retirement" + path: /tyk-cloud/account-billing/retirement + category: Page + show: True + - title: "Monitoring" + category: Directory show: True - - title: "Glossary" - path: /tyk-cloud/troubleshooting--support/glossary - category: Page + menu: + - title: "What metrics are monitored?" + path: /tyk-cloud/environments--deployments/monitoring-how-it-works + category: Page + show: True + - title: "Viewing usage" + path: /tyk-cloud/environments--deployments/monitoring-usage + category: Page + show: True + - title: "Troubleshooting and support" + category: Directory show: True - - title: "Tyk Self Managed Platform" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-on-premises - category: Page - show: True - - title: "Quick Start" - path: /getting-started/quick-start - category: Page - show: True - - title: "Tyk Demos & PoCs" + menu: + - title: "Overview" + path: /tyk-cloud/troubleshooting--support + category: Page + show: True + - title: "Tyk Cloud FAQs" + path: /tyk-cloud/troubleshooting--support/faqs + category: Page + show: True + - title: "Tyk Cloud MDCB Supported versions" + path: /tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions + category: Page + show: True + - title: "Glossary" + path: /tyk-cloud/troubleshooting--support/glossary + category: Page + show: True + - title: "Tyk Self Managed Platform" category: Directory show: True menu: - title: "Overview" - path: /deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview - category: Page - show: True - - title: "The Complete demo - Kubernetes" - path: /getting-started/quick-start/tyk-k8s-demo - category: Page - show: True - - title: "The Complete demo - Docker" - path: /getting-started/quick-start/tyk-demo + path: /tyk-on-premises category: Page show: True - - title: "Quick start - Docker Compose" - path: /tyk-on-premises/docker/docker-pro-demo + - title: "Quick Start" + path: /getting-started/quick-start category: Page show: True - - title: "Quick start - Windows" + - title: "Tyk Demos & PoCs" category: Directory show: True menu: - - title: "Docker Compose on Windows" - path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows + - title: "Overview" + path: /deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview category: Page show: True - - title: "Docker Compose Linux on Windows" - path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl + - title: "The Complete demo - Kubernetes" + path: /getting-started/quick-start/tyk-k8s-demo category: Page show: True - - title: "Deployment lifecycle" - category: Directory - show: True - menu: - - title: "Planning phase" - category: Directory - show: True - menu: - - title: "Licensing and deployment models" - path: /tyk-on-premises/licensing + - title: "The Complete demo - Docker" + path: /getting-started/quick-start/tyk-demo category: Page show: True - - title: "Design for CI/CD" + - title: "Quick start - Docker Compose" + path: /tyk-on-premises/docker/docker-pro-demo category: Page - show: False - - title: "Single Sign On (SSO)" + show: True + - title: "Quick start - Windows" category: Directory show: True menu: - - title: "Overview" - path: /advanced-configuration/integrate/sso + - title: "Docker Compose on Windows" + path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows category: Page show: True - - title: "Login into the Dashboard using Azure AD - Guide" - path: /tyk-stack/tyk-manager/sso/dashboard-login-azure-sso + - title: "Docker Compose Linux on Windows" + path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl category: Page show: True - - title: "Login into the Dashboard using Okta - Guide" - path: /tyk-stack/tyk-manager/sso/dashboard-login-okta-tib - category: Page - show: True - - title: "Login into the Dashboard using Auth0 - Guide" - path: /tyk-stack/tyk-manager/sso/sso-auth0-tib - category: Page - show: True - - title: "Login into the Dashboard using Keycloak - Guide" - path: /product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso - category: Page - show: True - - title: "Enterprise developer portal" - category: Page - show: False - - title: "Multi-tenancy with orgs, teams and users" - category: Page - show: False - - title: "Design for compliance (security, data privacy, data residency)" - category: Page - show: False - - title: "Design for disaster recovery" - category: Page - show: False - - title: "Design for multiple data centres" - category: Page - show: False - - title: "Installation options" + - title: "Deployment lifecycle" category: Directory show: True menu: - - title: "Overview" - path: /tyk-self-managed/install - category: Page - show: True - - title: "Kubernetes" + - title: "Planning phase" category: Directory show: True menu: - - title: "Overview" - path: /tyk-on-premises/kubernetes + - title: "Licensing and deployment models" + path: /tyk-on-premises/licensing category: Page show: True - - title: "Quick Start with Helm Chart and PostgreSQL" - path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql + - title: "Design for CI/CD" category: Page + show: False + - title: "Single Sign On (SSO)" + category: Directory show: True - - title: "Quick Start with Helm Chart and MongoDB" - path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb + menu: + - title: "Overview" + path: /advanced-configuration/integrate/sso + category: Page + show: True + - title: "Login into the Dashboard using Azure AD - Guide" + path: /tyk-stack/tyk-manager/sso/dashboard-login-azure-sso + category: Page + show: True + - title: "Login into the Dashboard using Okta - Guide" + path: /tyk-stack/tyk-manager/sso/dashboard-login-okta-tib + category: Page + show: True + - title: "Login into the Dashboard using Auth0 - Guide" + path: /tyk-stack/tyk-manager/sso/sso-auth0-tib + category: Page + show: True + - title: "Login into the Dashboard using Keycloak - Guide" + path: /product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso + category: Page + show: True + - title: "Enterprise developer portal" category: Page - show: True - - title: "Ingress Controller with Tyk Operator" - path: /tyk-on-prem/kubernetes-ingress + show: False + - title: "Multi-tenancy with orgs, teams and users" category: Page - show: True - - title: "Windows with Helm chart" - path: /tyk-on-prem/kubernetes-on-windows + show: False + - title: "Design for compliance (security, data privacy, data residency)" category: Page - show: True - - title: "Legacy Tyk Pro Helm chart" - path: /tyk-self-managed/tyk-helm-chart + show: False + - title: "Design for disaster recovery" category: Page - show: True - - title: "Red Hat (RHEL / CentOS)" + show: False + - title: "Design for multiple data centres" + category: Page + show: False + - title: "Installation options" category: Directory show: True menu: - - title: "Redis, PostgreSQL or MongoDB" - path: /tyk-on-premises/redhat-rhel-centos + - title: "Overview" + path: /tyk-self-managed/install category: Page show: True - - title: "Dashboard" - path: /tyk-on-prem/installation/redhat-rhel-centos/dashboard - category: Page + - title: "Kubernetes" + category: Directory show: True - - title: "Tyk Pump" - path: /tyk-on-prem/installation/redhat-rhel-centos/analytics-pump - category: Page + menu: + - title: "Overview" + path: /tyk-on-premises/kubernetes + category: Page + show: True + - title: "Quick Start with Helm Chart and PostgreSQL" + path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql + category: Page + show: True + - title: "Quick Start with Helm Chart and MongoDB" + path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb + category: Page + show: True + - title: "Ingress Controller with Tyk Operator" + path: /tyk-on-prem/kubernetes-ingress + category: Page + show: True + - title: "Windows with Helm chart" + path: /tyk-on-prem/kubernetes-on-windows + category: Page + show: True + - title: "Legacy Tyk Pro Helm chart" + path: /tyk-self-managed/tyk-helm-chart + category: Page + show: True + - title: "Red Hat (RHEL / CentOS)" + category: Directory show: True - - title: "Gateway" - path: /tyk-on-prem/installation/redhat-rhel-centos/gateway - category: Page + menu: + - title: "Redis, PostgreSQL or MongoDB" + path: /tyk-on-premises/redhat-rhel-centos + category: Page + show: True + - title: "Dashboard" + path: /tyk-on-prem/installation/redhat-rhel-centos/dashboard + category: Page + show: True + - title: "Tyk Pump" + path: /tyk-on-prem/installation/redhat-rhel-centos/analytics-pump + category: Page + show: True + - title: "Gateway" + path: /tyk-on-prem/installation/redhat-rhel-centos/gateway + category: Page + show: True + - title: "Ubuntu / Debian" + category: Directory show: True - - title: "Ubuntu / Debian" - category: Directory - show: True - menu: - - title: "Redis and MongoDB" - path: /tyk-on-premises/debian-ubuntu + menu: + - title: "Redis and MongoDB" + path: /tyk-on-premises/debian-ubuntu + category: Page + show: True + - title: "Dashboard" + path: /tyk-on-premises/debian-ubuntu/dashboard + category: Page + show: True + - title: "Tyk Pump" + path: /tyk-on-premises/debian-ubuntu/analytics-pump + category: Page + show: True + - title: "Gateway" + path: /tyk-on-premises/debian-ubuntu/gateway + category: Page + show: True + - title: "AWS Marketplace" + category: Directory + show: True + menu: + - title: "AWS Marketplace" + path: /tyk-on-premises/installation/on-aws + category: Page + show: True + - title: "Install Tyk on AWS EC2" + path: /tyk-on-premises/on-aws/ec2 + category: Page + show: True + - title: "Ansible" + path: /tyk-on-premises/ansible category: Page show: True - - title: "Dashboard" - path: /tyk-on-premises/debian-ubuntu/dashboard + - title: "Bootstrapper CLI" + path: /tyk-on-premises/bootstrapper-cli category: Page show: True - - title: "Tyk Pump" - path: /tyk-on-premises/debian-ubuntu/analytics-pump + - title: "Docker" + path: /tyk-on-premises/docker category: Page show: True - - title: "Gateway" - path: /tyk-on-premises/debian-ubuntu/gateway + - title: "Heroku" + path: /tyk-on-premises/installation/on-heroku category: Page show: True - - title: "AWS Marketplace" - category: Directory - show: True - menu: - - title: "AWS Marketplace" - path: /tyk-on-premises/installation/on-aws + - title: "Microsoft Azure" + path: /tyk-on-premises/microsoft-azure category: Page show: True - - title: "Install Tyk on AWS EC2" - path: /tyk-on-premises/on-aws/ec2 + - title: "Google Cloud" + path: /tyk-on-premises/google-cloud category: Page show: True - - title: "Ansible" - path: /tyk-on-premises/ansible - category: Page - show: True - - title: "Bootstrapper CLI" - path: /tyk-on-premises/bootstrapper-cli - category: Page - show: True - - title: "Docker" - path: /tyk-on-premises/docker - category: Page - show: True - - title: "Heroku" - path: /tyk-on-premises/installation/on-heroku - category: Page - show: True - - title: "Microsoft Azure" - path: /tyk-on-premises/microsoft-azure - category: Page - show: True - - title: "Google Cloud" - path: /tyk-on-premises/google-cloud - category: Page - show: True - - title: "Deployment phase" - category: Directory - show: True - menu: - - title: "Design for high availability" + - title: "Deployment phase" category: Directory show: True menu: - - title: "Ensure High Availability" - path: /planning-for-production/ensure-high-availability - category: Page - show: True - - title: "Circuit Breakers" + - title: "Design for high availability" category: Directory show: True menu: - - title: "Overview" - path: /planning-for-production/ensure-high-availability/circuit-breakers + - title: "Ensure High Availability" + path: /planning-for-production/ensure-high-availability category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas + - title: "Circuit Breakers" + category: Directory + show: True + menu: + - title: "Overview" + path: /planning-for-production/ensure-high-availability/circuit-breakers + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic + category: Page + show: True + - title: "Enforced Timeouts" + category: Directory + show: True + menu: + - title: "Overview" + path: /planning-for-production/ensure-high-availability/enforced-timeouts + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic + category: Page + show: True + - title: "Liveness health check" + path: /planning-for-production/ensure-high-availability/health-check category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic + - title: "Load Balancing" + path: /planning-for-production/ensure-high-availability/load-balancing category: Page show: True - - title: "Enforced Timeouts" + - title: "Service Discovery" + path: /planning-for-production/ensure-high-availability/service-discovery + category: Page + show: True + - title: "Service Discovery Examples" + path: /planning-for-production/ensure-high-availability/service-discovery/examples + category: Page + show: True + - title: "Uptime Tests" + path: /planning-for-production/ensure-high-availability/uptime-tests + category: Page + show: True + - title: "Design for performance" + category: Directory + show: False + menu: + - title: "Deploy Tyk components and their dependencies" + category: Page + show: False + - title: "Database settings" category: Directory show: True menu: - title: "Overview" - path: /planning-for-production/ensure-high-availability/enforced-timeouts + path: /planning-for-production/database-settings category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas + - title: "MongoDB Sizing" + path: /planning-for-production/database-settings/mongodb-sizing category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic + - title: "MongoDB" + path: /planning-for-production/database-settings/mongodb + category: Page + show: True + - title: "PostgreSQL" + path: /planning-for-production/database-settings/postgresql + category: Page + show: True + - title: "Redis Sizing" + path: /planning-for-production/redis-sizing category: Page show: True - - title: "Liveness health check" - path: /planning-for-production/ensure-high-availability/health-check + - title: "Set-up GitOps" category: Page - show: True - - title: "Load Balancing" - path: /planning-for-production/ensure-high-availability/load-balancing + show: False + - title: "Secure deployment options" + category: Page + show: False + - title: "Sending logs to your logging systems" category: Page + show: False + - title: "Key value configuration storage" + category: Directory show: True - - title: "Service Discovery" - path: /planning-for-production/ensure-high-availability/service-discovery + menu: + - title: "Overview" + path: /tyk-configuration-reference/kv-store + category: Page + show: True + - title: "Using Consul" + path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul + category: Page + show: True + - title: "Using Vault" + path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault + category: Page + show: True + - title: "Planning for Production" + path: /planning-for-production category: Page show: True - - title: "Service Discovery Examples" - path: /planning-for-production/ensure-high-availability/service-discovery/examples + - title: "Benchmarks" + path: /planning-for-production/benchmarks category: Page show: True - - title: "Uptime Tests" - path: /planning-for-production/ensure-high-availability/uptime-tests + - title: "Redis" + path: /planning-for-production/redis category: Page show: True - - title: "Design for performance" - category: Directory - show: False - menu: - - title: "Deploy Tyk components and their dependencies" - category: Page - show: False - - title: "Database settings" + - title: "Operations and BAU" category: Directory show: True menu: - - title: "Overview" - path: /planning-for-production/database-settings + - title: "Observability & Monitoring" + path: /planning-for-production/monitoring category: Page show: True - - title: "MongoDB Sizing" - path: /planning-for-production/database-settings/mongodb-sizing + - title: "Monitor Tyk Stack" + path: /planning-for-production/monitoring/tyk-components category: Page show: True - - title: "MongoDB" - path: /planning-for-production/database-settings/mongodb + - title: "GitOps with Tyk Operator" + path: /getting-started/key-concepts/gitops-with-tyk category: Page show: True - - title: "PostgreSQL" - path: /planning-for-production/database-settings/postgresql + - title: "Monitoring upstream services" category: Page - show: True - - title: "Redis Sizing" - path: /planning-for-production/redis-sizing + show: False + - title: "Scaling up and down depending on usage/performance" category: Page - show: True - - title: "Set-up GitOps" + show: False + - title: "Manage plug-ins (install, monitor, update, configure)" + category: Page + show: False + - title: "Manage third party integrations (API observability, observability, ...)" + category: Page + show: False + - title: "Maintain Tyk configuration" + category: Page + show: False + - title: "Upgrade Tyk components and their dependencies" + category: Page + show: False + - title: "Featured Guides" + category: Directory + show: True + menu: + - title: "Guide to Tyk installations" + path: /getting-started/installation + category: Page + show: True + + - title: "API Management" + path: /getting-started + category: Directory + show: True + menu: + - title: "Overview" + path: /getting-started + category: Page + show: True + - title: "Authentication and authorization" + category: Page + path: /api-management/authentication-authorization + show: True + - title: "Automation Tools" + category: Page + path: api-management/automation-tools + show: True + - title: "Manage APIs" + category: Directory + show: True + menu: + - title: "Overview" + category: Directory + show: False + menu: + - title: "Tyk Classic APIs" + category: Directory + show: True + menu: + - title: "Plan and define APIs" category: Page show: False - - title: "Secure deployment options" + - title: "Import APIs" category: Page show: False - - title: "Sending logs to your logging systems" + - title: "New APIs" category: Page show: False - - title: "Key value configuration storage" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-configuration-reference/kv-store - category: Page - show: True - - title: "Using Consul" - path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul - category: Page - show: True - - title: "Using Vault" - path: /deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault - category: Page - show: True - - title: "Planning for Production" - path: /planning-for-production + - title: "Define access to APIs" category: Page - show: True - - title: "Benchmarks" - path: /planning-for-production/benchmarks + show: False + - title: "Define governance for APIs" category: Page - show: True - - title: "Redis" - path: /planning-for-production/redis + show: False + - title: "Develop APIs" + category: Page + show: False + - title: "Protect and secure APIs" + category: Page + show: False + - title: "Create an API" + path: /getting-started/create-api category: Page show: True - - title: "Operations and BAU" - category: Directory - show: True - menu: - - title: "Observability & Monitoring" - path: /planning-for-production/monitoring + - title: "Import an API" + path: /getting-started/import-apis category: Page show: True - - title: "Monitor Tyk Stack" - path: /planning-for-production/monitoring/tyk-components + - title: "Secure an API" + path: /getting-started/create-security-policy category: Page show: True - - title: "GitOps with Tyk Operator" - path: /getting-started/key-concepts/gitops-with-tyk + - title: "Access an API" + path: /getting-started/create-api-key category: Page show: True - - title: "Monitoring upstream services" + - title: "API Operations" + category: Directory + show: False + menu: + - title: "Automated API operations" category: Page show: False - - title: "Scaling up and down depending on usage/performance" + - title: "Version APIs" category: Page show: False - - title: "Manage plug-ins (install, monitor, update, configure)" + - title: "Troubleshoot APIs" category: Page show: False - - title: "Manage third party integrations (API observability, observability, ...)" + - title: "Monitor APIs" category: Page show: False - - title: "Maintain Tyk configuration" + - title: "API observability" category: Page show: False - - title: "Upgrade Tyk components and their dependencies" + - title: "Tyk OAS APIs" + category: Directory + show: True + menu: + - title: "Overview" + path: /getting-started/key-concepts/high-level-concepts + category: Page + show: True + - title: "Get started with Tyk OAS APIs" + path: /getting-started/using-oas-definitions category: Page show: False - - title: "Featured Guides" - category: Directory - show: True - menu: - - title: "Guide to Tyk installations" - path: /getting-started/installation - category: Page - show: True - - title: "API Management" - path: /getting-started - category: Tab - show: True - menu: - - title: "Overview" - path: /getting-started - category: Page - show: True - - title: "Manage APIs" - category: Directory - show: True - menu: - - title: "Overview" - category: Directory - show: False - menu: - - title: "Tyk Classic APIs" - category: Directory - show: True - menu: - - title: "Plan and define APIs" - category: Page - show: False - - title: "Import APIs" - category: Page - show: False - - title: "New APIs" - category: Page - show: False - - title: "Define access to APIs" - category: Page - show: False - - title: "Define governance for APIs" - category: Page - show: False - - title: "Develop APIs" - category: Page - show: False - - title: "Protect and secure APIs" - category: Page - show: False - - title: "Create an API" - path: /getting-started/create-api - category: Page - show: True - - title: "Import an API" - path: /getting-started/import-apis - category: Page + - title: "Create a Tyk OAS API" + path: /getting-started/using-oas-definitions/create-an-oas-api + category: Page + show: True + - title: "Import a Tyk OAS API" + path: /getting-started/using-oas-definitions/import-an-oas-api + category: Page + show: True + - title: "Update a Tyk OAS API" + path: /getting-started/using-oas-definitions/update-an-oas-api + category: Page + show: True + - title: "Extending an OAS API" + path: /api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware + category: Page + show: True + - title: "Enable middleware with an OAS API" + path: /getting-started/using-oas-definitions/update-api-with-oas + category: Page + show: False + - title: "Versioning an OAS API" + path: /getting-started/using-oas-definitions/versioning-an-oas-api + category: Page + show: True + - title: "Export an OAS API" + path: /getting-started/using-oas-definitions/export-an-oas-api + category: Page + show: True + - title: "GraphQL APIs" + category: Directory show: True - - title: "Secure an API" - path: /getting-started/create-security-policy + menu: + - title: "Create a GraphQL API" + path: /graphql/creating-gql-api + category: Page + show: True + - title: "Introspection" + category: Directory + show: True + menu: + - title: "Overview" + path: /graphql/introspection + category: Page + show: True + - title: "Introspection queries" + path: /graphql/introspection/introspection-queries + category: Page + show: True + - title: "Validation" + path: /graphql/validation + category: Page + show: True + - title: "Syncing GQL Schema" + path: /graphql/syncing-schema + category: Page + show: True + - title: "GraphQL APIs headers" + path: /graphql/gql-headers + category: Page + show: True + - title: "Persisting GraphQL queries" + path: /graphql/persisted-queries + category: Page + show: True + - title: "Complexity Limiting" + path: /graphql/complexity-limiting + category: Page + show: True + - title: "Field Based Permissions" + path: /graphql/field-based-permissions + category: Page + show: True + - title: "GraphQL WebSockets" + path: /graphql/graphql-websockets + category: Page + show: True + - title: "GraphQL Subscriptions" + path: /getting-started/key-concepts/graphql-subscriptions + category: Page + show: True + - title: "Migrating to 3.2" + path: /graphql/migration-guide + category: Page + show: True + - title: "GraphQL playground" + path: /graphql/graphql-playground + category: Page + show: True + - title: "Deploy APIs" category: Page show: True - - title: "Access an API" - path: /getting-started/create-api-key + path: /api-management/manage-apis/deploy-apis/deploy-apis-overview + - title: "Monitoring and Troubleshooting APIs" category: Page show: True - - title: "API Operations" - category: Directory - show: False - menu: - - title: "Automated API operations" - category: Page - show: False - - title: "Version APIs" - category: Page - show: False - - title: "Troubleshoot APIs" - category: Page - show: False - - title: "Monitor APIs" - category: Page - show: False - - title: "API observability" - category: Page - show: False - - title: "Tyk OAS APIs" + path: /api-management/manage-apis/api-operations/api-observability + - title: "Manage Data Graphs" category: Directory show: True menu: - title: "Overview" - path: /getting-started/key-concepts/high-level-concepts - category: Page - show: True - - title: "Get started with Tyk OAS APIs" - path: /getting-started/using-oas-definitions - category: Page - show: False - - title: "Create a Tyk OAS API" - path: /getting-started/using-oas-definitions/create-an-oas-api - category: Page - show: True - - title: "Import a Tyk OAS API" - path: /getting-started/using-oas-definitions/import-an-oas-api - category: Page - show: True - - title: "Update a Tyk OAS API" - path: /getting-started/using-oas-definitions/update-an-oas-api - category: Page - show: True - - title: "Extending an OAS API" - path: /api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware - category: Page - show: True - - title: "Enable middleware with an OAS API" - path: /getting-started/using-oas-definitions/update-api-with-oas - category: Page + category: Directory show: False - - title: "Versioning an OAS API" - path: /getting-started/using-oas-definitions/versioning-an-oas-api - category: Page - show: True - - title: "Export an OAS API" - path: /getting-started/using-oas-definitions/export-an-oas-api - category: Page + menu: + - title: "Getting started" + category: Directory show: True - - title: "GraphQL APIs" - category: Directory - show: True - menu: - - title: "Create a GraphQL API" - path: /graphql/creating-gql-api + menu: + - title: "Overview" + path: /universal-data-graph/getting-started-with-udg category: Page show: True - - title: "Introspection" - category: Directory - show: True - menu: - - title: "Overview" - path: /graphql/introspection - category: Page - show: True - - title: "Introspection queries" - path: /graphql/introspection/introspection-queries - category: Page - show: True - - title: "Validation" - path: /graphql/validation + - title: "1. Creating schema" + path: /universal-data-graph/udg-getting-started/creating-schema category: Page show: True - - title: "Syncing GQL Schema" - path: /graphql/syncing-schema + - title: "2. Connect Datasource" + path: /universal-data-graph/udg-getting-started/connect-datasource category: Page show: True - - title: "GraphQL APIs headers" - path: /graphql/gql-headers + - title: "3. Mutations" + path: /universal-data-graph/udg-getting-started/mutations category: Page show: True - - title: "Persisting GraphQL queries" - path: /graphql/persisted-queries + - title: "4. Security" + path: /universal-data-graph/udg-getting-started/security category: Page show: True - - title: "Complexity Limiting" - path: /graphql/complexity-limiting + - title: "5. Field Based Permissions" + path: /universal-data-graph/udg-getting-started/field-based-permission category: Page show: True - - title: "Field Based Permissions" - path: /graphql/field-based-permissions + - title: "6. Header Forwarding" + path: /universal-data-graph/udg-getting-started/header-forwarding category: Page show: True - - title: "GraphQL WebSockets" - path: /graphql/graphql-websockets + - title: "UDG Examples" + path: /universal-data-graph/udg-examples category: Page show: True - - title: "GraphQL Subscriptions" - path: /getting-started/key-concepts/graphql-subscriptions + - title: "Design Data Graphs" + category: Directory + show: False + menu: + - title: "Design data graph schema APIs" category: Page - show: True - - title: "Migrating to 3.2" - path: /graphql/migration-guide + show: False + - title: "Connect data sources" category: Page - show: True - - title: "GraphQL playground" - path: /graphql/graphql-playground + show: False + - title: "Define access to data graph APIs" category: Page - show: True - - title: "Deploy APIs" - category: Page - show: True - path: /api-management/manage-apis/deploy-apis/deploy-apis-overview - - title: "Monitoring and Troubleshooting APIs" - category: Page - show: True - path: /api-management/manage-apis/api-operations/api-observability - - title: "Manage Data Graphs" - category: Directory - show: True - menu: - - title: "Overview" - category: Directory - show: False - menu: - - title: "Getting started" + show: False + - title: "Deploy Data Graphs" + category: Directory + show: False + menu: + - title: "Test data graphs" + category: Page + show: False + - title: "Persisted queries" + category: Page + show: False + - title: "Data Graph operations" + category: Directory + show: False + menu: + - title: "Version data graphs" + category: Page + show: False + - title: "Publish APIs" category: Directory show: True menu: - title: "Overview" - path: /universal-data-graph/getting-started-with-udg - category: Page - show: True - - title: "1. Creating schema" - path: /universal-data-graph/udg-getting-started/creating-schema - category: Page - show: True - - title: "2. Connect Datasource" - path: /universal-data-graph/udg-getting-started/connect-datasource - category: Page - show: True - - title: "3. Mutations" - path: /universal-data-graph/udg-getting-started/mutations - category: Page - show: True - - title: "4. Security" - path: /universal-data-graph/udg-getting-started/security - category: Page - show: True - - title: "5. Field Based Permissions" - path: /universal-data-graph/udg-getting-started/field-based-permission - category: Page - show: True - - title: "6. Header Forwarding" - path: /universal-data-graph/udg-getting-started/header-forwarding - category: Page - show: True - - title: "UDG Examples" - path: /universal-data-graph/udg-examples - category: Page + category: Directory + show: False + menu: + - title: "Getting started" + category: Directory show: True - - title: "Design Data Graphs" + menu: + - title: "Overview" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal + category: Page + show: True + - title: "1. Connect to a provider (Tyk Self-Managed)" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider + category: Page + show: True + - title: "2. Create API Product and Plans" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan + category: Page + show: True + - title: "3. Publish API Products and Plans" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans + category: Page + show: True + - title: "4. Customise the menu of live portal" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/customise-menus + category: Page + show: True + - title: "Async APIs" category: Directory - show: False + show: True menu: - - title: "Design data graph schema APIs" + - title: "Capabilities" category: Page - show: False - - title: "Connect data sources" + path: /api-management/async-apis/use-cases + show: True + - title: "Advanced Use Cases" category: Page + path: /api-management/async-apis/advanced-use-cases + show: True + - title: "Publish Ops" + category: Directory show: False - - title: "Define access to data graph APIs" - category: Page + menu: + - title: "Import APIs to the developer portal" + category: Page + show: False + - title: "Create API products" + category: Page + show: False + - title: "Create API product plans" + category: Page + show: False + - title: "Document API products" + category: Page + show: False + - title: "Portal customization" + category: Directory show: False - - title: "Deploy Data Graphs" - category: Directory - show: False - menu: - - title: "Test data graphs" - category: Page + menu: + - title: "Portal themes" + category: Page + show: False + - title: "Portal navigation" + category: Page + show: False + - title: "Portal content" + category: Page + show: False + - title: "SSO" + category: Page + show: False + - title: "API Product access" + category: Directory show: False - - title: "Persisted queries" - category: Page + menu: + - title: "Give access to API products" + category: Page + show: False + - title: "Manage developers and developer audiences" + category: Page + show: False + - title: "Self service consumer debugging" + category: Page + show: False + - title: "API Product management" + category: Directory show: False - - title: "Data Graph operations" + menu: + - title: "Business value reporting" + category: Page + show: False + - title: "API monetization" + category: Page + show: False + - title: "Troubleshooting API products" + category: Page + show: False + - title: "Featured Guides" category: Directory show: False menu: - - title: "Version data graphs" - category: Page - show: False - - title: "Publish APIs" + + - title: "Product Stack" + path: /tyk-stack category: Directory show: True menu: - title: "Overview" - category: Directory - show: False - menu: - - title: "Getting started" + path: /tyk-stack + category: Page + show: True + - title: "Tyk Gateway (Open Source)" category: Directory show: True menu: + - title: "Overview" + path: /tyk-oss-gateway + category: Page + show: True + - title: "Key concepts" + category: Directory + show: True + menu: - title: "Overview" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal - category: Page - show: True - - title: "1. Connect to a provider (Tyk Self-Managed)" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider + path: /getting-started/key-concepts category: Page show: True - - title: "2. Create API Product and Plans" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan + - title: "What is an API Definition?" + path: /getting-started/key-concepts/what-is-an-api-definition category: Page show: True - - title: "3. Publish API Products and Plans" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans - category: Page - show: True - - title: "4. Customise the menu of live portal" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/customise-menus - category: Page + - title: "Tyk OAS Concepts" + category: Directory show: True - - title: "Async APIs" - category: Directory - show: True - menu: - - title: "Capabilities" - category: Page - path: /api-management/async-apis/use-cases - show: True - - title: "Advanced Use Cases" - category: Page - path: /api-management/async-apis/advanced-use-cases - show: True - - title: "Publish Ops" - category: Directory - show: False - menu: - - title: "Import APIs to the developer portal" - category: Page - show: False - - title: "Create API products" - category: Page - show: False - - title: "Create API product plans" - category: Page - show: False - - title: "Document API products" - category: Page - show: False - - title: "Portal customization" - category: Directory - show: False - menu: - - title: "Portal themes" - category: Page - show: False - - title: "Portal navigation" - category: Page - show: False - - title: "Portal content" - category: Page - show: False - - title: "SSO" - category: Page - show: False - - title: "API Product access" - category: Directory - show: False - menu: - - title: "Give access to API products" - category: Page - show: False - - title: "Manage developers and developer audiences" - category: Page - show: False - - title: "Self service consumer debugging" - category: Page - show: False - - title: "API Product management" - category: Directory - show: False - menu: - - title: "Business value reporting" - category: Page - show: False - - title: "API monetization" - category: Page - show: False - - title: "Troubleshooting API products" - category: Page - show: False - - title: "Featured Guides" - category: Directory - show: False - menu: - - title: "Product Stack" - path: /tyk-stack - category: Tab - show: True - menu: - - title: "Overview" - path: /tyk-stack - category: Page - show: True - - title: "Tyk Gateway (Open Source)" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-oss-gateway - category: Page - show: True - - title: "Key concepts" - category: Directory - show: True - menu: - - title: "Overview" - path: /getting-started/key-concepts - category: Page - show: True - - title: "What is an API Definition?" - path: /getting-started/key-concepts/what-is-an-api-definition - category: Page - show: True - - title: "Tyk OAS Concepts" - category: Directory - show: True - menu: - - title: "Overview" - path: /getting-started/key-concepts/openapi-specification - category: Page - show: True - - title: "Servers" - path: /getting-started/key-concepts/servers - category: Page - show: True - - title: "Authentication" - path: /getting-started/key-concepts/authentication - category: Page - show: True - - title: "Paths" - path: /getting-started/key-concepts/paths - category: Page - show: True - - title: "Tyk OAS Maturity" - path: /getting-started/using-oas-definitions/oas-reference - category: Page - show: True - - title: "OAS Glossary" - path: /getting-started/using-oas-definitions/oas-glossary - category: Page - show: True - - title: "Tyk Classic Concepts" - category: Directory - show: True - menu: - - title: "Authentication Type Flags" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/authentication - category: Page - show: True - - title: "CORS" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/cors - category: Page - show: True - - title: "Custom Analytics Tags using HTTP Headers" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics - category: Page - show: True - - title: "Events" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/events - category: Page - show: True - - title: "API Definition GraphQL" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/graphql - category: Page - show: True - - title: "JSON Web Tokens (JWT)" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/jwt - category: Page - show: True - - title: "Other Root Objects" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/other-root-objects - category: Page - show: True - - title: "Proxy Transport Settings" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/proxy-settings - category: Page - show: True - - title: "API Level Rate Limits" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/rate-limits - category: Page - show: True - - title: "Uptime Tests" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/uptime-tests - category: Page + menu: + - title: "Overview" + path: /getting-started/key-concepts/openapi-specification + category: Page + show: True + - title: "Servers" + path: /getting-started/key-concepts/servers + category: Page + show: True + - title: "Authentication" + path: /getting-started/key-concepts/authentication + category: Page + show: True + - title: "Paths" + path: /getting-started/key-concepts/paths + category: Page + show: True + - title: "Tyk OAS Maturity" + path: /getting-started/using-oas-definitions/oas-reference + category: Page + show: True + - title: "OAS Glossary" + path: /getting-started/using-oas-definitions/oas-glossary + category: Page + show: True + - title: "Tyk Classic Concepts" + category: Directory show: True - - title: "GraphQL" - category: Directory - show: True - menu: - - title: "Overview" - path: /graphql - category: Page + menu: + - title: "Authentication Type Flags" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/authentication + category: Page + show: True + - title: "CORS" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/cors + category: Page + show: True + - title: "Custom Analytics Tags using HTTP Headers" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics + category: Page + show: True + - title: "Events" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/events + category: Page + show: True + - title: "API Definition GraphQL" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/graphql + category: Page + show: True + - title: "JSON Web Tokens (JWT)" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/jwt + category: Page + show: True + - title: "Other Root Objects" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/other-root-objects + category: Page + show: True + - title: "Proxy Transport Settings" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/proxy-settings + category: Page + show: True + - title: "API Level Rate Limits" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/rate-limits + category: Page + show: True + - title: "Uptime Tests" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/uptime-tests + category: Page + show: True + - title: "GraphQL" + category: Directory show: True - - title: "Federation" + menu: + - title: "Overview" + path: /graphql + category: Page + show: True + - title: "Federation" + category: Directory + show: True + menu: + - title: "GraphQL Federation Overview" + path: /getting-started/key-concepts/graphql-federation + category: Page + show: True + - title: "GraphQL Entities" + path: /getting-started/key-concepts/graphql-entities + category: Page + show: True + - title: "GraphQL Extension Orphans" + path: /getting-started/key-concepts/graphql-subgraphs + category: Page + show: True + - title: "Graphql Proxy Only" + path: /graphql-proxy-only + category: Page + show: True + - title: "How to manage multiple Tyk environments" category: Directory show: True menu: - - title: "GraphQL Federation Overview" - path: /getting-started/key-concepts/graphql-federation + - title: "Manage Multiple Environments" + path: /advanced-configuration/manage-multiple-environments + category: Page + show: True + - title: "Move APIs Between Environments" + path: /advanced-configuration/manage-multiple-environments/move-apis-between-environments + category: Page + show: True + - title: "Move Keys Between Environments" + path: /advanced-configuration/manage-multiple-environments/move-keys-between-environments + category: Page + show: True + - title: "Move Policies Between Environments" + path: /advanced-configuration/manage-multiple-environments/move-policies-between-environments category: Page show: True - - title: "GraphQL Entities" - path: /getting-started/key-concepts/graphql-entities + - title: "Gateway Sharding" + path: /advanced-configuration/manage-multiple-environments/with-tyk-multi-cloud category: Page show: True - - title: "GraphQL Extension Orphans" - path: /getting-started/key-concepts/graphql-subgraphs + - title: "Tyk Self-Managed" + path: /advanced-configuration/manage-multiple-environments/with-tyk-on-premises category: Page show: True - - title: "Graphql Proxy Only" - path: /graphql-proxy-only + - title: "How to secure your APIs in Tyk" + path: /basic-config-and-security/security category: Page show: True - - title: "How to manage multiple Tyk environments" - category: Directory - show: True - menu: - - title: "Manage Multiple Environments" - path: /advanced-configuration/manage-multiple-environments + - title: "Request Middleware Chain" + path: /concepts/middleware-execution-order category: Page show: True - - title: "Move APIs Between Environments" - path: /advanced-configuration/manage-multiple-environments/move-apis-between-environments + - title: "What is Rate Limiting?" + path: /getting-started/key-concepts/rate-limiting category: Page show: True - - title: "Move Keys Between Environments" - path: /advanced-configuration/manage-multiple-environments/move-keys-between-environments + - title: "What is a Security Policy?" + path: /getting-started/key-concepts/what-is-a-security-policy category: Page show: True - - title: "Move Policies Between Environments" - path: /advanced-configuration/manage-multiple-environments/move-policies-between-environments + - title: "What is a Session Object?" + path: /getting-started/key-concepts/what-is-a-session-object category: Page show: True - - title: "Gateway Sharding" - path: /advanced-configuration/manage-multiple-environments/with-tyk-multi-cloud + - title: "What is Session Metadata?" + path: /getting-started/key-concepts/session-meta-data category: Page show: True - - title: "Tyk Self-Managed" - path: /advanced-configuration/manage-multiple-environments/with-tyk-on-premises + - title: "What is Internal Looping?" + path: /advanced-configuration/transform-traffic/looping category: Page show: True - - title: "How to secure your APIs in Tyk" - path: /basic-config-and-security/security - category: Page - show: True - - title: "Request Middleware Chain" - path: /concepts/middleware-execution-order - category: Page - show: True - - title: "What is Rate Limiting?" - path: /getting-started/key-concepts/rate-limiting - category: Page - show: True - - title: "What is a Security Policy?" - path: /getting-started/key-concepts/what-is-a-security-policy - category: Page - show: True - - title: "What is a Session Object?" - path: /getting-started/key-concepts/what-is-a-session-object - category: Page - show: True - - title: "What is Session Metadata?" - path: /getting-started/key-concepts/session-meta-data - category: Page - show: True - - title: "What is Internal Looping?" - path: /advanced-configuration/transform-traffic/looping - category: Page - show: True - - title: "Basic config and security" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security - category: Page - show: True - - title: "Security" + - title: "Basic config and security" category: Directory show: True menu: - - title: "Authentication and authorization" + - title: "Overview" + path: /basic-config-and-security + category: Page + show: True + - title: "Security" category: Directory show: True menu: + - title: "Authentication and authorization" + category: Directory + show: False + menu: - title: "Overview" path: /basic-config-and-security/security/authentication--authorization category: Page @@ -1375,7 +1393,7 @@ menu: show: True - title: "MTLS" category: Directory - show: True + show: False menu: - title: "Concepts" path: /basic-config-and-security/security/mutual-tls/concepts @@ -1393,3548 +1411,3376 @@ menu: path: /basic-config-and-security/security/mutual-tls/upstream-mtls category: Page show: True - - title: "Security policies" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/security/security-policies + - title: "Security policies" + category: Directory + show: True + menu: + - title: "Overview" + path: /basic-config-and-security/security/security-policies + category: Page + show: True + - title: "Policies Guide" + path: /basic-config-and-security/security/security-policies/policies-guide + category: Page + show: True + - title: "Secure your APIs by Method and Path" + path: /security/security-policies/secure-apis-method-path + category: Page + show: True + - title: "Partitioned Policies" + path: /basic-config-and-security/security/security-policies/partitioned-policies + category: Page + show: True + - title: "Gateway" + path: /basic-config-and-security/security/gateway category: Page show: True - - title: "Policies Guide" - path: /basic-config-and-security/security/security-policies/policies-guide + - title: "Key Hashing" + path: /basic-config-and-security/security/key-hashing category: Page show: True - - title: "Secure your APIs by Method and Path" - path: /security/security-policies/secure-apis-method-path + - title: "Key Level Security" + path: /basic-config-and-security/security/key-level-security category: Page show: True - - title: "Partitioned Policies" - path: /basic-config-and-security/security/security-policies/partitioned-policies + - title: "Tyk and OWASP Top Ten Threats" + path: /basic-config-and-security/security/owasp-top-ten category: Page show: True - - title: "Gateway" - path: /basic-config-and-security/security/gateway - category: Page - show: True - - title: "Key Hashing" - path: /basic-config-and-security/security/key-hashing - category: Page - show: True - - title: "Key Level Security" - path: /basic-config-and-security/security/key-level-security - category: Page - show: True - - title: "Tyk and OWASP Top Ten Threats" - path: /basic-config-and-security/security/owasp-top-ten - category: Page - show: True - - title: "TLS and SSL" - path: /basic-config-and-security/security/tls-and-ssl - category: Page - show: True - - title: "Certificate Pinning" - path: /security/certificate-pinning - category: Page - show: True - - title: "Blocking Client IPs" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting - category: Page - show: True - - title: "Allowing Client IPs" - path: /tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting - category: Page - show: True - - title: "Control and limit traffic" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/control-limit-traffic - category: Page - show: True - - title: "Key Expiry" - path: /basic-config-and-security/control-limit-traffic/key-expiry - category: Page - show: True - - title: "Request Quotas" - path: /basic-config-and-security/control-limit-traffic/request-quotas - category: Page - show: True - - title: "Request Size Limits" + - title: "TLS and SSL" + path: /basic-config-and-security/security/tls-and-ssl + category: Page + show: True + - title: "Certificate Pinning" + path: /security/certificate-pinning + category: Page + show: True + - title: "Blocking Client IPs" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting + category: Page + show: True + - title: "Allowing Client IPs" + path: /tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting + category: Page + show: True + - title: "Control and limit traffic" category: Directory show: True menu: - title: "Overview" - path: /basic-config-and-security/control-limit-traffic/request-size-limits + path: /basic-config-and-security/control-limit-traffic category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas + - title: "Key Expiry" + path: /basic-config-and-security/control-limit-traffic/key-expiry category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic + - title: "Request Quotas" + path: /basic-config-and-security/control-limit-traffic/request-quotas category: Page show: True - - title: "Request Throttling" - path: /basic-config-and-security/control-limit-traffic/request-throttling - category: Page - show: True - - title: "Rate Limits" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/control-limit-traffic/rate-limiting - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-rate-limit-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-rate-limit-classic - category: Page - show: True - - title: "Reduce latency" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/reduce-latency - category: Page - show: True - - title: "Caching" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/reduce-latency/caching - category: Page - show: True - - title: "Basic (Global) Caching" - path: /basic-config-and-security/reduce-latency/caching/global-cache/ - category: Page - show: True - - title: "Endpoint Caching" + - title: "Request Size Limits" category: Directory show: True menu: - title: "Overview" - path: /basic-config-and-security/reduce-latency/caching/advanced-cache/ + path: /basic-config-and-security/control-limit-traffic/request-size-limits category: Page show: True - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas + path: /product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas category: Page show: True - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic + path: /product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic category: Page show: True - - title: "Upstream Cache Control" - path: /basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/ - category: Page - show: True - - title: "Invalidating the Cache" - path: /basic-config-and-security/reduce-latency/caching/invalidate-cache/ - category: Page - show: True - - title: "Optimizing the Cache Storage" - path: /basic-config-and-security/reduce-latency/caching/optimise-cache/ + - title: "Request Throttling" + path: /basic-config-and-security/control-limit-traffic/request-throttling category: Page show: True - - title: "Log traffic" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic - category: Page - show: True - - title: "Detailed recording" - path: /product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording - category: Page - show: True - - title: "Do Not Track" + - title: "Rate Limits" category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-gateway/middleware/do-not-track-middleware + path: /basic-config-and-security/control-limit-traffic/rate-limiting category: Page show: True - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/do-not-track-tyk-oas + path: /product-stack/tyk-gateway/middleware/endpoint-rate-limit-oas category: Page show: True - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/do-not-track-tyk-classic - category: Page - show: True - - title: "Gateway events" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/report-monitor-trigger-events - category: Page - show: True - - title: "Event types" - path: /basic-config-and-security/report-monitor-trigger-events/event-types - category: Page - show: True - - title: "Event metadata" - path: /basic-config-and-security/report-monitor-trigger-events/event-data - category: Page - show: True - - title: "Event handling with webhooks" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/report-monitor-trigger-events/webhooks - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas + path: /product-stack/tyk-gateway/middleware/endpoint-rate-limit-classic category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic - category: Page - show: True - - title: "Logging events" - path: /product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers - category: Page - show: True - - title: "Custom event handlers" - path: /basic-config-and-security/report-monitor-trigger-events/custom-handlers-javascript - category: Page - show: True - - title: "Advanced quota monitoring" - path: /basic-config-and-security/report-monitor-trigger-events/monitors - category: Page - show: True - - title: "Advanced configurations" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration - category: Page - show: True - - title: "Transform traffic" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration/transform-traffic - category: Page - show: True - - title: "Allow List" + - title: "Reduce latency" category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-gateway/middleware/allow-list-middleware - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/allow-list-tyk-oas + path: /basic-config-and-security/reduce-latency category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/allow-list-tyk-classic - category: Page + - title: "Caching" + category: Directory show: True - - title: "Block List" + menu: + - title: "Overview" + path: /basic-config-and-security/reduce-latency/caching + category: Page + show: True + - title: "Basic (Global) Caching" + path: /basic-config-and-security/reduce-latency/caching/global-cache/ + category: Page + show: True + - title: "Endpoint Caching" + category: Directory + show: True + menu: + - title: "Overview" + path: /basic-config-and-security/reduce-latency/caching/advanced-cache/ + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic + category: Page + show: True + - title: "Upstream Cache Control" + path: /basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/ + category: Page + show: True + - title: "Invalidating the Cache" + path: /basic-config-and-security/reduce-latency/caching/invalidate-cache/ + category: Page + show: True + - title: "Optimizing the Cache Storage" + path: /basic-config-and-security/reduce-latency/caching/optimise-cache/ + category: Page + show: True + - title: "Log traffic" category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-gateway/middleware/block-list-middleware + path: /product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/block-list-tyk-oas + - title: "Detailed recording" + path: /product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/block-list-tyk-classic - category: Page + - title: "Do Not Track" + category: Directory show: True - - title: "Ignore Authentication" + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/do-not-track-middleware + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/do-not-track-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/do-not-track-tyk-classic + category: Page + show: True + - title: "Gateway events" category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-gateway/middleware/ignore-middleware - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/ignore-tyk-oas + path: /basic-config-and-security/report-monitor-trigger-events category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/ignore-tyk-classic + - title: "Event types" + path: /basic-config-and-security/report-monitor-trigger-events/event-types category: Page show: True - - title: "Internal Endpoint" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/middleware/internal-endpoint-middleware + - title: "Event metadata" + path: /basic-config-and-security/report-monitor-trigger-events/event-data category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas - category: Page + - title: "Event handling with webhooks" + category: Directory show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic + menu: + - title: "Overview" + path: /basic-config-and-security/report-monitor-trigger-events/webhooks + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic + category: Page + show: True + - title: "Logging events" + path: /product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers category: Page show: True - - title: "Request Method" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration/transform-traffic/request-method-transform + - title: "Custom event handlers" + path: /basic-config-and-security/report-monitor-trigger-events/custom-handlers-javascript category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/request-method-tyk-oas - category: Page - show: True Me - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/request-method-tyk-classic + - title: "Advanced quota monitoring" + path: /basic-config-and-security/report-monitor-trigger-events/monitors category: Page show: True - - title: "Request Body" - category: Directory + - title: "Advanced configurations" + category: Directory + show: True + menu: + - title: "Overview" + path: /advanced-configuration + category: Page show: True - menu: - - title: "Overview" - path: /transform-traffic/request-body - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/request-body-tyk-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/request-body-tyk-classic - category: Page - show: True - - title: "Request Headers" + - title: "Transform traffic" category: Directory show: True menu: - title: "Overview" - path: /transform-traffic/request-headers + path: /advanced-configuration/transform-traffic category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/request-header-tyk-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/request-header-tyk-classic - category: Page + - title: "Allow List" + category: Directory show: True - - title: "Response Body" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration/transform-traffic/response-body - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/allow-list-middleware + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/allow-list-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/allow-list-tyk-classic + category: Page + show: True + - title: "Block List" + category: Directory show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/response-body-tyk-oas - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/block-list-middleware + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/block-list-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/block-list-tyk-classic + category: Page + show: True + - title: "Ignore Authentication" + category: Directory show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/response-body-tyk-classic - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/ignore-middleware + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/ignore-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/ignore-tyk-classic + category: Page + show: True + - title: "Internal Endpoint" + category: Directory show: True - - title: "Response Headers" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration/transform-traffic/response-headers - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/internal-endpoint-middleware + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic + category: Page + show: True + - title: "Request Method" + category: Directory show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/response-header-tyk-oas - category: Page + menu: + - title: "Overview" + path: /advanced-configuration/transform-traffic/request-method-transform + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/request-method-tyk-oas + category: Page + show: True Me + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/request-method-tyk-classic + category: Page + show: True + - title: "Request Body" + category: Directory show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/response-header-tyk-classic - category: Page + menu: + - title: "Overview" + path: /transform-traffic/request-body + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/request-body-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/request-body-tyk-classic + category: Page + show: True + - title: "Request Headers" + category: Directory show: True - - title: "Use case: SOAP to REST" - path: /advanced-configuration/transform-traffic/soap-rest - category: Page - show: True - - title: "Request Validation" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/middleware/validate-request-middleware - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/validate-request-tyk-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/validate-request-tyk-classic - category: Page - show: True - - title: "Mock Response" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/middleware/mock-response-middleware - category: Page - show: True - - title: "Tyk OAS key concepts" - path: /product-stack/tyk-gateway/middleware/mock-response-openapi - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/mock-response-tyk-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/mock-response-tyk-classic - category: Page - show: True - - title: "URL Rewriting" - category: Directory - show: True - menu: - - title: "Overview of URL Rewriting" - path: /transform-traffic/url-rewriting - category: Page - show: True - - title: "URL Rewrite middleware" - path: /product-stack/tyk-gateway/middleware/url-rewrite-middleware - category: Page - show: True - - title: "URL Rewriting with Tyk OAS" - path: /product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas - category: Page - show: True - - title: "URL Rewriting with Tyk Classic" - path: /product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic - category: Page - show: True - - title: "Virtual Endpoints" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration/compose-apis/virtual-endpoints - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic - category: Page - show: True - - title: "Examples" - path: /advanced-configuration/compose-apis/demo-virtual-endpoint - category: Page - show: True - - title: "Go Templates" - path: /product-stack/tyk-gateway/references/go-templates - category: Page - show: True - - title: "JQ Transforms" - path: /advanced-configuration/transform-traffic/jq-transformations - category: Page - show: True - - title: "API Versioning" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning - category: Page - show: True - - title: "Tyk OAS versioning" - path: /getting-started/key-concepts/oas-versioning - category: Page - show: True - - title: "Tyk Classic versioning" - path: /getting-started/key-concepts/versioning - category: Page - show: True - - title: "Integration options" - category: Directory - show: True - menu: - - title: "Overview" - path: /advanced-configuration/integrate - category: Page - show: True - - title: "3rd Party identity providers" - category: Directory - show: True - menu: - - title: "3rd Party Identity Providers" - path: /advanced-configuration/integrate/3rd-party-identity-providers - category: Page - show: True - - title: "Custom" - path: /advanced-configuration/integrate/3rd-party-identity-providers/custom - category: Page - show: True - - title: "Login into the Dashboard using LDAP - Guide" - path: /advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib - category: Page - show: True - - title: "LDAP" - path: /advanced-configuration/integrate/3rd-party-identity-providers/ldap - category: Page - show: True - - title: "Social Provider" - path: /advanced-configuration/integrate/3rd-party-identity-providers/social - category: Page - show: True - - title: "Log into an APP with Google" - path: /advanced-configuration/integrate/3rd-party-identity-providers/social/app-login-with-gplus - category: Page - show: True - - title: "Log into Dashboard with Google" - path: /advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus - category: Page - show: True - - title: "API authentication mode" - category: Directory - show: True - menu: - - title: "API Authentication Mode" - path: /advanced-configuration/integrate/api-auth-mode - category: Page - show: True - - title: "Observability" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability - category: Page - show: True - - title: "Metrics" - path: /basic-config-and-security/report-monitor-trigger-events/instrumentation - category: Page - show: True - - title: "System logs" - path: /log-data - category: Page - show: True - - title: "OpenTelemetry" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview - category: Page - show: true - - title: "Datadog" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog - category: Page - show: true - - title: "Dynatrace" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace - category: Page - show: true - - title: "Elasticsearch" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic - category: Page - show: true - - title: "Jaeger" + menu: + - title: "Overview" + path: /transform-traffic/request-headers + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/request-header-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/request-header-tyk-classic + category: Page + show: True + - title: "Response Body" category: Directory show: True menu: - - title: "Docker" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger + - title: "Overview" + path: /advanced-configuration/transform-traffic/response-body category: Page - show: true - - title: "Kubernetes" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/response-body-tyk-oas category: Page - show: true - - title: "New Relic" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic - category: Page - show: true - - title: "OpenTracing" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview - category: Page - show: True - - title: "Jaeger" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger - category: Page - show: True - - title: "New Relic" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic - category: Page - show: True - - title: "Zipkin" - path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin - category: Page - show: True - - title: "Custom plugins" - category: Directory - show: True - menu: - - title: "Overview" - path: /plugins - category: Page - show: True - - title: "Quickstarts" - category: Directory - show: true - menu: - - title: "Go" + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/response-body-tyk-classic + category: Page + show: True + - title: "Response Headers" category: Directory show: True menu: - title: "Overview" - path: /plugins/tutorials/quick-starts/go/quickstart + path: /advanced-configuration/transform-traffic/response-headers category: Page show: True - - title: "Dashboard" - path: /plugins/tutorials/quick-starts/go/dashboard + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/response-header-tyk-oas category: Page show: True - - title: "Open source" - path: /plugins/tutorials/quick-starts/go/open-source + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/response-header-tyk-classic category: Page show: True - - title: "Plugins Hub" - path: /plugins/plugin-hub - catgory: Page - show: True - - title: "API Configuration" - category: Directory - show: true - menu: - - title: "Overview" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas + - title: "Use case: SOAP to REST" + path: /advanced-configuration/transform-traffic/soap-rest category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic - category: Page - show: True - - title: "Plugin Types" - path: /plugins/plugin-types/plugintypes - category: Directory - show: True - menu: - - title: "Overview" - path: /plugins/plugin-types/plugintypes - category: Page - show: True - - title: "Request Plugins" - path: /plugins/plugin-types/request-plugins - category: Page - show: True - - title: "Authentication Plugins" - path: /plugins/plugin-types/auth-plugins/auth-plugins - category: Page - show: True - - title: "Authentication Plugin Caching" - path: /plugins/plugin-types/auth-plugins/id-extractor - category: Page + - title: "Request Validation" + category: Directory show: True - - title: "Response Plugins" - path: /plugins/plugin-types/response-plugins - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/validate-request-middleware + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/validate-request-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/validate-request-tyk-classic + category: Page + show: True + - title: "Mock Response" + category: Directory show: True - - title: "Analytics Plugins" - path: /plugins/plugin-types/analytics-plugins/ - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/mock-response-middleware + category: Page + show: True + - title: "Tyk OAS key concepts" + path: /product-stack/tyk-gateway/middleware/mock-response-openapi + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/mock-response-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/mock-response-tyk-classic + category: Page + show: True + - title: "URL Rewriting" + category: Directory show: True - - title: "Per-endpoint Plugins" + menu: + - title: "Overview of URL Rewriting" + path: /transform-traffic/url-rewriting + category: Page + show: True + - title: "URL Rewrite middleware" + path: /product-stack/tyk-gateway/middleware/url-rewrite-middleware + category: Page + show: True + - title: "URL Rewriting with Tyk OAS" + path: /product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas + category: Page + show: True + - title: "URL Rewriting with Tyk Classic" + path: /product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic + category: Page + show: True + - title: "Virtual Endpoints" category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-gateway/middleware/endpoint-plugin + path: /advanced-configuration/compose-apis/virtual-endpoints category: Page show: True - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas + path: /product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas category: Page show: True - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic + path: /product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic + category: Page + show: True + - title: "Examples" + path: /advanced-configuration/compose-apis/demo-virtual-endpoint category: Page show: True - - title: "Plugin bundles" + - title: "Go Templates" + path: /product-stack/tyk-gateway/references/go-templates + category: Page + show: True + - title: "JQ Transforms" + path: /advanced-configuration/transform-traffic/jq-transformations + category: Page + show: True + - title: "API Versioning" category: Directory show: True menu: - - title: "Serving Plugins to Tyk Gateway" - path: /plugins/how-to-serve-plugins - category: Page - show: False - title: "Overview" - path: /plugins/how-to-serve-plugins/plugin-bundles - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas + path: /product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic + - title: "Tyk OAS versioning" + path: /getting-started/key-concepts/oas-versioning category: Page show: True - - title: "Bundle CLI tool" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli + - title: "Tyk Classic versioning" + path: /getting-started/key-concepts/versioning category: Page show: True - - title: "Supported Languages" + - title: "Integration options" category: Directory show: True menu: - title: "Overview" - path: /plugins/supported-languages + path: /advanced-configuration/integrate category: Page show: True - - title: "Golang" + - title: "3rd Party identity providers" category: Directory show: True menu: - - title: "Overview" - path: /plugins/supported-languages/golang + - title: "3rd Party Identity Providers" + path: /advanced-configuration/integrate/3rd-party-identity-providers category: Page show: True - - title: "Writing Go Plugins" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins + - title: "Custom" + path: /advanced-configuration/integrate/3rd-party-identity-providers/custom category: Page show: True - - title: "Go Plugin Development Flow" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow + - title: "Login into the Dashboard using LDAP - Guide" + path: /advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib category: Page show: True - - title: "Go Plugin Compiler" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler + - title: "LDAP" + path: /advanced-configuration/integrate/3rd-party-identity-providers/ldap category: Page show: True - - title: "Loading Go Plugins" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins + - title: "Social Provider" + path: /advanced-configuration/integrate/3rd-party-identity-providers/social category: Page show: True - - title: "Go Plugin Examples" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples + - title: "Log into an APP with Google" + path: /advanced-configuration/integrate/3rd-party-identity-providers/social/app-login-with-gplus category: Page show: True - - title: "Javascript" + - title: "Log into Dashboard with Google" + path: /advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus + category: Page + show: True + - title: "API authentication mode" category: Directory show: True menu: - - title: "Overview" - path: /plugins/supported-languages/javascript-middleware - category: Page - show: True - - title: "JS Scripting Guide" - path: /plugins/supported-languages/javascript-middleware/middleware-scripting-guide - category: Page - show: True - - title: "JavaScript API" - path: /plugins/supported-languages/javascript-middleware/javascript-api - category: Page - show: True - - title: "Using JS plugins with Tyk Self-Managed" - path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro - category: Page - show: True - - title: "Using JS plugins with Tyk Hybrid" - path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid - category: Page - show: True - - title: "Using JS plugins with Tyk OSS" - path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce - category: Page - show: True - - title: "WAF (OSS) ModSecurity Plugin example" - path: /plugins/supported-languages/javascript-middleware/waf-js-plugin + - title: "API Authentication Mode" + path: /advanced-configuration/integrate/api-auth-mode category: Page show: True - - title: "Rich Plugins" - path: /plugins/supported-languages/rich-plugins + - title: "Observability" + category: Directory + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability category: Page show: True - - title: "Rich Plugins - How do They work?" - path: /plugins/supported-languages/rich-plugins/rich-plugins-work + - title: "Metrics" + path: /basic-config-and-security/report-monitor-trigger-events/instrumentation category: Page show: True - - title: "Rich Plugins - Data Structures" - path: /plugins/supported-languages/rich-plugins/rich-plugins-data-structures + - title: "System logs" + path: /log-data category: Page show: True - - title: "Rich Plugin - Python" + - title: "OpenTelemetry" category: Directory show: True menu: - title: "Overview" - path: /plugins/supported-languages/rich-plugins/python/python + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview category: Page - show: True - - title: "Tutorial- Custom Authentication Plugin" - path: /plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial + show: true + - title: "Datadog" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog category: Page - show: True - - title: "Tutorial - Add Python Plugin To Your Gateway" - path: /plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api + show: true + - title: "Dynatrace" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace category: Page - show: True - - title: "Tyk Python API methods" - path: /plugins/supported-languages/rich-plugins/python/tyk-python-api-methods + show: true + - title: "Elasticsearch" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic category: Page + show: true + - title: "Jaeger" + category: Directory show: True - - title: "Performance" - path: /plugins/supported-languages/rich-plugins/python/performance + menu: + - title: "Docker" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger + category: Page + show: true + - title: "Kubernetes" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s + category: Page + show: true + - title: "New Relic" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic category: Page - show: True - - title: "Rich Plugin - gRPC" + show: true + - title: "OpenTracing" category: Directory show: True menu: - title: "Overview" - path: /plugins/supported-languages/rich-plugins/grpc + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview category: Page show: True - - title: "Key Concepts" - path: /plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin + - title: "Jaeger" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger category: Page show: True - - title: "Getting Started" - path: /plugins/supported-languages/rich-plugins/grpc/getting-started-python + - title: "New Relic" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic category: Page show: True - - title: "Tutorials" + - title: "Zipkin" + path: /product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin + category: Page + show: True + - title: "Plugins" + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins + category: Page + show: True + - title: "Quickstarts" + category: Directory + show: true + menu: + - title: "Go" category: Directory - show: true + show: True menu: - - title: "Create Java Request Transformation Plugin" - path: /plugins/supported-languages/rich-plugins/grpc/request-transformation-java - category: Page - show: True - - title: "Create .NET Custom Authentication Plugin" - path: /plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net + - title: "Overview" + path: /plugins/tutorials/quick-starts/go/quickstart category: Page show: True - - title: "Create NodeJS Custom Authentication Plugin" - path: /plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs + - title: "Dashboard" + path: /plugins/tutorials/quick-starts/go/dashboard category: Page show: True - - title: "Create Python Custom Authentication Plugin" - path: /plugins/supported-languages/rich-plugins/grpc/custom-auth-python + - title: "Open source" + path: /plugins/tutorials/quick-starts/go/open-source category: Page show: True - - title: "Performance" - path: /plugins/supported-languages/rich-plugins/grpc/performance + - title: "Plugins Hub" + path: /plugins/plugin-hub + catgory: Page + show: True + - title: "OpenTelemetry Instrumentation" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins + category: Page + show: True + - title: "CICD Plugin Build" + path: /plugins/get-started-selfmanaged/deploy-plugins + category: Page + show: True + - title: "Serving plugins" + category: Directory + show: True + menu: + - title: "Serving Plugins to Tyk Gateway" + path: /plugins/how-to-serve-plugins + category: Page + show: True + - title: "Packaging plugins" + path: /plugins/how-to-serve-plugins/plugin-bundles + category: Page + show: True + - title: "Plugin Types" + path: /plugins/plugin-types/plugintypes + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins/plugin-types/plugintypes category: Page show: True - - title: "Rich Plugin - Lua" + - title: "Request Plugins" + path: /plugins/plugin-types/request-plugins + category: Page + show: True + - title: "Authentication Plugins" + path: /plugins/plugin-types/auth-plugins/auth-plugins + category: Page + show: True + - title: "Authentication Plugin Caching" + path: /plugins/plugin-types/auth-plugins/id-extractor + category: Page + show: True + - title: "Response Plugins" + path: /plugins/plugin-types/response-plugins + category: Page + show: True + - title: "Analytics Plugins" + path: /plugins/plugin-types/analytics-plugins/ + category: Page + show: True + - title: "Per-endpoint Plugins" + category: Directory + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-gateway/middleware/endpoint-plugin + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic + category: Page + show: True + - title: "Supported Languages" category: Directory show: True menu: - - title: "LuaJIT" - path: /plugins/supported-languages/rich-plugins/luajit + - title: "Overview" + path: /plugins/supported-languages + category: Page + show: True + - title: "Golang" + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins/supported-languages/golang + category: Page + show: True + - title: "Writing Go Plugins" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins + category: Page + show: True + - title: "Go Plugin Development Flow" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow + category: Page + show: True + - title: "Go Plugin Compiler" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler + category: Page + show: True + - title: "Loading Go Plugins" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins + category: Page + show: True + - title: "Go Plugin Examples" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples + category: Page + show: True + - title: "Javascript" + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins/supported-languages/javascript-middleware + category: Page + show: True + - title: "JS Scripting Guide" + path: /plugins/supported-languages/javascript-middleware/middleware-scripting-guide + category: Page + show: True + - title: "JavaScript API" + path: /plugins/supported-languages/javascript-middleware/javascript-api + category: Page + show: True + - title: "Using JS plugins with Tyk Self-Managed" + path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro + category: Page + show: True + - title: "Using JS plugins with Tyk Hybrid" + path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid + category: Page + show: True + - title: "Using JS plugins with Tyk OSS" + path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce + category: Page + show: True + - title: "WAF (OSS) ModSecurity Plugin example" + path: /plugins/supported-languages/javascript-middleware/waf-js-plugin + category: Page + show: True + - title: "Rich Plugins" + path: /plugins/supported-languages/rich-plugins category: Page show: True - - title: "Requirements" - path: /plugins/supported-languages/rich-plugins/luajit/requirements + - title: "Rich Plugins - How do They work?" + path: /plugins/supported-languages/rich-plugins/rich-plugins-work category: Page show: True - - title: "Lua Plugin Tutorial" - path: /plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api + - title: "Rich Plugins - Data Structures" + path: /plugins/supported-languages/rich-plugins/rich-plugins-data-structures category: Page show: True - - title: "OpenTelemetry Instrumentation" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins + - title: "Rich Plugin - Python" + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins/supported-languages/rich-plugins/python/python + category: Page + show: True + - title: "Tutorial- Custom Authentication Plugin" + path: /plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial + category: Page + show: True + - title: "Tutorial - Add Python Plugin To Your Gateway" + path: /plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api + category: Page + show: True + - title: "Tyk Python API methods" + path: /plugins/supported-languages/rich-plugins/python/tyk-python-api-methods + category: Page + show: True + - title: "Performance" + path: /plugins/supported-languages/rich-plugins/python/performance + category: Page + show: True + - title: "Rich Plugin - gRPC" + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins/supported-languages/rich-plugins/grpc + category: Page + show: True + - title: "Key Concepts" + path: /plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin + category: Page + show: True + - title: "Getting Started" + path: /plugins/supported-languages/rich-plugins/grpc/getting-started-python + category: Page + show: True + - title: "Tutorials" + category: Directory + show: true + menu: + - title: "Create Java Request Transformation Plugin" + path: /plugins/supported-languages/rich-plugins/grpc/request-transformation-java + category: Page + show: True + - title: "Create .NET Custom Authentication Plugin" + path: /plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net + category: Page + show: True + - title: "Create NodeJS Custom Authentication Plugin" + path: /plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs + category: Page + show: True + - title: "Create Python Custom Authentication Plugin" + path: /plugins/supported-languages/rich-plugins/grpc/custom-auth-python + category: Page + show: True + - title: "Performance" + path: /plugins/supported-languages/rich-plugins/grpc/performance + category: Page + show: True + - title: "Rich Plugin - Lua" + category: Directory + show: True + menu: + - title: "LuaJIT" + path: /plugins/supported-languages/rich-plugins/luajit + category: Page + show: True + - title: "Requirements" + path: /plugins/supported-languages/rich-plugins/luajit/requirements + category: Page + show: True + - title: "Lua Plugin Tutorial" + path: /plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api + category: Page + show: True + - title: "Error Templates" + path: /advanced-configuration/error-templates + category: Page + show: True + - title: "Non-HTTP Protocols" + category: Directory + show: True + menu: + - title: "Overview" + path: /advanced-configuration/other-protocols + category: Page + show: True + - title: "gRPC Proxy" + path: /key-concepts/grpc-proxy + category: Page + show: True + - title: "TCP Proxy" + path: /key-concepts/tcp-proxy + category: Page + show: True + - title: "SSE Proxy" + path: /advanced-configuration/sse-proxy + category: Page + show: True + - title: "WebSocket Proxy" + path: /advanced-configuration/websockets + category: Page + show: True + - title: "Request Context Variables" + path: /context-variables category: Page show: True - - title: "CICD Plugin Build" - path: /plugins/get-started-selfmanaged/deploy-plugins + - title: "Securing System Payloads" + path: /tyk-configuration-reference/securing-system-payloads category: Page show: True - - title: "Error Templates" - path: /advanced-configuration/error-templates - category: Page - show: True - - title: "Non-HTTP Protocols" + - title: "API documentation" category: Directory show: True menu: - - title: "Overview" - path: /advanced-configuration/other-protocols + - title: "Gateway API Overview" + path: /getting-started/key-concepts/gateway-api category: Page show: True - - title: "gRPC Proxy" - path: /key-concepts/grpc-proxy + - title: "Tyk Gateway Open API Documentation" + path: /tyk-gateway-api category: Page show: True - - title: "TCP Proxy" - path: /key-concepts/tcp-proxy + - title: "Tyk OAS API Definition Object" + path: /tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc category: Page show: True - - title: "SSE Proxy" - path: /advanced-configuration/sse-proxy + - title: "Tyk Classic API Definition Object" + path: /tyk-gateway-api/api-definition-objects category: Page show: True - - title: "WebSocket Proxy" - path: /advanced-configuration/websockets + - title: "Token Session Object" + path: /tyk-apis/tyk-gateway-api/token-session-object-details category: Page show: True - - title: "Request Context Variables" - path: /context-variables - category: Page - show: True - - title: "Securing System Payloads" - path: /tyk-configuration-reference/securing-system-payloads - category: Page - show: True - - title: "API documentation" - category: Directory - show: True - menu: - - title: "Gateway API Overview" - path: /getting-started/key-concepts/gateway-api - category: Page - show: True - - title: "Tyk Gateway Open API Documentation" - path: /tyk-gateway-api - category: Page - show: True - - title: "Tyk OAS API Definition Object" - path: /tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc - category: Page - show: True - - title: "Tyk Classic API Definition Object" - path: /tyk-gateway-api/api-definition-objects - category: Page - show: True - - title: "Token Session Object" - path: /tyk-apis/tyk-gateway-api/token-session-object-details - category: Page - show: True - - title: "Environment variables" - category: Directory - show: True - menu: - - title: "Tyk Gateway configuration options" - path: /tyk-oss-gateway/configuration - category: Page - show: True - - title: "Troubleshooting" - category: Directory - show: True - menu: - - title: "Add Custom Certificates to Trusted Storage of Docker Images" - path: /frequently-asked-questions/add-custom-certificates-to-docker-images - category: Page - show: True - - title: "API definition URL case sensitive" - path: /frequently-asked-questions/api-definition-url-case-sensitive - category: Page - show: True - - title: "How to change the logging output location" - path: /frequently-asked-questions/change-logging-output-location - category: Page - show: True - - title: "How to Check Your Gateway Version" - path: /frequently-asked-questions/check-current-gateway-version - category: Page - show: True - - title: "How to clear / invalidate API cache" - path: /frequently-asked-questions/clear-api-cache - category: Page - show: True - - title: "How to find the Gateway logging output" - path: /frequently-asked-questions/find-gateway-logging-output - category: Page - show: True - - title: "How to import existing keys into Tyk CE" - path: /frequently-asked-questions/import-existing-keys-tyk - category: Page - show: True - - title: "Redis persistence using containers" - path: /frequently-asked-questions/redis-persistence-using-containers - category: Page - show: True - - title: "499 Errors" - path: /troubleshooting/tyk-gateway/499-errors - category: Page - show: True - - title: "502 error in Tyk Gateway" - path: /troubleshooting/tyk-gateway/502-error-tyk-gateway - category: Page - show: True - - title: "proxy error: context canceled" - path: /troubleshooting/tyk-gateway/context-canceled - category: Page - show: True - - title: "DRL not ready, skipping this notification" - path: /troubleshooting/tyk-gateway/drl-not-ready - category: Page - show: True - - title: "“Index out of range“ error in logs" - path: /troubleshooting/tyk-gateway/index-range-error-logs - category: Page - show: True - - title: "“Invalid memory address or nil pointer dereference“ error" - path: /troubleshooting/tyk-gateway/invalid-memory-address-nil-pointer-dereference-error - category: Page - show: True - - title: "“Key object validation failed“ error when updating a key" - path: /troubleshooting/tyk-gateway/key-object-validation-failed-error-updating-key - category: Page - show: True - - title: "“There was a problem proxying the request“" - path: /troubleshooting/tyk-gateway/problem-proxying-request - category: Page - show: True - - title: "Tyk Gateway Profiling" - path: /troubleshooting/tyk-gateway/profiling - category: Page - show: True - - title: "Support Information" - path: /troubleshooting/tyk-gateway/support-information - category: Page - show: True - - title: "Hot restart a Tyk Gateway Process" - path: /tyk-configuration-reference/hot-restart-tyk-gateway-process - category: Page - show: True - - title: "Error Response Status Codes" - path: /error-response-codes - category: Page - show: True - - title: "Release notes" - category: Directory - show: True - menu: - - title: "Changelog" - category: Page - show: False - - title: "Overview" - path: /product-stack/tyk-gateway/release-notes/overview - category: page - show: True - - title: "Tyk Gateway v5.5" - path: /product-stack/tyk-gateway/release-notes/version-5.5 - category: Page - show: True - - title: "Tyk Gateway v5.4" - path: /product-stack/tyk-gateway/release-notes/version-5.4 - category: Page - show: True - - title: "Tyk Gateway v5.3 LTS" - path: /product-stack/tyk-gateway/release-notes/version-5.3 - category: Page - show: True - - title: "Tyk Gateway v5.2" - path: /product-stack/tyk-gateway/release-notes/version-5.2 - category: Page - show: True - - title: "Tyk Gateway v5.1" - category: Page - path: /product-stack/tyk-gateway/release-notes/version-5.1 - show: True - - title: "Tyk Gateway v5.0" - path: /product-stack/tyk-gateway/release-notes/version-5.0 - category: Page - show: True - - title: "Tyk Gateway v4.3" - path: /product-stack/tyk-gateway/release-notes/version-4.3 - category: Page - show: True - - title: "Tyk Gateway v4.2" - path: /product-stack/tyk-gateway/release-notes/version-4.2 - category: Page - show: True - - title: "Tyk Gateway v4.1" - path: /product-stack/tyk-gateway/release-notes/version-4.1 - category: Page - show: True - - title: "Tyk Gateway v4.0" - path: /product-stack/tyk-gateway/release-notes/version-4.0 - category: Page - show: True - - title: "Tyk Gateway v3.2" - path: /product-stack/tyk-gateway/release-notes/version-3.2 - category: Page - show: True - - title: "Tyk Gateway v3.1" - path: /product-stack/tyk-gateway/release-notes/version-3.1 - category: Page - show: True - - title: "Tyk Gateway v3.0" - path: /product-stack/tyk-gateway/release-notes/version-3.0 - category: Page + - title: "Environment variables" + category: Directory show: True - - title: "Archived releases" + menu: + - title: "Tyk Gateway configuration options" + path: /tyk-oss-gateway/configuration + category: Page + show: True + - title: "Troubleshooting" category: Directory show: True menu: - - title: "Tyk Gateway v2.9" - path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.9 + - title: "Add Custom Certificates to Trusted Storage of Docker Images" + path: /frequently-asked-questions/add-custom-certificates-to-docker-images category: Page show: True - - title: "Tyk Gateway v2.8" - path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.8 + - title: "API definition URL case sensitive" + path: /frequently-asked-questions/api-definition-url-case-sensitive category: Page show: True - - title: "Tyk Gateway v2.7" - path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.7 + - title: "How to change the logging output location" + path: /frequently-asked-questions/change-logging-output-location category: Page show: True - - title: "Tyk Gateway v2.6" - path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.6 + - title: "How to Check Your Gateway Version" + path: /frequently-asked-questions/check-current-gateway-version category: Page show: True - - title: "Tyk Gateway v2.5" - path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.5 + - title: "How to clear / invalidate API cache" + path: /frequently-asked-questions/clear-api-cache category: Page show: True - - title: "Tyk Gateway v2.4" - path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.4 + - title: "How to find the Gateway logging output" + path: /frequently-asked-questions/find-gateway-logging-output category: Page show: True - - title: "Upgrading to v2.3 from v2.2" - path: /product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2 + - title: "How to import existing keys into Tyk CE" + path: /frequently-asked-questions/import-existing-keys-tyk category: Page show: True - - title: "Release highlights and upgrades" - category: Directory - show: False - menu: - - title: "[version]" + - title: "Redis persistence using containers" + path: /frequently-asked-questions/redis-persistence-using-containers category: Page - show: False - - title: "Important Prerequisites" - path: /tyk-stack/tyk-gateway/important-prerequisites - category: Page - show: True - - title: "Tyk Dashboard" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-dashboard - category: Page - show: True - - title: "Tyk Classic Endpoint Designer" - path: /advanced-configuration/transform-traffic/endpoint-designer - category: Page - show: True - - title: "Advanced configurations" - category: Directory - show: True - menu: - - title: "User Management" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-dashboard/rbac + show: True + - title: "499 Errors" + path: /troubleshooting/tyk-gateway/499-errors category: Page show: True - - title: "User Permissions" - path: /basic-config-and-security/security/dashboard/user-roles + - title: "502 error in Tyk Gateway" + path: /troubleshooting/tyk-gateway/502-error-tyk-gateway category: Page show: True - - title: "Managing Users" - path: /basic-config-and-security/security/dashboard/create-users + - title: "proxy error: context canceled" + path: /troubleshooting/tyk-gateway/context-canceled category: Page show: True - - title: "Managing User Groups" - path: /basic-config-and-security/security/dashboard/create-user-groups + - title: "DRL not ready, skipping this notification" + path: /troubleshooting/tyk-gateway/drl-not-ready category: Page show: True - - title: "Search Users" - path: /basic-config-and-security/security/dashboard/search-users + - title: "“Index out of range“ error in logs" + path: /troubleshooting/tyk-gateway/index-range-error-logs category: Page show: True - - title: "Password Policy" - path: /basic-config-and-security/security/password-policy + - title: "“Invalid memory address or nil pointer dereference“ error" + path: /troubleshooting/tyk-gateway/invalid-memory-address-nil-pointer-dereference-error category: Page show: True - - title: "API Ownership" - path: /product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership + - title: "“Key object validation failed“ error when updating a key" + path: /troubleshooting/tyk-gateway/key-object-validation-failed-error-updating-key category: Page show: True - - title: "Dashboard Administration" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/security/dashboard/dashboard-admin-api + - title: "“There was a problem proxying the request“" + path: /troubleshooting/tyk-gateway/problem-proxying-request + category: Page + show: True + - title: "Tyk Gateway Profiling" + path: /troubleshooting/tyk-gateway/profiling + category: Page + show: True + - title: "Support Information" + path: /troubleshooting/tyk-gateway/support-information category: Page show: True - - title: "Organisations" - path: /basic-config-and-security/security/dashboard/organisations + - title: "Hot restart a Tyk Gateway Process" + path: /tyk-configuration-reference/hot-restart-tyk-gateway-process category: Page show: True - - title: "Analytics" + - title: "Error Response Status Codes" + path: /error-response-codes + category: Page + show: True + - title: "Release notes" category: Directory show: True menu: + - title: "Changelog" + category: Page + show: False - title: "Overview" - path: /tyk-dashboard-analytics + path: /product-stack/tyk-gateway/release-notes/overview + category: page + show: True + - title: "Tyk Gateway v5.5" + path: /product-stack/tyk-gateway/release-notes/version-5.5 category: Page show: True - - title: "Traffic Overview" - path: /tyk-dashboard-analytics/traffic-overview + - title: "Tyk Gateway v5.4" + path: /product-stack/tyk-gateway/release-notes/version-5.4 category: Page show: True - - title: "Activity logs" - path: /tyk-stack/tyk-manager/analytics/log-browser + - title: "Tyk Gateway v5.3 LTS" + path: /product-stack/tyk-gateway/release-notes/version-5.3 category: Page show: True - - title: "Activity by API" - path: /tyk-dashboard-analytics/traffic-per-api + - title: "Tyk Gateway v5.2" + path: /product-stack/tyk-gateway/release-notes/version-5.2 category: Page show: True - - title: "Activity by Key" - path: /tyk-dashboard-analytics/traffic-per-token + - title: "Tyk Gateway v5.1" category: Page + path: /product-stack/tyk-gateway/release-notes/version-5.1 show: True - - title: "Activity by endpoint" - path: /product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint + - title: "Tyk Gateway v5.0" + path: /product-stack/tyk-gateway/release-notes/version-5.0 category: Page show: True - - title: "Activity by location" - path: /tyk-stack/tyk-manager/analytics/geographic-distribution + - title: "Tyk Gateway v4.3" + path: /product-stack/tyk-gateway/release-notes/version-4.3 category: Page show: True - - title: "Activity by errors" - path: /tyk-dashboard-analytics/error-overview + - title: "Tyk Gateway v4.2" + path: /product-stack/tyk-gateway/release-notes/version-4.2 category: Page show: True - - title: "Traffic per OAuth Client" - path: /tyk-dashboard-analytics/traffic-per-oauth-client + - title: "Tyk Gateway v4.1" + path: /product-stack/tyk-gateway/release-notes/version-4.1 category: Page show: True - - title: "Security" - category: Directory - show: False - menu: - - title: "Open Policy Agent (OPA)" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-dashboard/open-policy-agent + - title: "Tyk Gateway v4.0" + path: /product-stack/tyk-gateway/release-notes/version-4.0 + category: Page + show: True + - title: "Tyk Gateway v3.2" + path: /product-stack/tyk-gateway/release-notes/version-3.2 category: Page show: True - - title: "Dashboard OPA rules" - path: /tyk-dashboard/opa-rules + - title: "Tyk Gateway v3.1" + path: /product-stack/tyk-gateway/release-notes/version-3.1 category: Page show: True - - title: "OPA Worked Example" - path: /product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example + - title: "Tyk Gateway v3.0" + path: /product-stack/tyk-gateway/release-notes/version-3.0 category: Page show: True - - title: "Storage" + - title: "Archived releases" + category: Directory + show: True + menu: + - title: "Tyk Gateway v2.9" + path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.9 + category: Page + show: True + - title: "Tyk Gateway v2.8" + path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.8 + category: Page + show: True + - title: "Tyk Gateway v2.7" + path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.7 + category: Page + show: True + - title: "Tyk Gateway v2.6" + path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.6 + category: Page + show: True + - title: "Tyk Gateway v2.5" + path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.5 + category: Page + show: True + - title: "Tyk Gateway v2.4" + path: /product-stack/tyk-gateway/release-notes/archived-releases/version-2.4 + category: Page + show: True + - title: "Upgrading to v2.3 from v2.2" + path: /product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2 + category: Page + show: True + - title: "Release highlights and upgrades" + category: Directory + show: False + menu: + - title: "[version]" + category: Page + show: False + - title: "Important Prerequisites" + path: /tyk-stack/tyk-gateway/important-prerequisites + category: Page + show: True + - title: "Tyk Dashboard" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-dashboard + category: Page + show: True + - title: "Tyk Classic Endpoint Designer" + path: /advanced-configuration/transform-traffic/endpoint-designer + category: Page + show: True + - title: "Advanced configurations" category: Directory show: True menu: - - title: "Supported Databases" - path: /tyk-dashboard/database-options + - title: "User Management" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-dashboard/rbac + category: Page + show: True + - title: "User Permissions" + path: /basic-config-and-security/security/dashboard/user-roles + category: Page + show: True + - title: "Managing Users" + path: /basic-config-and-security/security/dashboard/create-users + category: Page + show: True + - title: "Managing User Groups" + path: /basic-config-and-security/security/dashboard/create-user-groups + category: Page + show: True + - title: "Search Users" + path: /basic-config-and-security/security/dashboard/search-users + category: Page + show: True + - title: "Password Policy" + path: /basic-config-and-security/security/password-policy + category: Page + show: True + - title: "API Ownership" + path: /product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership + category: Page + show: True + - title: "Dashboard Administration" + category: Directory + show: True + menu: + - title: "Overview" + path: /basic-config-and-security/security/dashboard/dashboard-admin-api + category: Page + show: True + - title: "Organisations" + path: /basic-config-and-security/security/dashboard/organisations + category: Page + show: True + - title: "Analytics" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-dashboard-analytics + category: Page + show: True + - title: "Traffic Overview" + path: /tyk-dashboard-analytics/traffic-overview + category: Page + show: True + - title: "Activity logs" + path: /tyk-stack/tyk-manager/analytics/log-browser + category: Page + show: True + - title: "Activity by API" + path: /tyk-dashboard-analytics/traffic-per-api + category: Page + show: True + - title: "Activity by Key" + path: /tyk-dashboard-analytics/traffic-per-token + category: Page + show: True + - title: "Activity by endpoint" + path: /product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint + category: Page + show: True + - title: "Activity by location" + path: /tyk-stack/tyk-manager/analytics/geographic-distribution + category: Page + show: True + - title: "Activity by errors" + path: /tyk-dashboard-analytics/error-overview + category: Page + show: True + - title: "Traffic per OAuth Client" + path: /tyk-dashboard-analytics/traffic-per-oauth-client + category: Page + show: True + - title: "Security" + category: Directory + show: False + menu: + - title: "Open Policy Agent (OPA)" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-dashboard/open-policy-agent + category: Page + show: True + - title: "Dashboard OPA rules" + path: /tyk-dashboard/opa-rules + category: Page + show: True + - title: "OPA Worked Example" + path: /product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example + category: Page + show: True + - title: "Storage" + category: Directory + show: True + menu: + - title: "Supported Databases" + path: /tyk-dashboard/database-options + category: Page + show: True + - title: "Configuring Data Storage" + path: /product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration + category: Page + show: True + - title: "API Templates" + category: Directory + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-dashboard/advanced-configurations/templates/template-overview + category: Page + show: True + - title: "Using the Template Designer" + path: /product-stack/tyk-dashboard/advanced-configurations/templates/template-designer + category: Page + show: True + - title: "Using the Dashboard API" + path: /product-stack/tyk-dashboard/advanced-configurations/templates/template-api + category: Page + show: True + - title: "API Categories" + path: /product-stack/tyk-dashboard/advanced-configurations/api-categories category: Page show: True - - title: "Configuring Data Storage" - path: /product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration + - title: "Dashboard audit logs" + path: /product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log category: Page show: True - - title: "API Templates" + - title: "API documentation" category: Directory show: True menu: - - title: "Overview" - path: /product-stack/tyk-dashboard/advanced-configurations/templates/template-overview - category: Page + - title: "Dashboard API" + category: Directory show: True - - title: "Using the Template Designer" - path: /product-stack/tyk-dashboard/advanced-configurations/templates/template-designer - category: Page + menu: + - title: "Overview" + path: /getting-started/key-concepts/dashboard-api + category: Page + show: True + - title: "Pagination" + path: /tyk-apis/tyk-dashboard-api/pagination + category: Page + show: True + - title: "Manage APIs" + path: /tyk-apis/tyk-dashboard-api/api-definitions + category: Page + show: True + - title: "Data Graph APIs" + path: /tyk-apis/tyk-dashboard-api/data-graphs-api + category: Page + show: True + - title: "Dashboard Analytics" + path: /tyk-apis/tyk-dashboard-api/analytics + category: Page + show: True + - title: "Manage Users" + path: /tyk-dashboard-api/users + category: Page + show: True + - title: "Manage User Groups" + path: /tyk-apis/tyk-dashboard-api/user-groups + category: Page + show: True + - title: "Manage Additional User Permissions" + path: /tyk-dashboard-api/org/permissions + category: Page + show: True + - title: "Manage Access Keys" + path: /tyk-apis/tyk-dashboard-api/api-keys + category: Page + show: True + - title: "Manage Basic Auth" + path: /tyk-apis/tyk-dashboard-api/basic-authentication + category: Page + show: True + - title: "Manage OAuth" + path: /tyk-apis/tyk-dashboard-api/oauth-key-management + category: Page + show: True + - title: "Setup Single Sign On" + path: /tyk-apis/tyk-dashboard-api/sso + category: Page + show: True + - title: "Manage Webhooks" + path: /tyk-apis/tyk-dashboard-api/web-hooks + category: Page + show: True + - title: "Open Policy Agent API" + path: /tyk-dashboard-api/org/opa + category: Page + show: True + - title: "Classic Portal" + category: Directory + show: True + menu: + - title: "Portal Key Requests" + path: /tyk-apis/tyk-dashboard-api/manage-key-requests + category: Page + show: True + - title: "Portal Policies" + path: /tyk-apis/tyk-dashboard-api/portal-policies + category: Page + show: True + - title: "Dashboard API Reference" + path: /tyk-dashboard-api + category: Page + show: True + - title: "Dashboard Admin API" + category: Directory show: True - - title: "Using the Dashboard API" - path: /product-stack/tyk-dashboard/advanced-configurations/templates/template-api + menu: + - title: "Manage Organisations" + path: /dashboard-admin-api/organisations + category: Page + show: True + - title: "Manage Users" + path: /tyk-apis/tyk-dashboard-admin-api/users + category: Page + show: True + - title: "Setup SSO" + path: /tyk-apis/tyk-dashboard-admin-api/sso + category: Page + show: True + - title: "Dashboard URL Reload" + path: /tyk-apis/tyk-dashboard-api/dashboard-url-reload + category: Page + show: True + - title: "Export Tyk assets" + path: /tyk-apis/tyk-dashboard-admin-api/export + category: Page + show: True + - title: "Import Tyk assets" + path: /tyk-apis/tyk-dashboard-admin-api/import + category: Page + show: True + - title: "Admin API reference" + path: /dashboard-admin-api + category: Page + show: True + - title: "Environment variables" + category: Directory + show: True + menu: + - title: "Tyk Dashboard Configuration Options" + path: /tyk-dashboard/configuration category: Page show: True - - title: "API Categories" - path: /product-stack/tyk-dashboard/advanced-configurations/api-categories - category: Page - show: True - - title: "Dashboard audit logs" - path: /product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log - category: Page - show: True - - title: "API documentation" - category: Directory - show: True - menu: - - title: "Dashboard API" + - title: "Troubleshooting" category: Directory show: True menu: - - title: "Overview" - path: /getting-started/key-concepts/dashboard-api + - title: "Capping analytics data storage" + path: /frequently-asked-questions/capping-analytics-data-storage category: Page show: True - - title: "Pagination" - path: /tyk-apis/tyk-dashboard-api/pagination + - title: "Dashboard bootstrap error" + path: /frequently-asked-questions/dashboard-bootstrap-error category: Page show: True - - title: "Manage APIs" - path: /tyk-apis/tyk-dashboard-api/api-definitions + - title: "How to find the policy ID for a created policy" + path: /frequently-asked-questions/find-policy-id-created-policy category: Page show: True - - title: "Data Graph APIs" - path: /tyk-apis/tyk-dashboard-api/data-graphs-api + - title: "Gateway detected 0 APIs" + path: /frequently-asked-questions/gateway-detected-0-apis category: Page show: True - - title: "Dashboard Analytics" - path: /tyk-apis/tyk-dashboard-api/analytics + - title: "How to Connect to DocumentDB with X.509 client cert" + path: /frequently-asked-questions/how-to-connect-to-documentdb category: Page show: True - - title: "Manage Users" - path: /tyk-dashboard-api/users + - title: "How to disable an API" + path: /frequently-asked-questions/how-to-disable-an-api category: Page show: True - - title: "Manage User Groups" - path: /tyk-apis/tyk-dashboard-api/user-groups + - title: "How to Setup CORS" + path: /frequently-asked-questions/how-to-setup-cors category: Page show: True - - title: "Manage Additional User Permissions" - path: /tyk-dashboard-api/org/permissions + - title: "No Key information on the Dashboard" + path: /frequently-asked-questions/no-token-information-dashboard category: Page show: True - - title: "Manage Access Keys" - path: /tyk-apis/tyk-dashboard-api/api-keys + - title: "How to rename or move existing headers in a request" + path: /frequently-asked-questions/rename-or-move-existing-headers category: Page show: True - - title: "Manage Basic Auth" - path: /tyk-apis/tyk-dashboard-api/basic-authentication + - title: "How to run the Dashboard and portal on different ports" + path: /frequently-asked-questions/run-dashboard-portal-different-ports category: Page show: True - - title: "Manage OAuth" - path: /tyk-apis/tyk-dashboard-api/oauth-key-management + - title: "How to run two Gateways with docker-compose" + path: /frequently-asked-questions/two-gateways-with-docker-compose category: Page show: True - - title: "Setup Single Sign On" - path: /tyk-apis/tyk-dashboard-api/sso + - title: "“Can't update policy. Please ensure at least one access rights setting is set“" + path: /troubleshooting/tyk-dashboard/cant-update-policy-please-ensure-least-one-access-rights-setting-set category: Page show: True - - title: "Manage Webhooks" - path: /tyk-apis/tyk-dashboard-api/web-hooks + - title: "Dashboard not showing any analytics data" + path: /troubleshooting/tyk-dashboard/dashboard-not-showing-analytics-data category: Page show: True - - title: "Open Policy Agent API" - path: /tyk-dashboard-api/org/opa + - title: "Fatal - Dashboard and portal domains cannot be the same" + path: /troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same category: Page show: True - - title: "Classic Portal" - category: Directory + - title: "Internal TIB SSO User unable to log in" + path: /troubleshooting/tyk-dashboard/internal-tib + category: Page show: True - menu: - - title: "Portal Key Requests" - path: /tyk-apis/tyk-dashboard-api/manage-key-requests - category: Page - show: True - - title: "Portal Policies" - path: /tyk-apis/tyk-dashboard-api/portal-policies - category: Page - show: True - - title: "Dashboard API Reference" - path: /tyk-dashboard-api + - title: "Key object validation failed, most likely malformed input error" + path: /troubleshooting/tyk-dashboard/key-object-validation-failed-most-likely-malformed-input + category: Page + show: True + - title: "Port 5000 Errors in the Browser Console" + path: /troubleshooting/tyk-dashboard/port-5000-errors category: Page show: True - - title: "Dashboard Admin API" + - title: "“There was a problem updating your CNAME“ error in the Dashboard" + path: /troubleshooting/tyk-dashboard/problem-updating-cname-error-dashboard + category: Page + show: True + - title: "“runtime error invalid memory address or nil pointer dereference“" + path: /troubleshooting/tyk-dashboard/runtime-error-invalid-memory-address-nil-pointer-dereference + category: Page + show: True + - title: "“ValueError No JSON object could be decoded\" when running Dashboard Bootstrap script" + path: /troubleshooting/tyk-dashboard/value-error-no-json-object-decoded-running-dashboard-bootstrap-script + category: Page + show: True + - title: "“Payload signature is invalid!“ error" + path: /troubleshooting/tyk-installation/payload-signature-invalid-error + category: Page + show: True + - title: "MongoDB X.509 Client Authentication" + path: /tyk-stack/dependencies/mongodb/x509-client-auth + category: Page + show: True + - title: "Release notes" category: Directory show: True menu: - - title: "Manage Organisations" - path: /dashboard-admin-api/organisations + - title: "Overview" category: Page + path: /product-stack/tyk-dashboard/release-notes/overview show: True - - title: "Manage Users" - path: /tyk-apis/tyk-dashboard-admin-api/users + - title: "Tyk Dashboard v5.5" + path: /product-stack/tyk-dashboard/release-notes/version-5.5 category: Page show: True - - title: "Setup SSO" - path: /tyk-apis/tyk-dashboard-admin-api/sso + - title: "Tyk Dashboard v5.4" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-5.4 show: True - - title: "Dashboard URL Reload" - path: /tyk-apis/tyk-dashboard-api/dashboard-url-reload + - title: "Tyk Dashboard v5.3 LTS" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-5.3 show: True - - title: "Export Tyk assets" - path: /tyk-apis/tyk-dashboard-admin-api/export + - title: "Tyk Dashboard v5.2" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-5.2 show: True - - title: "Import Tyk assets" - path: /tyk-apis/tyk-dashboard-admin-api/import + - title: "Tyk Dashboard v5.1" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-5.1 show: True - - title: "Admin API reference" - path: /dashboard-admin-api + - title: "Tyk Dashboard v5.0" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-5.0 show: True - - title: "Environment variables" - category: Directory - show: True - menu: - - title: "Tyk Dashboard Configuration Options" - path: /tyk-dashboard/configuration - category: Page - show: True - - title: "Troubleshooting" - category: Directory - show: True - menu: - - title: "Capping analytics data storage" - path: /frequently-asked-questions/capping-analytics-data-storage - category: Page - show: True - - title: "Dashboard bootstrap error" - path: /frequently-asked-questions/dashboard-bootstrap-error - category: Page - show: True - - title: "How to find the policy ID for a created policy" - path: /frequently-asked-questions/find-policy-id-created-policy - category: Page - show: True - - title: "Gateway detected 0 APIs" - path: /frequently-asked-questions/gateway-detected-0-apis - category: Page - show: True - - title: "How to Connect to DocumentDB with X.509 client cert" - path: /frequently-asked-questions/how-to-connect-to-documentdb - category: Page - show: True - - title: "How to disable an API" - path: /frequently-asked-questions/how-to-disable-an-api - category: Page - show: True - - title: "How to Setup CORS" - path: /frequently-asked-questions/how-to-setup-cors - category: Page - show: True - - title: "No Key information on the Dashboard" - path: /frequently-asked-questions/no-token-information-dashboard - category: Page - show: True - - title: "How to rename or move existing headers in a request" - path: /frequently-asked-questions/rename-or-move-existing-headers - category: Page - show: True - - title: "How to run the Dashboard and portal on different ports" - path: /frequently-asked-questions/run-dashboard-portal-different-ports - category: Page - show: True - - title: "How to run two Gateways with docker-compose" - path: /frequently-asked-questions/two-gateways-with-docker-compose - category: Page - show: True - - title: "“Can't update policy. Please ensure at least one access rights setting is set“" - path: /troubleshooting/tyk-dashboard/cant-update-policy-please-ensure-least-one-access-rights-setting-set - category: Page - show: True - - title: "Dashboard not showing any analytics data" - path: /troubleshooting/tyk-dashboard/dashboard-not-showing-analytics-data - category: Page - show: True - - title: "Fatal - Dashboard and portal domains cannot be the same" - path: /troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same - category: Page - show: True - - title: "Internal TIB SSO User unable to log in" - path: /troubleshooting/tyk-dashboard/internal-tib - category: Page - show: True - - title: "Key object validation failed, most likely malformed input error" - path: /troubleshooting/tyk-dashboard/key-object-validation-failed-most-likely-malformed-input - category: Page - show: True - - title: "Port 5000 Errors in the Browser Console" - path: /troubleshooting/tyk-dashboard/port-5000-errors - category: Page - show: True - - title: "“There was a problem updating your CNAME“ error in the Dashboard" - path: /troubleshooting/tyk-dashboard/problem-updating-cname-error-dashboard - category: Page - show: True - - title: "“runtime error invalid memory address or nil pointer dereference“" - path: /troubleshooting/tyk-dashboard/runtime-error-invalid-memory-address-nil-pointer-dereference - category: Page - show: True - - title: "“ValueError No JSON object could be decoded\" when running Dashboard Bootstrap script" - path: /troubleshooting/tyk-dashboard/value-error-no-json-object-decoded-running-dashboard-bootstrap-script - category: Page - show: True - - title: "“Payload signature is invalid!“ error" - path: /troubleshooting/tyk-installation/payload-signature-invalid-error - category: Page - show: True - - title: "MongoDB X.509 Client Authentication" - path: /tyk-stack/dependencies/mongodb/x509-client-auth - category: Page - show: True - - title: "Release notes" - category: Directory - show: True - menu: - - title: "Overview" - category: Page - path: /product-stack/tyk-dashboard/release-notes/overview - show: True - - title: "Tyk Dashboard v5.5" - path: /product-stack/tyk-dashboard/release-notes/version-5.5 - category: Page - show: True - - title: "Tyk Dashboard v5.4" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-5.4 - show: True - - title: "Tyk Dashboard v5.3 LTS" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-5.3 - show: True - - title: "Tyk Dashboard v5.2" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-5.2 - show: True - - title: "Tyk Dashboard v5.1" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-5.1 - show: True - - title: "Tyk Dashboard v5.0" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-5.0 - show: True - - title: "Tyk Dashboard v4.3" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-4.3 - show: True - - title: "Tyk Dashboard v4.2" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-4.2 - show: True - - title: "Tyk Dashboard v4.1" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-4.1 - show: True - - title: "Tyk Dashboard v4.0" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-4.0 - show: True - - title: "Tyk Dashboard v3.2" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-3.2 - show: True - - title: "Tyk Dashboard v3.1" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-3.1 - show: True - - title: "Tyk Dashboard v3.0" - category: Page - path: /product-stack/tyk-dashboard/release-notes/version-3.0 - show: True - - title: "Changelog" - category: Page - show: False - - title: "Archived releases" - category: Directory - show: True - menu: - - title: "Tyk Dashboard v2.9" - path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9" + - title: "Tyk Dashboard v4.3" category: Page - show: true - - title: "Tyk Dashboard v2.8" - path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8" + path: /product-stack/tyk-dashboard/release-notes/version-4.3 + show: True + - title: "Tyk Dashboard v4.2" category: Page - show: true - - title: "Tyk Dashboard v2.7" - path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7" + path: /product-stack/tyk-dashboard/release-notes/version-4.2 + show: True + - title: "Tyk Dashboard v4.1" category: Page - show: true - - title: "Tyk Dashboard v2.6" - path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6" + path: /product-stack/tyk-dashboard/release-notes/version-4.1 + show: True + - title: "Tyk Dashboard v4.0" category: Page - show: true - - title: "Tyk Dashboard v2.5" - path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5" + path: /product-stack/tyk-dashboard/release-notes/version-4.0 + show: True + - title: "Tyk Dashboard v3.2" category: Page - show: true - - title: "Tyk Dashboard v2.4" - path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4" + path: /product-stack/tyk-dashboard/release-notes/version-3.2 + show: True + - title: "Tyk Dashboard v3.1" category: Page - show: true - - title: "Release highlights and upgrades" - category: Directory - show: False - menu: - - title: "Tyk Classic Developer Portal" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-developer-portal/tyk-portal-classic - category: Page - show: True - - title: "Portal Concepts" - path: /tyk-developer-portal/tyk-portal-classic/portal-concepts - category: Page - show: True - - title: "Portal API Catalogue" - path: /getting-started/key-concepts/api-catalogue - category: Page - show: True - - title: "Publish an API" - path: /getting-started/tutorials/publish-api - category: Page - show: True - - title: "Advanced configurations" + path: /product-stack/tyk-dashboard/release-notes/version-3.1 + show: True + - title: "Tyk Dashboard v3.0" + category: Page + path: /product-stack/tyk-dashboard/release-notes/version-3.0 + show: True + - title: "Changelog" + category: Page + show: False + - title: "Archived releases" + category: Directory + show: True + menu: + - title: "Tyk Dashboard v2.9" + path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9" + category: Page + show: true + - title: "Tyk Dashboard v2.8" + path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8" + category: Page + show: true + - title: "Tyk Dashboard v2.7" + path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7" + category: Page + show: true + - title: "Tyk Dashboard v2.6" + path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6" + category: Page + show: true + - title: "Tyk Dashboard v2.5" + path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5" + category: Page + show: true + - title: "Tyk Dashboard v2.4" + path: "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4" + category: Page + show: true + - title: "Release highlights and upgrades" + category: Directory + show: False + menu: + - title: "Tyk Classic Developer Portal" category: Directory show: True menu: - - title: "Key Requests" - path: /tyk-developer-portal/tyk-portal-classic/key-requests + - title: "Overview" + path: /tyk-developer-portal/tyk-portal-classic + category: Page + show: True + - title: "Portal Concepts" + path: /tyk-developer-portal/tyk-portal-classic/portal-concepts category: Page show: True - - title: "Developer Profiles" - path: /tyk-developer-portal/tyk-portal-classic/developer-profiles + - title: "Portal API Catalogue" + path: /getting-started/key-concepts/api-catalogue category: Page show: True - - title: "Dynamic Client Registration (DCR)" + - title: "Publish an API" + path: /getting-started/tutorials/publish-api + category: Page + show: True + - title: "Advanced configurations" category: Directory show: True menu: - - title: "Overview" - path: /tyk-developer-portal/tyk-portal-classic/dynamic-client-registration + - title: "Key Requests" + path: /tyk-developer-portal/tyk-portal-classic/key-requests + category: Page + show: True + - title: "Developer Profiles" + path: /tyk-developer-portal/tyk-portal-classic/developer-profiles + category: Page + show: True + - title: "Dynamic Client Registration (DCR)" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-developer-portal/tyk-portal-classic/dynamic-client-registration + category: Page + show: True + - title: "Step by step guide using Gluu" + path: /tyk-developer-portal/tyk-portal-classic/gluu-dcr + category: Page + show: True + - title: "Step by step guide using Keycloak" + path: /tyk-developer-portal/tyk-portal-classic/keycloak-dcr + category: Page + show: True + - title: "Step by step guide using Okta" + path: /tyk-developer-portal/tyk-portal-classic/okta-dcr + category: Page + show: True + - title: "Step by step guide using Curity" + path: /tyk-developer-portal/tyk-portal-classic/curity-dcr + category: Page + show: True + - title: "Portal OAuth Clients" + path: /tyk-developer-portal/tyk-portal-classic/portal-oauth-clients category: Page show: True - - title: "Step by step guide using Gluu" - path: /tyk-developer-portal/tyk-portal-classic/gluu-dcr + - title: "GraphQL with Classic Portal" + path: /tyk-developer-portal/tyk-portal-classic/graphql category: Page show: True - - title: "Step by step guide using Keycloak" - path: /tyk-developer-portal/tyk-portal-classic/keycloak-dcr + - title: "Monetising your APIs" + path: /tyk-developer-portal/tyk-portal-classic/monetise category: Page show: True - - title: "Step by step guide using Okta" - path: /tyk-developer-portal/tyk-portal-classic/okta-dcr + - title: "Events and Notifications" + path: /tyk-developer-portal/tyk-portal-classic/portal-events-notifications category: Page show: True - - title: "Step by step guide using Curity" - path: /tyk-developer-portal/tyk-portal-classic/curity-dcr + - title: "Outbound Email Configuration" + path: /configure/outbound-email-configuration category: Page show: True - - title: "Portal OAuth Clients" - path: /tyk-developer-portal/tyk-portal-classic/portal-oauth-clients - category: Page - show: True - - title: "GraphQL with Classic Portal" - path: /tyk-developer-portal/tyk-portal-classic/graphql - category: Page - show: True - - title: "Monetising your APIs" - path: /tyk-developer-portal/tyk-portal-classic/monetise - category: Page + - title: "Portal customisation" + category: Directory show: True - - title: "Events and Notifications" - path: /tyk-developer-portal/tyk-portal-classic/portal-events-notifications - category: Page + menu: + - title: "Overview" + path: /tyk-developer-portal/customise + category: Page + show: True + - title: "Customising API Visibility" + path: /tyk-developer-portal/customise/customize-api-visibility + category: Page + show: True + - title: "Customise the Portal Menus" + path: /tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation + category: Page + show: True + - title: "Creating a Custom Developer Portal" + path: /tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal + category: Page + show: True + - title: "Swap out Swagger UI for ReDoc" + path: /tyk-developer-portal/tyk-portal-classic/customise/customise-documentation + category: Page + show: True + - title: "Customise Pages with CSS and JavaScript" + path: /tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard + category: Page + show: True + - title: "Customising using jQuery" + path: /tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery + category: Page + show: True + - title: "Customise the Developer Signup Form" + path: /tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data + category: Page + show: True + - title: "Customise Page Templates" + path: /tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates + category: Page + show: True + - title: "API documentation" + category: Directory show: True - - title: "Outbound Email Configuration" - path: /configure/outbound-email-configuration - category: Page + menu: + - title: "Overview" + path: /tyk-portal-api + category: Page + show: True + - title: "Configuration" + path: /tyk-apis/tyk-portal-api/portal-configuration + category: Page + show: True + - title: "Developers" + path: /tyk-apis/tyk-portal-api/portal-developers + category: Page + show: True + - title: "API Publishing" + path: /tyk-apis/tyk-portal-api/portal-documentation + category: Page + show: True + - title: "Key Requests" + path: /tyk-apis/tyk-portal-api/portal-keys + category: Page + show: True + - title: "Environment variables" + category: Directory + show: False + menu: + - title: "Troubleshooting" + category: Directory show: True - - title: "Portal customisation" + menu: + - title: "How to add, list or delete a developer using the API" + path: /frequently-asked-questions/add-list-delete-developer-using-api + category: Page + show: True + - title: "Alerts on new developer key requests" + path: /frequently-asked-questions/alerts-new-developer-key-requests + category: Page + show: True + - title: "Custom Developer Portal Options" + path: /frequently-asked-questions/custom-developer-portal-options + category: Page + show: True + - title: "“API catalogue not found“ error in the Developer Portal" + path: /troubleshooting/tyk-dashboard/api-catalogue-not-found-error-developer-portal + category: Page + show: True + - title: "CORS issues on developer portal" + path: /troubleshooting/tyk-dashboard/cors-issues-on-developer-portal + category: Page + show: True + - title: "“Not Found” error in the Developer Portal" + path: /troubleshooting/tyk-dashboard/not-found-error-developer-portal + category: Page + show: True + - title: "Receive a CSRF error in the Developer Portal" + path: /troubleshooting/tyk-dashboard/receive-csrf-error-developer-portal + category: Page + show: True + - title: "Release notes" + category: Directory + show: False + menu: + - title: "Universal Data Graph (UDG)" + category: Directory + show: True + menu: + - title: "Overview" + path: /universal-data-graph + category: Page + show: True + - title: "Key concepts" category: Directory show: True menu: - - title: "Overview" - path: /tyk-developer-portal/customise - category: Page - show: True - - title: "Customising API Visibility" - path: /tyk-developer-portal/customise/customize-api-visibility - category: Page - show: True - - title: "Customise the Portal Menus" - path: /tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation - category: Page - show: True - - title: "Creating a Custom Developer Portal" - path: /tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal + - title: "Concepts - Universal Data Graph" + path: /universal-data-graph/udg-concepts category: Page show: True - - title: "Swap out Swagger UI for ReDoc" - path: /tyk-developer-portal/tyk-portal-classic/customise/customise-documentation + - title: "Concepts - Data sources" + path: /tyk-stack/universal-data-graph/concepts/datasources category: Page show: True - - title: "Customise Pages with CSS and JavaScript" - path: /tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard + - title: "Concepts - Arguments" + path: /universal-data-graph/concepts/arguments category: Page show: True - - title: "Customising using jQuery" - path: /tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery + - title: "Concepts - Field Mappings" + path: /universal-data-graph/concepts/field_mappings category: Page show: True - - title: "Customise the Developer Signup Form" - path: /tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data + - title: "Concepts - Reusing response fields" + path: /universal-data-graph/concepts/reusing_response_fields category: Page show: True - - title: "Customise Page Templates" - path: /tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates + - title: "Concepts - Header management" + path: /universal-data-graph/concepts/header_management category: Page show: True - - title: "API documentation" + - title: "Connect Data Sources" category: Directory show: True menu: - - title: "Overview" - path: /tyk-portal-api + - title: "UDG Datasources" + path: /universal-data-graph/concepts/datasources category: Page show: True - - title: "Configuration" - path: /tyk-apis/tyk-portal-api/portal-configuration + - title: "GraphQL Datasource" + path: /universal-data-graph/datasources/graphql category: Page show: True - - title: "Developers" - path: /tyk-apis/tyk-portal-api/portal-developers + - title: "Kafka Datasource" + path: /universal-data-graph/datasources/kafka category: Page show: True - - title: "API Publishing" - path: /tyk-apis/tyk-portal-api/portal-documentation + - title: "REST Datasource" + path: /universal-data-graph/datasources/rest category: Page show: True - - title: "Key Requests" - path: /tyk-apis/tyk-portal-api/portal-keys + - title: "Tyk Datasource" + path: /universal-data-graph/datasources/tyk category: Page show: True + - title: "API documentation" + category: Directory + show: False + menu: - title: "Environment variables" category: Directory show: False menu: - title: "Troubleshooting" + category: Directory + show: False + menu: + - title: "Technical release notes" + category: Directory + show: False + menu: + - title: "Tyk Enterprise Developer Portal" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-developer-portal/tyk-enterprise-developer-portal + category: Page + show: True + - title: "Deploy" + category: Directory + show: True + menu: + - title: "Install Tyk Enterprise Developer Portal" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal + category: Page + show: True + - title: "Installation options" + category: Directory + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview + category: Page + show: True + - title: "Docker" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker + category: Page + show: True + - title: "Docker Compose" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose + category: Page + show: True + - title: "New helm chart" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm + category: Page + show: True + - title: "Legacy helm chart" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm + category: Page + show: True + - title: "Red Hat (RHEL / CentOS)" + path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm + category: Page + show: True + - title: "Bootstrap Tyk Enterprise Developer Portal" + path: /product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal + category: Page + show: True + - title: "Get started" category: Directory show: True menu: - - title: "How to add, list or delete a developer using the API" - path: /frequently-asked-questions/add-list-delete-developer-using-api + - title: "Tyk Enterprise Portal Concepts" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts category: Page show: True - - title: "Alerts on new developer key requests" - path: /frequently-asked-questions/alerts-new-developer-key-requests + - title: "Connect to Tyk Dashboard" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider category: Page show: True - - title: "Custom Developer Portal Options" - path: /frequently-asked-questions/custom-developer-portal-options + - title: "Create API Products and plans" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan category: Page show: True - - title: "“API catalogue not found“ error in the Developer Portal" - path: /troubleshooting/tyk-dashboard/api-catalogue-not-found-error-developer-portal + - title: "Customize API Products' and plans' appearance" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans category: Page show: True - - title: "CORS issues on developer portal" - path: /troubleshooting/tyk-dashboard/cors-issues-on-developer-portal + - title: "Create API consumer organisation and catalog" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs category: Page show: True - - title: "“Not Found” error in the Developer Portal" - path: /troubleshooting/tyk-dashboard/not-found-error-developer-portal + - title: "Customize the sign-up form" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form category: Page show: True - - title: "Receive a CSRF error in the Developer Portal" - path: /troubleshooting/tyk-dashboard/receive-csrf-error-developer-portal + - title: "Setup email notifications" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications category: Page show: True - - title: "Release notes" + - title: "Manage API consumers" category: Directory - show: False - menu: - - title: "Universal Data Graph (UDG)" - category: Directory - show: True - menu: - - title: "Overview" - path: /universal-data-graph - category: Page - show: True - - title: "Key concepts" - category: Directory - show: True - menu: - - title: "Concepts - Universal Data Graph" - path: /universal-data-graph/udg-concepts - category: Page show: True - - title: "Concepts - Data sources" - path: /tyk-stack/universal-data-graph/concepts/datasources - category: Page + menu: + - title: "Add Organisations" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations + category: Page + show: True + - title: "Approve Self Registering Requests" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests + category: Page + show: True + - title: "Enable single sign on for admin users and developers" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso + category: Page + show: True + - title: "Invite Codes" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes + category: Page + show: True + - title: "Manage API Consumer organisations" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations + category: Page + show: True + - title: "Manage API Consumers" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers + category: Page + show: True + - title: "Manage API Users" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users + category: Page + show: True + - title: "Manage Catalogues" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues + category: Page + show: True + - title: "Managing Access" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access + category: Page + show: True + - title: "Developer API Consumer Portal" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal + category: Page + show: True + - title: "Register for a Portal" + path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal + category: Page + show: True + - title: "Reset Password" + path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password + category: Page + show: True + - title: "Access an API Product" + path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product + category: Page + show: True + - title: "Manage API access" + category: Directory show: True - - title: "Concepts - Arguments" - path: /universal-data-graph/concepts/arguments - category: Page + menu: + - title: "API Access" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access + category: Page + show: True + - title: "Approve or reject provisioning requests" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests + category: Page + show: True + - title: "Manage Apps and Credentials" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/manage-apps-credentials + category: Page + show: True + - title: "Dynamic client registration" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration + category: Page + show: True + - title: "Configure rate limit keys" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys + category: Page + show: True + - title: "Create Get started guides for your API Products" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products + category: Page + show: True + - title: "Customise the portal" + category: Directory show: True - - title: "Concepts - Field Mappings" - path: /universal-data-graph/concepts/field_mappings - category: Page + menu: + - title: "Customising UI appearance" + category: Directory + show: True + menu: + - title: "Quick Customisation" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation + category: Page + show: True + - title: "Complete customisation" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation + category: Page + show: True + - title: "Developer Workflow" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow + category: Page + show: True + - title: "File Structure and Concepts" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts + category: Page + show: True + - title: "Create a New Page Template" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template + category: Page + show: True + - title: "Email Workflow" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/email-customization + category: Page + show: True + - title: "Content Manager Workflow" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow + category: Page + show: True + - title: "Edit Manage Page Content" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content + category: Page + show: True + - title: "Menus Customisation" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/menus-customisation + category: Page + show: True + - title: "Upgrade the portal theme" + path: /product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades + category: Page + show: True + - title: "Customize data models" + path: /product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model + category: Page + show: True + - title: "Configure webhooks" + path: /product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks + category: Page + show: True + - title: "Environment variables" + category: Directory show: True - - title: "Concepts - Reusing response fields" - path: /universal-data-graph/concepts/reusing_response_fields - category: Page + menu: + - title: "Configure Tyk Enterprise Developer Portal" + path: /product-stack/tyk-enterprise-developer-portal/deploy/configuration + category: Page + show: True + - title: "Release notes" + category: Directory show: True - - title: "Concepts - Header management" - path: /universal-data-graph/concepts/header_management - category: Page + menu: + - title: "Version 1.10.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0 + category: Page + show: True + - title: "Version 1.9.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0 + category: Page + show: True + - title: "Version 1.8.5" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5 + category: Page + show: True + - title: "Version 1.8.4" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4 + category: Page + show: True + - title: "Version 1.8.3" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3 + category: Page + show: True + - title: "Version 1.8.2" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2 + category: Page + show: True + - title: "Version 1.8.1" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1 + category: Page + show: True + - title: "Version 1.8.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0 + category: Page + show: True + - title: "Version 1.7.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0 + category: Page + show: True + - title: "Version 1.6.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0 + category: Page + show: True + - title: "Version 1.5.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0 + category: Page + show: True + - title: "Version 1.4.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0 + category: Page + show: True + - title: "Version 1.3.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0 + category: Page + show: True + - title: "Version 1.2.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0 + category: Page + show: True + - title: "Version 1.1.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0 + category: Page + show: True + - title: "API documentation" + category: Directory show: True - - title: "Connect Data Sources" + menu: + - title: "OpenAPI document for the admin APIs" + path: /product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api + category: Page + show: True + - title: "List of all endpoints" + category: Directory + show: True + menu: + - title: "Version 1.9.0" + path: /product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints + category: Page + show: True + - title: "Troubleshooting" + category: Directory + show: False + menu: + - title: "Tyk Multi Data Centre Bridge" category: Directory show: True menu: - - title: "UDG Datasources" - path: /universal-data-graph/concepts/datasources - category: Page - show: True - - title: "GraphQL Datasource" - path: /universal-data-graph/datasources/graphql + - title: "Overview" + path: /tyk-multi-data-centre category: Page show: True - - title: "Kafka Datasource" - path: /universal-data-graph/datasources/kafka - category: Page + - title: "Getting started" + category: Directory show: True - - title: "REST Datasource" - path: /universal-data-graph/datasources/rest - category: Page + menu: + - title: "MDCB Components" + path: /tyk-multi-data-centre/mdcb-components + category: Page + show: True + - title: "Minimising latency with MDCB" + path: /tyk-multi-data-centre/mdcb-example-minimising-latency + category: Page + show: True + - title: "Setup MDCB Control Plane" + path: /tyk-multi-data-centre/setup-controller-data-centre + category: Page + show: True + - title: "Setup MDCB Data Plane" + path: /tyk-multi-data-centre/setup-worker-data-centres + category: Page + show: True + - title: "Advanced configurations" + category: Directory show: True - - title: "Tyk Datasource" - path: /universal-data-graph/datasources/tyk - category: Page + menu: + - title: "Synchroniser feature with MDCB" + path: /product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser + category: Page + show: True + - title: "API documentation" + category: Directory show: True - - title: "API documentation" - category: Directory - show: False - menu: - - title: "Environment variables" - category: Directory - show: False - menu: - - title: "Troubleshooting" - category: Directory - show: False - menu: - - title: "Technical release notes" - category: Directory - show: False - menu: - - title: "Tyk Enterprise Developer Portal" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-developer-portal/tyk-enterprise-developer-portal - category: Page - show: True - - title: "Deploy" - category: Directory - show: True - menu: - - title: "Install Tyk Enterprise Developer Portal" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal - category: Page + menu: + - title: "MDCB API Reference" + path: /tyk-mdcb-api + category: Page + show: True + - title: "Environment variables" + category: Directory show: True - - title: "Installation options" + menu: + - title: "MDCB Configuration options" + path: /tyk-multi-data-centre/mdcb-configuration-options + category: Page + show: True + - title: "Troubleshooting" + category: Directory + show: False + menu: + - title: "Release notes" category: Directory show: True menu: - - title: "Overview" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview + - title: "MDCB v2.7" + path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.7 category: Page show: True - - title: "Docker" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker + - title: "MDCB v2.6" + path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.6 category: Page show: True - - title: "Docker Compose" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose + - title: "MDCB v2.5" + path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.5 category: Page show: True - - title: "New helm chart" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm + - title: "MDCB v2.4" + path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.4 category: Page show: True - - title: "Legacy helm chart" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm + - title: "MDCB v2.3" + path: /release-notes/mdcb-2.3 category: Page show: True - - title: "Red Hat (RHEL / CentOS)" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm + - title: "MDCB v2.2" + path: /release-notes/mdcb-2.2 category: Page show: True - - title: "Bootstrap Tyk Enterprise Developer Portal" - path: /product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal - category: Page - show: True - - title: "Get started" + - title: "MDCB v2.1" + path: /release-notes/mdcb-2.1 + category: Page + show: True + - title: "MDCB v2.0" + path: /release-notes/mdcb-2.0 + category: Page + show: True + - title: "Tyk Pump (Open Source)" category: Directory show: True menu: - - title: "Tyk Enterprise Portal Concepts" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts + - title: "Overview" + path: /tyk-pump category: Page show: True - - title: "Connect to Tyk Dashboard" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider - category: Page + - title: "Getting started" + category: Directory show: True - - title: "Create API Products and plans" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan - category: Page + menu: + - title: "Tyk Pump Configuration" + path: /tyk-pump/configuration + category: Page + show: True + - title: "Setup Dashboard Analytics" + path: /tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config + category: Page + show: True + - title: "Graph Pump setup" + path: /tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/ + category: Page + show: True + - title: "API documentation" + category: Directory + show: False + menu: + - title: "Environment variables" + category: Directory show: True - - title: "Customize API Products' and plans' appearance" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans - category: Page + menu: + - title: "Tyk Pump Environment Variables" + path: /tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables + category: Page + show: True + - title: "Advanced configurations" + category: Directory show: True - - title: "Create API consumer organisation and catalog" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs - category: Page + menu: + - title: "Configure data sinks" + category: Directory + show: True + menu: + - title: "CSV Setup" + path: /product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv + category: Page + show: True + - title: "Datadog Setup" + path: /tyk-configuration-reference/tyk-pump-configuration/datadog + category: Page + show: True + - title: "Elasticsearch Setup" + path: /product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch + category: Page + show: True + - title: "Logz.io Setup" + path: /product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio + category: Page + show: True + - title: "Moesif Setup" + path: /tyk-configuration-reference/tyk-pump-configuration/moesif + category: Page + show: True + - title: "Splunk Setup" + path: /tyk-configuration-reference/tyk-pump-configuration/splunk + category: Page + show: True + - title: "Tyk Analytics Record Fields" + path: /tyk-stack/tyk-pump/tyk-analytics-record-fields/ + category: Page + show: True + - title: "Monitor your APIs with Prometheus" + path: /tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus + category: Page + show: True + - title: "Setup Prometheus Pump" + path: /product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump + category: Page + show: True + - title: "Capping Analytics Data Storage" + path: /tyk-stack/tyk-manager/analytics/capping-analytics-data-storage + category: Page + show: True + - title: "Separated Analytics Storage" + path: /tyk-stack/tyk-pump/separated-analytics-storage + category: Page + show: True + - title: "Troubleshooting" + category: Directory show: True - - title: "Customize the sign-up form" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form + menu: + - title: "Capturing detailed logs" + path: /tyk-stack/tyk-pump/useful-debug-modes + category: Page + show: True + - title: "“Connection dropped, connecting...“" + path: /troubleshooting/tyk-pump/connection-dropped-connecting + category: Page + show: True + - title: "Data Seen in Log Browser but No Reports" + path: /troubleshooting/tyk-pump/data-in-log-browser-no-reports + category: Page + show: True + - title: "“No Elasticsearch node available“" + path: /troubleshooting/tyk-pump/no-elasticsearch-node-available + category: Page + show: True + - title: "Tyk Pump Panic “stack exceeds 1000000000-byte limit“" + path: /troubleshooting/tyk-pump/panic-stack-exceeds-1000000000-byte-limit + category: Page + show: True + - title: "“Pump overloaded“" + path: /troubleshooting/tyk-pump/pump-overloaded + category: Page + show: True + - title: "Tyk Pump Graceful Shutdown" + path: /tyk-stack/tyk-pump/tyk-pump-configuration/graceful-shutdowm + category: Page + show: True + - title: "Release notes" + category: Directory + show: False + menu: + - title: "Changelog" + category: Page + show: False + - title: "Old releases" + category: Directory + show: False + menu: + - title: "Release highlights and upgrades" + category: Directory + show: False + menu: + - title: "Supported Backends" + path: /tyk-stack/tyk-pump/other-data-stores category: Page show: True - - title: "Setup email notifications" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications - category: Page + - title: "Release notes" + category: Directory show: True - - title: "Manage API consumers" + menu: + - title: "Pump v1.11" + path: /product-stack/tyk-pump/release-notes/pump-1.11 + category: Page + show: True + - title: "Pump v1.10" + path: /product-stack/tyk-pump/release-notes/pump-1.10 + category: Page + show: True + - title: "Pump v1.9" + path: /product-stack/tyk-pump/release-notes/pump-1.9 + category: Page + show: True + - title: "Pump v1.8" + path: /release-notes/pump-1.8 + category: Page + show: True + - title: "Tyk Operator (Open Source)" category: Directory show: True menu: - - title: "Add Organisations" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations - category: Page - show: True - - title: "Approve Self Registering Requests" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests - category: Page + - title: "Key Concepts" + category: Directory show: True - - title: "Enable single sign on for admin users and developers" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso - category: Page + menu: + - title: "Operator Reconciliation" + path: /tyk-stack/tyk-operator/tyk-operator-reconciliation + category: Page + show: True + - title: "Operator User" + path: /product-stack/tyk-operator/key-concepts/operator-user + category: Page + show: True + - title: "Operator Context" + path: /product-stack/tyk-operator/key-concepts/operator-context + category: Page + show: True + - title: "Advanced configurations" + category: Directory show: True - - title: "Invite Codes" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes - category: Page + menu: + - title: "Migration to Tyk Operator" + path: /tyk-stack/tyk-operator/migration + category: Page + show: True + - title: "Configure Tyk Operator as Ingress Controller" + path: /product-stack/tyk-operator/tyk-ingress-controller + category: Page + show: True + - title: "Manage Multiple Organisations With OperatorContext" + path: /product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations + category: Page + show: True + - title: "Manage API Ownership with OperatorContext" + path: /product-stack/tyk-operator/getting-started/tyk-operator-api-ownership + category: Page + show: True + - title: "Reference" + category: Directory show: True - - title: "Manage API Consumer organisations" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations - category: Page + menu: + - title: "Version compatibility" + path: /product-stack/tyk-operator/reference/version-compatibility + category: Page + show: True + - title: "Release notes" + category: Directory show: True - - title: "Manage API Consumers" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers + menu: + - title: "Overview" + path: /product-stack/tyk-operator/release-notes/overview + category: Page + show: True + - title: "Tyk Operator v0.18" + path: /product-stack/tyk-operator/release-notes/operator-0.18 + category: Page + show: True + - title: "Tyk Operator v0.17" + path: /product-stack/tyk-operator/release-notes/operator-0.17 + category: Page + show: True + - title: "Tyk Operator v0.16" + path: /product-stack/tyk-operator/release-notes/operator-0.16 + category: Page + show: True + - title: "Tyk Streams" + category: Directory + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-streaming/overview category: Page show: True - - title: "Manage API Users" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users + - title: "Glossary" + path: /product-stack/tyk-streaming/glossary category: Page show: True - - title: "Manage Catalogues" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues + - title: "Key Concepts" + path: /product-stack/tyk-streaming/key-concepts category: Page show: True - - title: "Managing Access" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access + - title: "Quick Start" + path: /product-stack/tyk-streaming/getting-started category: Page - show: True - - title: "Developer API Consumer Portal" + show: false + - title: "Configuration" category: Directory show: True menu: - - title: "Overview" - path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal + - title: "Overview" + path: /product-stack/tyk-streaming/configuration/overview + category: Page + show: True + - title: "Inputs" + category: Directory + show: True + menu: + - title: "Amqp_0_9" + path: /product-stack/tyk-streaming/configuration/inputs/amqp-0-9 + category: Page + show: True + - title: "Amqp_1" + path: /product-stack/tyk-streaming/configuration/inputs/amqp-1 + category: Page + show: True + - title: "Broker" + path: /product-stack/tyk-streaming/configuration/inputs/broker + category: Page + show: True + - title: "Http Server" + path: /product-stack/tyk-streaming/configuration/inputs/http-server + category: Page + show: True + - title: "Kafka" + path: /product-stack/tyk-streaming/configuration/inputs/kafka + category: Page + show: True + - title: "Kafka Franz" + path: /product-stack/tyk-streaming/configuration/inputs/kafka-franz + category: Page + show: True + - title: "MQTT" + path: /product-stack/tyk-streaming/configuration/inputs/mqtt + category: Page + show: True + - title: "Nats" + path: /product-stack/tyk-streaming/configuration/inputs/nats + category: Page + show: True + - title: "NSQ" + path: /product-stack/tyk-streaming/configuration/inputs/nsq + category: Page + show: True + - title: "Redis PubSub" + path: /product-stack/tyk-streaming/configuration/inputs/redis-pubsub + category: Page + show: True + - title: "Outputs" + category: Directory + show: True + menu: + - title: "Amqp_0_9" + path: /product-stack/tyk-streaming/configuration/outputs/amqp-0-9 + category: Page + show: True + - title: "Amqp_1" + path: /product-stack/tyk-streaming/configuration/outputs/amqp-1 + category: Page + show: True + - title: "Broker" + path: /product-stack/tyk-streaming/configuration/outputs/broker + category: Page + show: True + - title: "Drop on" + path: /product-stack/tyk-streaming/configuration/outputs/drop_on + category: Page + show: True + - title: "Fallback" + path: /product-stack/tyk-streaming/configuration/outputs/fallback + category: Page + show: True + - title: "Http Server" + path: /product-stack/tyk-streaming/configuration/outputs/http-server + category: Page + show: True + - title: "Kafka" + path: /product-stack/tyk-streaming/configuration/outputs/kafka + category: Page + show: True + - title: "Kafka Franz" + path: /product-stack/tyk-streaming/configuration/outputs/kafka-franz + category: Page + show: True + - title: "Nats" + path: /product-stack/tyk-streaming/configuration/outputs/nats + category: Page + show: True + - title: "NSQ" + path: /product-stack/tyk-streaming/configuration/outputs/nsq + category: Page + show: True + - title: "MQTT" + path: /product-stack/tyk-streaming/configuration/outputs/mqtt + category: Page + show: True + - title: "Redis PubSub" + path: /product-stack/tyk-streaming/configuration/outputs/redis-pubsub + category: Page + show: True + - title: "Retry" + path: /product-stack/tyk-streaming/configuration/outputs/retry + category: Page + show: True + - title: "Sleep" + path: /product-stack/tyk-streaming/configuration/processors/sleep + category: Page + show: True + - title: "Stdout" + path: /product-stack/tyk-streaming/configuration/outputs/stdout + category: Page + show: True + - title: "Processors" + category: "Directory" + show: True + menu: + - title: "Avro" + path: /product-stack/tyk-streaming/configuration/processors/avro + category: Page + show: True + - title: "AWS Lambda" + path: /product-stack/tyk-streaming/configuration/processors/aws-lambda + category: Page + show: True + - title: "Bloblang" + path: /product-stack/tyk-streaming/configuration/processors/bloblang + category: Page + show: True + - title: "Branch" + path: /product-stack/tyk-streaming/configuration/processors/branch + category: Page + show: True + - title: "Bounds Check" + path: /product-stack/tyk-streaming/configuration/processors/bounds-check + category: Page + show: True + - title: "Cache" + path: /product-stack/tyk-streaming/configuration/processors/cache + category: Page + show: True + - title: "Cached" + path: /product-stack/tyk-streaming/configuration/processors/cached + category: Page + show: True + - title: "Catch" + path: /product-stack/tyk-streaming/configuration/processors/catch + category: Page + show: True + - title: "Dedupe" + path: /product-stack/tyk-streaming/configuration/processors/dedupe + category: Page + show: True + - title: "For Each" + path: /product-stack/tyk-streaming/configuration/processors/for-each + category: Page + show: True + - title: "Group By" + path: /product-stack/tyk-streaming/configuration/processors/group-by + category: Page + show: True + - title: "Group By Value" + path: /product-stack/tyk-streaming/configuration/processors/group-by-value + category: Page + show: True + - title: "Insert Part" + path: /product-stack/tyk-streaming/configuration/processors/insert-part + category: Page + show: True + - title: "JMESPath" + path: /product-stack/tyk-streaming/configuration/processors/jmes-path + category: Page + show: True + - title: "Jq" + path: /product-stack/tyk-streaming/configuration/processors/jq + category: Page + show: True + - title: "JSON Schema" + path: /product-stack/tyk-streaming/configuration/processors/json-schema + category: Page + show: True + - title: "Log" + path: /product-stack/tyk-streaming/configuration/processors/log + category: Page + show: True + - title: "Mapping" + path: /product-stack/tyk-streaming/configuration/processors/mapping + category: Page + show: True + - title: "Msgpack" + path: /product-stack/tyk-streaming/configuration/processors/msgpack + category: Page + show: True + - title: "Mutation" + path: /product-stack/tyk-streaming/configuration/processors/mutation + category: Page + show: True + - title: "Noop" + path: /product-stack/tyk-streaming/configuration/processors/noop + category: Page + show: True + - title: "Parallel" + path: /product-stack/tyk-streaming/configuration/processors/parallel + category: Page + show: True + - title: "Parse Log" + path: /product-stack/tyk-streaming/configuration/processors/parse-log + category: Page + show: True + - title: "Processors" + path: /product-stack/tyk-streaming/configuration/processors/processors + category: Page + show: True + - title: "Protobuf" + path: /product-stack/tyk-streaming/configuration/processors/protobuf + category: Page + show: True + - title: "Rate Limit" + path: /product-stack/tyk-streaming/configuration/processors/rate-limit + category: Page + show: True + - title: "Redis" + path: /product-stack/tyk-streaming/configuration/processors/redis + category: Page + show: True + - title: "Retry" + path: /product-stack/tyk-streaming/configuration/processors/retry + category: Page + show: True + - title: "Schema Registry Decode" + path: /product-stack/tyk-streaming/configuration/processors/schema-registry-decode + category: Page + show: True + - title: "Schema Registry Encode" + path: /product-stack/tyk-streaming/configuration/processors/schema-registry-encode + category: Page + show: True + - title: "Select Parts" + path: /product-stack/tyk-streaming/configuration/processors/select-parts + category: Page + show: True + - title: "Split" + path: /product-stack/tyk-streaming/configuration/processors/split + category: Page + show: True + - title: "Switch" + path: /product-stack/tyk-streaming/configuration/processors/switch + category: Page + show: True + - title: "Try" + path: /product-stack/tyk-streaming/configuration/processors/try + category: Page + show: True + - title: "While" + path: /product-stack/tyk-streaming/configuration/processors/while + catgeory: Page + show: True + - title: "Common Configurations" + category: Directory + show: True + menu: + - title: "Batching" + path: /product-stack/tyk-streaming/configuration/common-configuration/batching category: Page show: True - - title: "Register for a Portal" - path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal + - title: "Error Handling" + path: /product-stack/tyk-streaming/configuration/common-configuration/error-handling category: Page show: True - - title: "Reset Password" - path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password + - title: "Field Paths" + path: /product-stack/tyk-streaming/configuration/common-configuration/field-paths category: Page show: True - - title: "Access an API Product" - path: /tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product + - title: "Interpolation" + path: /product-stack/tyk-streaming/configuration/common-configuration/interpolation category: Page show: True - - title: "Manage API access" - category: Directory - show: True - menu: - - title: "API Access" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access - category: Page - show: True - - title: "Approve or reject provisioning requests" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests - category: Page - show: True - - title: "Manage Apps and Credentials" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/manage-apps-credentials - category: Page - show: True - - title: "Dynamic client registration" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration - category: Page - show: True - - title: "Configure rate limit keys" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys - category: Page - show: True - - title: "Create Get started guides for your API Products" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products - category: Page - show: True - - title: "Customise the portal" - category: Directory - show: True - menu: - - title: "Customising UI appearance" + - title: "Windowed Processing" + path: /product-stack/tyk-streaming/configuration/common-configuration/windowed_processing + category: Page + show: True + - title: "Guides" category: Directory show: True menu: - - title: "Quick Customisation" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation - category: Page - show: True - - title: "Complete customisation" + - title: "Bloblang" category: Directory show: True menu: - title: "Overview" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation + path: "/product-stack/tyk-streaming/guides/bloblang/overview" category: Page show: True - - title: "Developer Workflow" + - title: "Advanced" + path: "/product-stack/tyk-streaming/guides/bloblang/advanced" + category: Page + show: True + - title: "Arithmetic" + path: "/product-stack/tyk-streaming/guides/bloblang/arithmetic" + category: Page + show: True + - title: "Functions" + path: "/product-stack/tyk-streaming/guides/bloblang/functions" + category: Page + show: True + - title: "Methods" category: Directory show: True menu: - title: "Overview" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow + path: "/product-stack/tyk-streaming/guides/bloblang/methods/overview" category: Page show: True - - title: "File Structure and Concepts" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts + - title: "General" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/general" category: Page show: True - - title: "Create a New Page Template" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template + - title: "Encoding and encryption" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption" category: Page show: True - - title: "Email Workflow" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/email-customization - category: Page - show: True - - title: "Content Manager Workflow" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow + - title: "GeoIP" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/geoip" category: Page show: True - - title: "Edit Manage Page Content" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content + - title: "JSON web tokens" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens" category: Page show: True - - title: "Menus Customisation" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/menus-customisation + - title: "Number Manipulation" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/numbers" category: Page show: True - - title: "Upgrade the portal theme" - path: /product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades - category: Page - show: True - - title: "Customize data models" - path: /product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model - category: Page - show: True - - title: "Configure webhooks" - path: /product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks - category: Page - show: True - - title: "Environment variables" - category: Directory - show: True - menu: - - title: "Configure Tyk Enterprise Developer Portal" - path: /product-stack/tyk-enterprise-developer-portal/deploy/configuration - category: Page - show: True - - title: "Release notes" - category: Directory - show: True - menu: - - title: "Version 1.10.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0 - category: Page - show: True - - title: "Version 1.9.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0 - category: Page - show: True - - title: "Version 1.8.5" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5 - category: Page - show: True - - title: "Version 1.8.4" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4 - category: Page - show: True - - title: "Version 1.8.3" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3 - category: Page - show: True - - title: "Version 1.8.2" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2 - category: Page - show: True - - title: "Version 1.8.1" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1 - category: Page - show: True - - title: "Version 1.8.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0 - category: Page - show: True - - title: "Version 1.7.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0 - category: Page - show: True - - title: "Version 1.6.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0 - category: Page - show: True - - title: "Version 1.5.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0 - category: Page - show: True - - title: "Version 1.4.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0 - category: Page - show: True - - title: "Version 1.3.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0 - category: Page - show: True - - title: "Version 1.2.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0 - category: Page - show: True - - title: "Version 1.1.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0 + - title: "String Manipulation" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/strings" + category: Page + show: True + - title: "Objects and Arrays" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays" + category: Page + show: True + - title: "Regular expressions" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions" + category: Page + show: True + - title: "Parsing" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/parsing" + category: Page + show: True + - title: "Timestamp Manipulation" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps" + category: Page + show: True + - title: "Type Coercion" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion" + category: Page + show: True + - title: "Rate Limits" + category: Directory + show: true + menu: + - title: "Overview" + path: /product-stack/tyk-streaming/configuration/rate-limits/overview category: Page show: True - - title: "API documentation" - category: Directory - show: True - menu: - - title: "OpenAPI document for the admin APIs" - path: /product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api + - title: "Local" + path: /product-stack/tyk-streaming/configuration/rate-limits/local category: Page show: True - - title: "List of all endpoints" - category: Directory - show: True - menu: - - title: "Version 1.9.0" - path: /product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints - category: Page - show: True - - title: "Troubleshooting" - category: Directory - show: False - menu: - - title: "Tyk Multi Data Centre Bridge" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-multi-data-centre - category: Page - show: True - - title: "Getting started" - category: Directory - show: True - menu: - - title: "MDCB Components" - path: /tyk-multi-data-centre/mdcb-components - category: Page - show: True - - title: "Minimising latency with MDCB" - path: /tyk-multi-data-centre/mdcb-example-minimising-latency - category: Page - show: True - - title: "Setup MDCB Control Plane" - path: /tyk-multi-data-centre/setup-controller-data-centre - category: Page - show: True - - title: "Setup MDCB Data Plane" - path: /tyk-multi-data-centre/setup-worker-data-centres - category: Page - show: True - - title: "Advanced configurations" - category: Directory - show: True - menu: - - title: "Synchroniser feature with MDCB" - path: /product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser - category: Page - show: True - - title: "API documentation" - category: Directory - show: True - menu: - - title: "MDCB API Reference" - path: /tyk-mdcb-api - category: Page - show: True - - title: "Environment variables" - category: Directory - show: True - menu: - - title: "MDCB Configuration options" - path: /tyk-multi-data-centre/mdcb-configuration-options - category: Page - show: True - - title: "Troubleshooting" - category: Directory - show: False - menu: - - title: "Release notes" - category: Directory - show: True - menu: - - title: "MDCB v2.7" - path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.7 - category: Page - show: True - - title: "MDCB v2.6" - path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.6 - category: Page - show: True - - title: "MDCB v2.5" - path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.5 - category: Page - show: True - - title: "MDCB v2.4" - path: /product-stack/tyk-enterprise-mdcb/release-notes/version-2.4 - category: Page - show: True - - title: "MDCB v2.3" - path: /release-notes/mdcb-2.3 - category: Page - show: True - - title: "MDCB v2.2" - path: /release-notes/mdcb-2.2 - category: Page - show: True - - title: "MDCB v2.1" - path: /release-notes/mdcb-2.1 - category: Page - show: True - - title: "MDCB v2.0" - path: /release-notes/mdcb-2.0 - category: Page - show: True - - title: "Tyk Pump (Open Source)" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-pump - category: Page - show: True - - title: "Getting started" - category: Directory - show: True - menu: - - title: "Tyk Pump Configuration" - path: /tyk-pump/configuration + - title: "Deployment Considerations" + path: /product-stack/tyk-streaming/deployment-considerations category: Page show: True - - title: "Setup Dashboard Analytics" - path: /tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config - category: Page - show: True - - title: "Graph Pump setup" - path: /tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/ - category: Page + - title: "Developer Portal Integration" + path: /product-stack/tyk-streaming/developer-portal-integration + category: true show: True - - title: "API documentation" - category: Directory - show: False - menu: - - title: "Environment variables" - category: Directory - show: True - menu: - - title: "Tyk Pump Environment Variables" - path: /tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables + - title: "Troubleshooting & FAQs" + path: /product-stack/tyk-streaming/troubleshooting category: Page show: True - - title: "Advanced configurations" + - title: "Tyk Sync (Open Source)" category: Directory show: True menu: - - title: "Configure data sinks" + - title: "Tutorials" category: Directory show: True menu: - - title: "CSV Setup" - path: /product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv - category: Page - show: True - - title: "Datadog Setup" - path: /tyk-configuration-reference/tyk-pump-configuration/datadog - category: Page - show: True - - title: "Elasticsearch Setup" - path: /product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch - category: Page - show: True - - title: "Logz.io Setup" - path: /product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio - category: Page - show: True - - title: "Moesif Setup" - path: /tyk-configuration-reference/tyk-pump-configuration/moesif + - title: "Keeping and updating API Definitions locally" + path: /product-stack/tyk-sync/tutorials/tutorial-update-api-configurations category: Page show: True - - title: "Splunk Setup" - path: /tyk-configuration-reference/tyk-pump-configuration/splunk + - title: "Synchronising API configurations with GitHub Actions" + path: /product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations category: Page show: True - - title: "Tyk Analytics Record Fields" - path: /tyk-stack/tyk-pump/tyk-analytics-record-fields/ + - title: "Backing up API configurations with Github Actions" + path: /product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations category: Page show: True - - title: "Monitor your APIs with Prometheus" - path: /tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus - category: Page - show: True - - title: "Setup Prometheus Pump" - path: /product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump - category: Page - show: True - - title: "Capping Analytics Data Storage" - path: /tyk-stack/tyk-manager/analytics/capping-analytics-data-storage - category: Page - show: True - - title: "Separated Analytics Storage" - path: /tyk-stack/tyk-pump/separated-analytics-storage - category: Page + - title: "Release notes" + category: Directory show: True - - title: "Troubleshooting" + menu: + - title: "Tyk Sync v1.5" + path: /product-stack/tyk-sync/release-notes/sync-1.5 + category: Page + show: True + - title: "Tyk Sync v1.4" + path: /product-stack/tyk-sync/release-notes/sync-1.4 + category: Page + show: True + - title: "Tyk Identity Broker (Open Source)" category: Directory show: True menu: - - title: "Capturing detailed logs" - path: /tyk-stack/tyk-pump/useful-debug-modes - category: Page - show: True - - title: "“Connection dropped, connecting...“" - path: /troubleshooting/tyk-pump/connection-dropped-connecting - category: Page - show: True - - title: "Data Seen in Log Browser but No Reports" - path: /troubleshooting/tyk-pump/data-in-log-browser-no-reports - category: Page - show: True - - title: "“No Elasticsearch node available“" - path: /troubleshooting/tyk-pump/no-elasticsearch-node-available - category: Page - show: True - - title: "Tyk Pump Panic “stack exceeds 1000000000-byte limit“" - path: /troubleshooting/tyk-pump/panic-stack-exceeds-1000000000-byte-limit - category: Page - show: True - - title: "“Pump overloaded“" - path: /troubleshooting/tyk-pump/pump-overloaded - category: Page - show: True - - title: "Tyk Pump Graceful Shutdown" - path: /tyk-stack/tyk-pump/tyk-pump-configuration/graceful-shutdowm + - title: "Overview" + path: /tyk-identity-broker category: Page show: True - - title: "Release notes" - category: Directory - show: False - menu: - - title: "Changelog" - category: Page - show: False - - title: "Old releases" - category: Directory - show: False - menu: - - title: "Release highlights and upgrades" + - title: "Getting started" category: Directory - show: False + show: True menu: - - title: "Supported Backends" - path: /tyk-stack/tyk-pump/other-data-stores - category: Page - show: True - - title: "Release notes" - category: Directory - show: True - menu: - - title: "Pump v1.11" - path: /product-stack/tyk-pump/release-notes/pump-1.11 - category: Page - show: True - - title: "Pump v1.10" - path: /product-stack/tyk-pump/release-notes/pump-1.10 - category: Page - show: True - - title: "Pump v1.9" - path: /product-stack/tyk-pump/release-notes/pump-1.9 + - title: "Getting started with TIB" + path: /tyk-identity-broker/getting-started category: Page show: True - - title: "Pump v1.8" - path: /release-notes/pump-1.8 + - title: "TIB implementation with GitHub and OAuth 2.0" + path: /tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth category: Page show: True - - title: "Tyk Operator (Open Source)" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-operator - category: Page - show: True - - title: "Key Concepts" - category: Directory - show: True - menu: - # - title: "Overview" - # path: /product-stack/tyk-operator/key-concepts/key-concepts - # category: Page - # show: True - - title: "Custom Resources" - path: /product-stack/tyk-operator/key-concepts/custom-resources + - title: "TIB Profiles" + path: /tyk-stack/tyk-identity-broker/about-profiles category: Page show: True - - title: "Operator Reconciliation" - path: /tyk-stack/tyk-operator/tyk-operator-reconciliation + - title: "API Documentation" + path: /tyk-identity-broker/tib-rest-api category: Page show: True - - title: "Operator User" - path: /product-stack/tyk-operator/key-concepts/operator-user - category: Page - show: True - - title: "Operator Context" - path: /product-stack/tyk-operator/key-concepts/operator-context - category: Page - show: True - - title: "Getting Started" - category: Directory - show: True - menu: - - title: "Installing Tyk Operator" - path: /tyk-stack/tyk-operator/installing-tyk-operator - category: Page - show: True - - title: "Create an API" - path: /tyk-stack/tyk-operator/create-an-api - category: Page - show: True - - title: "Access an API" - path: /tyk-stack/tyk-operator/access-an-api - category: Page - show: True - - title: "Secure an API" - path: /tyk-stack/tyk-operator/secure-an-api - category: Page - show: True - - title: "Publish an API" - path: /tyk-stack/tyk-operator/publish-an-api - category: Page + - title: "Advanced config" + category: Directory show: True - - title: "Advanced configurations" + menu: + - title: "Tyk Identity Broker Configuration Options" + path: /tyk-configuration-reference/tyk-identity-broker-configuration + category: Page + show: True + - title: "Tyk Helm Charts (Open Source)" category: Directory show: True menu: - - title: "Migration to Tyk Operator" - path: /tyk-stack/tyk-operator/migration - category: Page - show: True - - title: "Configure Tyk Operator as Ingress Controller" - path: /product-stack/tyk-operator/tyk-ingress-controller + - title: "Overview" + path: /product-stack/tyk-charts/overview category: Page show: True - - title: "Manage Multiple Organisations With OperatorContext" - path: /product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations + - title: "Tyk Stack Chart" + path: /product-stack/tyk-charts/tyk-stack-chart category: Page show: True - - title: "Manage API Ownership with OperatorContext" - path: /product-stack/tyk-operator/getting-started/tyk-operator-api-ownership + - title: "Tyk Control Plane Chart" + path: /product-stack/tyk-charts/tyk-control-plane-chart category: Page show: True - - title: "Troubleshooting" - category: Directory - show: True - menu: - - title: "API changes not applied" - path: /product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied + - title: "Tyk Data Plane Chart" + path: /product-stack/tyk-charts/tyk-data-plane-chart category: Page show: True - - title: "Understanding reconciliation status" - path: /product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting + - title: "Tyk Open Source Chart" + path: /product-stack/tyk-charts/tyk-oss-chart category: Page show: True - - title: "Reference" - category: Directory - show: True - menu: - - title: "Version compatibility" - path: /product-stack/tyk-operator/reference/version-compatibility - category: Page + - title: "Release Notes" + category: Directory show: True - - title: "Release notes" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-operator/release-notes/overview + menu: + - title: "Tyk Charts 1.6" + path: /product-stack/tyk-charts/release-notes/version-1.6 category: Page show: True - - title: "Tyk Operator v0.18" - path: /product-stack/tyk-operator/release-notes/operator-0.18 + - title: "Tyk Charts 1.5" + path: /product-stack/tyk-charts/release-notes/version-1.5 category: Page show: True - - title: "Tyk Operator v0.17" - path: /product-stack/tyk-operator/release-notes/operator-0.17 + - title: "Tyk Charts 1.4" + path: /product-stack/tyk-charts/release-notes/version-1.4 category: Page show: True - - title: "Tyk Operator v0.16" - path: /product-stack/tyk-operator/release-notes/operator-0.16 + - title: "Tyk Charts 1.3" + path: /product-stack/tyk-charts/release-notes/version-1.3 category: Page show: True - - title: "Tyk Streams" + + - title: "Developer Support" + path: /frequently-asked-questions/faq category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-streaming/overview + path: /frequently-asked-questions/faq category: Page show: True - - title: "Glossary" - path: /product-stack/tyk-streaming/glossary + - title: "Tyk APIs Reference" + path: /tyk-apis category: Page show: True - - title: "Key Concepts" - path: /product-stack/tyk-streaming/key-concepts + - title: "SDK" + category: Directory + show: False + menu: + - title: "CLI" + category: Directory + show: False + menu: + - title: "Environment Variables and Configs" + path: /tyk-environment-variables category: Page show: True - - title: "Quick Start" - path: /product-stack/tyk-streaming/getting-started - category: Page - show: false - - title: "Configuration" + - title: "Debugging Series" category: Directory show: True menu: - title: "Overview" - path: /product-stack/tyk-streaming/configuration/overview + path: /debugging-series/debugging-series category: Page show: True - - title: "Inputs" - category: Directory + - title: "MongoDB Debugging" + path: /debugging-series/mongodb-debugging + category: Page show: True - menu: - - title: "Amqp_0_9" - path: /product-stack/tyk-streaming/configuration/inputs/amqp-0-9 - category: Page - show: True - - title: "Amqp_1" - path: /product-stack/tyk-streaming/configuration/inputs/amqp-1 - category: Page - show: True - - title: "Broker" - path: /product-stack/tyk-streaming/configuration/inputs/broker - category: Page - show: True - - title: "Generate" - path: /product-stack/tyk-streaming/configuration/inputs/generate - category: Page - show: True - - title: "Http Client" - path: /product-stack/tyk-streaming/configuration/inputs/http-client - category: Page - show: True - - title: "Http Server" - path: /product-stack/tyk-streaming/configuration/inputs/http-server - category: Page - show: True - - title: "Kafka" - path: /product-stack/tyk-streaming/configuration/inputs/kafka - category: Page - show: True - - title: "Kafka Franz" - path: /product-stack/tyk-streaming/configuration/inputs/kafka-franz - category: Page - show: True - - title: "MQTT" - path: /product-stack/tyk-streaming/configuration/inputs/mqtt - category: Page - show: True - - title: "Nats" - path: /product-stack/tyk-streaming/configuration/inputs/nats - category: Page - show: True - - title: "NSQ" - path: /product-stack/tyk-streaming/configuration/inputs/nsq - category: Page - show: True - - title: "Redis PubSub" - path: /product-stack/tyk-streaming/configuration/inputs/redis-pubsub - category: Page - show: True - - title: "Outputs" - category: Directory + - title: "Tyk Self-Managed Debugging" + path: /developer-support/debugging-series/debugging-selfmanaged + category: Page show: True - menu: - - title: "Amqp_0_9" - path: /product-stack/tyk-streaming/configuration/outputs/amqp-0-9 - category: Page - show: True - - title: "Amqp_1" - path: /product-stack/tyk-streaming/configuration/outputs/amqp-1 - category: Page - show: True - - title: "Broker" - path: /product-stack/tyk-streaming/configuration/outputs/broker - category: Page - show: True - - title: "Drop on" - path: /product-stack/tyk-streaming/configuration/outputs/drop_on - category: Page - show: True - - title: "Fallback" - path: /product-stack/tyk-streaming/configuration/outputs/fallback - category: Page - show: True - - title: "Http Client" - path: /product-stack/tyk-streaming/configuration/outputs/http-client - category: Page - show: True - - title: "Http Server" - path: /product-stack/tyk-streaming/configuration/outputs/http-server - category: Page - show: True - - title: "Kafka" - path: /product-stack/tyk-streaming/configuration/outputs/kafka - category: Page - show: True - - title: "Kafka Franz" - path: /product-stack/tyk-streaming/configuration/outputs/kafka-franz - category: Page - show: True - - title: "Nats" - path: /product-stack/tyk-streaming/configuration/outputs/nats - category: Page - show: True - - title: "NSQ" - path: /product-stack/tyk-streaming/configuration/outputs/nsq - category: Page - show: True - - title: "MQTT" - path: /product-stack/tyk-streaming/configuration/outputs/mqtt - category: Page - show: True - - title: "Redis PubSub" - path: /product-stack/tyk-streaming/configuration/outputs/redis-pubsub - category: Page - show: True - - title: "Retry" - path: /product-stack/tyk-streaming/configuration/outputs/retry + - title: "Performance Benchmarking" + category: Directory + show: False + menu: + - title: "Special Releases and Features" + category: Directory + show: True + menu: + - title: "Long Term Support Releases" + path: /developer-support/special-releases-and-features/long-term-support-releases category: Page show: True - - title: "Sleep" - path: /product-stack/tyk-streaming/configuration/processors/sleep + - title: "Lab Releases" + path: /developer-support/special-releases-and-features/lab-releases category: Page show: True - - title: "Stdout" - path: /product-stack/tyk-streaming/configuration/outputs/stdout + - title: "Early Access Features" + path: /developer-support/special-releases-and-features/early-access-features category: Page show: True - - title: "Sync Response" - path: /product-stack/tyk-streaming/configuration/outputs/sync-response + - title: "FIPS Releases" + path: /developer-support/special-releases-and-features/fips-release category: Page show: True - - title: "Processors" - category: "Directory" + - title: "Frequently Asked Questions" + category: Directory + show: True + menu: + - title: "Overview" + path: /frequently-asked-questions + category: Page show: True - menu: - - title: "Avro" - path: /product-stack/tyk-streaming/configuration/processors/avro - category: Page - show: True - - title: "AWS Lambda" - path: /product-stack/tyk-streaming/configuration/processors/aws-lambda - category: Page - show: True - - title: "Bloblang" - path: /product-stack/tyk-streaming/configuration/processors/bloblang - category: Page - show: True - - title: "Branch" - path: /product-stack/tyk-streaming/configuration/processors/branch - category: Page - show: True - - title: "Bounds Check" - path: /product-stack/tyk-streaming/configuration/processors/bounds-check - category: Page - show: True - - title: "Cache" - path: /product-stack/tyk-streaming/configuration/processors/cache - category: Page - show: True - - title: "Cached" - path: /product-stack/tyk-streaming/configuration/processors/cached - category: Page - show: True - - title: "Catch" - path: /product-stack/tyk-streaming/configuration/processors/catch - category: Page - show: True - - title: "Dedupe" - path: /product-stack/tyk-streaming/configuration/processors/dedupe - category: Page - show: True - - title: "For Each" - path: /product-stack/tyk-streaming/configuration/processors/for-each - category: Page - show: True - - title: "Group By" - path: /product-stack/tyk-streaming/configuration/processors/group-by - category: Page - show: True - - title: "Group By Value" - path: /product-stack/tyk-streaming/configuration/processors/group-by-value - category: Page - show: True - - title: "Http" - path: /product-stack/tyk-streaming/configuration/processors/http - category: Page - show: True - - title: "Insert Part" - path: /product-stack/tyk-streaming/configuration/processors/insert-part - category: Page - show: True - - title: "JMESPath" - path: /product-stack/tyk-streaming/configuration/processors/jmes-path - category: Page - show: True - - title: "Jq" - path: /product-stack/tyk-streaming/configuration/processors/jq - category: Page - show: True - - title: "JSON Schema" - path: /product-stack/tyk-streaming/configuration/processors/json-schema - category: Page - show: True - - title: "Log" - path: /product-stack/tyk-streaming/configuration/processors/log - category: Page - show: True - - title: "Mapping" - path: /product-stack/tyk-streaming/configuration/processors/mapping - category: Page - show: True - - title: "Msgpack" - path: /product-stack/tyk-streaming/configuration/processors/msgpack - category: Page - show: True - - title: "Mutation" - path: /product-stack/tyk-streaming/configuration/processors/mutation - category: Page - show: True - - title: "Noop" - path: /product-stack/tyk-streaming/configuration/processors/noop - category: Page - show: True - - title: "Parallel" - path: /product-stack/tyk-streaming/configuration/processors/parallel - category: Page - show: True - - title: "Parse Log" - path: /product-stack/tyk-streaming/configuration/processors/parse-log - category: Page - show: True - - title: "Processors" - path: /product-stack/tyk-streaming/configuration/processors/processors - category: Page - show: True - - title: "Protobuf" - path: /product-stack/tyk-streaming/configuration/processors/protobuf - category: Page - show: True - - title: "Rate Limit" - path: /product-stack/tyk-streaming/configuration/processors/rate-limit - category: Page - show: True - - title: "Redis" - path: /product-stack/tyk-streaming/configuration/processors/redis - category: Page - show: True - - title: "Retry" - path: /product-stack/tyk-streaming/configuration/processors/retry - category: Page - show: True - - title: "Schema Registry Decode" - path: /product-stack/tyk-streaming/configuration/processors/schema-registry-decode - category: Page - show: True - - title: "Schema Registry Encode" - path: /product-stack/tyk-streaming/configuration/processors/schema-registry-encode - category: Page - show: True - - title: "Select Parts" - path: /product-stack/tyk-streaming/configuration/processors/select-parts - category: Page - show: True - - title: "Split" - path: /product-stack/tyk-streaming/configuration/processors/split - category: Page - show: True - - title: "Switch" - path: /product-stack/tyk-streaming/configuration/processors/switch - category: Page - show: True - - title: "Sync Response" - path: /product-stack/tyk-streaming/configuration/processors/sync-response - category: Page - show: True - - title: "Try" - path: /product-stack/tyk-streaming/configuration/processors/try - category: Page - show: True - - title: "While" - path: /product-stack/tyk-streaming/configuration/processors/while - catgeory: Page - show: True - - title: "Workflow" - path: /product-stack/tyk-streaming/configuration/processors/workflow - category: Page - show: True - - title: "Scanners" - category: Directory + - title: "How to backup Tyk" + path: /frequently-asked-questions/how-to-backup-tyk + category: Page show: True - menu: - - title: "Overview" - path: /product-stack/tyk-streaming/configuration/scanners/overview - category: Page - show: true - - title: "CSV" - path: /product-stack/tyk-streaming/configuration/scanners/csv - category: Page - show: True - - title: "Line" - path: /product-stack/tyk-streaming/configuration/scanners/lines - category: Page - show: True - - title: "Regular Expression Matching" - path: /product-stack/tyk-streaming/configuration/scanners/re-match - category: Page - show: True - - title: "Switch" - path: /product-stack/tyk-streaming/configuration/scanners/switch - category: Page - show: True - - title: "Common Configurations" - category: Directory + - title: "How to backup Tyk Cloud deployment" + path: /frequently-asked-questions/how-to-backup-tyk-cloud-deployment + category: Page show: True - menu: - - title: "Batching" - path: /product-stack/tyk-streaming/configuration/common-configuration/batching - category: Page - show: True - - title: "Error Handling" - path: /product-stack/tyk-streaming/configuration/common-configuration/error-handling - category: Page - show: True - - title: "Field Paths" - path: /product-stack/tyk-streaming/configuration/common-configuration/field-paths - category: Page - show: True - - title: "Interpolation" - path: /product-stack/tyk-streaming/configuration/common-configuration/interpolation - category: Page - show: True - - title: "Processing Pipelines" - path: /product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines - category: Page - show: True - - title: "Resources" - path: /product-stack/tyk-streaming/configuration/common-configuration/resources - category: Page - show: True - - title: "Windowed Processing" - path: /product-stack/tyk-streaming/configuration/common-configuration/windowed_processing - category: Page - show: True - - title: "Guides" + - title: "What is the performance impact of analytics" + path: /developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics + category: Page + show: True + - title: "How to reduce CPU usage in a Redis Cluster" + path: /developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster + category: Page + show: True + - title: "Support SLA Policies" + path: /frequently-asked-questions/sla-policies + category: Page + show: True + - title: "“Error initialising system couldn't unmarshal config“ error" + path: /troubleshooting/tyk-installation/couldnt-unmarshal-config-error + category: Page + show: True + - title: "All tyk container logs show up under the error status in Datadog logs" + path: /frequently-asked-questions/datadog-logs-showup-as-errors + category: Page + show: True + - title: "Plugin Hub" + category: Page + show: False + - title: "Tyk Upgrade Guides" category: Directory show: True menu: - - title: "Bloblang" - category: Directory + - title: "Overview" + path: /upgrading-tyk + category: Page show: True + - title: "Preparations" + category: Directory + show: true menu: - - title: "Overview" - path: "/product-stack/tyk-streaming/guides/bloblang/overview" - category: Page - show: True - - title: "Advanced" - path: "/product-stack/tyk-streaming/guides/bloblang/advanced" + - title: "Upgrade guidelines" + path: /developer-support/upgrading-tyk/preparations/upgrade-guidelines category: Page show: True - - title: "Arithmetic" - path: "/product-stack/tyk-streaming/guides/bloblang/arithmetic" + - title: "Upgrade strategies" + path: /developer-support/upgrading-tyk/preparations/upgrade-strategies category: Page show: True - - title: "Functions" - path: "/product-stack/tyk-streaming/guides/bloblang/functions" - category: Page - show: True - - title: "Methods" - category: Directory + - title: "Deployment model" + category: Directory + show: True + menu: + - title: "Tyk Cloud upgrade guide" + category: Directory show: True menu: - - title: "Overview" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/overview" - category: Page - show: True - - title: "General" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/general" - category: Page - show: True - - title: "Encoding and encryption" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption" - category: Page - show: True - - title: "GeoIP" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/geoip" - category: Page - show: True - - title: "JSON web tokens" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens" + - title: "Tyk Cloud" + path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas category: Page show: True - - title: "Number Manipulation" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/numbers" + - title: "Tyk hybrid" + path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid category: Page show: True - - title: "String Manipulation" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/strings" + - title: "Go plugin" + path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin category: Page show: True - - title: "Objects and Arrays" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays" + - title: "Tyk Self Managed upgrade guide" + category: Directory + show: True + menu: + - title: "Overview" + path: /developer-support/upgrading-tyk/deployment-model/self-managed/overview category: Page show: True - - title: "Regular expressions" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions" + - title: "Docker" + path: /developer-support/upgrading-tyk/deployment-model/self-managed/docker category: Page show: True - - title: "Parsing" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/parsing" - category: Page + - title: "Helm Charts" + path: /developer-support/upgrading-tyk/deployment-model/self-managed/helm show: True - - title: "Timestamp Manipulation" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps" + - title: "Kubernetes" + path: /developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes category: Page show: True - - title: "Type Coercion" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion" - category: Page + - title: "Linux" + category: Directory show: True - - title: "Sync Response" - path: "/product-stack/tyk-streaming/guides/sync-responses" - category: Page - show: True - - title: "Rate Limits" - category: Directory - show: true - menu: - - title: "Overview" - path: /product-stack/tyk-streaming/configuration/rate-limits/overview - category: Page - show: True - - title: "Local" - path: /product-stack/tyk-streaming/configuration/rate-limits/local - category: Page - show: True - - title: "Deployment Considerations" - path: /product-stack/tyk-streaming/deployment-considerations + menu: + - title: "Debian" + path: /developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb + category: Page + show: True + - title: "Redhat (Cent OS)" + path: /developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm + category: Page + show: True + - title: "Open source upgrade guide" + category: Page + path: /developer-support/upgrading-tyk/deployment-model/open-source + show: True + - title: "Go plugins upgrade guide" + path: /developer-support/upgrading-tyk/go-plugins + category: Page + show: True + - title: "Backup APIs and Policies" + path: /developer-support/backups/backup-apis-and-policies category: Page show: True - - title: "Developer Portal Integration" - path: /product-stack/tyk-streaming/developer-portal-integration - category: true - show: True - - title: "Troubleshooting & FAQs" - path: /product-stack/tyk-streaming/troubleshooting + - title: "Latest Tyk Releases" + path: /developer-support/tyk-release-summary/overview category: Page show: True - - title: "Tyk Sync (Open Source)" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-sync/overview - category: Page + - title: "Documentation Projects" + category: Directory show: True - - title: "Installing and running Tyk Sync" - path: /product-stack/tyk-sync/installing-tyk-sync + menu: + - title: "Inclusive Naming Initiative (INI)" + path: /developer-support/documentation-projects/inclusive-naming + category: Page + show: True + - title: "Contribute to Tyk Docs" + path: /contribute category: Page show: True - - title: "Tutorials" + - title: "Deprecated pages" category: Directory - show: True + show: False menu: - - title: "Keeping and updating API Definitions locally" - path: /product-stack/tyk-sync/tutorials/tutorial-update-api-configurations + - title: "Dashboard" + path: /basic-config-and-security/security/dashboard category: Page show: True - - title: "Synchronising API configurations with GitHub Actions" - path: /product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations + - title: "Get started" + path: /tyk-dashboard/getting-started category: Page show: True - - title: "Backing up API configurations with Github Actions" - path: /product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations + - title: "Tyk Cloud Classic" + path: /advanced-configuration/manage-multiple-environments/with-tyk-cloud-classic category: Page show: True - - title: "Commands" - category: Directory - show: True - menu: - - title: "Dump" - path: /product-stack/tyk-sync/commands/sync-dump + + - title: "Key information doesn't appear in Dashboard for Tyk Multi-Cloud users" + path: /troubleshooting/tyk-multi-cloud/token-information-doesnt-appear-dashboard-tyk-multi-cloud-users/ category: Page show: True - - title: "Examples" - path: /product-stack/tyk-sync/commands/sync-examples + - title: "Gateway API" + path: /api-management/oss/gateway-api category: Page show: True - - title: "Publish" - path: /product-stack/tyk-sync/commands/sync-publish + - title: "Cloud Classic Virtual Endpoints not working" + path: /frequently-asked-questions/cloud-classic-virtual-endpoints-not-working category: Page show: True - - title: "Sync" - path: /product-stack/tyk-sync/commands/sync-sync + - title: "How to enable websockets in Cloud" + path: /frequently-asked-questions/enable-websockets-cloud category: Page show: True - - title: "Update" - path: /product-stack/tyk-sync/commands/sync-update + - title: "Troubleshooting" + path: /troubleshooting category: Page show: True - - title: "Release notes" - category: Directory - show: True - menu: - - title: "Tyk Sync v1.5" - path: /product-stack/tyk-sync/release-notes/sync-1.5 - category: Page - show: True - - title: "Tyk Sync v1.4" - path: /product-stack/tyk-sync/release-notes/sync-1.4 - category: Page - show: True - - title: "Tyk Identity Broker (Open Source)" - category: Directory - show: True - menu: - - title: "Overview" - path: /tyk-identity-broker - category: Page - show: True - - title: "Getting started" - category: Directory - show: True - menu: - - title: "Getting started with TIB" - path: /tyk-identity-broker/getting-started + - title: "“301 Moved permanently“ error in the Dashboard API" + path: /troubleshooting/tyk-cloud-classic/301-moved-permanently category: Page show: True - - title: "TIB implementation with GitHub and OAuth 2.0" - path: /tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth + - title: "413 Request Entity Too Large" + path: /troubleshooting/tyk-cloud-classic/413-request-entity-large category: Page show: True - - title: "TIB Profiles" - path: /tyk-stack/tyk-identity-broker/about-profiles - category: Page - show: True - - title: "API Documentation" - path: /tyk-identity-broker/tib-rest-api - category: Page - show: True - - title: "Advanced config" - category: Directory - show: True - menu: - - title: "Tyk Identity Broker Configuration Options" - path: /tyk-configuration-reference/tyk-identity-broker-configuration + - title: "“504 GATEWAY_TIMEOUT“ error" + path: /troubleshooting/tyk-cloud-classic/504-gateway-timeout-error category: Page show: True - - title: "Tyk Helm Charts (Open Source)" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-charts/overview - category: Page - show: True - - title: "Tyk Stack Chart" - path: /product-stack/tyk-charts/tyk-stack-chart - category: Page - show: True - - title: "Tyk Control Plane Chart" - path: /product-stack/tyk-charts/tyk-control-plane-chart - category: Page - show: True - - title: "Tyk Data Plane Chart" - path: /product-stack/tyk-charts/tyk-data-plane-chart - category: Page - show: True - - title: "Tyk Open Source Chart" - path: /product-stack/tyk-charts/tyk-oss-chart - category: Page - show: True - - title: "Release Notes" - category: Directory - show: True - menu: - - title: "Tyk Charts 1.6" - path: /product-stack/tyk-charts/release-notes/version-1.6 + - title: "“Organisation quota has been exceeded“ error in the Dashboard API" + path: /troubleshooting/tyk-cloud-classic/organisation-quota-exceeded-error-dashboard-api category: Page show: True - - title: "Tyk Charts 1.5" - path: /product-stack/tyk-charts/release-notes/version-1.5 + - title: "Tyk Cloud Classic" + path: /troubleshooting/tyk-cloud category: Page show: True - - title: "Tyk Charts 1.4" - path: /product-stack/tyk-charts/release-notes/version-1.4 + - title: "Tyk Dashboard Troubleshooting" + path: /troubleshooting/tyk-dashboard category: Page show: True - - title: "Tyk Charts 1.3" - path: /product-stack/tyk-charts/release-notes/version-1.3 + - title: "Tyk Gateway Troubleshooting" + path: /troubleshooting/tyk-gateway category: Page show: True - - title: "Developer Support" - path: /frequently-asked-questions/faq - category: Tab - show: True - menu: - - title: "Overview" - path: /frequently-asked-questions/faq - category: Page - show: True - - title: "Tyk APIs Reference" - path: /tyk-apis - category: Page - show: True - - title: "SDK" - category: Directory - show: False - menu: - - title: "CLI" - category: Directory - show: False - menu: - - title: "Environment Variables and Configs" - path: /tyk-environment-variables - category: Page - show: True - - title: "Debugging Series" - category: Directory - show: True - menu: - - title: "Overview" - path: /debugging-series/debugging-series - category: Page - show: True - - title: "MongoDB Debugging" - path: /debugging-series/mongodb-debugging - category: Page - show: True - - title: "Tyk Self-Managed Debugging" - path: /developer-support/debugging-series/debugging-selfmanaged - category: Page - show: True - - title: "Performance Benchmarking" - category: Directory - show: False - menu: - - title: "Special Releases and Features" - category: Directory - show: True - menu: - - title: "Long Term Support Releases" - path: /developer-support/special-releases-and-features/long-term-support-releases + - title: "Tyk Installation" + path: /troubleshooting/tyk-installation category: Page show: True - - title: "Lab Releases" - path: /developer-support/special-releases-and-features/lab-releases + - title: "404 when trying to access Tyk Gateway Repo" + path: /troubleshooting/tyk-installation/404-trying-access-tyk-gateway-repo category: Page show: True - - title: "Early Access Features" - path: /developer-support/special-releases-and-features/early-access-features + - title: "Unable to parse JSON Error from Dashboard bootstrap.sh Script" + path: /troubleshooting/tyk-installation/parsing-json-error-from-dashboard-bootstrap category: Page show: True - - title: "FIPS Releases" - path: /developer-support/special-releases-and-features/fips-release + - title: "Tyk Multi-Cloud" + path: /troubleshooting/tyk-multi-cloud category: Page show: True - - title: "Frequently Asked Questions" - category: Directory - show: True - menu: - - title: "Overview" - path: /frequently-asked-questions - category: Page - show: True - - title: "How to backup Tyk" - path: /frequently-asked-questions/how-to-backup-tyk - category: Page - show: True - - title: "How to backup Tyk Cloud deployment" - path: /frequently-asked-questions/how-to-backup-tyk-cloud-deployment - category: Page - show: True - - title: "What is the performance impact of analytics" - path: /developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics - category: Page - show: True - - title: "How to reduce CPU usage in a Redis Cluster" - path: /developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster - category: Page - show: True - - title: "Support SLA Policies" - path: /frequently-asked-questions/sla-policies - category: Page - show: True - - title: "“Error initialising system couldn't unmarshal config“ error" - path: /troubleshooting/tyk-installation/couldnt-unmarshal-config-error - category: Page - show: True - - title: "All tyk container logs show up under the error status in Datadog logs" - path: /frequently-asked-questions/datadog-logs-showup-as-errors - category: Page - show: True - - title: "Plugin Hub" - category: Page - show: False - - title: "Tyk Upgrade Guides" + - title: "Tyk On-Premises" + path: /troubleshooting/tyk-on-premise/tyk-on-premise + category: Page + show: True + - title: "Tyk Pump Troubleshooting" + path: /troubleshooting/tyk-pump + category: Page + show: True + - title: "Configuration Options" + path: /tyk-cloud/configuration-options + category: Page + show: True + - title: "Overview" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal + category: Page + show: True + + - title: "APIM Best Practice" + path: /apim-best-practice/overview category: Directory show: True menu: - title: "Overview" - path: /upgrading-tyk + path: /apim-best-practice/overview category: Page show: True - - title: "Preparations" + - title: "API Security Best Practice" category: Directory - show: true + show: True menu: - - title: "Upgrade guidelines" - path: /developer-support/upgrading-tyk/preparations/upgrade-guidelines + - title: "API Security Overview" + path: /apim-best-practice/api-security-best-practice/overview category: Page show: True - - title: "Upgrade strategies" - path: /developer-support/upgrading-tyk/preparations/upgrade-strategies + - title: "Authentication" + path: /apim-best-practice/api-security-best-practice/authentication category: Page show: True - - title: "Deployment model" - category: Directory - show: True - menu: - - title: "Tyk Cloud upgrade guide" - category: Directory + - title: "Authorisation" + path: /apim-best-practice/api-security-best-practice/authorisation + category: Page show: True - menu: - - title: "Tyk Cloud" - path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas - category: Page - show: True - - title: "Tyk hybrid" - path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid - category: Page - show: True - - title: "Go plugin" - path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin - category: Page - show: True - - title: "Tyk Self Managed upgrade guide" - category: Directory + - title: "Authorisation Levels" + path: /apim-best-practice/api-security-best-practice/authorisation-levels + category: Page show: True - menu: - - title: "Overview" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/overview - category: Page - show: True - - title: "Docker" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/docker - category: Page - show: True - - title: "Helm Charts" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/helm - show: True - - title: "Kubernetes" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes - category: Page - show: True - - title: "Linux" - category: Directory - show: True - menu: - - title: "Debian" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb - category: Page - show: True - - title: "Redhat (Cent OS)" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm - category: Page - show: True - - title: "Open source upgrade guide" + - title: "Resource Consumption" + path: /apim-best-practice/api-security-best-practice/resource-consumption category: Page - path: /developer-support/upgrading-tyk/deployment-model/open-source show: True - - title: "Go plugins upgrade guide" - path: /developer-support/upgrading-tyk/go-plugins + - title: "Configuration" + path: /apim-best-practice/api-security-best-practice/configuration category: Page show: True - - title: "Backup APIs and Policies" - path: /developer-support/backups/backup-apis-and-policies - category: Page - show: True - - title: "Latest Tyk Releases" - path: /developer-support/tyk-release-summary/overview - category: Page - show: True - - title: "Documentation Projects" - category: Directory - show: True - menu: - - title: "Inclusive Naming Initiative (INI)" - path: /developer-support/documentation-projects/inclusive-naming - category: Page - show: True - - title: "Contribute to Tyk Docs" - path: /contribute - category: Page - show: True - - title: "Deprecated pages" - category: Directory - show: False - menu: - - title: "Dashboard" - path: /basic-config-and-security/security/dashboard - category: Page - show: True - - title: "Get started" - path: /tyk-dashboard/getting-started - category: Page - show: True - - title: "Tyk Cloud Classic" - path: /advanced-configuration/manage-multiple-environments/with-tyk-cloud-classic - category: Page - show: True - - title: "Tyk Developer Portal" - path: /tyk-developer-portal - category: Page - show: True - - title: "Key information doesn't appear in Dashboard for Tyk Multi-Cloud users" - path: /troubleshooting/tyk-multi-cloud/token-information-doesnt-appear-dashboard-tyk-multi-cloud-users/ - category: Page - show: True - - title: "Gateway API" - path: /api-management/oss/gateway-api - category: Page - show: True - - title: "Cloud Classic Virtual Endpoints not working" - path: /frequently-asked-questions/cloud-classic-virtual-endpoints-not-working - category: Page - show: True - - title: "How to enable websockets in Cloud" - path: /frequently-asked-questions/enable-websockets-cloud - category: Page - show: True - - title: "Troubleshooting" - path: /troubleshooting - category: Page - show: True - - title: "“301 Moved permanently“ error in the Dashboard API" - path: /troubleshooting/tyk-cloud-classic/301-moved-permanently - category: Page - show: True - - title: "413 Request Entity Too Large" - path: /troubleshooting/tyk-cloud-classic/413-request-entity-large - category: Page - show: True - - title: "“504 GATEWAY_TIMEOUT“ error" - path: /troubleshooting/tyk-cloud-classic/504-gateway-timeout-error - category: Page - show: True - - title: "“Organisation quota has been exceeded“ error in the Dashboard API" - path: /troubleshooting/tyk-cloud-classic/organisation-quota-exceeded-error-dashboard-api - category: Page - show: True - - title: "Tyk Cloud Classic" - path: /troubleshooting/tyk-cloud - category: Page - show: True - - title: "Tyk Dashboard Troubleshooting" - path: /troubleshooting/tyk-dashboard - category: Page - show: True - - title: "Tyk Gateway Troubleshooting" - path: /troubleshooting/tyk-gateway - category: Page - show: True - - title: "Tyk Installation" - path: /troubleshooting/tyk-installation - category: Page - show: True - - title: "404 when trying to access Tyk Gateway Repo" - path: /troubleshooting/tyk-installation/404-trying-access-tyk-gateway-repo - category: Page - show: True - - title: "Unable to parse JSON Error from Dashboard bootstrap.sh Script" - path: /troubleshooting/tyk-installation/parsing-json-error-from-dashboard-bootstrap - category: Page - show: True - - title: "Tyk Multi-Cloud" - path: /troubleshooting/tyk-multi-cloud - category: Page - show: True - - title: "Tyk On-Premises" - path: /troubleshooting/tyk-on-premise/tyk-on-premise - category: Page - show: True - - title: "Tyk Pump Troubleshooting" - path: /troubleshooting/tyk-pump - category: Page - show: True - - title: "Configuration Options" - path: /tyk-cloud/configuration-options - category: Page - show: True - - title: "Overview" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal - category: Page - show: True - - title: "APIM Best Practice" - path: /apim-best-practice/overview - category: Tab - show: True - menu: - - title: "Overview" - path: /apim-best-practice/overview - category: Page - show: True - - title: "API Security Best Practice" - category: Directory - show: True - menu: - - title: "API Security Overview" - path: /apim-best-practice/api-security-best-practice/overview + - title: "Governance" + path: /apim-best-practice/api-security-best-practice/governance + category: Page + show: True + - title: "API Lifecycle Best Practice" category: Page - show: True - - title: "Authentication" - path: /apim-best-practice/api-security-best-practice/authentication + show: False + - title: "API Platform Architectures" category: Page - show: True - - title: "Authorisation" - path: /apim-best-practice/api-security-best-practice/authorisation + show: False + - title: "Sector Specific Guides" category: Page - show: True - - title: "Authorisation Levels" - path: /apim-best-practice/api-security-best-practice/authorisation-levels + show: False + - title: "API Observability" category: Page - show: True - - title: "Resource Consumption" - path: /apim-best-practice/api-security-best-practice/resource-consumption + show: False + - title: "API Products" category: Page - show: True - - title: "Configuration" - path: /apim-best-practice/api-security-best-practice/configuration + show: False + - title: "APIs as integration" category: Page - show: True - - title: "Governance" - path: /apim-best-practice/api-security-best-practice/governance + show: False + - title: "Creating a PoC" category: Page - show: True - - title: "API Lifecycle Best Practice" - category: Page - show: False - - title: "API Platform Architectures" - category: Page - show: False - - title: "Sector Specific Guides" - category: Page - show: False - - title: "API Observability" - category: Page - show: False - - title: "API Products" - category: Page - show: False - - title: "APIs as integration" - category: Page - show: False - - title: "Creating a PoC" - category: Page - show: False + show: False + - title: "Orphan" path: /orphan category: Tab @@ -4943,4 +4789,4 @@ menu: - title: "Orphan pages" path: /orphan/ category: Page - show: True + show: True \ No newline at end of file diff --git a/tyk-docs/static/css/docs.css b/tyk-docs/static/css/docs.css index bea6b5fdd3..f0a905f373 100755 --- a/tyk-docs/static/css/docs.css +++ b/tyk-docs/static/css/docs.css @@ -21,10 +21,10 @@ background-color: white; z-index: 11; width: 100%; - padding-left: 50px; - padding-right: 50px; - padding-top: 62px; - padding-bottom: 85px; + padding-left: 20px; + padding-right: 20px; + padding-top: 20px; + padding-bottom: 20px; } .button { @@ -69,12 +69,12 @@ .header .links-container { float: left; - margin-left: 5em; + margin-left: 2em; padding-top: 0.5em; } .header .links-container a { - margin-right: 1em; + margin-right: 0.6em; position: relative; text-decoration: none; } @@ -105,7 +105,7 @@ .header-right { float: right; - margin-left: 2em; + margin-left: 1em; } .button.button-green { @@ -143,7 +143,7 @@ .hasSidebar .section-page .container { padding: 60px 30px 0; - max-width: 1500px; + max-width: 1200px; width: 100%; display: flex; } @@ -154,13 +154,13 @@ } .hasSidebar aside { - width: 25%; - min-width: 25%; - padding-right: 15px; + width: 22%; + min-width: 18%; + padding-right: 10px; } .hasSidebar .page-content { - width: 75%; + width: 80%; } @media only screen and (max-width: 1000px) { @@ -184,11 +184,11 @@ .badge { background: #ffffff; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); - border-radius: 20px; - width: 300px; + border-radius: 15px; + width: 260px; min-width: 200px; - height: 180px; - overflow: hidden; + height: 150px; + overflow: auto; padding: 25px; padding-top: 40px; font-size: 14px; @@ -196,8 +196,8 @@ color: #505071; position: relative; flex: 0 0 auto; - display: block; - margin: 10px 1%; + display: inline-block; + margin: 8px 1%; } .badge p { @@ -788,21 +788,21 @@ iframe { background: url("../img/nav-center.png") 50% center no-repeat; } -.docs-navigation>div { +docs-navigation>div { display: table-row; } -.docs-navigation>div>* { +docs-navigation>div>* { display: table-cell; vertical-align: middle; } -.docs-navigation img { +docs-navigation img { border: 0; display: none; } -.docs-navigation #previousArticle { +docs-navigation #previousArticle { position: relative; float: left; max-width: 250px; @@ -810,7 +810,7 @@ iframe { margin-left: 50px; } -.docs-navigation #nextArticle { +docs-navigation #nextArticle { position: relative; float: right; max-width: 250px; @@ -818,25 +818,25 @@ iframe { margin-right: 50px; } -.docs-navigation .button { +docs-navigation .button { margin-bottom: 0; } -.docs-navigation #previousArticle::before { +docs-navigation #previousArticle::before { content: url("../img/nav-left.png"); position: absolute; left: -50px; top: 0px; } -.docs-navigation #nextArticle::before { +docs-navigation #nextArticle::before { content: url("../img/nav-right.png"); position: absolute; right: -50px; top: 0px; } -.docs-navigation a { +docs-navigation a { color: #505071 !important; font-size: 16px; text-align: left !important; @@ -844,7 +844,7 @@ iframe { font-weight: 600; } -.docs-navigation a span { +docs-navigation a span { font-size: 16px; font-weight: bold; color: #7a79a1; @@ -904,7 +904,7 @@ iframe { position: fixed; right: 0; top: 250px; - max-height: 400px; + max-height: 350px; width: 9%; border-left: 1px solid #e1e1e1; border-bottom: 1px solid #e1e1e1; @@ -928,11 +928,11 @@ iframe { display: none !important; } -.toc-content { +toc-content { height: 100%; } -.toc-label { +toc-label { position: fixed; top: 220px; } @@ -946,7 +946,7 @@ iframe { margin-bottom: 30px; } -.docs-share-print a { +docs-share-print a { display: inline-block; margin-right: 50px; } @@ -989,7 +989,7 @@ iframe { .hero { background: white; color: #fff; - height: 100px; + height: 70px; min-height: 0; z-index: 10; } @@ -1005,7 +1005,7 @@ iframe { } .hero .search { - margin-top: 10px; + margin-top: 3px; max-width: 100%; } @@ -1046,7 +1046,7 @@ iframe { } .page-content { - padding-top: 20px; + padding-top: 10px; margin-top: 20px; } @@ -1182,7 +1182,7 @@ span.algolia-autocomplete { .algolia-autocomplete input, .hero input { -webkit-appearance: none; - height: 60px; + height: 45px; max-width: 100%; border: 2px solid #7a79a1; border-radius: 30px; @@ -1191,7 +1191,7 @@ span.algolia-autocomplete { filter: drop-shadow(0px 0px 3px rgba(0, 0, 0, 0.25)); color: #505071; padding-left: 3.5em; - font-size: 20px; + font-size: 18px; font-family: Smoolthan; } @@ -1267,12 +1267,12 @@ span.algolia-autocomplete { background: #fff; border-bottom: 2px solid #4f4f71; color: #000; - max-height: 400px; + max-height: 350px; display: none; margin-top: 10px; font-family: Smoolthan; - width: 70%; - margin: 10px auto; + width: 65%; + margin: 8px auto; } .documentation-search-results * { @@ -1282,7 +1282,7 @@ span.algolia-autocomplete { .documentation-search-results ul li { list-style: none; - margin-bottom: 16px; + margin-bottom: 12px; padding-top: 4px; } @@ -1330,8 +1330,8 @@ h2#feature-setups { } pre { - margin-top: 2rem !important; - margin-bottom: 1rem !important; + margin-top: 1.5rem !important; + margin-bottom: 0.8rem !important; } /* ========================================================================== @@ -1346,7 +1346,7 @@ pre { padding-left: 25px; list-style-type: none; line-height: 20px; - margin-bottom: 20px; + margin-bottom: 15px; position: relative; } @@ -1361,7 +1361,7 @@ pre { } .st-treed ul { - margin-top: 20px; + margin-top: 15px; position: relative; /* pointer-events: none; */ } @@ -1424,7 +1424,7 @@ pre { } .st-treed>ul>li li { - padding-left: 15px; + padding-left: 10px; } .st-treed>ul>li>a { @@ -1790,7 +1790,6 @@ pre { } } - .edit-button{ margin-top: 20px!important; } @@ -1800,4 +1799,38 @@ pre { width: 100%; text-align: center; } -} \ No newline at end of file +} + +.hasSidebar aside { + width: 22%; + min-width: 18%; +} + +.hasSidebar aside { + display: block; +} + +.st-treed li { + margin-bottom: 10px; +} + +.st-treed li { + padding-left: 15px; +} + +.st-treed ul { + margin-top: 10px; +} + +.st-treed a { + width: calc(100% - 20px); +} + +.st-treed li .media-heading em { + height: 16px; + width: 16px; +} + +.st-treed .st-open>ul:before { + background: #e0e0e0; +} diff --git a/tyk-docs/static/js/docs-navigation.js b/tyk-docs/static/js/docs-navigation.js index f8b3d966c8..755bec3a1e 100755 --- a/tyk-docs/static/js/docs-navigation.js +++ b/tyk-docs/static/js/docs-navigation.js @@ -103,10 +103,10 @@ var doNav = function() { let extension = $('[data-filetype]').data('filetype') || 'md'; if ( $('.active').hasClass('st-open')){ - window.open("https://github.com/TykTechnologies/tyk-docs/tree/master/tyk-docs/content/" + githubCustomLink + '/' + docName + '.md', "_blank"); + window.open("https://github.com/TykTechnologies/tyk-docs/tree/master/tyk-docs" + githubCustomLink + '/' + docName + '.md', "_blank"); } else if ( $('.active').hasClass('st-file') && $('.active').closest('.st-open').length === 0) { if(currentPageGH == '/docs'){ - window.open("https://github.com/TykTechnologies/tyk-docs/tree/master/tyk-docs/content/documentation.md", "_blank"); + window.open("https://github.com/TykTechnologies/tyk-docs/tree/master/tyk-docsdocumentation.md", "_blank"); } else { window.open("https://github.com/TykTechnologies/tyk-docs/tree/master/tyk-docs/content" + githubIndexLink + githubCustomLink + '.md', "_blank"); } diff --git a/tyk-docs/static/js/docs-table-of-contents.js b/tyk-docs/static/js/docs-table-of-contents.js index 4a24da2844..ac35dda355 100755 --- a/tyk-docs/static/js/docs-table-of-contents.js +++ b/tyk-docs/static/js/docs-table-of-contents.js @@ -150,6 +150,7 @@ $(document).on("turbolinks:load", buildTableOfContents); function activeTocToggle() { var tocLabel = $('.toc__label'); var tocItems = $('.toc__item'); + var subTocItems = $('.sub_toc__item.sub-accordion-title') var pageContent = $('.page-content__container, .header'); tocLabel.on('click', function (e) { @@ -160,11 +161,17 @@ function activeTocToggle() { } }); - /* tocItems.on('click', function(e) { + tocItems.on('click', function(e) { if (window.innerWidth < 1024) { tocLabel.removeClass('js-open'); } - }); */ + }); + + subTocItems.on('click', function(e) { + if (window.innerWidth < 1024) { + tocLabel.removeClass('js-open'); + } + }); pageContent.on('click', function () { if (tocLabel.hasClass('js-open')) { @@ -196,16 +203,16 @@ function highlightAnchor() { $(".toc__item, .sub_toc__item, .sub-sub-toc-item, .sub-sub-sub-toc-item").removeClass("js-active accordion-up"); $(`.toc__item[href*="#${currentSectionId}"], .sub_toc__item[href*="#${currentSectionId}"], .sub-sub-toc-item[href*="#${currentSectionId}"], .sub-sub-sub-toc-item[href*="#${currentSectionId}"]`).addClass("js-active accordion-up"); - $('.accordion-up').each(function() { + /* $('.accordion-up').each(function() { $(this).siblings('.accordion-content').show(); $(this).siblings('.sub-accordion-content').show(); }); - + */ return false; } - $('.sub_toc__item.accordion-up').click(function() { + /*$('.sub_toc__item.accordion-up').click(function() { $(this).siblings('.sub-accordion-content').hide(); - }); + });*/ }); } diff --git a/tyk-docs/themes/tykio/layouts/partials/head_tracking.html b/tyk-docs/themes/tykio/layouts/partials/head_tracking.html index e2f5cdfffb..c1a0292942 100644 --- a/tyk-docs/themes/tykio/layouts/partials/head_tracking.html +++ b/tyk-docs/themes/tykio/layouts/partials/head_tracking.html @@ -7,25 +7,48 @@ var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != "dataLayer" ? "&l=" + l : ""; - j.defer = true; // Added defer attribute to defer script loading till after page load. + j.defer = true; // Added defer attribute to defer script loading till after page load. j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl; f.parentNode.insertBefore(j, f); })(window, document, "script", "dataLayer", "GTM-NVX4PCL"); } - - - diff --git a/tyk-docs/themes/tykio/layouts/partials/header.html b/tyk-docs/themes/tykio/layouts/partials/header.html index c73a69a01e..8bebeaab15 100644 --- a/tyk-docs/themes/tykio/layouts/partials/header.html +++ b/tyk-docs/themes/tykio/layouts/partials/header.html @@ -1,36 +1,38 @@
- +
+
+
-
\ No newline at end of file + + diff --git a/tyk-docs/themes/tykio/layouts/partials/menu_include.html b/tyk-docs/themes/tykio/layouts/partials/menu_include.html index 9ec14b37f2..2c9f1c1864 100755 --- a/tyk-docs/themes/tykio/layouts/partials/menu_include.html +++ b/tyk-docs/themes/tykio/layouts/partials/menu_include.html @@ -74,3 +74,12 @@ {{- end -}} {{- partial "menu_recursive.html" (dict "menu" $menu "page" . "site" .Site) -}} + + diff --git a/tyk-docs/themes/tykio/layouts/partials/menu_top_external.html b/tyk-docs/themes/tykio/layouts/partials/menu_top_external.html index 068e9f660f..51fd3132f1 100644 --- a/tyk-docs/themes/tykio/layouts/partials/menu_top_external.html +++ b/tyk-docs/themes/tykio/layouts/partials/menu_top_external.html @@ -1,4 +1,29 @@ -Tyk YouTube -tyk.io -Community -24/7 Support \ No newline at end of file +
{{- partial "version_selector.html" . -}}
+Tyk YouTube +tyk.io +Community +24/7 Support diff --git a/tyk-docs/themes/tykio/layouts/partials/side_menu.html b/tyk-docs/themes/tykio/layouts/partials/side_menu.html index d54e0828ff..161bae6d07 100644 --- a/tyk-docs/themes/tykio/layouts/partials/side_menu.html +++ b/tyk-docs/themes/tykio/layouts/partials/side_menu.html @@ -1,48 +1,32 @@ - + {{- if not .Params.hideSidebar -}} - {{else}} -
- -
+
+ +
{{end}}
-
- {{- partial "version_selector.html" . -}} -
- - - - {{if .Params.hideSidebar}} - - {{end}} -
+ - \ No newline at end of file + {{if .Params.hideSidebar}} + + {{end}} +