diff --git a/.github/workflows/docsearch.yaml b/.github/workflows/docsearch.yaml deleted file mode 100644 index b35b7cab8c..0000000000 --- a/.github/workflows/docsearch.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: Index update -on: - workflow_dispatch: - - -jobs: - index: - runs-on: ubuntu-latest - env: - APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }} - API_KEY: ${{ secrets.ALGOLIA_APP_ID }} - CONFIG: ${{ secrets.ALGOLIA_CONFIG }} - - steps: -# - name: Setup tmate session -# uses: mxschmitt/action-tmate@v3 - - name: Index - run: | - set -e - docker run -i -e APPLICATION_ID=$APPLICATION_ID -e API_KEY=$API_KEY -e "CONFIG=$CONFIG" algolia/docsearch-scraper - diff --git a/.github/workflows/navigation-levels.yml b/.github/workflows/navigation-levels.yml index 0c1936b3e8..aea083f976 100644 --- a/.github/workflows/navigation-levels.yml +++ b/.github/workflows/navigation-levels.yml @@ -1,7 +1,7 @@ name: Check maximum nesting level is not exceeded on: [pull_request] env: - MAX_LEVELS: 7 + MAX_LEVELS: 9 jobs: Check-max-levels: diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 0000000000..4679a5b1b6 --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,74 @@ +# This GitHub Action is triggered on pull requests to: +# 1. Format changed files using Prettier. +# 2. Automatically install Prettier and its Go template plugin. +# 3. Identify all files changed in the pull request. +# 4. Format the changed files according to Prettier's rules, respecting the .prettierignore file. +# 5. Commit any changes made to the files back to the repository. +# 6. Optionally, check that the files are properly formatted after linting. +# +# This action helps ensure code quality and consistency in documentation and source files. +name: "PR files Formatting" +on: + workflow_dispatch: +jobs: + docs_linter: + runs-on: ubuntu-latest + name: Format PR files with Prettier + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} # Automatically checks out the PR branch + token: ${{ secrets.ORG_GH_TOKEN }} + - name: Get Head Commit Message + id: get_head_commit_message + run: echo "HEAD_COMMIT_MESSAGE=$(git show -s --format=%s)" >> "$GITHUB_OUTPUT" + + - name: Check for Skip Linter Marker + id: check_skip_marker + run: | + if [[ "${{ steps.get_head_commit_message.outputs.HEAD_COMMIT_MESSAGE }}" == *"[skip-linter-43n2w]"* ]]; then + echo "Skipping linter due to marker." + echo "skip_linter=true" >> "$GITHUB_ENV" # Set an environment variable + fi + - uses: actions/setup-node@v4 + with: + node-version: 20 + # Install Prettier and dependencies + - name: Install dependencies + if: env.skip_linter != 'true' # Only run if the skip marker is not found + run: | + npm install prettier@3.3.3 prettier-plugin-go-template + + # Fetch the base branch and compare changes + - name: Get changed files + id: changed-files + if: env.skip_linter != 'true' # Only run if the skip marker is not found + uses: tj-actions/changed-files@v45 + + - name: Lint all changed files + if: env.skip_linter != 'true' # Only run if the skip marker is not found + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + run: | + for file in ${ALL_CHANGED_FILES}; do + npx prettier --config .prettierrc --write "$file" + echo "$file was changed" + done + + # Auto commit the changes if any + - uses: stefanzweifel/git-auto-commit-action@v5 + if: env.skip_linter != 'true' # Only run if the skip marker is not found + with: + # skip-linter-43n2w is a Marker to skip rerun of the linter once it makes a commit + # This prevents cyclic run of the linter + commit_message: save content formatted by prettier linter [skip-linter-43n2w] + + - name: Check all changed files are linted + if: env.skip_linter != 'true' # Only run if the skip marker is not found + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + run: | + for file in ${ALL_CHANGED_FILES}; do + npx prettier --config .prettierrc --check "$file" + echo "$file was linted" + done diff --git a/.github/workflows/stable-updater.yaml b/.github/workflows/stable-updater.yaml index 40babbf369..4f20e4e267 100644 --- a/.github/workflows/stable-updater.yaml +++ b/.github/workflows/stable-updater.yaml @@ -2,12 +2,12 @@ name: Stable branch update on: push: branches: - - release-5.5 + - release-5.6 jobs: stable: runs-on: ubuntu-latest - if: github.ref == 'refs/heads/release-5.5' + if: github.ref == 'refs/heads/release-5.6' steps: - uses: actions/checkout@v3 with: diff --git a/.github/workflows/tyk-docs.yml b/.github/workflows/tyk-docs.yml index 3c9d649639..94b56b191b 100644 --- a/.github/workflows/tyk-docs.yml +++ b/.github/workflows/tyk-docs.yml @@ -201,7 +201,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Restore artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4.1.7 - name: Set up env run: | diff --git a/.gitignore b/.gitignore index 1b51257408..526b3193ce 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,8 @@ resources .vscode/launch.json* check-pages-*.txt .venv/ +node_modules/ +node_modules +package-lock.json +package.json +changed-files.txt \ No newline at end of file diff --git a/.htmltest.yml b/.htmltest.yml index 1b73eecbcf..18ef958f93 100644 --- a/.htmltest.yml +++ b/.htmltest.yml @@ -2,7 +2,7 @@ DirectoryPath: "tyk-docs/public" IgnoreAltMissing: true IgnoreAltEmpty: true IgnoreDirectoryMissingTrailingSlash: true -CheckInternalHash: false +CheckInternalHash: true IgnoreEmptyHref: true CheckExternal: true IgnoreURLs: diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..44d09f0c35 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,11 @@ +# Ignore artifacts: +tyk-docs/public +tyk-docs/resources +tyk-docs/themes/tykio/layouts/_default/list.netlify.json +tyk-docs/themes/tykio/layouts/_default/list.pagesurl.json +tyk-docs/themes/tykio/layouts/_default/list.urlcheck.json +.gitignore +.prettierignore +.prettierrc +changed-files.txt +.github diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..21cc5c1291 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,31 @@ +{ + "plugins": [ + "prettier-plugin-go-template" + ], + "printWidth": 120, + "proseWrap": "always", + "tabWidth": 2, + "useTabs": false, + "overrides": [ + { + "files": [ + "*.html" + ], + "options": { + "parser": "go-template", + "goTemplateBracketSpacing": true, + "bracketSameLine": true + } + }, + { + "files": [ + "*.js", + "*.ts" + ], + "options": { + "singleQuote": false + } + } + ] +} + diff --git a/scripts/page_available_since.py b/scripts/page_available_since.py index e821ec6382..d2ee835ade 100644 --- a/scripts/page_available_since.py +++ b/scripts/page_available_since.py @@ -4,7 +4,12 @@ versions = [ { "path": "/docs/", - "name": "5.5 - Latest", + "name": "5.6 - Latest", + "branch": "release-5.6" + }, + { + "path": "/docs/5.5/", + "name": "5.5", "branch": "release-5.5" }, { 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/img/2.10/portal-home-page-add.png b/tyk-docs/assets/img/2.10/portal-home-page-add.png deleted file mode 100644 index 9cd7eebe82..0000000000 Binary files a/tyk-docs/assets/img/2.10/portal-home-page-add.png and /dev/null differ diff --git a/tyk-docs/assets/img/2.10/portal-home-page-settings.png b/tyk-docs/assets/img/2.10/portal-home-page-settings.png deleted file mode 100644 index 54800e28cb..0000000000 Binary files a/tyk-docs/assets/img/2.10/portal-home-page-settings.png and /dev/null differ diff --git a/tyk-docs/assets/img/2.10/portal_menu.png b/tyk-docs/assets/img/2.10/portal_menu.png deleted file mode 100644 index c55a43f6ba..0000000000 Binary files a/tyk-docs/assets/img/2.10/portal_menu.png and /dev/null differ diff --git a/tyk-docs/assets/img/api-management/security/basic-auth-add-key.png b/tyk-docs/assets/img/api-management/security/basic-auth-add-key.png new file mode 100644 index 0000000000..ab574b043b Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/basic-auth-add-key.png differ diff --git a/tyk-docs/assets/img/api-management/security/basic-auth-api-setup.png b/tyk-docs/assets/img/api-management/security/basic-auth-api-setup.png new file mode 100644 index 0000000000..26d1ccf9c7 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/basic-auth-api-setup.png differ diff --git a/tyk-docs/assets/img/api-management/security/client-mtls-api-setup.png b/tyk-docs/assets/img/api-management/security/client-mtls-api-setup.png new file mode 100644 index 0000000000..7a6295ba18 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/client-mtls-api-setup.png differ diff --git a/tyk-docs/assets/img/api-management/security/client-secret-oauth.png b/tyk-docs/assets/img/api-management/security/client-secret-oauth.png new file mode 100644 index 0000000000..736644f8d5 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/client-secret-oauth.png differ diff --git a/tyk-docs/assets/img/api-management/security/create-oauth-from-api-list.png b/tyk-docs/assets/img/api-management/security/create-oauth-from-api-list.png new file mode 100644 index 0000000000..cac0bcd09a Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/create-oauth-from-api-list.png differ diff --git a/tyk-docs/assets/img/api-management/security/fill-out-client-details-oauth.png b/tyk-docs/assets/img/api-management/security/fill-out-client-details-oauth.png new file mode 100644 index 0000000000..f0ebf68e68 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/fill-out-client-details-oauth.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-hmac.png b/tyk-docs/assets/img/api-management/security/jwt-hmac.png new file mode 100644 index 0000000000..0c3791dd7c Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-hmac.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-keycloak-add-policy-cont.png b/tyk-docs/assets/img/api-management/security/jwt-keycloak-add-policy-cont.png new file mode 100644 index 0000000000..b70f66d451 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-keycloak-add-policy-cont.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-keycloak-add-policy.png b/tyk-docs/assets/img/api-management/security/jwt-keycloak-add-policy.png new file mode 100644 index 0000000000..2c5b60357b Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-keycloak-add-policy.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-keycloak-api-create.png b/tyk-docs/assets/img/api-management/security/jwt-keycloak-api-create.png new file mode 100644 index 0000000000..30041b8c65 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-keycloak-api-create.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-keycloak-api-set-policy.png b/tyk-docs/assets/img/api-management/security/jwt-keycloak-api-set-policy.png new file mode 100644 index 0000000000..d7f7e7b48f Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-keycloak-api-set-policy.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-keycloak-get-api-url.png b/tyk-docs/assets/img/api-management/security/jwt-keycloak-get-api-url.png new file mode 100644 index 0000000000..1622ba9244 Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-keycloak-get-api-url.png differ diff --git a/tyk-docs/assets/img/api-management/security/jwt-keycloak-set-auth.png b/tyk-docs/assets/img/api-management/security/jwt-keycloak-set-auth.png new file mode 100644 index 0000000000..5d7594a17a Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/jwt-keycloak-set-auth.png differ diff --git a/tyk-docs/assets/img/api-management/security/multiple-auth-choose-auth.png b/tyk-docs/assets/img/api-management/security/multiple-auth-choose-auth.png new file mode 100644 index 0000000000..6126173fba Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/multiple-auth-choose-auth.png differ diff --git a/tyk-docs/assets/img/api-management/security/multiple-auth-methods.png b/tyk-docs/assets/img/api-management/security/multiple-auth-methods.png new file mode 100644 index 0000000000..e37696ab4d Binary files /dev/null and b/tyk-docs/assets/img/api-management/security/multiple-auth-methods.png differ diff --git a/tyk-docs/assets/img/cloud/create-api-tyk-cloud.png b/tyk-docs/assets/img/cloud/create-api-tyk-cloud.png index aad616f043..1c20ad3de3 100644 Binary files a/tyk-docs/assets/img/cloud/create-api-tyk-cloud.png and b/tyk-docs/assets/img/cloud/create-api-tyk-cloud.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-add-key.png b/tyk-docs/assets/img/cloud/tyk-cloud-add-key.png index 7b88c634bd..94e7d37227 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-add-key.png and b/tyk-docs/assets/img/cloud/tyk-cloud-add-key.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-add-policy.png b/tyk-docs/assets/img/cloud/tyk-cloud-add-policy.png index e7d1f3eef4..b786fc83cc 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-add-policy.png and b/tyk-docs/assets/img/cloud/tyk-cloud-add-policy.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-api-auth.png b/tyk-docs/assets/img/cloud/tyk-cloud-api-auth.png new file mode 100644 index 0000000000..ef25789697 Binary files /dev/null and b/tyk-docs/assets/img/cloud/tyk-cloud-api-auth.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-copy-key-url.png b/tyk-docs/assets/img/cloud/tyk-cloud-copy-key-url.png index 62ba207d29..a12cdd9508 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-copy-key-url.png and b/tyk-docs/assets/img/cloud/tyk-cloud-copy-key-url.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-create-api.png b/tyk-docs/assets/img/cloud/tyk-cloud-create-api.png index 903b448e04..d4551c36fd 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-create-api.png and b/tyk-docs/assets/img/cloud/tyk-cloud-create-api.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-key-access-rights.png b/tyk-docs/assets/img/cloud/tyk-cloud-key-access-rights.png index 78ec7938ba..20e6f85bdd 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-key-access-rights.png and b/tyk-docs/assets/img/cloud/tyk-cloud-key-access-rights.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-key-configurations.png b/tyk-docs/assets/img/cloud/tyk-cloud-key-configurations.png index a8e0572675..b2aa16c2ff 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-key-configurations.png and b/tyk-docs/assets/img/cloud/tyk-cloud-key-configurations.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-policy-access-rights.png b/tyk-docs/assets/img/cloud/tyk-cloud-policy-access-rights.png index a619653f29..bc900f3a57 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-policy-access-rights.png and b/tyk-docs/assets/img/cloud/tyk-cloud-policy-access-rights.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-policy-configurations.png b/tyk-docs/assets/img/cloud/tyk-cloud-policy-configurations.png index 370ba8a5af..13d335b770 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-policy-configurations.png and b/tyk-docs/assets/img/cloud/tyk-cloud-policy-configurations.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-save-api.png b/tyk-docs/assets/img/cloud/tyk-cloud-save-api.png new file mode 100644 index 0000000000..93c93ceca5 Binary files /dev/null and b/tyk-docs/assets/img/cloud/tyk-cloud-save-api.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-select-cloud-gateway.png b/tyk-docs/assets/img/cloud/tyk-cloud-select-cloud-gateway.png index 0fa33a70e7..f2f88c76c6 100644 Binary files a/tyk-docs/assets/img/cloud/tyk-cloud-select-cloud-gateway.png and b/tyk-docs/assets/img/cloud/tyk-cloud-select-cloud-gateway.png differ diff --git a/tyk-docs/assets/img/cloud/tyk-cloud-tyk-trial-dashboard.png b/tyk-docs/assets/img/cloud/tyk-cloud-tyk-trial-dashboard.png new file mode 100644 index 0000000000..a52a7f811d Binary files /dev/null and b/tyk-docs/assets/img/cloud/tyk-cloud-tyk-trial-dashboard.png differ diff --git a/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-credential-expiration.png b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-credential-expiration.png new file mode 100644 index 0000000000..4c1adbb656 Binary files /dev/null and b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-credential-expiration.png differ diff --git a/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-custom-credential.png b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-custom-credential.png new file mode 100644 index 0000000000..81d8f8f561 Binary files /dev/null and b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-custom-credential.png differ diff --git a/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-embedded-tib.png b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-embedded-tib.png new file mode 100644 index 0000000000..5dfdb130b1 Binary files /dev/null and b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-embedded-tib.png differ diff --git a/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-non-tyk-managed-credential.png b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-non-tyk-managed-credential.png new file mode 100644 index 0000000000..9db8ddacc2 Binary files /dev/null and b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-non-tyk-managed-credential.png differ diff --git a/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-password-policy.png b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-password-policy.png new file mode 100644 index 0000000000..09d6141397 Binary files /dev/null and b/tyk-docs/assets/img/dashboard/portal-management/enterprise-portal/1.12.0-password-policy.png differ diff --git a/tyk-docs/assets/img/dashboard/system-management/oauth-auth-mode-new.png b/tyk-docs/assets/img/dashboard/system-management/oauth-auth-mode-new.png new file mode 100644 index 0000000000..35a96db4a7 Binary files /dev/null and b/tyk-docs/assets/img/dashboard/system-management/oauth-auth-mode-new.png differ diff --git a/tyk-docs/assets/img/diagrams/oss-flow.png b/tyk-docs/assets/img/diagrams/oss-flow.png index 952a763f22..e00b507a3c 100644 Binary files a/tyk-docs/assets/img/diagrams/oss-flow.png and b/tyk-docs/assets/img/diagrams/oss-flow.png differ diff --git a/tyk-docs/assets/img/getting-started/api-activity-logs.png b/tyk-docs/assets/img/getting-started/api-activity-logs.png new file mode 100644 index 0000000000..d0982eaee1 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/api-activity-logs.png differ diff --git a/tyk-docs/assets/img/getting-started/api-management-apis.png b/tyk-docs/assets/img/getting-started/api-management-apis.png new file mode 100644 index 0000000000..5cd4e29a51 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/api-management-apis.png differ diff --git a/tyk-docs/assets/img/getting-started/api-url-provided-by-tyk.png b/tyk-docs/assets/img/getting-started/api-url-provided-by-tyk.png new file mode 100644 index 0000000000..18bb9ad0d9 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/api-url-provided-by-tyk.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-add-authentication.png b/tyk-docs/assets/img/getting-started/apis-add-authentication.png new file mode 100644 index 0000000000..f4f4ae70e6 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-add-authentication.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-add-key.png b/tyk-docs/assets/img/getting-started/apis-add-key.png new file mode 100644 index 0000000000..ccb67191d5 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-add-key.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-analytics.png b/tyk-docs/assets/img/getting-started/apis-analytics.png new file mode 100644 index 0000000000..df15173210 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-analytics.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-configure-settings-1.png b/tyk-docs/assets/img/getting-started/apis-configure-settings-1.png new file mode 100644 index 0000000000..d98f17cb24 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-configure-settings-1.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-configure-settings-2.png b/tyk-docs/assets/img/getting-started/apis-configure-settings-2.png new file mode 100644 index 0000000000..f42632176e Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-configure-settings-2.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-connect-gateways.png b/tyk-docs/assets/img/getting-started/apis-connect-gateways.png new file mode 100644 index 0000000000..dc2db37e15 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-connect-gateways.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-create-key.png b/tyk-docs/assets/img/getting-started/apis-create-key.png new file mode 100644 index 0000000000..7e82de42ff Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-create-key.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-create-new-api.png b/tyk-docs/assets/img/getting-started/apis-create-new-api.png new file mode 100644 index 0000000000..e15b7a385c Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-create-new-api.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-front-page.png b/tyk-docs/assets/img/getting-started/apis-front-page.png new file mode 100644 index 0000000000..0b0d795430 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-front-page.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-keys-success.png b/tyk-docs/assets/img/getting-started/apis-keys-success.png new file mode 100644 index 0000000000..4b92e3e0fd Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-keys-success.png differ diff --git a/tyk-docs/assets/img/getting-started/apis-sidebar-security.png b/tyk-docs/assets/img/getting-started/apis-sidebar-security.png new file mode 100644 index 0000000000..2c159ffeda Binary files /dev/null and b/tyk-docs/assets/img/getting-started/apis-sidebar-security.png differ diff --git a/tyk-docs/assets/img/getting-started/configure-api-key.png b/tyk-docs/assets/img/getting-started/configure-api-key.png new file mode 100644 index 0000000000..b7625d8d47 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/configure-api-key.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-add-api.png b/tyk-docs/assets/img/getting-started/create-account-add-api.png new file mode 100644 index 0000000000..6534253cee Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-add-api.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-deploy-tutorial.png b/tyk-docs/assets/img/getting-started/create-account-deploy-tutorial.png new file mode 100644 index 0000000000..7d4d2785c2 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-deploy-tutorial.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-design-from-scratch.png b/tyk-docs/assets/img/getting-started/create-account-design-from-scratch.png new file mode 100644 index 0000000000..2d7b6d9f5c Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-design-from-scratch.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-free-trial-info.png b/tyk-docs/assets/img/getting-started/create-account-free-trial-info.png new file mode 100644 index 0000000000..be4f70fbc7 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-free-trial-info.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-portal-pages.png b/tyk-docs/assets/img/getting-started/create-account-portal-pages.png new file mode 100644 index 0000000000..b2688af78e Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-portal-pages.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-resend-email.png b/tyk-docs/assets/img/getting-started/create-account-resend-email.png new file mode 100644 index 0000000000..281054b04a Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-resend-email.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-set-password.png b/tyk-docs/assets/img/getting-started/create-account-set-password.png new file mode 100644 index 0000000000..fce32e7dcd Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-set-password.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-start-trial.png b/tyk-docs/assets/img/getting-started/create-account-start-trial.png new file mode 100644 index 0000000000..8d53399238 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-start-trial.png differ diff --git a/tyk-docs/assets/img/getting-started/create-account-view-email.png b/tyk-docs/assets/img/getting-started/create-account-view-email.png new file mode 100644 index 0000000000..675ee3d1d0 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-account-view-email.png differ diff --git a/tyk-docs/assets/img/getting-started/create-api-security-key.png b/tyk-docs/assets/img/getting-started/create-api-security-key.png new file mode 100644 index 0000000000..3d1003520a Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-api-security-key.png differ diff --git a/tyk-docs/assets/img/getting-started/create-api-select-authentication.png b/tyk-docs/assets/img/getting-started/create-api-select-authentication.png new file mode 100644 index 0000000000..9b504b4990 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-api-select-authentication.png differ diff --git a/tyk-docs/assets/img/getting-started/create-api-server-section.png b/tyk-docs/assets/img/getting-started/create-api-server-section.png new file mode 100644 index 0000000000..8f5cf58478 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-api-server-section.png differ diff --git a/tyk-docs/assets/img/getting-started/create-new-api.png b/tyk-docs/assets/img/getting-started/create-new-api.png new file mode 100644 index 0000000000..66b6f771e8 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/create-new-api.png differ diff --git a/tyk-docs/assets/img/getting-started/overview-options.png b/tyk-docs/assets/img/getting-started/overview-options.png new file mode 100644 index 0000000000..3f5df6c82a Binary files /dev/null and b/tyk-docs/assets/img/getting-started/overview-options.png differ diff --git a/tyk-docs/assets/img/getting-started/portal-home-page-settings.png b/tyk-docs/assets/img/getting-started/portal-home-page-settings.png new file mode 100644 index 0000000000..bee47ca875 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/portal-home-page-settings.png differ diff --git a/tyk-docs/assets/img/getting-started/portal_menu.png b/tyk-docs/assets/img/getting-started/portal_menu.png new file mode 100644 index 0000000000..9f79455cbf Binary files /dev/null and b/tyk-docs/assets/img/getting-started/portal_menu.png differ diff --git a/tyk-docs/assets/img/getting-started/tabs-api-management.png b/tyk-docs/assets/img/getting-started/tabs-api-management.png new file mode 100644 index 0000000000..a3631d7196 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/tabs-api-management.png differ diff --git a/tyk-docs/assets/img/getting-started/tabs-api-security.png b/tyk-docs/assets/img/getting-started/tabs-api-security.png new file mode 100644 index 0000000000..947c2a77fd Binary files /dev/null and b/tyk-docs/assets/img/getting-started/tabs-api-security.png differ diff --git a/tyk-docs/assets/img/getting-started/tabs-classic-portal.png b/tyk-docs/assets/img/getting-started/tabs-classic-portal.png new file mode 100644 index 0000000000..8359ceba96 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/tabs-classic-portal.png differ diff --git a/tyk-docs/assets/img/getting-started/tabs-monitoring.png b/tyk-docs/assets/img/getting-started/tabs-monitoring.png new file mode 100644 index 0000000000..a76954cb1b Binary files /dev/null and b/tyk-docs/assets/img/getting-started/tabs-monitoring.png differ diff --git a/tyk-docs/assets/img/getting-started/tabs-system-management.png b/tyk-docs/assets/img/getting-started/tabs-system-management.png new file mode 100644 index 0000000000..0bb4570431 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/tabs-system-management.png differ diff --git a/tyk-docs/assets/img/getting-started/tabs-user-management.png b/tyk-docs/assets/img/getting-started/tabs-user-management.png new file mode 100644 index 0000000000..ac27b15794 Binary files /dev/null and b/tyk-docs/assets/img/getting-started/tabs-user-management.png differ diff --git a/tyk-docs/assets/others/dashboard-swagger.yml b/tyk-docs/assets/others/dashboard-swagger.yml index ed1a2a0585..c7448bf755 100644 --- a/tyk-docs/assets/others/dashboard-swagger.yml +++ b/tyk-docs/assets/others/dashboard-swagger.yml @@ -1,13 +1,16 @@ -openapi: 3.0.0 +openapi: 3.0.3 info: - title: Tyk Dashboard API - version: 5.5.0 - description: |- + contact: + email: support@tyk.io + name: Tyk Technologies + url: https://tyk.io/contact + description: |2 + ## Introduction The Tyk Dashboard API offers granular, programmatic access to a centralised database of resources that your Tyk nodes can pull from. This API has a dynamic user administrative structure which means the secret key that is used to communicate with your Tyk nodes can be kept secret and access to the wider management functions can be handled on a user-by-user and organisation-by-organisation basis. - A common question around using a database-backed configuration is how to programatically add API definitions to your Tyk nodes, the Dashboard API allows much more fine-grained, secure and multi-user access to your Tyk cluster, and should be used to manage a database-backed Tyk node. + A common question around using a database-backed configuration is how to programmatically add API definitions to your Tyk nodes, the Dashboard API allows much more fine-grained, secure and multi-user access to your Tyk cluster, and should be used to manage a database-backed Tyk node. The Tyk Dashboard API works seamlessly with the Tyk Dashboard (and the two come bundled together). @@ -17,4315 +20,10947 @@ info: ### Organisations, APIs and Users - With the Dashboard API and a database-backed Tyk setup, (and to an extent with file-based API setups - if diligence is used in naming an creating definitions), the following security model is applied to the management of Upstream APIs: + With the Dashboard API and a database-backed Tyk setup, (and to an extent with file-based API setups - if diligence is used in naming and creating definitions), the following security model is applied to the management of Upstream APIs: - * **Organisations**: All APIs are *owned* by an organisation, this is designated by the `OrgID` parameter in the API Definition. + * **Organisations**: All APIs are *owned* by an organisation, this is designated by the 'OrgID' parameter in the API Definition. * **Users**: All users created in the Dashboard belong to an organisation (unless an exception is made for super-administrative access). * **APIs**: All APIs belong to an Organisation and only Users that belong to that organisation can see the analytics for those APIs and manage their configurations. * **API Keys**: API Keys are designated by organisation, this means an API key that has full access rights will not be allowed to access the APIs of another organisation on the same system, but can have full access to all APIs within the organisation. * **Access Rights**: Access rights are stored with the key, this enables a key to give access to multiple APIs, this is defined by the session object in the core Tyk API. - In order to use the Dashboard API, you'll need to get the `Tyk Dashboard API Access Credentials` secret from your user profile on the Dashboard UI. + In order to use the Dashboard API, you'll need to get the 'Tyk Dashboard API Access Credentials' secret from your user profile on the Dashboard UI. The secret you set should then be sent along as a header with each Dashboard API Request in order for it to be successful: - ``` + authorization: - ``` + license: + name: Mozilla Public License Version 2.0 + url: https://github.com/TykTechnologies/tyk/blob/master/LICENSE.md + title: Tyk Dashboard API + version: 5.6.0 servers: - - url: 'http://localhost:3000/' - - url: 'https://localhost:3000/' +- url: https://{tenant} + variables: + tenant: + default: localhost:8080 + description: Your dashboard host +security: +- bearerAuth: [] tags: - - name: APIs - description: API Definitions - - name: OAS APIs - description: OAS API Definitions - - name: Keys - description: API Key Management - - name: Policies - description: Policies - - name: Analytics - description: API Analytics - - name: Additional Permissions - description: Additional Permissions API - - name: Single Sign On - description: The Dashboard SSO API allows you to implement custom authentication schemes for the Dashboard and Portal. Our Tyk Identity Broker (TIB) internally also uses this API. - - name: Basic Authentication - description: API Key Management - - name: Open Policy Agent - description: Open Policy Agent API - - name: Users - description: User Management - - name: Organisations - description: Organisations Management - - name: System - description: System API - - name: Assets - description: Assets management - - name: Data Graph APIs - description: Data Graph Import APIs +- description: Use the endpoints under this tag to manage your certificates. You can + add, delete and list certificates using these endpoints. + name: Certificates +- description: The Tyk Dashboard provides a full set of analytics functions and graphs + that you can use to segment and view your API traffic and activity. + externalDocs: + description: Traffic Analytics. + url: https://tyk.io/docs/tyk-dashboard-analytics/ + name: Analytics +- description: Use the endpoints in this tag to manage OAuth flow. + externalDocs: + description: OAuth Documentation + url: https://tyk.io/docs/basic-config-and-security/security/authentication-authorization/oauth-2-0/ + name: Oauth +- description: | + An API template is an asset managed by Tyk Dashboard that is used as the starting point - a blueprint - from which you can create a new Tyk OAS API definition.
+ + Templates are used only during the creation of an API, they cannot be applied later. + + [Read more about API template assets here](https://tyk.io/docs/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/) + externalDocs: + description: API Templates full documentation. + url: https://tyk.io/docs/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/ + name: Assets +- description: | + The Tyk Dashboard permission system can be extended by writing custom rules using an Open Policy Agent (OPA). The rules engine works on top of your Dashboard API, which means you can control not only access rules, but also behaviour of all Dashboard APIs (except your public developer portal)
+ + By default the Dashboard OPA engine is turned off, and you need to explicitly enable it via your Dashboard tyk_analytics.conf file.
+ + You can use OPA rule to accomplish tasks like:
+ + 1. Prevent users from creating keyless APIs. + 2. Assign specific categories to APIs created to certain user groups or users. + 3. Control access for individual fields. For example, do not allow changing the API “active” status (e.g. deploy), unless you have a specific permission set. + 4. And many more
+ + [Read more about Tyk Open Policy Agent here](https://tyk.io/docs/tyk-dashboard/open-policy-agent/) + externalDocs: + description: Tyk Open Policy Agent Full Documentation. + url: https://tyk.io/docs/tyk-dashboard/open-policy-agent/ + name: Open Policy Agent +- description: | + These APIs helps you get,add and delete (CRUD) a list of additional (custom) permissions for your Dashboard users. You can use the created additional permissions with Open Policy Agent (OPA).
+ + Once created, a custom permission will be added to standard list of user permissions.
+ + You can also configure these custom permissions in the security.additional_permissions map in the Tyk Dashboard configuration file. + + You can check the [full documentation here](https://tyk.io/docs/tyk-dashboard-api/org/permissions/). + externalDocs: + description: Additional Permissions full documentation. + url: https://tyk.io/docs/tyk-dashboard-api/org/permissions/ + name: Additional Permissions +- description: Get OAS schema. + name: Schema +- description: | + Webhooks are a great way to let external applications know about the status of a user, an API or an event that has occurred in the Tyk gateway
+ + You can create webhooks that you can then re-use in your API definitions and assign to different Tyk Events such as quota violations or rate-limiting violations.
+ + Each webhook require a target_path (which is an absolute URL that should be targeted by the webhook e.g https://httpbin.org/expired-keys) and a method which can be any of GET, PUT, POST, PATCH or DELETE.
+ + Request types that do not support an encoded body will not have the event metadata encoded as part of the request. We would advise using POST where possible. + name: Webhooks +- description: Policies are a template that enable you to create access rules, usage + quota and rate limits that can be applied to multiple keys. They are a useful + way to manage large groups of users, and to enforce quota changes on a global + scale across any number of keys that are using a policy. When used in conjunction + with the portal, developers that enroll for API access will be given a key that + is attached to a specific policy. The policy settings are refreshed every time + a key attempts access, meaning that updating a policy will have an effect across + any keys that are attached to it. + externalDocs: + description: Security Policies Documentation. + url: https://tyk.io/docs/basic-config-and-security/security/security-policies/ + name: Policies +- description: When you have a large number of users and teams with different access + requirements, instead of setting permissions per user, you can create a user group + and configure the permissions for all users in the group. Note that a user can + only belong to one group. + externalDocs: + description: Manage Tyk Dashboard User Groups. + url: https://tyk.io/docs/basic-config-and-security/security/dashboard/create-user-groups/ + name: UserGroup +- description: 'Users have twofold access to the dashboard: they can access both the + Dashboard API and the Dashboard itself, it is possible to generate users that + have read-only access to certain sections of the dashboard and the underlying + API. Use the endpoints in this tag to manage users.' + externalDocs: + description: Manage Tyk Dashboard Users. + url: https://tyk.io/docs/basic-config-and-security/security/dashboard/create-users/ + name: Users +- description: All keys that are used to access services via Tyk correspond to a session + object that informs Tyk about the context of this particular token, like access + rules and rate/quota allowance. + externalDocs: + description: API Key Management. + url: https://tyk.io/docs/tyk-apis/tyk-dashboard-api/api-keys/ + name: Keys +- description: |- + An API request made using Basic Authentication will have an Authorization header that contains the API key. The value of the Authorization header will be in the form:
+ `Basic base64Encode(username:password)`. + externalDocs: + description: Basic Authentication. + url: https://tyk.io/docs/basic-config-and-security/security/authentication-authorization/basic-auth/ + name: Basic Authentication +- description: Tyk allows you to work with APIs that you’ve designed with the OpenAPI + Specification version 3.0.x, making it even easier to get your API up and running. + Use the endpoints in this tag to create,delete,import and update OAS APIs. + externalDocs: + description: Tyk OAS Documentation. + url: https://tyk.io/docs/getting-started/key-concepts/high-level-concepts/ + name: OAS APIs +- description: Use the endpoints under this tags to update,add ,delete and fetch the + classic APIs. + name: APIs +- description: The Dashboard SSO API allows you to implement custom authentication + schemes for the Dashboard and Portal. Our Tyk Identity Broker (TIB) internally + also uses this API. The Dashboard exposes the /api/sso Dashboard API which allows + you to generate a temporary authentication token, valid for 60 seconds. + externalDocs: + description: Dashboard API Single Sign On. + url: https://tyk.io/docs/tyk-apis/tyk-dashboard-api/sso/ + name: Single Sign On +- description: System API. + name: System paths: - /api/portal/policies/: + /api/activity/keys/{keyHash}/{startDay}/{startMonth}/{startYear}/{EndDay}/{EndMonth}/{EndYear}: get: - summary: Get List of Policies - description: Get List of Policies - operationId: getPolicies - tags: - - Policies + description: It returns analytics of the endpoints of all APIs called a key + between start and end date. + operationId: getAnalyticsOfApiKey + parameters: + - description: Day to start querying the analytics from. + example: "15" + in: path + name: startDay + required: true + schema: + type: string + - description: Month to start querying the analytics from. + example: "1" + in: path + name: startMonth + required: true + schema: + type: string + - description: Year to start querying the analytics from. + example: "2024" + in: path + name: startYear + required: true + schema: + type: string + - description: End date of analytics to query. + example: "20" + in: path + name: EndDay + required: true + schema: + type: string + - description: End month of analytics to query. + example: "6" + in: path + name: EndMonth + required: true + schema: + type: string + - description: End year of analytics to query. + example: "2025" + in: path + name: EndYear + required: true + schema: + type: string + - description: Hash of your API key. + in: path + name: keyHash + required: true + schema: + type: string responses: - '200': - description: List of all policies + "200": content: application/json: + examples: + aggregateAnalytics: + $ref: '#/components/examples/aggregateAnalytics' schema: - type: array - items: - $ref: "#/components/schemas/Policy" - post: - summary: Create Policy Definition - description: Creating policy definitions is slightly different to the core API, API definitions are wrapped inside an api_definition field and event handlers, such as webhooks are not embedded in the main api_defintion object (though they can be), webhooks are instead appended as references into the hook_references field, the API will embed the correct webhook data into the event handler interface. - operationId: postPolicies - tags: - - Policies - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/Policy" - example: - name: new policy - quota_max: 60 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 - responses: - '200': - description: Policy created + $ref: '#/components/schemas/AggregateAnalyticsData' + description: Returns analytics of all endpoints called using the given key + between the given time range. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: created - status: ok - '400': + Message: Key could not be decoded. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' description: Bad Request + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Request malformed - status: error - '500': - description: Internal server error + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: User does not have access to the API with ID. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: example: - message: Failed to create file! - status: error - /api/portal/policies/search: - get: - summary: Search List of Policies - description: Search List of Policies - operationId: searchPolicies + Message: Failed to fetch analytics. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Analytics of API Key. tags: - - Policies - parameters: - - name: q - in: query - description: Search query - schema: - type: string - responses: - '200': - description: List of Policies (TODO) - /api/portal/policies/{id}: + - Analytics + /api/activity/oauthid/{OAuthClientID}/{startDay}/{startMonth}/{startYear}/{EndDay}/{EndMonth}/{EndYear}: get: - summary: Get a single Policy by ID - description: Get a Policy by ID - operationId: getPolicy - tags: - - Policies + description: Returns activity of all endpoints which used the given OAuth client + between the given time range. + operationId: getAnalyticsOfOauthClientId parameters: - - name: id - in: path - description: ID of Policy to get. - required: true - schema: - type: string + - description: Day to start querying the analytics from. + example: "15" + in: path + name: startDay + required: true + schema: + type: string + - description: Month to start querying the analytics from. + example: "1" + in: path + name: startMonth + required: true + schema: + type: string + - description: Year to start querying the analytics from. + example: "2024" + in: path + name: startYear + required: true + schema: + type: string + - description: End date of analytics to query. + example: "20" + in: path + name: EndDay + required: true + schema: + type: string + - description: End month of analytics to query. + example: "6" + in: path + name: EndMonth + required: true + schema: + type: string + - description: End year of analytics to query. + example: "2025" + in: path + name: EndYear + required: true + schema: + type: string + - description: OAuthClientID + in: path + name: OAuthClientID + required: true + schema: + type: string responses: - '200': - description: Get details of a single Policy + "200": content: application/json: + examples: + aggregateAnalytics: + $ref: '#/components/examples/aggregateAnalytics' schema: - $ref: "#/components/schemas/Policy" - '404': - description: Policy not found + $ref: '#/components/schemas/AggregateAnalyticsData' + description: Fetched analytics successfully. + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Policy not found - status: error - put: - summary: Update Policy Definition - description: Update a Policy Definition - operationId: putPolicies - tags: - - Policies - parameters: - - name: id - in: path - description: ID of Policy to update. - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/Policy" - example: - name: new policy - quota_max: 60 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 - responses: - '200': - description: Policy updated - content: - application/json: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiModifyKeySuccess' - example: - action: updated - status: ok - '400': - description: Bad Request + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: PUT operation on different IDs - status: error - '500': - description: Internal server error + Message: User does not have access to the API with ID. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Failed to create file! - status: error - delete: - summary: Delete a single Policy by ID - description: Delete a Policy by ID - operationId: deletePolicy + Message: Failed to fetch analytics. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Analytics of Oauth Client ID. tags: - - Policies + - Analytics + /api/apis: + get: + description: Get List of APIs.By default the returned apis will be sorted by + created_at field in descending order but this can be changed via sort query + parameter.The apis returned are paginated + operationId: getApis parameters: - - name: id - in: path - description: ID of Policy to delete. - required: true - schema: - type: string + - allowEmptyValue: true + deprecated: true + description: Return smaller API list payload. + example: "1" + in: query + name: compressed + required: false + schema: + enum: + - "1" + type: string + - description: API Type, internal or external. + example: rest + in: query + name: api_type + required: false + schema: + enum: + - tcp + - rest + - graphql + - udg + - subgraph + - supergraph + - internal + type: string + - description: Comma separated list of categories you want to filter Apis by. + in: query + name: category + required: false + schema: + type: string + - description: Comma separated list of authentication type you want to filter + apis by. + example: keyless,authToken + in: query + name: auth_type + required: false + schema: + type: string + - allowEmptyValue: true + description: For versioned APIs, return only the base versions.If any value + is sent in this query parameter only the base version will be returned + example: "1" + in: query + name: base_apis + required: false + schema: + type: string + - description: Query string for search/filtering.This will return all apis whose + names matches the given pattern + example: Rate Limit Path API 1 + in: query + name: q + required: false + schema: + type: string + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + - description: |- + * 'name' - Sort by name in ascending order. + * '-name' - Sort by name in descending order. + * 'updated_at' - Sort by updated_at in ascending order. + * '-updated_at' - Sort by updated_at in descending order. + * 'created_at' - Sort by created_at in ascending order. + * '-created_at' - Sort by created_at in descending order. + example: name + in: query + name: sort + required: false + schema: + enum: + - name + - -name + - created_at + - -created_at + - updated_at + - -updated_at + type: string responses: - '200': - description: Delete policy by ID + "200": content: application/json: + examples: + paginatedApiExample: + $ref: '#/components/examples/paginatedApiExample' schema: - $ref: '#/components/schemas/apiModifyKeySuccess' + $ref: '#/components/schemas/ApiDefinitionsResponse' + description: List of API definitions. + "400": + content: + application/json: example: - action: deleted - status: ok - '500': - description: Internal server error + Message: Could not retrieve APIs. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": content: application/json: + example: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: example: - message: Delete failed - status: error - /api/apis: - get: - summary: Get List of APIs - description: Get List of APIs - operationId: getApis - tags: - - APIs - parameters: - - name: compressed - in: query - required: false - deprecated: true - schema: - type: string - allowEmptyValue: true - description: Return smaller API list payload. - - name: graph - in: query - required: false - deprecated: true - schema: - type: string - allowEmptyValue: true - description: Transform the response payload for graphql. - - name: api_type - in: query - required: false - schema: - type: string - description: API Type, internal or external. - - name: q - in: query - required: false - schema: - type: string - description: Query string for search/filtering. - - name: sort - in: query - description: Specifies the sort order of the returned results. - required: false - schema: - type: string - oneOf: - - enum: ['name'] - description: 'Sort by name in ascending order' - - enum: ['-name'] - description: 'Sort by name in descending order' - - enum: ['updated_at'] - description: 'Sort by updated_at in ascending order' - - enum: ['-updated_at'] - description: 'Sort by updated_at in descending order' - - enum: ['created_at'] - description: 'Sort by created_at in ascending order' - - enum: ['-created_at'] - description: 'Sort by created_at in descending order' - - name: category - in: query - required: false - schema: - type: string - description: Filter APIs by category (CSV). - - name: auth_type - in: query - required: false - schema: - type: string - description: Filter APIs by authentication type (CSV). - - name: base_apis - in: query - required: false - schema: - type: string - allowEmptyValue: true - description: For versioned APIs, return only the base versions. - responses: - '200': - description: List of API definitions + Message: 'access denied: You do not have permission to access /api/apis' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: + example: + Message: Failed to marshal data for APIs. + Meta: null + Status: Error schema: - type: array - items: - $ref: '#/components/schemas/APIDefinition' + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get List of APIs + tags: + - APIs post: - summary: Create API Definition - description: Create an API Definition in Tyk Classic API format. - Note that the response includes the newly created Tyk Classic API Definition containing the unique identifier for the API (`api_id`). You can provide a value for the `api_id` in the request body, otherwise Tyk will automatically generate a value. - The `id` field within the Tyk Classic API Definition is a proprietary field used by Tyk to identify the API within the database and cannot be chosen or modified by the user. + description: |- + Create an API Definition in Tyk Classic API format. + Note that the response includes the newly created Tyk Classic API Definition containing the unique identifier for the APIs (`api_id`). You can provide a value for the `api_id` in the request body, otherwise Tyk will automatically generate a value for you. + The `ID` field within the Tyk Classic API Definition is a proprietary field used by Tyk to identify the API within the database and cannot be chosen or modified by the user. operationId: postApis - tags: - - APIs parameters: - - name: base_api_id - in: query - required: false - schema: - type: string - description: The base API which the new version will be linked to. - - name: base_api_version_name - in: query - required: false - schema: - type: string - description: The version name of the base API while creating the first version. This doesn't have to be sent for the next versions but if it is set, it will override base API version name. - - name: new_version_name - in: query - required: false - schema: - type: string - description: The version name of the created version. - - name: set_default - in: query - required: false - schema: - type: boolean - description: If true, the new version is set as default version. + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: + type: string + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: + type: string + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: + type: string + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean requestBody: content: application/json: - schema: - $ref: "#/components/schemas/APIDefinition" example: api_definition: - name: Test + api_id: b84fe1a04e5648927971c0557971565c auth: auth_header_name: authorization definition: + key: version location: header - key: '' + name: Tyk Test API + org_id: 664a14650619d40001f1f00f proxy: - target_url: http://httpbin.org/ + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true version_data: - use_extended_paths: true not_versioned: true versions: Default: - expires: '' name: Default - paths: - ignored: [ ] - white_list: [ ] - black_list: [ ] - extended_paths: - ignored: - - path: "/test-path/" - method_actions: - GET: - action: no_action - code: 200 - data: '' - headers: { } - - path: "/test-path/reply" - method_actions: - GET: - action: reply - code: 200 - data: '{"foo":"bar"}' - headers: - x-test: test - white_list: [ ] - black_list: [ ] - use_extended_paths: true - use_oauth2: false - oauth_meta: - auth_login_redirect: '' - allowed_access_types: [ ] - allowed_authorize_types: - - token - notifications: - shared_secret: '' - oauth_on_keychange_url: '' - enable_ip_whitelisting: true - allowed_ips: - - 127.0.0.1 - use_keyless: false - enable_signature_checking: false - use_basic_auth: false - active: true - enable_batch_request_support: true - hook_references: - - event_name: QuotaExceeded - hook: - api_model: { } - id: 54be6c0beba6db07a6000002 - org_id: 54b53d3aeba6db5c35000002 - name: Test Post - method: POST - target_path: http://httpbin.org/post - template_path: '' - header_map: - x-tyk-test: '123456' - event_timeout: 0 - event_timeout: 60 + schema: + $ref: '#/components/schemas/ApiDefinitionWrapper' responses: - '200': + "200": + content: + application/json: + example: + ID: 284acad18f44f3d4e9a0832ccf5fd1 + Message: API created + Meta: 663cd8615715ec1405aafbea + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' description: API created + "400": content: application/json: + example: + Message: version name header should be set with base API ID + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiModifyKeySuccess" + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: example: - status: "ok" - action: "created" - key: "{...API JSON definition...}" - '400': - description: Malformed data + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis' + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "409": + content: + application/json: example: - status: "error" - message: "Malformed API data" - /api/apis/search: - get: - summary: Search List of APIs - description: Search List of APIs - operationId: searchApis - tags: - - APIs - parameters: - - name: q - in: query - description: Search query - schema: - type: string - responses: - '200': - description: List of API definitions - content: - application/json: + Message: Found API with the same ID + Meta: null + Status: Error schema: - type: array - items: - $ref: '#/components/schemas/APIDefinition' - /api/apis/{id}: - get: - summary: Get a single API by ID - description: Get an API by ID - operationId: getApi + $ref: '#/components/schemas/ApiResponse' + description: if API with given API ID already exist + summary: Create API Definition tags: - - APIs + - APIs + /api/apis/{apiID}/access: + get: + description: This will return APIAccessManagementPayload that has two lists + containing users and user groups that have access to an API. + operationId: getApiAccessRights parameters: - - name: id - in: path - description: ID of API to get. Can either be internal or public API id. - required: true - schema: - type: string + - description: The API ID + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiID + required: true + schema: + type: string responses: - '200': - description: API definition + "200": content: application/json: + example: + userGroupIds: + - 663a4ed6b6be920001b191aa + - 663a4ed6b6be920001b191ab + userIds: + - 663b2a835715ecb6edef24e3 + - 663a5bbf5715ec8040251f2a schema: - $ref: "#/components/schemas/APIDefinition" - headers: - x-tyk-base-api-id: - schema: - type: string - description: ID of the base API if the requested API is a version. - put: - summary: Update API Definition - description: Update an API Definition. api_id can be updated for On-Premise installations, but it cannot be updated when the Dashboard resides in Tyk Cloud. Updates to api_id in Tyk Cloud will be ignored. - operationId: putApi - tags: - - APIs - parameters: - - name: id - in: path - description: ID of API to update. Can either be internal or public API id. - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/APIDefinition" - example: - api_definition: - id: 54c24242eba6db1c9a000002 - api_id: bc2f8cfb7ab241504d9f3574fe407499 - name: Test - auth: - auth_header_name: authorization - definition: - location: header - key: '' - proxy: - target_url: http://httpbin.org/ - version_data: - use_extended_paths: true - not_versioned: true - versions: - Default: - expires: '' - name: Default - paths: - ignored: [ ] - white_list: [ ] - black_list: [ ] - extended_paths: - ignored: - - path: "/test-path/" - method_actions: - GET: - action: no_action - code: 200 - data: '' - headers: { } - - path: "/test-path/reply" - method_actions: - GET: - action: reply - code: 200 - data: '{"foo":"bar"}' - headers: - x-test: test - white_list: [ ] - black_list: [ ] - use_extended_paths: true - use_oauth2: false - oauth_meta: - auth_login_redirect: '' - allowed_access_types: [ ] - allowed_authorize_types: - - token - notifications: - shared_secret: '' - oauth_on_keychange_url: '' - enable_ip_whitelisting: true - allowed_ips: - - 127.0.0.1 - use_keyless: false - enable_signature_checking: false - use_basic_auth: false - active: true - enable_batch_request_support: true - hook_references: - - event_name: QuotaExceeded - hook: - api_model: { } - id: 54be6c0beba6db07a6000002 - org_id: 54b53d3aeba6db5c35000002 - name: Test Post - method: POST - target_path: http://httpbin.org/post - template_path: '' - header_map: - x-tyk-test: '123456' - event_timeout: 0 - event_timeout: 60 - responses: - '200': - description: API updated + $ref: '#/components/schemas/AccessManagementPayload' + description: APIAccessManagementPayload represents two lists containing + users and user groups that have access to an API + "401": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "updated" - key: "{...API JSON definition...}" - '400': - description: Malformed data - content: - application/json: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - status: "error" - message: "Malformed API data" - delete: - summary: Delete a single API by ID - description: Delete an API by ID - operationId: deleteApi - tags: - - APIs - parameters: - - name: id - in: path - description: ID of API to get. Can either be internal or public API id. - required: true - schema: - type: string - responses: - '200': - description: API deleted + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: API deleted - status: ok - '400': - description: No API ID specified - content: - application/json: + Message: 'access denied: You do not have permission to access /api/apis/{apiID}/access' + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - message: API ID not specified - status: error - /api/apis/oas: - post: - description: |- - Create an API Definition in Tyk OAS API format. - Note that the response includes the newly created Tyk OAS API Definition containing the unique identifier for the API (`id`). You can provide a value for `id` in the request body, otherwise Tyk will automatically generate a value. - tags: - - OAS APIs - parameters: - - name: base_api_id - in: query - required: false - schema: - type: string - description: The base API which the new version will be linked to. - - name: base_api_version_name - in: query - required: false - schema: - type: string - description: The version name of the base API while creating the first version. This doesn't have to be sent for the next versions but if it is set, it will override base API version name. - - name: new_version_name - in: query - required: false - schema: - type: string - description: The version name of the created version. - - name: set_default - in: query - required: false - schema: - type: boolean - description: If true, the new version is set as default version. - - name: templateID - in: query - required: false - schema: - type: string - description: The asset ID of template to apply while creating the OAS API. - operationId: createApiOAS - requestBody: - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - responses: - '200': - description: API created + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "created" - key: "{...API JSON definition...}" - '400': - description: Malformed data + Message: API not found + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API with this ID does not exist + "500": content: application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" example: - status: "error" - message: "Malformed API data" - /api/apis/oas/dry-run: - post: - description: |- - Generate a Tyk OAS API definition without saving it to the Dashboard database. - This endpoint is used to produce a Tyk OAS API definition without creating the API proxy itself. This provides a dry run functionality for Tyk OAS API creation, showing what would be created in the Dashboard given the set of inputs provided. + Message: failed to marshal ownership payload + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get API access rights (users and userGroups) tags: - - OAS APIs - operationId: dryRunApiOAS + - APIs + put: + description: This will update the user group and users that have access to an + API.The userIds and userGroup sent will entirely replace the existing userIds + IDs and userGroup ids. + operationId: updateApiAccessRights parameters: - - $ref: '#/components/parameters/UpstreamURL' - - $ref: '#/components/parameters/ListenPath' - - $ref: '#/components/parameters/CustomDomain' - - $ref: '#/components/parameters/AllowList' - - $ref: '#/components/parameters/ValidateRequest' - - $ref: '#/components/parameters/MockResponse' - - $ref: '#/components/parameters/Authentication' - - name: templateID - in: query - required: false - schema: - type: string - description: The asset ID of template to apply while importing an OAS API. - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/DryRunRequest" - responses: - '200': - description: Successfully generated a Tyk OAS API definition from the provided input - content: - application/json: - schema: - $ref: "#/components/schemas/TykOasApiDefinition" - examples: - example1: - summary: Example of dry run providing only an OpenAPI document - value: - components: - securitySchemes: - apiKey: - scheme: basic - type: http - info: - description: This is a slimmed down single path version of the Petstore definition. - title: Single Path - version: '1.0.0' - openapi: '3.0.0' - paths: - /pet/{id}: - get: - description: This operation will find a pet in the database. - operationId: pet/{id}GET - responses: - '400': - description: Invalid ID provided - '404': - description: Pet not found - security: [ ] - summary: Find a pet - tags: - - pet - parameters: - - in: path - name: id - required: true - schema: - type: integer - put: - description: This operation will update a pet in the database. - operationId: pet/{id}PUT - responses: - '400': - description: Invalid ID provided - '404': - description: Pet not found - '409': - description: Conflict, another pet with the same ID exists - security: - - apiKey: [ ] - summary: Update a pet - tags: - - pet - servers: - - url: https://httpbin.org - x-tyk-api-gateway: - info: - name: Single Path - state: - active: true - upstream: - url: https://httpbin.org - server: - listenPath: - value: / - strip: true - example2: - summary: Example of dry run updating an existing Tyk OAS API Definition with the provided OpenAPI document - value: - components: - securitySchemes: - apiKey: - scheme: basic - type: http - info: - description: This is a slimmed down single path version of the Petstore definition. - title: Single Path - version: '1.0.0' - openapi: '3.0.0' - paths: - /pet/{id}: - get: - description: This operation will find a pet in the database. - operationId: pet/{id}GET - responses: - '400': - description: Invalid ID provided - '404': - description: Pet not found - security: [ ] - summary: Find a pet - tags: - - pet - parameters: - - in: path - name: id - required: true - schema: - type: integer - put: - description: This operation will update a pet in the database. - operationId: pet/{id}PUT - responses: - '400': - description: Invalid id value - security: - - apiKey: [ ] - summary: Update a pet - tags: - - pet - servers: - - url: https://httpbin.org - x-tyk-api-gateway: - info: - id: 5616cd9b49bc465c6c7d27dd9195b20b - dbId: 6646094a5f4a55451a9fa1ba - orgId: 6645e9915f4a557b29654b9a - name: Single Path - state: - active: true - upstream: - url: https://httpbin.org - server: - listenPath: - value: / - strip: true - '400': - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - status: "error" - message: "Bad request" - '500': - description: Internal server error - content: - application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - status: "error" - message: "Internal server error" - /api/apis/oas/{apiID}: - parameters: - description: The API ID - name: apiID + example: b84fe1a04e5648927971c0557971565c in: path + name: apiID required: true schema: type: string - get: - description: |- - Get API definition in OAS format - tags: - - OAS APIs - parameters: - - description: |- - The mode of OAS export. By default the mode is not set which means the OAS spec is exported including the OAS Tyk extension. - If the mode is set to public, the OAS spec excluding the Tyk extension is exported. - name: mode - in: query - schema: - type: string - example: public - operationId: listApiOAS - responses: - '200': - description: API definition - content: - application/json: - schema: - $ref: "#/components/schemas/OASSchemaResponse" - headers: - x-tyk-base-api-id: - schema: - type: string - description: ID of the base API if the requested API is a version. - put: - description: | - Updating an API definition uses the same signature object as a `POST`. It will first ensure that the API ID being updated is the same as in the `PUT` object. - Updating will completely replace the file descriptor and will not change an API Definition that has already been loaded. The hot-reload endpoint will need to be called to push the new definition to live. - tags: - - OAS APIs - operationId: updateApiOAS requestBody: content: application/json: + example: + userGroupIds: + - 663a4ed6b6be920001b191aa + - 663a4ed6b6be920001b191ab + userIds: + - 663a5bbf5715ec8040251f2a schema: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" + $ref: '#/components/schemas/AccessManagementPayload' responses: - '200': - description: API updated + "200": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "updated" - key: "{...API JSON definition...}" - '400': - description: Malformed data - content: - application/json: + Message: API access updated + Meta: null + Status: OK schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - status: "error" - message: "Malformed API data" - patch: - summary: Patch a single OAS API by ID - description: |- - Update an OAS format API. You can use this endpoint to update the OAS part of your Tyk API definition. - This endpoint allows you to configure the Tyk OAS extension based on the query parameters provided (similar to import) - tags: - - OAS APIs - operationId: patchApiOAS - parameters: - - $ref: '#/components/parameters/UpstreamURL' - - $ref: '#/components/parameters/ListenPath' - - $ref: '#/components/parameters/CustomDomain' - - $ref: '#/components/parameters/ValidateRequest' - - $ref: '#/components/parameters/AllowList' - - $ref: '#/components/parameters/MockResponse' - - $ref: '#/components/parameters/Authentication' - requestBody: - content: - application/json: - schema: - oneOf: - - $ref: "#/components/schemas/ImportOrPatchFromURL" - - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - multipart/form-data: - schema: - description: |- - The content of the file should be the OpenAPI document in JSON format (without x-tyk-api-gateway extension). - type: object - properties: - file: - type: string - format: binary - responses: - '200': - description: API patched + $ref: '#/components/schemas/ApiResponse' + description: API access updated + "401": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "modified" - key: "{updated APIID}" - '400': - description: Bad request + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/{apiID}/access' + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" - examples: - malformedBody: - summary: When the request body is malformed - value: - message: "Request malformed" - status: "error" - missingAPIID: - summary: When the request is missing the APIID in the query parameter - value: - message: "Must specify an apiID to patch" - status: "error" - nonExistingAPIID: - summary: When the client sends an APIID which doesn't exist in your Tyk Gateway - value: - message: "No API found for APIID {APIID}" - status: "error" - invalidUpstreamURL: - summary: When the client sends a query param upstreamURL which isn't valid - value: - message: "invalid upstream URL" - status: "error" - delete: - description: |- - Deleting an API definition will remove the file from the file store. The API definition will NOT be unloaded and a separate reload request will need to be made to disable the API endpoint. - tags: - - OAS APIs - operationId: deleteOASApi - responses: - '200': - description: API deleted + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: API deleted - status: ok - '400': - description: No API ID specified + Message: API not found + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API with ID not found + "500": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: API ID not specified - status: error - /api/apis/oas/{apiID}/categories: - parameters: - - description: The categories serve as identifiers for the API definitions, subsequently enabling the filtering of API listings based on these categories on the API list page. - name: apiID + Message: failed to unmarshal categories payload + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update API access rights (users and userGroups) + tags: + - APIs + /api/apis/{apiID}/keys: + get: + description: Lists keys that grant access to the API with the ID {apiID}. + operationId: listApiKeys + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + - description: ID of the API. + example: 663a4ed9b6be920001b191ae in: path + name: apiID required: true schema: type: string - get: - description: |- - Get a list of the API categories associated with the specified API - tags: - - OAS APIs - operationId: getApiCategories responses: - '200': - description: API categories + "200": content: application/json: - schema: - $ref: "#/components/schemas/CategoriesPayload" example: - categories: - - tag1 - - tag2 - '404': - description: This error code is returned when the API with the requested ID is not found - content: - application/json: + data: + keys: + - 5e9d9544a1dcd60001d0ed20a28c495beff140a4a6d8c272a1956b99 + - 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + - 5e9d9544a1dcd60001d0ed2060ff87c0deab4a508dd2ac18ccb8b664 + pages: 1 schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - message: API not found - status: error - '500': - description: Internal server error + $ref: '#/components/schemas/Keys' + description: Paginated key IDs. + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Failed to get API categories - status: error - put: - description: |- - Update the list of API categories associated with the specified API - tags: - - OAS APIs - operationId: updateApiCategories - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CategoriesPayload" - example: - categories: - - tag1 - - tag2 - responses: - '200': - description: API categories succesfuly updated response - content: - application/json: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - message: API categories updated - status: OK - '404': - description: API not found + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: API not found - status: error - '400': - description: Bad request + Message: 'access denied: You do not have permission to access /api/apis/{apiID}/keys' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Failed to extract categories payload - status: error - '500': - description: Internal server error + Message: Could not retrieve keys. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when keys are hashed and hashed key listing is disabled. + "500": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Failed to update API categories - status: error - /api/apis/categories: - get: - description: |- - Get a list of all the defined API categories - tags: - - APIs - operationId: getAllApiCategories - responses: - '200': - description: API categories - content: - application/json: - schema: - $ref: "#/components/schemas/AllCategoriesResponse" - example: - categories: - - name: tag1 - count: 2 - - name: tag2 - count: 3 - '500': - description: Internal server error - content: - application/json: + Message: Failed to unmarshal keys data from Tyk API. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - message: Failed to get API categories - status: error - /api/apis/oas/{apiID}/versions: - parameters: - - description: The API ID - name: apiID + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List keys by API. + tags: + - Keys + /api/apis/{apiID}/keys/{keyID}: + delete: + description: Deleting a key will remove it permanently from the system, however + analytics relating to that key will still be available. + operationId: deleteApiKeyDetail + parameters: + - description: If you are not sure if a key is hashed you can send this as true. + example: true + in: query + name: auto_guess + required: false + schema: + default: false + enum: + - true + - false + type: boolean + - description: Use the hash of the key as input instead of the full key. Any + none empty string will be interpreted as to say you want to use hash input. + example: "1" + in: query + name: hashed + required: false + schema: + type: string + - description: Set to true if the passed key is a username. + example: true + in: query + name: username + required: false + schema: + enum: + - true + - false + type: boolean + - description: ID of API the keys grant access to. Can either be the internal + or external API ID. + example: 546e885199c947147e7f39b7d6e8e984 in: path + name: apiID required: true schema: type: string - get: - description: |- - Listing versions of an OAS API - tags: - - OAS APIs - operationId: listOASApiVersions - parameters: - - $ref: '#/components/parameters/SearchText' - - $ref: '#/components/parameters/AccessType' - responses: - '200': - description: API version metas - content: - application/json: - schema: - properties: - apis: - type: array - items: - $ref: '#/components/schemas/APIVersionMeta' - pages: - type: integer - /api/apis/{apiID}/access: - parameters: - - description: The API ID - name: apiID + - description: The key ID + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 in: path + name: keyID required: true schema: type: string - get: - description: |- - Get API access rights (users and userGroups) - tags: - - APIs - operationId: getApiAccessRights responses: - '200': - description: API access rights + "200": content: application/json: - schema: - $ref: "#/components/schemas/APIAccessManagementPayload" example: - userIds: - - id: 65a6ebcab1f93b1e6b4a39eb - userGroupIds: - - id: 65a6ebcab1f93b1e6b4a39ec - '404': - description: API not found + Message: Key deleted successfully. + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Key deleted. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - Message: "API not found" - Status: "error" + Message: Attempted access to non-owned key. Meta: null - put: - description: |- - Update API access rights (users and userGroups) - tags: - - APIs - operationId: updateApiAccessRights - requestBody: + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Trying to access a key your org does not own. + "401": content: application/json: - schema: - $ref: "#/components/schemas/APIAccessManagementPayload" - example: - userIds: - - id: 65a6ebcab1f93b1e6b4a39eb - userGroupIds: - - id: 65a6ebcab1f93b1e6b4a39ec - responses: - '200': - description: API access updated - content: - application/json: - example: - Status: "OK" - Message: "Api access updated" - Meta: null - '404': - description: API not found - content: - application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - Message: "API not found" - Status: "error" - Meta: null - /api/apis/oas/import: - post: - description: |- - For use with an existing OpenAPI document that you want to expose via your Tyk Gateway. - Create a new Tyk OAS API from an OpenAPI document in JSON format (without x-tyk-api-gateway extension). - The payload can contain either a fully fledged OpenAPI document or a URL pointing to an OpenAPI document. - tags: - - OAS APIs - operationId: importOAS - parameters: - - $ref: '#/components/parameters/UpstreamURL' - - $ref: '#/components/parameters/ListenPath' - - $ref: '#/components/parameters/CustomDomain' - - $ref: '#/components/parameters/AllowList' - - $ref: '#/components/parameters/ValidateRequest' - - $ref: '#/components/parameters/MockResponse' - - $ref: '#/components/parameters/Authentication' - - name: templateID - in: query - required: false - schema: - type: string - description: The asset ID of template to apply while importing an OAS API. - requestBody: - content: - application/json: - schema: - oneOf: - - $ref: "#/components/schemas/ImportOrPatchFromURL" - - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - responses: - '200': - description: API definition + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "added" - key: "{created APIID}" - '400': - description: Bad request + Message: 'access denied: You do not have permission to access /api/apis/{apiID}/keys/{keyID}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: + example: + Message: Could not retrieve key detail. + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" - examples: - malformedBody: - summary: When the request body is malformed - value: - message: "Request malformed" - status: "error" - invalidUpstreamURL: - summary: When the client sends a query param upstreamURL which isn't valid - value: - message: "invalid upstream URL" - status: "error" - '500': - description: Internal server error + $ref: '#/components/schemas/ApiResponse' + description: Key with ID not found. + "500": content: application/json: + example: + Message: Could not delete key. + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" - examples: - failedToImportOAS: - summary: When the OAS cannot be imported - value: - message: "failed to import OAS" - status: "error" - /api/apis/oas/{apiID}/export: - parameters: - - description: The API ID + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete key with API ID and key ID. + tags: + - Keys + get: + description: Fetches the key that grant access to the API with the ID {apiID} + and key ID {keyID}. + operationId: getApiKeyDetail + parameters: + - description: If you are not sure if a key is hashed you can send this as true. + example: true + in: query + name: auto_guess + required: false + schema: + default: false + enum: + - true + - false + type: boolean + - description: Use the hash of the key as input instead of the full key.Any + none empty string will be interpreted as to say you want to use hash input. + example: "1" + in: query + name: hashed + required: false + schema: + type: string + - description: Set to true if the passed key ID is a username. + example: true + in: query + name: username + required: false + schema: + enum: + - true + - false + type: boolean + - description: ID of API the keys grant access to. Can either be the internal + or external API ID. + example: 546e885199c947147e7f39b7d6e8e984 + in: path name: apiID + required: true + schema: + type: string + - description: The Key ID. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 in: path + name: keyID required: true schema: type: string - get: - description: |- - download API definition in OAS format(only APIs saved in OAS format), - tags: - - OAS APIs - operationId: downloadApiOASPublic - parameters: - - description: |- - Mode of OAS export, by default mode could be empty which means to export OAS spec including OAS Tyk extension. - When mode=public, OAS spec excluding Tyk extension is exported - name: mode - in: query - schema: - type: string - example: public responses: - '200': - description: API definition + "200": content: application/json: schema: - $ref: "#/components/schemas/OASSchemaResponse" - /api/apis/oas/export: - get: - description: |- - List all OAS format APIs - tags: - - OAS APIs - operationId: downloadApisOASPublic - parameters: - - description: |- - The mode of OAS export. By default the mode is not set which means the OAS spec is exported including the OAS Tyk extension. - If the mode is set to public, the OAS spec excluding the Tyk extension is exported. - name: mode - in: query - schema: - type: string - example: public - responses: - '200': - description: API definition + $ref: '#/components/schemas/KeyData' + description: Key data fetched. + "400": content: application/json: + example: + Message: Attempted access to non-owned key. + Meta: null + Status: Error schema: - type: array - items: - $ref: '#/components/schemas/OASSchemaResponse' - - /api/activity/keys/{keyHash}/{startDay}/{startMonth}/{startYear}/{EndDay}/{EndMonth}/{EndYear}: - get: - summary: Analytics of API Key - description: It returns analytics of the endpoints of all APIs called using KEY between start and end date. - operationId: getAnalyticsOfApiKey - tags: - - Analytics - parameters: - - name: keyHash - in: path - description: Hash of your API key. - required: true - schema: - type: string - - name: startDay - in: path - description: Day of analytics to query. - required: true - schema: - type: string - - name: startMonth - in: path - description: Month of analytics to query. - required: true - schema: - type: string - - name: startYear - in: path - description: Start year of analytics to query. - required: true - schema: - type: string - - name: EndDay - in: path - description: End date of analytics to query. - required: true - schema: - type: string - - name: EndMonth - in: path - description: End month of analytics to query. - required: true - schema: - type: string - - name: EndYear - in: path - description: End year of analytics to query. - required: true - schema: - type: string - responses: - '200': - description: Returns analytics of all endpoints called using the key `7f3c3ca87376cabe` between October 13th 2020 and October 14th 2020. + $ref: '#/components/schemas/ApiResponse' + description: Trying to access a key your org does not own. + "401": content: application/json: example: - data: - - id: - day: 0 - month: 0 - year: 0 - hour: 0 - code: 0 - path: "/anything" - key: '' - alias: '' - url: '' - iso_country: '' - api_id: 41351a6a94094da05f75146a695a16f6 - api_name: '' - hits: 1 - success: 1 - error: 0 - last_hit: '2020-10-13T13:22:49.667+05:30' - request_time: 0 - latency: 217 - upstream_latency: 217 - max_upstream_latency: 217 - min_upstream_latency: 217 - max_latency: 217 - min_latency: 217 - - id: - day: 0 - month: 0 - year: 0 - hour: 0 - code: 0 - path: "/anything" - key: '' - alias: '' - url: '' - iso_country: '' - api_id: 1793db2cbb724ad54da582ce3191d383 - api_name: '' - hits: 1 - success: 1 - error: 0 - last_hit: '2020-10-13T13:22:20.534+05:30' - request_time: 568 - latency: 568 - upstream_latency: 568 - max_upstream_latency: 568 - min_upstream_latency: 568 - max_latency: 568 - min_latency: 568 - pages: 1 - /api/activity/oauthid/{OAuthClientID}/{startDay}/{startMonth}/{startYear}/{EndDay}/{EndMonth}/{EndYear}: - get: - summary: Analytics of Oauth Client ID - description: Returns activity of all endpoints which used OAuth client `27b35a9ed46e429eb2361e440cc4005c` between October 13th 2020 and October 14th 2020. - operationId: getAnalyticsOfOauthClientId - tags: - - Analytics - parameters: - - name: OAuthClientID - in: path - description: OAuthClientID - required: true - schema: - type: string - - name: startDay - in: path - description: Day of analytics to query. - required: true - schema: - type: string - - name: startMonth - in: path - description: Month of analytics to query. - required: true - schema: - type: string - - name: startYear - in: path - description: Start year of analytics to query. - required: true - schema: - type: string - - name: EndDay - in: path - description: End date of analytics to query. - required: true - schema: - type: string - - name: EndMonth - in: path - description: End month of analytics to query. - required: true - schema: - type: string - - name: EndYear - in: path - description: End year of analytics to query. - required: true - schema: - type: string - responses: - '200': - description: Returns analytics of all endpoints called using the key `7f3c3ca87376cabe` between October 13th 2020 and October 14th 2020. + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: example: - data: - - id: - day: 0 - month: 0 - year: 0 - hour: 0 - code: 0 - path: "/get" - key: '' - alias: '' - url: '' - iso_country: '' - api_id: 79fc7cb80df940cc5089772200bd4926 - api_name: '' - hits: 2 - success: 1 - error: 1 - last_hit: '2020-10-13T14:48:51.582+05:30' - request_time: 498 - latency: 498 - upstream_latency: 497.5 - max_upstream_latency: 747 - min_upstream_latency: 248 - max_latency: 748 - min_latency: 248 - - id: - day: 0 - month: 0 - year: 0 - hour: 0 - code: 0 - path: "/post" - key: '' - alias: '' - url: '' - iso_country: '' - api_id: 79fc7cb80df940cc5089772200bd4926 - api_name: '' - hits: 1 - success: 1 - error: 0 - last_hit: '2020-10-13T14:49:31.541+05:30' - request_time: 0 - latency: 241 - upstream_latency: 239 - max_upstream_latency: 239 - min_upstream_latency: 239 - max_latency: 241 - min_latency: 241 - pages: 1 - /api/apis/{apiID}/keys: - get: - summary: List keys - description: Lists keys that grant access to the API with the ID {apiID}. - operationId: listKeys - tags: - - Keys - parameters: - - name: apiID - in: path - description: ID of API the keys grant access to. Can either be the internal or external API ID. - required: true - schema: - type: string - responses: - '200': - description: Keys retrieved successfully. + Message: 'access denied: You do not have permission to access /api/apis/{apiID}/keys/{keyID}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: - schema: - $ref: "#/components/schemas/apiAllKeys" example: - data: - keys: - - 54b53d3aeba6db5c3500000289a8fbc2bbba4ebc4934bb113588c792 - - 54b53d3aeba6db5c3500000230459d8568ec4bbf675bda2ff05e9293 - - 54b53d3aeba6db5c35000002ec9a2b1aca7b495771273a0895cb3627 - - 54b53d3aeba6db5c3500000272d97a10538248e9523ca09e425090b8 - - 54b53d3aeba6db5c3500000252b5c56c61ad42fe765101f6d70cf9c6 - pages: 1 - - /api/apis/{apiID}/keys/{keyID}: - parameters: - - name: apiID + Message: Could not retrieve key detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Key with ID not found. + summary: Get key details with API ID and key ID. + tags: + - Keys + put: + description: You can also manually add keys to Tyk using your own key-generation + algorithm. It is recommended if using this approach to ensure that the OrgID + being used in the API Definition and the key data is blank so that Tyk does + not try to prepend or manage the key in any way. + operationId: updateApiKeyDetail + parameters: + - description: If you are not sure if a key is hashed you can send this as true. + example: true + in: query + name: auto_guess + required: false + schema: + default: false + enum: + - true + - false + type: boolean + - description: Use the hash of the key as input instead of the full key. Any + none empty string will be interpreted as to say you want to use hash input. + example: "1" + in: query + name: hashed + required: false + schema: + type: string + - description: Set to true if the passed key ID is a username. + example: true + in: query + name: username + required: false + schema: + enum: + - true + - false + type: boolean + - description: Adding the suppress_reset parameter and setting it to 1, will + cause Tyk not to reset the quota limit that is in the current live quota + manager. By default Tyk will reset the quota in the live quota manager (initialising + it) when adding a key. Adding the `suppress_reset` flag to the URL parameters + will avoid this behaviour. + example: "1" + in: query + name: suppress_reset + required: false + schema: + type: string + - description: ID of API the keys grant access to. Can either be the internal + or external API ID. + example: 546e885199c947147e7f39b7d6e8e984 in: path - description: ID of API the keys grant access to. Can either be the internal or external API ID. + name: apiID required: true schema: type: string - - name: keyID + - description: The Key ID. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 in: path - description: The Key ID. + name: keyID required: true schema: type: string - get: - summary: Get key - description: Fetches the key that grant access to the API with the ID {apiID} and key ID {keyID}. - operationId: getKey - tags: - - Keys - responses: - '200': - description: Key retrieved successfully. - content: - application/json: - schema: - $ref: '#/components/schemas/SessionState' - example: - api_model: { } - key_id: eyJvcmciOiI1ZTlkOTU0NGExZGNkNjAwMDFkMGVkMjAiLCJpZCI6ImhlbGxvLXdvcmxkIiwiaCI6Im11cm11cjY0In0 - data: - last_check: 1421674410 - allowance: 1000 - rate: 1000 - per: 60 - expires: 1423684135 - quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_name: Nitrous Test - api_id: 39d2c98be05c424371c600bd8b3e2242 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: "" - basic_auth_data: - password: "" - hmac_enabled: true - hmac_string: "" - - put: - summary: Update key - description: |- - You can also manually add keys to Tyk using your own key-generation algorithm. It is recommended if using this approach to ensure that the OrgID being used in the API Definition and the key data is blank so that Tyk does not try to prepend or manage the key in any way. - tags: - - Keys - operationId: updateKey requestBody: content: application/json: - schema: - $ref: "#/components/schemas/SessionState" example: - last_check: 1421674410 + alias: portal-key allowance: 1000 - rate: 1000 + apply_policies: + - 62a0ec9092faf50001395817 + enable_detailed_recording: true + expires: 1.718439136e+09 + hmac_enabled: false + is_inactive: false + meta_data: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + org_id: 5e9d9544a1dcd60001d0ed20 per: 60 - expires: 1423684135 quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_name: Nitrous Test - api_id: 39d2c98be05c424371c600bd8b3e2242 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: "" - basic_auth_data: - password: "" - hmac_enabled: true - hmac_string: "" + quota_remaining: 0 + quota_renewal_rate: -1 + quota_renews: 1.715847135e+09 + rate: 1000 + tags: + - edge-eu + - edge + throttle_interval: 0 + throttle_retry_limit: 0 + schema: + $ref: '#/components/schemas/SessionState' responses: - '200': - description: Key updated + "200": content: application/json: schema: - $ref: '#/components/schemas/SessionState' + $ref: '#/components/schemas/KeyData' + description: Key updated + "400": + content: + application/json: example: - api_model: { } - key_id: eyJvcmciOiI1ZTlkOTU0NGExZGNkNjAwMDFkMGVkMjAiLCJpZCI6ImhlbGxvLXdvcmxkIiwiaCI6Im11cm11cjY0In0 - data: - last_check: 1421674410 - allowance: 1000 - rate: 1000 - per: 60 - expires: 1423684135 - quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_name: Nitrous Test - api_id: 39d2c98be05c424371c600bd8b3e2242 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: "" - basic_auth_data: - password: "" - hmac_enabled: true - hmac_string: "" - '401': - description: Unauthorized. - content: - application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - Status: Error - Message: User does not have permission to add API to key Access Rights! - delete: - summary: Delete key - description: Deleting a key will remove it permanently from the system, however analytics relating to that key will still be available. - tags: - - Keys - operationId: deleteKey - responses: - '200': - description: Key deleted + Message: User/Key object validation failed, most likely malformed + input. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed input. + "401": content: application/json: + example: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: example: - Status: OK - Message: Key deleted successfully - '401': - description: Unauthorized. + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unmarshalling request body failed, malformed. + "404": content: application/json: + example: + Message: Could not retrieve key detail. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiResponse' + description: Key with ID not found. + "500": + content: + application/json: example: + Message: Failed to unmarshal Key data. + Meta: null Status: Error - Message: Attempted access to non-owned key - - /api/keys: - post: - summary: Create a key - description: |- - Tyk will generate the access token based on the OrgID specified in the API Definition and a random UUID. This ensures that keys can be "owned" by different API Owners should segmentation be needed at an organisational level. -

- API keys without access_rights data will be written to all APIs on the system (this also means that they will be created across all SessionHandlers and StorageHandlers, it is recommended to always embed access_rights data in a key to ensure that only targeted APIs and their back-ends are written to. - tags: - - Keys - operationId: addKey - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SessionState" - example: - last_check: 1421674410 - allowance: 1000 - rate: 1000 - per: 60 - expires: 1423684135 - quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_id: 39d2c98be05c424371c600bd8b3e2242 - api_name: Nitrous Test - versions: - - Default - responses: - '200': - description: New Key added - content: - application/json: schema: - $ref: '#/components/schemas/SessionState' - example: - api_model: { } - key_id: eyJvcmciOiI1ZTlkOTU0NGExZGNkNjAwMDFkMGVkMjAiLCJpZCI6ImhlbGxvLXdvcmxkIiwiaCI6Im11cm11cjY0In0 - data: - last_check: 1421674410 - allowance: 1000 - rate: 1000 - per: 60 - expires: 1423684135 - quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_name: Nitrous Test - api_id: 39d2c98be05c424371c600bd8b3e2242 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: "" - basic_auth_data: - password: "" - hmac_enabled: true - hmac_string: "" - '401': - description: Unauthorized. - content: - application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - Status: Error - Message: User does not have permission to add API to key Access Rights! - - /api/keys/{keyID}: - parameters: - - name: keyID + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: With API ID and key ID. + tags: + - Keys + /api/apis/{apiId}: + delete: + description: Delete an API by ID + operationId: deleteApi + parameters: + - description: ID of API to delete. Can either be internal or public API ID. + example: b84fe1a04e5648927971c0557971565c in: path - description: The Key ID. + name: apiId required: true schema: type: string - post: - summary: Create custom key - description: Creates a key with a custom key ID. - operationId: createCustomKey - tags: - - Keys - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SessionState" - example: - last_check: 1421674410 - allowance: 1000 - rate: 1000 - per: 60 - expires: 1423684135 - quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_id: 39d2c98be05c424371c600bd8b3e2242 - api_name: Nitrous Test - versions: - - Default responses: - '200': - description: Custom key created. + "200": content: application/json: - schema: - $ref: '#/components/schemas/SessionState' example: - api_model: { } - key_id: eyJvcmciOiI1ZTlkOTU0NGExZGNkNjAwMDFkMGVkMjAiLCJpZCI6ImhlbGxvLXdvcmxkIiwiaCI6Im11cm11cjY0In0 - data: - last_check: 1421674410 - allowance: 1000 - rate: 1000 - per: 60 - expires: 1423684135 - quota_max: -1 - quota_renews: 1421164189 - quota_remaining: -1 - quota_renewal_rate: 60 - access_rights: - 39d2c98be05c424371c600bd8b3e2242: - api_name: Nitrous Test - api_id: 39d2c98be05c424371c600bd8b3e2242 - versions: - - Default - key_hash: 567b9a5419c3a9ef - '401': - description: Unauthorized. - content: - application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - Status: Error - Message: User does not have permission to add API to key Access Rights! - - /api/org/permissions: - get: - summary: List additional permissions - description: This API helps you to add and delete (CRUD) a list of additional (custom) permissions for your Dashboard users. Once created, a custom permission will be added to standard list of user permissions. Only Admin Dashboard users will be authorised to use this API. - operationId: listAdditionalPermissions - tags: - - Additional Permissions - responses: - '200': - description: Additional Permissions retrieved successfully. + Message: API deleted + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OK + "400": content: application/json: - schema: - properties: - additional_permissions: - type: object example: - additional_permissions: - api_developer: API Developer - api_manager: API Manager - '401': - description: Unauthorized. + Message: Could not delete the API + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failed to delete + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - Status: Error Message: Not authorised - put: - summary: Modify additional permissions - description: Whenever you want to add/update/delete an additional permission, just send back the updated list of permissions, through a PUT request to the API. - operationId: updateAdditionalPermissions - tags: - - Additional Permissions - requestBody: - content: - application/json: - schema: - properties: - additional_permissions: - type: object - example: - additional_permissions: - api_developer: API Developer - api_manager: API Manager - custom_permission: Custom Permission - responses: - '200': - description: Additional Permissions updated successfully. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - Status: OK - Message: Additional Permissions updated in org level - '401': - description: Unauthorized. + Message: 'access denied: You do not have permission to access /api/apis/{apiId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: + Message: Could not retrieve API detail + Meta: null Status: Error - Message: Not authorised - /api/sso/: - post: - summary: Generate authentication token - description: The Dashboard exposes the /api/sso Dashboard API which allows you to generate a temporary authentication token, valid for 60 seconds. - operationId: generateAuthToken + schema: + $ref: '#/components/schemas/ApiResponse' + description: API with given ID not found + summary: Delete a single API by ID tags: - - Single Sign On - requestBody: - content: - application/json: - schema: - properties: - ForSection: - type: string - enum: - - dashboard - - portal - OrgID: - type: string - EmailAddress: - type: string - GroupID: - type: string - example: - ForSection: dashboard - OrgID: 588b4f0bb275ff0001cc7471 - EmailAddress: name@somewhere.com - GroupID: "" + - APIs + get: + description: Get an API by ID + operationId: getApi + parameters: + - description: ID of API to get. Can either be internal or public API ID. + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiId + required: true + schema: + type: string responses: - '200': - description: Auth Token generated. + "200": content: application/json: + examples: + singleAPIDef: + $ref: '#/components/examples/singleAPIDef' schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - Status: OK - Message: SSO Nonce created - Meta: YTNiOGUzZjctYWZkYi00OTNhLTYwODItZTAzMDI3MjM0OTEw - '400': - description: Back Request. + $ref: '#/components/schemas/ApiDefinitionWrapper' + description: API definition + headers: + x-tyk-base-api-id: + description: ID of the base API if the requested API is a version. + schema: + type: string + style: simple + "400": content: application/json: + example: + Message: Could not retrieve API detail + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: example: + Message: Not authorised + Meta: null Status: Error - Message: "Cannot create an SSO session for an invalid payload: [Error: Org id not found ('588b4f0bb275ff0001cc7471').]" - '401': - description: Unauthorized. + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/{apiId}' + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: example: + Message: Failed to marshal data for API detail + Meta: null Status: Error - Message: Not authorised - /api/apis/keys/basic/{username}: - parameters: - - name: username + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get a single API by ID + tags: + - APIs + put: + description: Update an API Definition. api_id can be updated for On-Premise + installations, but it cannot be updated when the Dashboard resides in Tyk + Cloud. Updates to api_id in Tyk Cloud will be ignored. + operationId: putApi + parameters: + - description: ID of API to get. Can either be internal or public API ID. + example: b84fe1a04e5648927971c0557971565c in: path - description: Username of Basic Auth user to create, get, update, or delete. + name: apiId required: true schema: type: string - post: - summary: Create a Basic Auth User - description: Create a Basic Auth user with the username specified in the path {username}. - operationId: createBasicAuthUser - tags: - - Basic Authentication requestBody: content: application/json: - schema: - $ref: "#/components/schemas/SessionState" example: - last_check: 0 - allowance: 1000 - rate: 1000 - per: 60 - expires: 0 - quota_max: 10000 - quota_renews: 1424543479 - quota_remaining: 10000 - quota_renewal_rate: 2520000 - access_rights: - bc2f8cfb7ab241504d9f3574fe407499: - api_id: bc2f8cfb7ab241504d9f3574fe407499 - api_name: Test + api_definition: + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Update API name + org_id: 664a14650619d40001f1f00f + proxy: + listen_path: /updated-tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true versions: - - Default - basic_auth_data: - password: test123 + Default: + name: Default + schema: + $ref: '#/components/schemas/ApiDefinitionWrapper' responses: - '200': - description: User created successfully. + "200": content: application/json: + example: + Message: API updated + Meta: null + Status: OK schema: - $ref: "#/components/schemas/SessionState" + $ref: '#/components/schemas/ApiResponse' + description: API updated + "400": + content: + application/json: example: - api_model: { } - key_id: 54b53d3aeba6db5c3500000test-user - data: - last_check: 0 - allowance: 1000 - rate: 1000 - per: 60 - expires: 0 - quota_max: 10000 - quota_renews: 1424543479 - quota_remaining: 10000 - quota_renewal_rate: 2520000 - access_rights: - bc2f8cfb7ab241504d9f3574fe407499: - api_name: Test - api_id: bc2f8cfb7ab241504d9f3574fe407499 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: '' - basic_auth_data: - password: '' - hmac_enabled: false - hmac_string: '' - put: - summary: Update a Basic Auth User - description: Update the Basic Auth user specified in the path {username}. - operationId: updateBasicAuthUser - tags: - - Basic Authentication - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SessionState" - example: - last_check: 0 - allowance: 1000 - rate: 1000 - per: 60 - expires: 0 - quota_max: 10000 - quota_renews: 1424543479 - quota_remaining: 10000 - quota_renewal_rate: 2520000 - access_rights: - bc2f8cfb7ab241504d9f3574fe407499: - api_id: bc2f8cfb7ab241504d9f3574fe407499 - api_name: Test - versions: - - Default - basic_auth_data: - password: test123 - responses: - '200': - description: User created successfully. + Message: Invalid `ID` value + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: the ID sent in the body is not same as the ID in the path parameter + "401": content: application/json: + example: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: "#/components/schemas/SessionState" + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: example: - api_model: { } - key_id: 54b53d3aeba6db5c3500000test-user - data: - last_check: 0 - allowance: 1000 - rate: 1000 - per: 60 - expires: 0 - quota_max: 10000 - quota_renews: 1424543479 - quota_remaining: 10000 - quota_renewal_rate: 2520000 - access_rights: - bc2f8cfb7ab241504d9f3574fe407499: - api_name: Test - api_id: bc2f8cfb7ab241504d9f3574fe407499 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: '' - basic_auth_data: - password: '' - hmac_enabled: false - hmac_string: '' - get: - summary: Get a Basic Auth User - description: Get the Basic Auth user specified in the path {username}. - operationId: getBasicAuthUser - tags: - - Basic Authentication - responses: - '200': - description: User created successfully. + Message: 'access denied: You do not have permission to access /api/apis/{apiId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: + example: + Message: API definition does not exist + Meta: null + Status: Error schema: - $ref: "#/components/schemas/SessionState" + $ref: '#/components/schemas/ApiResponse' + description: API with given ID not found + "500": + content: + application/json: example: - api_model: { } - key_id: 54b53d3aeba6db5c3500000test-user - data: - last_check: 0 - allowance: 1000 - rate: 1000 - per: 60 - expires: 0 - quota_max: 10000 - quota_renews: 1424543479 - quota_remaining: 10000 - quota_renewal_rate: 2520000 - access_rights: - bc2f8cfb7ab241504d9f3574fe407499: - api_name: Test - api_id: bc2f8cfb7ab241504d9f3574fe407499 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: '' - basic_auth_data: - password: '' - hmac_enabled: false - hmac_string: '' - delete: - summary: Delete a Basic Auth User - description: Delete the Basic Auth user specified in the path {username}. - operationId: deleteBasicAuthUser + Message: Error while validating schema + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update API Definition tags: - - Basic Authentication + - APIs + /api/apis/{apiId}/keys/search: + get: + description: Lists keys that grant access to the API with the ID {apiID}. When + q query parameter is passed it will only return keys that contains the string + sent by q. + operationId: SearchKeys + parameters: + - description: Filter and return all keys that contain this text in there key + ID. + example: itachi + in: query + name: q + required: false + schema: + type: string + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + - description: ID of the API. + example: 663a4ed9b6be920001b191ae + in: path + name: apiId + required: true + schema: + type: string responses: - '200': - description: User created successfully. + "200": content: application/json: - schema: - $ref: "#/components/schemas/SessionState" example: - api_model: { } - key_id: 54b53d3aeba6db5c3500000test-user data: - last_check: 0 - allowance: 1000 - rate: 1000 - per: 60 - expires: 0 - quota_max: 10000 - quota_renews: 1424543479 - quota_remaining: 10000 - quota_renewal_rate: 2520000 - access_rights: - bc2f8cfb7ab241504d9f3574fe407499: - api_name: Test - api_id: bc2f8cfb7ab241504d9f3574fe407499 - versions: - - Default - org_id: 54b53d3aeba6db5c35000002 - oauth_client_id: '' - basic_auth_data: - password: '' - hmac_enabled: false - hmac_string: '' - /api/org/opa: - get: - summary: List OPA Rules - description: Lists OPA Rules. - operationId: getOPA - tags: - - Open Policy Agent - responses: - '200': - description: Key retrieved successfully. + keys: + - 5e9d9544a1dcd60001d0ed20itachi + - 5e9d9544a1dcd60001d0ed20ns-itachi + pages: 1 + schema: + $ref: '#/components/schemas/Keys' + description: Paginated key IDs + "400": content: application/json: example: - open_policy: - enabled: true - rules: "default hello = false\r\n\r\nhello {\r\n m := input.message\r\n m== \"world\"\r\n}" - /api/org/permission: - put: - summary: Update OPA Rules - description: Update OPA Rule Settings - operationId: updateOPA - tags: - - Open Policy Agent - requestBody: - content: - application/json: - schema: - type: object - example: - enabled: false - rules: "default hello = false\r\n\r\nhello {\r\n m := input.message\r\n m== \"world\"\r\n}" - responses: - '200': - description: tets + Message: Could not search keys. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Could not search keys. + "401": content: application/json: - schema: - type: object example: - Status: OK - Message: OPA rules has been updated on org level + Message: Not authorised Meta: null - /api/users: - get: - summary: List Users - description: Lists Dashboard Users - operationId: getUsers - tags: - - Users - responses: - '200': - description: "Users retrieved successfully." + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: example: - users: - - api_model: { } - first_name: John - last_name: Smith - email_address: john@jive.ly - password: $2a$10$mRVfrAf72N66anVNhA1KVuYaOwOrXhFzxyg6bwgZemUeVo2MNOpIa - org_id: 54b53d3aeba6db5c35000002 - active: true - id: 54b53d4bf25b920f09361526 - access_key: 0cf5e6c37add465a406f19807c081765 - user_permissions: - IsAdmin: admin - ResetPassword: admin - - api_model: { } - first_name: Test - last_name: User - email_address: banana@test.com - password: '' - org_id: 54b53d3aeba6db5c35000002 - active: true - id: 54bd0ad9ff4329b88985aafb - access_key: f81ee6f0c8f2467d539c132c8a422346 - user_permissions: - user_groups: read - users: read - pages: 0 - post: - summary: Add User - description: Add a User - operationId: addUser - tags: - - Users - requestBody: - content: - application/json: - schema: - type: object - example: - first_name: Jason - last_name: Jasonson - email_address: jason@jasonsonson.com - active: true - password: thisisatest - user_permissions: - IsAdmin: admin - responses: - '200': - description: User added succesfully + Message: 'access denied: You do not have permission to access /api/apis/{apiId}/keys/search' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: example: - Status: OK - Message: User created - Meta: '' - /api/users/search: + Message: Failed to unmarshal user data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Search keys by API. + tags: + - Keys + /api/apis/{apiId}/url: get: - summary: Retrieve user search results - deprecated: true - description: | - This endpoint allows you to search for users by providing their email address as a query parameter. - The endpoint was deprecated in favour of its POST alternative to avoid leaking sensitive information in the URL. + description: This will return your API BasePath(your API listen path) ,Host(your + API domain or gateway hostname ) and API URL (full url to your API upstream + which is a combination of the protocol the API uses (e.g http)+ host name(e.g + tyk.io) and the API listen_path ) + operationId: getApiUrl parameters: - - name: q - in: query - description: Query term used to search for users (email address) - required: true - schema: - type: string - example: "user" + - description: The API ID + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiId + required: true + schema: + type: string responses: - '200': - description: Successful response + "200": content: application/json: example: - users: - - api_model: { } - id: "65e9a499b1f93be3d4b531fb" - first_name: "John" - last_name: "Smith" - email_address: "user1@tyk.io" - org_id: "65e9a499b1f93be3d4b531ea" - active: true - access_key: "e4800a05614848994429f83d410b549b" - user_permissions: - IsAdmin: "admin" - group_id: "" - password_max_days: 0 - password_updated: "2024-03-07T13:27:21.354+02:00" - last_login_date: "0001-01-01T01:44:24+01:44" - created_at: "2024-03-07T13:27:21.354+02:00" - pages: 1 - '404': - description: Error response + ApiURL: http://localhost:8080/rate-limit-proxy-api/ + BasePath: /rate-limit-proxy-api/ + Host: localhost:8080 + schema: + $ref: '#/components/schemas/URLVals' + description: Urls returned successfully + "400": content: application/json: example: - status: "Error" - message: "Could not search users" - post: - summary: Retrieve user search results - description: | - This endpoint allows you to search for users by providing their email address in the request payload. - requestBody: - description: User search criteria - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/UserSearchCriteria' - example: - filters: - query: "user" - responses: - '200': - description: Successful response + Message: Could not retrieve API detail + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API not found + "401": content: application/json: example: - users: - - api_model: { } - id: "65e9a499b1f93be3d4b531fb" - first_name: "John" - last_name: "Smith" - email_address: "user1@tyk.io" - org_id: "65e9a499b1f93be3d4b531ea" - active: true - access_key: "e4800a05614848994429f83d410b549b" - user_permissions: - IsAdmin: "admin" - group_id: "" - password_max_days: 0 - password_updated: "2024-03-07T13:27:21.354+02:00" - last_login_date: "0001-01-01T01:44:24+01:44" - created_at: "2024-03-07T13:27:21.354+02:00" - pages: 1 - '404': - description: Error response + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: example: - status: "Error" - message: "Could not search users" - - /api/users/{USER_ID}: - get: - summary: Get User - description: Get user specified by {USER_ID} in path. - operationId: getUser + Message: 'access denied: You do not have permission to access /api/apis/{apiId}/url' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + summary: Get API URLs tags: - - Users - parameters: - - name: USER_ID - in: path - description: USER ID of the user to retrieve data for - required: true - schema: - type: string + - APIs + /api/apis/categories: + get: + description: Get a list of all the defined API categories and the number(count) + of APIs that are in each category. + operationId: getAllApiCategories responses: - '200': - description: "User retrieved succesfully" + "200": content: application/json: example: - api_model: { } - first_name: Test - last_name: User - email_address: banana@test.com - password: '' - org_id: 54b53d3aeba6db5c35000002 - active: true - id: 54bd0ad9ff4329b88985aafb - access_key: f81ee6f0c8f2467d539c132c8a422346 - put: - summary: Update User - description: Update User - operationId: updateUser - parameters: - - name: USER_ID - in: path - description: USER ID of the user to retrieve data for - required: true - schema: - type: string - tags: - - Users - requestBody: - content: - application/json: - schema: - type: object - example: - first_name: Jason - last_name: File - email_address: jason.file@jasonsonson.com - active: true - user_permissions: - IsAdmin: admin - responses: - '200': - description: User updated + categories: + - count: 3 + name: tag2 + - count: 1 + name: tag2 + - count: 1 + name: tag3 + schema: + $ref: '#/components/schemas/AllCategoriesResponse' + description: API categories + "401": content: application/json: example: - Status: OK - Message: User updated + Message: Not authorised Meta: null - /api/users/{USER_ID}/actions/reset: - parameters: - - name: USER_ID - in: path - description: User ID of the user whose password is being reset - required: true - schema: - type: string - post: - summary: Set User Password - description: Set a user's password - operationId: setUserPassword - tags: - - Users - requestBody: - content: - application/json: - schema: - type: object - example: - current_password: '12345' - new_password: test123456 - user_permissions: - IsAdmin: admin - responses: - '200': - description: User password updated + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: example: - Status: OK - Message: User password updated - Meta: '' - /api/users/{USER_ID}/actions/key/reset: - parameters: - - name: USER_ID - in: path - description: User ID of the user whose current Dashboard session will be reset - required: true - schema: - type: string - put: - summary: Reset current Dashboard session for specified user - description: Reset specified user's current Dashboard session. User's Dashboard API credentials will also be reset. - operationId: resetUserSession - tags: - - Users - requestBody: - content: - application/json: - schema: - type: object - example: - userId: '{USER_ID}' - responses: - '200': - description: Dashboard session for specified user has been reset successfully + Message: 'access denied: You do not have permission to access /api/apis/categories' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: example: - Status: OK - Message: User session renewed + Message: Could not retrieve APIs Meta: null - delete: - summary: Delete User - description: Delete a Dashboard user - operationId: deleteUser + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get API Categories tags: - - Users + - APIs + /api/apis/groups: + get: + description: This will return a map/hashmap with categories as keys and the + key values will be a list that contains all the APIIDs that belong to that + category. + operationId: getAPIGroups responses: - '200': - description: Dashboard user deleted + "200": content: application/json: example: - Status: OK - Message: User deleted - Meta: '' - /api/data-graphs/data-sources/import: - post: - summary: Import a new data source - tags: - - Data Graph APIs - requestBody: - content: - application/json: - schema: - oneOf: - - $ref: "#/components/schemas/NewDataSource" - - $ref: "#/components/schemas/ImportOrPatchFromURL" - application/vnd.tyk.udg.v2.openapi: - schema: - oneOf: - - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.yaml" - application/vnd.tyk.udg.v2.asyncapi: - schema: - oneOf: - - $ref: "https://raw.githubusercontent.com/asyncapi/spec-json-schemas/master/schemas/2.0.0.json" - - $ref: "https://raw.githubusercontent.com/asyncapi/spec-json-schemas/master/schemas/2.1.0.json" - - $ref: "https://raw.githubusercontent.com/asyncapi/spec-json-schemas/master/schemas/2.2.0.json" - - $ref: "https://raw.githubusercontent.com/asyncapi/spec-json-schemas/master/schemas/2.3.0.json" - - $ref: "https://raw.githubusercontent.com/asyncapi/spec-json-schemas/master/schemas/2.4.0.json" - responses: - '200': - description: A new data source imported - content: - application/json: + '#tag2': + - d1dfc6a927a046c54c0ed470f19757cc + '#tag3': + - d1dfc6a927a046c54c0ed470f19757cc + httpbin: + - d1dfc6a927a046c54c0ed470f19757cc + tag1: + - d1dfc6a927a046c54c0ed470f19757cc + - 627efb71ebae49df7a853b9769b65fce + tag2: + - d1dfc6a927a046c54c0ed470f19757cc + - 627efb71ebae49df7a853b9769b65fce schema: - $ref: "#/components/schemas/DataSourceImported" - '400': - description: Bad request + additionalProperties: + items: + type: string + type: array + type: object + description: A map of groups with APIs IDs in that group. + "400": content: application/json: + example: + Message: Could not retrieve APIs. + Meta: null + Status: Error schema: - $ref: "#/components/schemas/apiStatusMessage" - examples: - malformedBody: - summary: When the request body is malformed - value: - message: "Request body malformed" - status: "error" - unknownDataSourceType: - summary: When the data source type is unknown - value: - message: "Unknown data source type" - status: "error" - - - '/api/schema': - get: - description: |- - Get OAS schema - tags: - - Schema - operationId: getSchema - parameters: - - description: The OAS version - name: oasVersion - in: query - schema: - type: string - responses: - '200': - description: OAS schema response + $ref: '#/components/schemas/ApiResponse' + description: Unable to get groups e.g because database is down + "401": content: application/json: - schema: - $ref: '#/components/schemas/OASSchemaResponse' example: - status: 'Success' - schema: - '400': - description: response when parameter oasVersion is missing - content: - application/json: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/OASSchemaResponse' - example: - message: 'Should provide a value for parameter oasVersion' - status: 'Failed' - '500': - description: response when oasSchema fetch failed + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: '#/components/schemas/OASSchemaResponse' example: - message: 'Could not retrieve OAS schema: Schema not found for version 5.0.0' - status: 'Failed' - - /api/examples: - get: - summary: Get a list of example API definitions - description: Returns a list of all example API definitions available in "repository.json" file defined in "x-tyk-examples-index" header. If the header is not provided, Tyk will use the default value of this header which is `tyk-examples` repo as detailed below - operationId: getAPIExamples - tags: - - APIs - parameters: - - name: p - in: query - description: Page number. If not provided, the first page will be returned - schema: - type: integer - - name: x-tyk-examples-index - in: header - description: URL that points to the index file (repository.json) or root of a repository housing examples. - schema: - type: string - default: "https://raw.githubusercontent.com/TykTechnologies/tyk-examples/main/repository.json" - responses: - '200': - description: List of API examples response - content: - application/json: + Message: 'access denied: You do not have permission to access /api/apis/groups' + Meta: null + Status: Error schema: - type: object - description: Paginated response of available example API definition - properties: - data: - $ref: "#/components/schemas/APIExample" - pages: - type: integer - example: 1 - '400': - description: Invalid parameters + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" example: - message: "Invalid examples index file or root path" - status: "error" - '500': - description: Internal Server Error. - content: - application/json: + Message: Failed to unmarshal API groups data + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - message: "Failed to fetch examples index file" - status: "error" - /api/examples/{location}: - get: - summary: Get details of a single example API definition - description: Get the details of a single API definition, details include full name, location in the repository, description, features and min tyk version - operationId: getAPIExample + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get API Groups. tags: - - APIs + - APIs + /api/apis/keys: + get: + description: Return a paginated list of keys. + operationId: listKeys parameters: - - name: location - in: path - description: Location of the tyk example in the repository defined in `x-tyk-repo-url` - required: true - schema: - type: string - example: "udg/simple-app" - - name: x-tyk-repo-url - in: header - description: Repository URL to fetch example API definitions from - schema: - type: string - default: "https://github.com/TykTechnologies/tyk-examples.git" - - name: x-tyk-examples-index - in: header - description: URL path to the "repository.json" in the repository defined in `x-tyk-repo-url` - schema: - type: string - default: "https://raw.githubusercontent.com/TykTechnologies/tyk-examples/main/repository.json" - - name: apiDef - in: query - description: If set to true, the response will contain the APIDefinition of the specified example, the definition will be present as the `apiDefinition` field. - required: false - schema: - type: boolean - default: false - - name: readme - in: query - description: If set to true, the response will contain the content of the Readme file for the specified example, the readme content will be present as the `readme` field. - required: false - schema: - type: boolean - default: false + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer responses: - '200': - description: Details on the fetched example API definition. + "200": content: application/json: + example: + data: + keys: + - 5e9d9544a1dcd60001d0ed20a28c495beff140a4a6d8c272a1956b99 + - 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + - 5e9d9544a1dcd60001d0ed2060ff87c0deab4a508dd2ac18ccb8b664 + pages: 1 schema: - $ref: "#/components/schemas/APIExampleDetailed" - '400': - description: Invalid parameters + $ref: '#/components/schemas/Keys' + description: Paginated key IDs. + "401": content: application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" example: - message: "Invalid examples index file or root path" - status: "error" - '404': - description: Example API definition not found. + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" example: - message: "Example API definition not found" - status: "error" - '500': - description: Internal Server Error. + Message: 'access denied: You do not have permission to access /api/apis/keys' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: "Failed to fetch example API definition" - status: "Failed" - - /api/system/stats: - get: - summary: 'Get system usage info with license entitlements for a specified date range. Return history for current and previous year if no date query parameters are provided.' - tags: - - System - operationId: getSystemStats + Message: Failed to unmarshal keys data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List All the keys. + tags: + - Keys + /api/apis/keys/basic/{username}: + post: + description: Create a Basic Auth user with the username specified in the path + {username}. Note you have to send password via(the basic_auth_data.password + field) in the request body. + operationId: createBasicAuthUser parameters: - - name: start_day - in: query - description: start date - required: false - schema: - type: string - format: date - example: 2023-07-01 - - name: end_day - in: query - description: end date - required: false - schema: - type: string - format: date - example: 2023-07-31 - - name: resolution - in: query - description: resolve daily - required: false - schema: - type: string - enum: [ day ] - - name: entity - in: query - description: The entity for which stats should be retrieved. - schema: - type: string - enum: [ apis ] + - description: ' Username of Basic Auth user to create or update.' + example: itachi + in: path + name: username + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + alias: portal-key + allowance: 1000 + apply_policies: + - 62a0ec9092faf50001395817 + basic_auth_data: + password: test123 + enable_detailed_recording: true + expires: 1.718439136e+09 + hmac_enabled: false + is_inactive: false + meta_data: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: -1 + quota_remaining: 0 + quota_renewal_rate: -1 + quota_renews: 1.715847135e+09 + rate: 1000 + tags: + - edge-eu + - edge + throttle_interval: 0 + throttle_retry_limit: 0 + schema: + $ref: '#/components/schemas/SessionState' responses: - '200': - description: System statistics details + "200": content: application/json: schema: - $ref: '#/components/schemas/SystemStats' - '400': - description: Bad request + $ref: '#/components/schemas/KeyData' + description: User created successfully. + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 400 - message: - request validation failed: invalid date format - '404': - description: Configuration not found - content: - application/json: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - code: 404 - message: Stats not found - /api/assets: - get: - tags: - - Assets - summary: Retrieve list of assets - description: Retrieves all types of assets with optional kind filter. - parameters: - - name: kind - in: query - description: Filter assets by kind (optional). - schema: - type: string - enum: - - oas-template - default: oas-template - example: oas-template - responses: - '200': - description: Successful response + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: Request body malformed + Meta: null + Status: Error schema: - type: array - items: - $ref: '#/components/schemas/Asset' - '400': - description: bad request. + $ref: '#/components/schemas/ApiResponse' + description: Unmarshalling request body failed, malformed. + "500": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 400 - message: - "unsupported asset kind: 'invalid-asset-kind'" - '500': - description: Internal server error - content: - application/json: + Message: Failed to unmarshal Key data. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - code: 500 - message: something went wrong - post: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create a Basic Auth User. tags: - - Assets - summary: Create an asset - description: Create a new asset. + - Basic Authentication + /api/apis/oas: + post: + description: |- + Create an API Definition in Tyk OAS API format. + Note that the response includes the newly created Tyk OAS API Definition containing the unique identifier for the API (`ID`). You can provide a value for `ID` in the request body, otherwise Tyk will automatically generate a value. + operationId: createApiOAS + parameters: + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: + type: string + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: + type: string + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: + type: string + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean + - $ref: '#/components/parameters/TemplateID' requestBody: - required: true content: application/json: + example: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersSample + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 schema: - $ref: '#/components/schemas/Asset' + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykApiGateway' responses: - '201': - description: Asset created successfully + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 200 - status: success - message: asset created - '409': - description: conflict on custom asset ID + ID: 4c1c0d8fc885401053ddac4e39ef676b + Message: API created + Meta: 665597e0b646b300011acb69 + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OAS created. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 409 - message: "asset ID already exists: 'my-custom-asset'" - '500': - description: Internal server error + Message: Couldn't read body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed data. + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 500 - message: something went wrong - - /api/assets/{assetID}: - get: - tags: - - Assets - summary: Retrieve an asset. - description: Retrieve an asset by ID. - parameters: - - name: assetID - in: path - description: ID of the asset to retrieve - this value can be the database ID of the asset or the custom ID provided during creation/update. - required: true - schema: - type: string - examples: - customID: - value: my-asset - dbID: - value: 659b9613a1ed7ef7afdccb9d - responses: - '200': - description: Successful response + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: Could not retrieve detail of apiID 62a0ec9092faf50001395817 + in org 82a0ec9052faf50001395817. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/Asset' - '404': - description: asset not found + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "409": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 404 - message: "asset not found: 'my-custom-asset'" - '500': - description: Internal server error + Message: Found API with the same ID. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Conflict + "500": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 500 - message: "error fetching asset: 'my-custom-asset'" - put: + Message: Error while validating schema. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create OAS API. tags: - - Assets - summary: Update an asset by ID. - description: Update an existing asset. + - OAS APIs + /api/apis/oas/{apiId}: + delete: + description: Deleting an API definition will remove the file from the file store. + The API definition will not be unloaded and a separate reload request will + need to be made to disable the API endpoint. + operationId: deleteOASApi parameters: - - name: assetID - in: path - description: ID of the asset to retrieve - this value can be the database ID of the asset or the custom ID provided during creation/update. - required: true - schema: - type: string - examples: - customID: - value: my-asset - dbID: - value: 659b9613a1ed7ef7afdccb9d - requestBody: + - description: ID of the API you want to delete. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Asset' + schema: + type: string responses: - '200': - description: Asset updated successfully + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 200 - status: success - message: asset updated - '400': - description: cannot change db ID - content: - application/json: + Message: API deleted. + Meta: null + Status: OK schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - code: 400 - status: failure - message: cannot change db ID of asset - '422': - description: Unprocessible entity + $ref: '#/components/schemas/ApiResponse' + description: Deleted successfully. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 422 - message: - unsupported asset kind - '404': - description: asset not found + Message: Could not delete the API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 404 - message: asset not found - '409': - description: conflict on custom asset ID + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 409 - message: "asset ID already exists: 'my-custom-asset'" - '500': - description: Internal server error + Message: 'access denied: You do not have permission to access /api/apis/oas/{apiId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 500 - message: something went wrong - delete: + Message: Could not retrieve API detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API not found. + summary: Delete OAS API. tags: - - Assets - summary: Delete an asset by ID. - description: Remove an asset ID. + - OAS APIs + get: + description: Get a single API definition in OAS format. + operationId: getOASAPIDetails parameters: - - name: assetID - in: path - description: ID of the asset to delete - this value can be the database ID of the asset or the custom ID provided during creation/update. - required: true - schema: - type: string - examples: - customID: - value: my-asset - dbID: - value: 659b9613a1ed7ef7afdccb9d + - description: ID of the API you want to fetch. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId + required: true + schema: + type: string responses: - '200': - description: Asset removed successfully + "200": content: application/json: + examples: + oasExample: + $ref: '#/components/examples/oasExample' schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - code: 200 - message: asset removed successfully - '404': - description: asset not found - content: - application/json: + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykApiGateway' + description: Fetched API. + headers: + x-tyk-base-api-id: + description: ID of the base API if the requested API is a version. schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - code: 404 - message: "asset not found: 'my-custom-asset'" - '500': - description: Internal server error + type: string + style: simple + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - code: 500 - message: something went wrong - - /api/certs: - get: - tags: - - Certificates - summary: List certificates. - description: List certificates stored in Tyk organisation certificate store. - parameters: - - description: Mode to list the certificate details - name: mode - in: query - required: false - schema: - type: string - example: 'detailed' - operationId: listCerts - responses: - '200': - description: List of all Certificates or Certificates IDs based on mode. + Message: Could not retrieve API detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad request or API not found. + "401": content: application/json: + example: + Message: Not authorised + Meta: null + Status: Error schema: - oneOf: - - $ref: '#/components/schemas/APIAllCertificates' - - $ref: '#/components/schemas/APIAllCertificateBasics' - '400': - description: Error fetching certificates from cert store + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oas/{apiId}' + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - '500': - description: Internal server error. + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": content: application/json: + example: + Message: Failed to marshal data for API detail. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - post: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get OAS API details. tags: - - Certificates - operationId: createCertificate - summary: Create a certificate in Tyk Org cert store. - description: Creates a certificate in Tyk org cert store, org ID would be of the logged in user. - requestBody: + - OAS APIs + patch: + description: Update a Tyk OAS API. You can use this endpoint to update the OAS + part of your Tyk OAS API definition. This endpoint allows you to configure + the Tyk OAS extension based on the query parameters provided (similar to import). + operationId: patchApiOAS + parameters: + - description: ID of the API you want to patch. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId required: true + schema: + type: string + - $ref: '#/components/parameters/UpstreamURL' + - $ref: '#/components/parameters/ListenPath' + - $ref: '#/components/parameters/CustomDomain' + - $ref: '#/components/parameters/AllowList' + - $ref: '#/components/parameters/ValidateRequest' + - $ref: '#/components/parameters/MockResponse' + - $ref: '#/components/parameters/Authentication' + requestBody: content: + application/json: + examples: + PatchByUrl: + summary: Patch By Url + value: + url: https://gist.githubusercontent.com/lghiur/385183f81d0878e5806fffab843d2ef2/raw/1da0aa8b08b496e6c8c84c4996fad6c4877218a0/Petstore%2520Tyk%2520OAS%2520API%2520Definition + PatchOASExample: + summary: Patch Tyk Oas Example + value: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersSample + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + schema: + oneOf: + - $ref: '#/components/schemas/ApiImportByUrlPayload' + - allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykApiGateway' multipart/form-data: schema: - type: object - properties: - file: - type: string - format: binary - description: The PEM file to upload + $ref: '#/components/schemas/FormDataFile' + description: The content of the file should be the OpenAPI document in JSON + format. responses: - '200': - description: Create certificate success response + "200": content: application/json: + example: + Message: API updated + Meta: null + Status: OK schema: - type: object - properties: - id: - description: ID of the certificate created - type: string - '500': - description: Error reading request body. + $ref: '#/components/schemas/ApiResponse' + description: Patched API. + "400": content: application/json: + example: + Message: Invalid `ID` value + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - - /api/certs/{certID}: - get: - tags: - - Certificates - operationId: getCertificateByID - parameters: - - name: certID - description: ID of certificate. - in: path - schema: - type: string - required: true - summary: Get certificate by ID. - responses: - '200': - description: Success response on Get certificate details. + $ref: '#/components/schemas/ApiResponse' + description: Malformed request. + "401": content: application/json: + example: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/CertificateMeta' - '400': - description: Error attempted to access a certificate that doesn't belong to the logged in user's org. + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: Failed to update org object to DB. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - '404': - description: Error when certificate fetch from store returned error. + $ref: '#/components/schemas/ApiResponse' + description: Forbidden. + "404": content: application/json: + example: + Message: API not found. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - delete: + $ref: '#/components/schemas/ApiResponse' + description: API not found. + summary: Patch a single OAS API by ID. tags: - - Certificates - operationId: deleteCertificateByID - summary: Delete certificate by ID. + - OAS APIs + put: + description: Updating an API definition uses the same signature object as a + `POST`. It will first ensure that the API ID being updated is the same as + in the `PUT` object.
Updating will completely replace the file descriptor + and will not change an API definition that has already been loaded. The hot-reload + endpoint will need to be called to push the new definition to live. + operationId: updateApiOAS parameters: - - name: certID - in: path - description: ID of the certificate to delete. - schema: - type: string - required: true + - description: ID of the API you want to update. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersSample + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + schema: + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykApiGateway' responses: - '200': - description: Success response on certificate deletion. + "200": content: application/json: + example: + Message: API updated. + Meta: null + Status: OK schema: - $ref: '#/components/schemas/apiStatusMessage' - '400': - description: Error attempted to delete a certificate that doesn't belong to the logged in user's org. + $ref: '#/components/schemas/ApiResponse' + description: Updated API. + "400": content: application/json: + example: + Message: The payload should contain x-tyk-api-gateway. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - '404': - description: Error deleting certificate from cert store. + $ref: '#/components/schemas/ApiResponse' + description: Malformed API data. + "401": content: application/json: + example: + Message: Not authorised + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - - /api/certs/details: - get: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Found API with same url. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: API definition does not exist + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API not found. + "500": + content: + application/json: + example: + Message: Error while validating schema. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update OAS API. tags: - - Certificates - summary: List certificates details. - description: List certificates details stored in Tyk organisation certificate store. - operationId: listCertificateDetails + - OAS APIs + /api/apis/oas/{apiId}/categories: + get: + description: Get a list of the API categories associated with the specified + API. + operationId: getApiCategories + parameters: + - description: ID of the API. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId + required: true + schema: + type: string responses: - '200': - description: List of all Certificates details. + "200": + content: + application/json: + example: + categories: + - developers + - devops + - research + schema: + $ref: '#/components/schemas/CategoriesPayload' + description: Category fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": content: application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oas/{apiId}/categories' + Meta: null + Status: Error schema: - $ref: '#/components/schemas/AllCertificateDetailedList' - '400': - description: Error retrieving certificates details from org cert store. + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": content: application/json: + example: + Message: API not found + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - '500': - description: internal server error. + $ref: '#/components/schemas/ApiResponse' + description: API not found. + "500": content: application/json: + example: + Message: Failed to marshal categories payload. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - - /certs/dependencies/{certID}: - get: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get OAS API's Categories. tags: - - Certificates - operationId: getCertificateDependencies - summary: Get certificate dependencies. - description: Get the dependencies of certificate. + - OAS APIs + put: + description: Update the list of API categories associated with the specified + API. + operationId: updateApiCategories parameters: - - name: certID - description: ID of certificate. - in: path - schema: - type: string - required: true + - description: ID of the API. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + categories: + - dev + - testers + - messages + schema: + $ref: '#/components/schemas/CategoriesPayload' responses: - '200': - description: success + "200": content: application/json: + example: + Message: API categories updated. + Meta: null + Status: OK schema: - $ref: '#/components/schemas/CertificateDependencies' - delete: + $ref: '#/components/schemas/ApiResponse' + description: Categories updated. + "400": + content: + application/json: + example: + Message: Failed to update ApiDef object to DB. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request data. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oas/{apiId}/categories' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: API not found + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API not found. + "500": + content: + application/json: + example: + Message: Failed to update ApiDef object to DB. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update OAS API categories. tags: - - Certificates - operationId: deleteCertificateDependencies - summary: Delete certificate dependencies. + - OAS APIs + /api/apis/oas/{apiId}/export: + get: + description: Download API definition in OAS format (only APIs saved in OAS format). + When you set the mode query parameter to public the OAS spec exported will + exclude the x-tyk-api-gateway part. When mode query parameter is empty or + is set to any other value apart from public then the exported OAS spec will + include the x-tyk-api-gateway part. + operationId: downloadApiOASPublic parameters: - - name: certID - description: ID of certificate to delete the dependencies of. - in: path - schema: - type: string - required: true + - description: ID of the API you want to export. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId + required: true + schema: + type: string + - description: Mode of OAS export, by default mode could be empty which means + to export OAS spec including OAS Tyk extension. When mode=public, OAS spec + excluding Tyk extension is exported. + example: public + in: query + name: mode + required: false + schema: + enum: + - public + type: string responses: - '200': - description: success + "200": + content: + application/octet-stream: + schema: + format: binary + type: string + description: Fetched successfully. + "400": content: application/json: + example: + Message: Could not retrieve API detail. + Meta: null + Status: Error schema: - $ref: '#/components/schemas/apiStatusMessage' - -components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - schemas: - APIExample: - type: object - description: An example API Definition. - properties: - name: + $ref: '#/components/schemas/ApiResponse' + description: API not found. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oas/{apiId}/export' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + summary: Export OAS API. + tags: + - OAS APIs + /api/apis/oas/{apiId}/versions: + get: + description: List all the versions of an OAS API. + operationId: listOASApiVersions + parameters: + - description: ID of the API you want to fetch. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiId + required: true + schema: type: string - description: Name of the example API definition. - example: "VAT number validator UDG" - location: + - $ref: '#/components/parameters/SearchText' + - $ref: '#/components/parameters/AccessType' + responses: + "200": + content: + application/json: + example: + apis: + - expirationDate: 2024-11-30 12:00 + id: 5b633de8673e40e44bc88b6b248f0937 + internal: false + isDefaultVersion: true + name: user + versionName: Default + - expirationDate: 2024-11-30 12:00 + id: 0fec4eb890cf4b8c5cb6fc011456c315 + internal: false + isDefaultVersion: false + name: user + versionName: v2 + pages: 1 + schema: + $ref: '#/components/schemas/VersionMetas' + description: Version fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oas/{apiId}/versions' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve API detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: API not found. + summary: List OAS API versions. + tags: + - OAS APIs + /api/apis/oas/dry-run: + post: + description: |- + Generate a Tyk OAS API definition without saving it to the Dashboard database. + This endpoint is used to produce a Tyk OAS API definition without creating the API proxy itself. This provides a dry run functionality for Tyk OAS API creation, showing what would be created in the Dashboard given the set of inputs provided. + operationId: dryRunApiOAS + parameters: + - $ref: '#/components/parameters/TemplateID' + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: type: string - description: Location (path to folder) of the example API Definition in the current repository - example: "udg/vat-checker" - shortDescription: + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: type: string - description: Short description of the example API - example: "Countries GQL API extended with information from Restcountries" - APIExampleDetailed: - type: object - description: Detailed information of an API Definition available as an example API definition. - properties: - name: + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: type: string - description: Name of the example API definition - example: "Sample App" - location: + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean + - $ref: '#/components/parameters/UpstreamURL' + - $ref: '#/components/parameters/ListenPath' + - $ref: '#/components/parameters/CustomDomain' + - $ref: '#/components/parameters/AllowList' + - $ref: '#/components/parameters/ValidateRequest' + - $ref: '#/components/parameters/MockResponse' + - $ref: '#/components/parameters/Authentication' + requestBody: + content: + application/json: + example: + oas: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersOperation + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + tyk_oas: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersSample + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + schema: + $ref: '#/components/schemas/DryRunRequest' + responses: + "200": + content: + application/json: + examples: + oasExample: + $ref: '#/components/examples/oasExample' + schema: + allOf: + - $ref: '#/components/schemas/XTykApiGateway' + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + description: Success. + "400": + content: + application/json: + example: + Message: Couldn't read body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oas/dry-run' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + summary: Dry Run OAS. + tags: + - OAS APIs + /api/apis/oas/import: + post: + description: For use with an existing OpenAPI document that you want to expose + via your Tyk Gateway.
Create a new Tyk OAS API from an OpenAPI document + in JSON format (without x-tyk-api-gateway extension).
The payload can + contain either a fully fledged OpenAPI document or a URL pointing to an OpenAPI + document. + operationId: importOAS + parameters: + - $ref: '#/components/parameters/UpstreamURL' + - $ref: '#/components/parameters/ListenPath' + - $ref: '#/components/parameters/CustomDomain' + - $ref: '#/components/parameters/AllowList' + - $ref: '#/components/parameters/ValidateRequest' + - $ref: '#/components/parameters/MockResponse' + - $ref: '#/components/parameters/Authentication' + - $ref: '#/components/parameters/TemplateID' + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: type: string - description: Location (path to folder) of the example API Definition in the repository - example: "udg/simple-api" - features: - type: array - items: - type: string - description: Features of the example API Definition - example: - - "REST Datasource" - - "GQL Datasource" - - "Field mapping" - min_version: + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: type: string - description: Min tyk version this api definition works with - example: "5.0" - apiDefinition: - $ref: '#/components/schemas/APIDefinition' - readme: + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: type: string - description: Readme.md content (markdown) of the example. - example: "# Sample App\n\nThis is a sample app" - - APIDefinition: - properties: - tags: - items: - type: string - type: array - x-go-name: Tags - CORS: - properties: - allow_credentials: - type: boolean - x-go-name: AllowCredentials - allowed_headers: - items: - type: string - type: array - x-go-name: AllowedHeaders - allowed_methods: - items: - type: string - type: array - x-go-name: AllowedMethods - allowed_origins: - items: - type: string - type: array - x-go-name: AllowedOrigins - debug: + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean + requestBody: + content: + application/json: + examples: + ImportByUrl: + summary: Import By Url + value: + url: https://gist.githubusercontent.com/Keithwachira/e4f11baefb68f2ace5dd2297b7ccc3e0/raw/bd0aeee05d1bd380535af7a8d5d59aa30f9b5aad/tykOas.json + ImportTykOAS: + summary: Import Tyk Oas Example + value: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersOperation + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + schema: + oneOf: + - $ref: '#/components/schemas/ApiImportByUrlPayload' + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + multipart/form-data: + schema: + $ref: '#/components/schemas/FormDataFile' + description: The content of the file should be the OpenAPI document in JSON + format (without x-tyk-api-gateway extension). + responses: + "200": + content: + application/json: + example: + ID: 78ade81be12349087e194c858f06f595 + Message: API created + Meta: 6656cda15715ec8ddb0e7e7c + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OAS imported. + "400": + content: + application/json: + example: + Message: The import payload should not contain x-tyk-api-gateway. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: The user does not have the rights to apply templates. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden. + "409": + content: + application/json: + example: + Message: Found API with the same ID. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Conflict + "500": + content: + application/json: + example: + Message: Failed to save new org object to DB. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Import OAS. + tags: + - OAS APIs + /api/apis/oauth/{apiId}: + get: + description: Return all the auth 2 clients that have been registered with you + tyk instance + operationId: getOathClientsList + parameters: + - description: The API’s ID. + example: e95400eba23c4a2d4622a722be06fe95 + in: path + name: apiId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + apps: + - client_id: 2a06b398c17f46908de3dffcb71ef87d + client_name: "" + dcr_registration: + access_token: "" + client_uri: "" + provider: "" + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + policy_id: 665d51505715ec2d76022c87 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + pages: 1 + schema: + $ref: '#/components/schemas/OAuthApps' + description: Fetched successfully. + "400": + content: + application/json: + example: + Message: API Reference not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not enough permissions or API not found. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oauth/{apiId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve apps list. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not Found + "500": + content: + application/json: + example: + Message: Failed to unmarshal key data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List OAuth clients. + tags: + - Oauth + post: + description: Client apps are created dynamically, the only parameter required + to create a new client app with Tyk is to specify the redirect URI, this is + used as part of the client authentication and cannot be edited later. Please + note that if you don't attach a policy to the OAuth client you will need to + provide dynamic key rules to client authorization endpoint. + operationId: createNewClientApp + parameters: + - description: The API’s ID. + example: e95400eba23c4a2d4622a722be06fe95 + in: path + name: apiId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + policy_id: 665d51505715ec2d76022c87 + redirect_uri: https://httpbin.org/ip + schema: + $ref: '#/components/schemas/NewClientRequest' + responses: + "200": + content: + application/json: + example: + client_id: 2a06b398c17f46908de3dffcb71ef87d + client_name: "" + dcr_registration: + access_token: "" + client_uri: "" + provider: "" + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + policy_id: 665d51505715ec2d76022c87 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/OAuthClient' + description: Client created. + "400": + content: + application/json: + example: + Message: API reference not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Request body malformed. + "500": + content: + application/json: + example: + Message: Could not retrieve policy details. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create a new OAuth2.0 client. + tags: + - Oauth + /api/apis/oauth/{apiId}/{clientId}: + delete: + description: You can delete an OAuth client using this endpoint. Please note + that tokens issued with the client ID will still be valid until they expire. + operationId: deleteOathClient + parameters: + - description: The API’s ID. + example: e95400eba23c4a2d4622a722be06fe95 + in: path + name: apiId + required: true + schema: + type: string + - description: The client ID. + example: 2a06b398c17f46908de3dffcb71ef87 + in: path + name: clientId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: OAuth client deleted successfully. + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Deleted successfully. + "400": + content: + application/json: + example: + Message: API Reference not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: You don't have access to this. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: You have no access. + "404": + content: + application/json: + example: + Message: Could not retrieve app detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not found. + "500": + content: + application/json: + example: + Message: Could not remove app. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete OAuth client. + tags: + - Oauth + get: + description: Get single OAuth client details with its client ID. + operationId: getOAuthClientDetail + parameters: + - description: The API’s ID. + example: e95400eba23c4a2d4622a722be06fe95 + in: path + name: apiId + required: true + schema: + type: string + - description: The client ID. + example: 2a06b398c17f46908de3dffcb71ef87 + in: path + name: clientId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + client_id: 2a06b398c17f46908de3dffcb71ef87d + client_name: "" + dcr_registration: + access_token: "" + client_uri: "" + provider: "" + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + policy_id: 665d51505715ec2d76022c87 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/OAuthClient' + description: Details fetched successfully. + "400": + content: + application/json: + example: + Message: API reference not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: You don't have access to this. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: You have no access. + "404": + content: + application/json: + example: + Message: Could not retrieve app detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not Found + "500": + content: + application/json: + example: + Message: Failed to unmarshal app data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get single OAuth client details. + tags: + - Oauth + /api/apis/oauth/{apiId}/{clientId}/tokens: + get: + description: This endpoint allows you to retrieve a list of all current tokens + and their expiry date for a provided API ID and OAuth client ID. + operationId: getClientTokens + parameters: + - description: The API’s ID. + example: e95400eba23c4a2d4622a722be06fe95 + in: path + name: apiId + required: true + schema: + type: string + - description: The client ID. + example: 2a06b398c17f46908de3dffcb71ef87 + in: path + name: clientId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + - code: 5a7d110be6355b0c071cc339327563cb45174ae387f52f87a80d2496 + expires: 1.618158407e+09 + - code: 5a7d110be6355b0c071cc33988884222b0cf436eba7979c6c51d6dbd + expires: 1.618158594e+09 + schema: + $ref: '#/components/schemas/OAuthClientTokens' + description: OK + "400": + content: + application/json: + example: + Message: API Reference not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/oauth/{apiId}/{clientId}/tokens' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve tokens. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not Found + "500": + content: + application/json: + example: + Message: Failed to unmarshal tokens data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List OAuth client tokens. + tags: + - Oauth + /api/apis/search: + get: + description: This will return a list of APIs whose names matches the provided + q query parameter.If q is not sent all APIs will be returned.The returned + results are paginated. + operationId: searchApis + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + - description: The name of the APIs you want to search + example: Rate Limit Path API 1 + in: query + name: q + required: false + schema: + type: string + responses: + "200": + content: + application/json: + examples: + paginatedApiExample: + $ref: '#/components/examples/paginatedApiExample' + schema: + $ref: '#/components/schemas/ApiDefinitionsResponse' + description: List of API definitions + "400": + content: + application/json: + example: + Message: Could not retrieve APIs + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/apis/search' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to unmarshal APIs data + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Search List of APIs + tags: + - APIs + /api/assets: + get: + description: Retrieves all types of assets with optional kind filter. + operationId: listAssets + parameters: + - description: Filter assets by kind (optional). + example: oas-template + in: query + name: kind + required: false + schema: + default: oas-template + enum: + - oas-template + type: string + responses: + "200": + content: + application/json: + example: + - _id: "363634636164353135373135656333663739386262636433" + data: + info: + title: Our Sample OAS + version: 1.0.0 + openapi: 3.0.3 + paths: + /anything: + post: + operationId: anythingpost + responses: + "200": + description: Post created + x-tyk-api-gateway: + middleware: + global: + cache: + cacheAllSafeRequests: true + enabled: true + timeout: 5 + operations: + anythingpost: + requestSizeLimit: + enabled: true + value: 100 + description: My first template + id: my-unique-template-id + kind: oas-template + last_updated: "2024-05-21T17:18:57.294797+03:00" + name: my-template + org_id: 5e9d9544a1dcd60001d0ed20 + schema: + items: + $ref: '#/components/schemas/Asset' + type: array + description: templates fetched. + "400": + content: + application/json: + example: + Message: 'unsupported asset kind: ''oas-temp''' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: sending a type that is not supported in the kind query parameter. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/assets' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: error listing assets. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Retrieve list of assets. + tags: + - Assets + post: + description: Create an asset that you can use as a blueprint from which you + can create a new Tyk OAS API definition. + operationId: addAsset + requestBody: + content: + application/json: + example: + data: + info: + title: Our Sample OAS + version: 1.0.0 + openapi: 3.0.3 + paths: + /anything: + post: + operationId: anythingpost + responses: + "200": + description: post created + x-tyk-api-gateway: + middleware: + global: + cache: + cacheAllSafeRequests: true + enabled: true + timeout: 5 + description: My first template + id: my-unique-template-id + kind: oas-template + name: my-template + schema: + properties: + data: + $ref: '#/components/schemas/JSONRawMessage' + description: + type: string + id: + type: string + kind: + type: string + name: + type: string + type: object + description: Sample asset. + responses: + "201": + content: + application/json: + example: + ID: my-unique-template-id + Message: asset created + Meta: 664d86e35715ec0d370bbe11 + Status: success + schema: + $ref: '#/components/schemas/ApiResponse' + description: asset created + "400": + content: + application/json: + example: + Message: error reading json body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: malformed request body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/assets' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "409": + content: + application/json: + example: + Message: 'Asset ID already exists: ''my-unique-template-id''.' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: trying to add an asset with an ID that already exist. + "422": + content: + application/json: + example: + Message: 'unsupported asset kind: ''oas-templat''.' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: validation failed + "500": + content: + application/json: + example: + Message: error adding asset. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create an asset + tags: + - Assets + /api/assets/{assetID}: + delete: + description: Remove an asset ID. + operationId: deleteAsset + parameters: + - description: ID of the asset to delete - this value can be the database ID + of the asset or the custom ID provided during creation/update. + examples: + customID: + summary: Custom template ID. + value: my-unique-template-id + dbID: + summary: A unique database identifier assigned by Tyk. + value: 664cad515715ec3f798bbcd3 + in: path + name: assetID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: Asset removed successfully + Meta: null + Status: success + schema: + $ref: '#/components/schemas/ApiResponse' + description: Asset deleted + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/assets/{assetID}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: asset not found + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Asset with ID does not exist. + "500": + content: + application/json: + example: + Message: Error removing asset + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete an asset by ID. + tags: + - Assets + get: + description: Retrieve an asset by ID. + operationId: getAsset + parameters: + - description: ID of the asset to retrieve - this value can be the database + ID of the asset or the custom ID provided during creation/update. + examples: + customID: + summary: Custom template ID. + value: my-unique-template-id + dbID: + summary: A unique database identifier assigned by Tyk. + value: 664cad515715ec3f798bbcd3 + in: path + name: assetID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + _id: "363634636164353135373135656333663739386262636433" + data: + info: + title: Our Sample OAS + version: 1.0.0 + openapi: 3.0.3 + paths: + /anything: + post: + operationId: anythingpost + responses: + "200": + description: Post created + x-tyk-api-gateway: + middleware: + global: + cache: + cacheAllSafeRequests: true + enabled: true + timeout: 5 + operations: + anythingpost: + requestSizeLimit: + enabled: true + value: 100 + description: My first template + id: my-unique-template-id + kind: oas-template + last_updated: "2024-05-21T17:18:57.294797+03:00" + name: my-template + org_id: 5e9d9544a1dcd60001d0ed20 + schema: + $ref: '#/components/schemas/Asset' + description: Asset fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/assets/{assetID}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Asset not found + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Asset with ID does not exist + "500": + content: + application/json: + example: + Message: Error fetching asset. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Retrieve an asset. + tags: + - Assets + put: + description: Update an asset by ID.You cannot update _id (database ID assigned + by tyk) + operationId: updateAsset + parameters: + - description: ID of the asset to update - this value can be the database ID + of the asset or the custom ID provided during creation/update. + examples: + customID: + summary: Custom template ID. + value: my-unique-template-id + dbID: + summary: A unique database identifier assigned by Tyk. + value: 664cad515715ec3f798bbcd3 + in: path + name: assetID + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + data: + info: + title: Our Sample OAS + version: 1.0.0 + openapi: 3.0.3 + paths: + /anything: + post: + operationId: anythingpost + responses: + "200": + description: post created + x-tyk-api-gateway: + middleware: + global: + cache: + cacheAllSafeRequests: true + enabled: true + timeout: 5 + description: My first template + id: my-unique-template-id + kind: oas-template + name: Update asset name example. + schema: + properties: + data: + $ref: '#/components/schemas/JSONRawMessage' + description: + type: string + id: + type: string + kind: + type: string + name: + type: string + type: object + description: update name example. + responses: + "200": + content: + application/json: + example: + ID: my-unique-template-id + Message: asset updated + Meta: 664d86e35715ec0d370bbe11 + Status: success + schema: + $ref: '#/components/schemas/ApiResponse' + description: asset updated + "400": + content: + application/json: + example: + Message: error reading json body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: malformed request body + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/assets/{assetID}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Asset not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Asset with ID does not exist. + "409": + content: + application/json: + example: + Message: 'Asset ID already exists: ''my-unique-template-id.''.' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Trying to update an asset ID with an ID that is used by another + asset. + "422": + content: + application/json: + example: + Message: 'unsupported asset kind: ''oas-templat''.' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: validation failed. + "500": + content: + application/json: + example: + Message: error fetching asset. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update an asset by ID. + tags: + - Assets + /api/certs: + get: + description: Return list of certificates. If you send the mode query parameter + with the value `detailed` the certificates returned will have more information + (Will contains all certs basic details). To retrieve a list with complete + certificate details use [this endpoint](#operation/listDetailedCertificates). + If the mode query parameter is omitted or is empty this endpoint will only + return the certificates IDs. The list of certificates returned is paginated. + operationId: listCertificates + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + - description: Set to detailed to get certificates that are more with more details + (Will contains certs basic details). To retrieve a list of certificates + with all the certificate details use [this endpoint](#operation/listDetailedCertificates). + example: detailed + in: query + name: mode + required: false + schema: + enum: + - detailed + type: string + responses: + "200": + content: + application/json: + examples: + detailed_mode: + summary: Returned when you send mode=detailed in query parameter. + value: + cert_basics: + - dns_names: + - .*itachi.io + has_private: false + id: 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + is_ca: false + issuer_cn: tyk-gateway-2.localhost + not_after: "2025-05-19T05:23:10Z" + not_before: "2024-05-19T05:23:10Z" + subject_cn: tyk-gateway-2.localhost + - dns_names: + - .*tyk.io + has_private: false + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + is_ca: false + issuer_cn: tyk.io + not_after: "2034-03-26T08:46:37Z" + not_before: "2024-03-25T08:46:37Z" + subject_cn: tyk.io + pages: 1 + empty_mode: + summary: Returned if `mode` in query parameter is empty. + value: + certs: + - 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + - 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + pages: 1 + schema: + oneOf: + - $ref: '#/components/schemas/CertificateBasics' + - $ref: '#/components/schemas/CertificateList' + description: OK + "400": + content: + application/json: + example: + Message: Could not retrieve certs. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to retrieve certificates. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to marshal data for certificates basics list. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List Certificates. + tags: + - Certificates + post: + description: Upload new SSL certificate in PEM format (you should upload as + a file). If the certificate should have a private key, convert both the public + certificate and the associated private key to PEM format and concatenate them + to a single file. You can only upload one certificate at a time. + operationId: createCertificates + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/FormDataFile' + description: File containing the certs. + responses: + "200": + content: + application/json: + example: + id: 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + message: Certificate added. + status: ok + schema: + $ref: '#/components/schemas/APICertificateStatusMessage' + description: Certificates created. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not create certificate.Certificate with 5e9d9... ID + already exists. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: unable to create certs + "500": + content: + application/json: + example: + Message: Failed to read response body, body empty. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Sending data without the certs file. + summary: Create a certificate in Tyk org cert store. + tags: + - Certificates + /api/certs/{certId}: + delete: + description: Delete certificate by their ID. + operationId: deleteCertificates + parameters: + - description: ID of the certificate you want to delete. + example: 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + in: path + name: certId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + message: message + status: status + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Certs deleted. + "400": + content: + application/json: + example: + Message: Attempted access to non-owned certificate. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Trying to delete certs you don't own. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs/{certId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not delete certificate. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failed to delete certs. + summary: Delete Certificate. + tags: + - Certificates + get: + description: Get a single certificate details with the certificate's ID. + operationId: getCertificate + parameters: + - description: ID of the certificate you want to fetch. + example: 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + in: path + name: certId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + dns_names: + - .*tyk.io + fingerprint: 7c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + has_private: false + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + is_ca: false + issuer: + CommonName: tyk.io + Country: + - 'Peachtree ' + ExtraNames: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: 'Peachtree ' + Locality: + - JN + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: Peachtree + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: + - "00010" + Province: + - San Jore + SerialNumber: "" + StreetAddress: + - River side drive + not_after: "2034-03-26T08:46:37Z" + not_before: "2024-03-25T08:46:37Z" + subject: + CommonName: tyk.io + Country: + - 'Peachtree ' + ExtraNames: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: 'Peachtree ' + Locality: + - JN + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: 'Peachtree ' + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: + - "00010" + Province: + - San Jore + SerialNumber: "" + StreetAddress: + - River side drive + schema: + $ref: '#/components/schemas/CertsCertificateMeta' + description: Certificates fetched. + "400": + content: + application/json: + example: + Message: Attempted access to non-owned certificate. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Trying to fetch certs you don't own. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs/{certId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve certificate details. Certificate with + given SHA256 fingerprint not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failed to fetch certs. + summary: Get single certificate with ID. + tags: + - Certificates + /api/certs/dependencies/{certId}: + delete: + description: This endpoint will remove the certificates from any APIs that contains + it as an upstream certificates or as a client certificate. It will also remove + any key that uses this certificate. + operationId: deleteCertificateDependencies + parameters: + - description: ID of the certificate you want to delete dependencies for. + example: 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + in: path + name: certId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: Certificate dependencies deletion successfully attempted. + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Dependencies deleted. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs/dependencies/{certId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + summary: Delete Certificate dependencies. + tags: + - Certificates + get: + description: This will return the API IDs and API names of all APIs that uses + this certificates as either upstream certificates or as client certificates. + operationId: getCertificateDependencies + parameters: + - description: ID of the certificate you want to fetch dependencies for. + example: 5e9d9544a1dcd60001d0ed208edce514c2d0a866063550c64d6c90be99d01561ac5aa7e82b8610b7e273d37d + in: path + name: certId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + certID: 5e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + client_cert_api_names: + - Ngrok Dashboard API + client_cert_apis: + - edc9b2bd3e7b4cc55c4ff0a7e1529b45 + key_cert: 5e9d9544a1dcd60001d0ed205e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + upstream_cert_api_names: + - External HTTPbin + upstream_cert_apis: + - 627efb71ebae49df7a853b9769b65fce + schema: + $ref: '#/components/schemas/CertificateDependencies' + description: Dependencies fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs/dependencies/{certId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + summary: Get Certificate Dependencies. + tags: + - Certificates + /api/certs/details: + get: + description: Return a list that contains certificates and their full details. + operationId: listDetailedCertificates + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + responses: + "200": + content: + application/json: + example: + certificates: + - dns_names: + - .*tyk.io + fingerprint: 7c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + has_private: false + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + is_ca: false + issuer: + CommonName: tyk.io + Country: + - 'Peachtree ' + ExtraNames: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: 'Peachtree ' + Locality: + - JN + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: Peachtree + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: + - "00010" + Province: + - San Jore + SerialNumber: "" + StreetAddress: + - River side drive + not_after: "2034-03-26T08:46:37Z" + not_before: "2024-03-25T08:46:37Z" + subject: + CommonName: tyk.io + Country: + - 'Peachtree ' + ExtraNames: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: 'Peachtree ' + Locality: + - JN + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: 'Peachtree ' + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: + - "00010" + Province: + - San Jore + SerialNumber: "" + StreetAddress: + - River side drive + pages: 1 + schema: + $ref: '#/components/schemas/CertificateDetailedList' + description: Fetched certificates. + "400": + content: + application/json: + example: + Message: Could not retrieve certs details. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Could not connect to gateway. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/certs/details' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to marshal data for certificate list. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List all certificates details. + tags: + - Certificates + /api/examples: + get: + description: Returns a list of all example API definitions available in "repository.json" + file defined in "x-tyk-examples-index" header. If the header is not provided, + Tyk will use the default value of this header which is `tyk-examples` repo. + operationId: getAPIExamples + parameters: + - description: URL path to the repository.json in the repository defined in + `x-tyk-repo-url. + example: https://raw.githubusercontent.com/TykTechnologies/tyk-examples/main/repository.json + in: header + name: x-tyk-examples-index + schema: + default: https://raw.githubusercontent.com/TykTechnologies/tyk-examples/main/repository.json + type: string + responses: + "200": + content: + application/json: + example: + - location: udg/vat-checker + name: VAT number checker UDG + shortDescription: Simple REST API wrapped in GQL using Universal Data + Graph that allows user to check validity of a VAT number and display + some details about it. + - location: udg/geo-info + name: Geo information about the World + shortDescription: Countries GQL API extended with information from + geocode.xyz + - location: udg/react-conferences + name: React conferences in Europe + shortDescription: Information about React conferences in Europe. This + Data Graph stitches together two GQL APIs. The flag image is added + by using Trevorblades API as a data source. + schema: + items: + $ref: '#/components/schemas/ExampleAPIMetadata' + type: array + description: List of API examples response. + "400": + content: + application/json: + example: + Message: Invalid examples index file or root path. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad Request + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/examples' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to fetch examples index file. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get a list of example API definitions. + tags: + - APIs + /api/examples/{location}: + get: + description: Get the details of a single API definition, details include full + name, location in the repository, description, features and min tyk version. + operationId: getAPIExample + parameters: + - description: URL that points to the index file (repository.json) or root of + a repository housing examples. + example: https://raw.githubusercontent.com/TykTechnologies/tyk-examples/main/repository.json + in: header + name: x-tyk-examples-index + schema: + default: https://raw.githubusercontent.com/TykTechnologies/tyk-examples/main/repository.json + type: string + - description: Repository URL to fetch example API definitions from. + example: https://github.com/TykTechnologies/tyk-examples.git + in: header + name: x-tyk-repo-url + schema: + default: https://github.com/TykTechnologies/tyk-examples.git + type: string + - description: Location of the tyk example in the repository defined in `x-tyk-repo-url`. + example: udg/vat-checker + in: path + name: location + required: true + schema: + type: string + - description: If set to true, the response will contain the content of the + Readme file for the specified example, the readme content will be present + as the `readme` field. + example: false + in: query + name: readme + required: false + schema: + default: "false" + type: boolean + - description: If set to true, the response will contain the APIDefinition of + the specified example, the definition will be present as the `apiDefinition` + field. + example: false + in: query + name: apiDef + required: false + schema: + default: false + type: boolean + responses: + "200": + content: + application/json: + example: + description: Simple REST API wrapped in GQL using Universal Data Graph + that allows user to check validity of a VAT number and display some + details about it. + features: + - REST Datasource + location: udg/vat-checker + min_version: "5.0" + name: VAT number checker UDG + schema: + $ref: '#/components/schemas/DetailedExampleAPIMetadata' + description: Details on the fetched example API definition. + "400": + content: + application/json: + example: + Message: Invalid examples index file or root path. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Invalid parameters. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/examples/{location}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Example API definition not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Example API definition not found. + "500": + content: + application/json: + example: + Message: Failed to fetch example API definitions. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get details of a single example API definition. + tags: + - APIs + /api/hooks: + get: + description: Return a paginated list of webhooks. + operationId: getWebhookList + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + responses: + "200": + content: + application/json: + example: + hooks: + - api_model: {} + event_timeout: 0 + header_map: + secret: superscretkey + x-auth: authvalue + id: "363634393863643165326663643130303031383465636239" + method: POST + name: Expired Keys webhook + org_id: 5e9d9544a1dcd60001d0ed20 + target_path: https://httpbin.org/expired-keys + template_path: "" + webhook_id: 1f78e319202b430e92286cff3ca759e3 + - api_model: {} + event_timeout: 0 + header_map: + x-auth: keith + id: "363634623338353335373135656334633936636265663364" + method: POST + name: Webhook Receiver Post + org_id: 5e9d9544a1dcd60001d0ed20 + target_path: https://httpbin.org/receiver + template_path: "" + webhook_id: 9aef65505d694792a25fd0334dde2661 + pages: 1 + schema: + $ref: '#/components/schemas/WebHooks' + description: Webhook fetched. + "400": + content: + application/json: + example: + Message: Could not retrieve webhooks. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failed to retrieve webhooks. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/hooks' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to marshal data for APIs. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List webhooks. + tags: + - Webhooks + post: + description: Create a webhook. The webhook method and target_path fields are + required. Method can either be DELETE,GET,PUT,POST or PATCH. + operationId: createWebhook + requestBody: + content: + application/json: + example: + header_map: + another-value: somevalue + secret: superscretkey + method: POST + name: Expired Keys webhook + target_path: https://httpbin.org/expired-keys + schema: + properties: + header_map: + additionalProperties: + type: string + nullable: true + type: object + method: + type: string + name: + type: string + target_path: + type: string + type: object + description: Webhook data. + responses: + "200": + content: + application/json: + example: + Message: Webhook created + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Webhook created. + "400": + content: + application/json: + example: + Message: Webhook object validation failed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: validation failed (required fields not sent in request body). + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request body. + "409": + content: + application/json: + example: + Message: Duplicate webhook_id. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Webhook with ID exist. + "500": + content: + application/json: + example: + Message: Failed to read response body, body empty. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Empty request body. + summary: Create a webhook. + tags: + - Webhooks + /api/hooks/{hookId}: + delete: + description: Delete webhook with ID. + operationId: deleteWebhook + parameters: + - description: ID of the webhook to delete. + example: 66498cd1e2fcd1000184ecb9 + in: path + name: hookId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: Webhook deleted + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Deleted successfully. + "400": + content: + application/json: + example: + Message: Could not delete the webhook. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Deletion failed. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/hooks/{hookId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve webhook detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Webhook with ID not found. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: You are not allowed in this org. + summary: Delete web hook. + tags: + - Webhooks + get: + description: Get a webhook details with its ID. + operationId: getWebhookDetail + parameters: + - description: ID of the webhook to fetch. + example: 66498cd1e2fcd1000184ecb9 + in: path + name: hookId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + api_model: {} + event_timeout: 0 + header_map: + secret: superscretkey + x-auth: authvalue + id: "363634393863643165326663643130303031383465636239" + method: POST + name: Expired Keys webhook + org_id: 5e9d9544a1dcd60001d0ed20 + target_path: https://httpbin.org/expired-keys + template_path: "" + webhook_id: 1f78e319202b430e92286cff3ca759e3 + schema: + $ref: '#/components/schemas/WebHookHandlerConf' + description: Webhook fetched. + "400": + content: + application/json: + example: + Message: Could not retrieve webhook detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Webhook not found. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/hooks/{hookId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to marshal data for webhook detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get single webhook. + tags: + - Webhooks + put: + description: Update a web hook using its ID. The webhook method and target_path + fields are required in the request body when updating. *Note the original + webhook data will be completely replaced with the new update request object(so + if for example you don't send the name or webhook_id fields in your request + body those fields will be updated to empty string even if they existed in + your original webhook object.)* + operationId: updateWebhook + parameters: + - description: ID of the webhook to update + example: 664b70285715ec4c96cbef3f + in: path + name: hookId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + header_map: + another-value: somevalue + secret: superscretkey + method: POST + name: Update WebHook Name + target_path: https://httpbin.org/v2/changed-expired-keys + schema: + properties: + header_map: + additionalProperties: + type: string + nullable: true + type: object + method: + type: string + name: + type: string + target_path: + type: string + type: object + responses: + "200": + content: + application/json: + example: + Message: Hook updated + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Webhook updated. + "400": + content: + application/json: + example: + Message: Webhook not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Webhook with ID not found. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request body. + "500": + content: + application/json: + example: + Message: Failed to read response body, body empty. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Empty request body. + summary: Update Webhook + tags: + - Webhooks + /api/keys: + post: + description: |- + Tyk will generate the access token based on the OrgID specified in the API Definition and a random UUID. This ensures that keys can be owned by different API owners should segmentation be needed at an organisational level. +

+ API keys without access_rights data will be written to all APIs on the system (this also means that they will be created across all SessionHandlers and StorageHandlers, it is recommended to always embed access_rights data in a key to ensure that only targeted APIs and their back-ends are written to. + operationId: addKey + parameters: + - description: Set this to true to create a basic user. Note you have to send + basic_auth_data(user and password) in the request body if this value is + set to true. + example: true + in: query + name: basic_auth + required: false + schema: + default: false + enum: + - true + - false + type: boolean + requestBody: + content: + application/json: + example: + alias: portal-key + allowance: 1000 + apply_policies: + - 62a0ec9092faf50001395817 + enable_detailed_recording: true + expires: 1.718439136e+09 + hmac_enabled: false + is_inactive: false + meta_data: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: -1 + quota_remaining: 0 + quota_renewal_rate: -1 + quota_renews: 1.715847135e+09 + rate: 1000 + tags: + - edge-eu + - edge + throttle_interval: 0 + throttle_retry_limit: 0 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/KeyData' + description: New Key added. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unmarshalling request body failed, malformed. + "500": + content: + application/json: + example: + Message: Failed to unmarshal key data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create a key. + tags: + - Keys + /api/keys/{keyId}: + delete: + description: Deleting a key will remove it permanently from the system, however + analytics relating to that key will still be available. + operationId: deleteKey + parameters: + - description: If you are not sure if a key is hashed you can send this as true. + example: true + in: query + name: auto_guess + required: false + schema: + default: false + enum: + - true + - false + type: boolean + - description: Use the hash of the key as input instead of the full key.Any + none empty string will be interpreted as to say you want to use hash input. + example: "1" + in: query + name: hashed + required: false + schema: + type: string + - description: Set to true if the passed key is a username + example: true + in: query + name: username + required: false + schema: + enum: + - true + - false + type: boolean + - description: The ID of the key. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + in: path + name: keyId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: Key deleted successfully. + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Key deleted. + "400": + content: + application/json: + example: + Message: Attempted access to non-owned key. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Trying to access a key your org does not own. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/keys/{keyId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve key detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Key with ID not found + "500": + content: + application/json: + example: + Message: Could not delete key. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete key. + tags: + - Keys + get: + description: Get the details of a key. + operationId: getKeyDetail + parameters: + - description: The ID of the key. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + in: path + name: keyId + required: true + schema: + type: string + - description: If you are not sure if a key is hashed you can send this as true. + example: true + in: query + name: auto_guess + required: false + schema: + default: false + enum: + - true + - false + type: boolean + - description: Use the hash of the key as input instead of the full key.Any + none empty string will be interpreted as to say you want to use hash input. + example: "1" + in: query + name: hashed + required: false + schema: + type: string + - description: Set to true if the passed key ID is a username. + example: true + in: query + name: username + required: false + schema: + enum: + - true + - false + type: boolean + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/KeyData' + description: Key Data fetched. + "400": + content: + application/json: + example: + Message: Attempted access to non-owned key. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Trying to access a key your org does not own. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/keys/{keyId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve key detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Key with ID not found. + "500": + content: + application/json: + example: + Message: Failed to unmarshal key data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get key Details. + tags: + - Keys + post: + description: Creates a key with a custom key ID. + operationId: createCustomKey + parameters: + - description: The ID to give the key. + example: my-custom-key + in: path + name: keyId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + alias: portal-key + allowance: 1000 + apply_policies: + - 62a0ec9092faf50001395817 + enable_detailed_recording: true + expires: 1.718439136e+09 + hmac_enabled: false + is_inactive: false + meta_data: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: -1 + quota_remaining: 0 + quota_renewal_rate: -1 + quota_renews: 1.715847135e+09 + rate: 1000 + tags: + - edge-eu + - edge + throttle_interval: 0 + throttle_retry_limit: 0 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/KeyData' + description: Key created. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unmarshalling request body failed, malformed. + "500": + content: + application/json: + example: + Message: Failed to unmarshal Key data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create custom key. + tags: + - Keys + put: + description: You can also manually add keys to Tyk using your own key-generation + algorithm. It is recommended if using this approach to ensure that the OrgID + being used in the API definition and the key data is blank so that Tyk does + not try to prepend or manage the key in any way. + operationId: updateKeyDetail + parameters: + - description: The ID of the key. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + in: path + name: keyId + required: true + schema: + type: string + - description: Use the hash of the key as input instead of the full key. Any + none empty string will be interpreted as to say you want to use hash input. + example: "1" + in: query + name: hashed + required: false + schema: + type: string + - description: If you are not sure if a key is hashed you can send this as true. + example: true + in: query + name: auto_guess + required: false + schema: + default: false + enum: + - true + - false + type: boolean + - description: Set to true if the passed key ID is a username. + example: true + in: query + name: username + required: false + schema: + enum: + - true + - false + type: boolean + - description: Adding the suppress_reset parameter and setting it to 1, will + cause Tyk not to reset the quota limit that is in the current live quota + manager. By default Tyk will reset the quota in the live quota manager (initialising + it) when adding a key. Adding the `suppress_reset` flag to the URL parameters + will avoid this behaviour. + in: query + name: suppress_reset + required: false + schema: + type: string + requestBody: + content: + application/json: + example: + alias: portal-key + allowance: 1000 + apply_policies: + - 62a0ec9092faf50001395817 + enable_detailed_recording: true + expires: 1.718439136e+09 + hmac_enabled: false + is_inactive: false + meta_data: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: -1 + quota_remaining: 0 + quota_renewal_rate: -1 + quota_renews: 1.715847135e+09 + rate: 1000 + tags: + - edge-eu + - edge + throttle_interval: 0 + throttle_retry_limit: 0 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/KeyData' + description: Key updated + "400": + content: + application/json: + example: + Message: User/Key object validation failed, most likely malformed + input. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: malformed input. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unmarshalling request body failed, malformed. + "404": + content: + application/json: + example: + Message: Could not retrieve key detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Key with ID not found. + "500": + content: + application/json: + example: + Message: Failed to unmarshal key data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update key. + tags: + - Keys + /api/keys/detailed: + get: + description: List all the keys and all the keys details. If `q` query parameter + is passed it will only return keys whose key ID contain the passed text. + operationId: getKeysDetailed + parameters: + - description: Filter and return all keys that contain this text in there key + ID. + example: itachi + in: query + name: q + required: false + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/KeysDetailed' + description: Keys fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/keys/detailed' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve keys. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to connect to the gateway. + "500": + content: + application/json: + example: + Message: Failed to unmarshal keys data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List All the Keys info. + tags: + - Keys + /api/keys/preview: + post: + description: This will check if the body of a key definition is valid. And return + a response with how the key would look like if you create it. + operationId: validateAKeyDefinition + requestBody: + content: + application/json: + example: + alias: portal-key + allowance: 1000 + apply_policies: + - 62a0ec9092faf50001395817 + enable_detailed_recording: true + expires: 1.718439136e+09 + hmac_enabled: false + is_inactive: false + meta_data: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: -1 + quota_remaining: 0 + quota_renewal_rate: -1 + quota_renews: 1.715847135e+09 + rate: 1000 + tags: + - edge-eu + - edge + throttle_interval: 0 + throttle_retry_limit: 0 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/KeyData' + description: Key definition is valid. + "400": + content: + application/json: + example: + Message: User/Key object validation failed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed key data. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request. + "500": + content: + application/json: + example: + Message: Failed to unmarshal User data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: This will validate a key definition. + tags: + - Keys + /api/org/opa: + get: + description: List your organisation OPA rules. + operationId: getOPARules + responses: + "200": + content: + application/json: + example: + open_policy: + rules: |- + package dashboard_users + default request_intent = "read" + request_intent = "write" { input.request.method == "POST" } + request_intent = "write" { input.request.method == "PUT" } + request_intent = "delete" { input.request.method == "DELETE" } + deny["You cannot create a keyless API."] { + request_intent == "write" + contains(input.request.path, "api/apis") + input.request.body.api_definition.use_keyless == true + } + schema: + $ref: '#/components/schemas/NewOPARules' + description: OPA rules fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Your license does not support Open Policy. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Upgrade licence. + "500": + content: + application/json: + example: + Message: Failed to identify organisation. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List OPA rules. + tags: + - Open Policy Agent + put: + description: Modify your OPA rules. + operationId: updateOrgOPARules + requestBody: + content: + application/json: + example: + open_policy: + rules: |- + package dashboard_users + default request_intent = "read" + request_intent = "write" { input.request.method == "POST" } + request_intent = "write" { input.request.method == "PUT" } + request_intent = "delete" { input.request.method == "DELETE" } + deny["You cannot create a keyless API."] { + request_intent == "write" + contains(input.request.path, "api/apis") + input.request.body.api_definition.use_keyless == true + } + schema: + $ref: '#/components/schemas/NewOPARules' + description: Create rule to prevent creation of keyless APIs. + responses: + "200": + content: + application/json: + example: + Message: OPA rules has been updated on org level. + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OPA rules updated. + "400": + content: + application/json: + example: + Message: Invalid OPA rules. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Invalid OPA rules. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Your license does not support Open Policy. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Upgrade licence. + "500": + content: + application/json: + example: + Message: Failed to unmarshal response body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: malformed request body. + summary: Update OPA rules. + tags: + - Open Policy Agent + /api/org/permissions: + get: + description: This API returns by default the initial set of additional permissions + defined in your Tyk Dashboard configuration, under `security.additional_permissions`. + Once you update the permissions via the API, they will be stored at organisation + level. + operationId: listAdditionalPermissions + responses: + "200": + content: + application/json: + example: + additional_permissions: + api_developer: API Developer + api_manager: API Manager + schema: + $ref: '#/components/schemas/NewAdditionalPermissions' + description: Additional Permissions retrieved successfully. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/org/permissions' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to marshal additional permissions. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List additional permissions. + tags: + - Additional Permissions + put: + description: 'Whenever you want to add/update/delete an additional permission, + just send back the updated list of permissions, through this PUT request to + the API. For example if you initially had two additional permissions e.g ```{additional_permissions: + {api_developer: API Developer, api_manager: API Manager}}``` to add a third + permission called `custom_permission` you would append it to the original + permission list and your request body would be: ```{additional_permissions: + {api_developer: API Developer, api_manager: API Manager, custom_permission: + Custom Permission}}```.' + operationId: updateAdditionalPermissions + requestBody: + content: + application/json: + example: + additional_permissions: + api_developer: API Developer + api_manager: API Manager + custom_permission: Custom Permission + schema: + $ref: '#/components/schemas/NewAdditionalPermissions' + responses: + "200": + content: + application/json: + example: + Message: Additional Permissions updated in org level. + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Additional Permissions updated successfully. + "400": + content: + application/json: + example: + Message: Failed to read response body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Empty request body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/org/permissions' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to unmarshal response body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Invalid request body or failed to save permission. + summary: Add/Delete/Update additional permission. + tags: + - Additional Permissions + /api/portal/policies: + get: + description: Get list of policies. The result returned are paginated. Use the + p query parameter to say which page you want returned. The default pagesize + of the results is 10 but this can be changed in the dashboard config. + operationId: getPolicies + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + - description: Send any value in this query parameter to return only the active + policies. + example: "true" + in: query + name: active + required: false + schema: + type: string + responses: + "200": + content: + application/json: + examples: + policiesExample: + $ref: '#/components/examples/policiesExample' + schema: + $ref: '#/components/schemas/ReturnDataStruct' + description: List of all policies. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/portal/policies' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned if you do not have access to policies. + "404": + content: + application/json: + example: + Message: Could not retrieve object list. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not Found + "500": + content: + application/json: + example: + Message: Failed to marshal data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get list portal policies. + tags: + - Policies + post: + description: Creating policy definitions is slightly different to the core API, + API definitions are wrapped inside an api_definition field and event handlers, + such as webhooks are not embedded in the main api_definition object (though + they can be), webhooks are instead appended as references into the hook_references + field, the API will embed the correct webhook data into the event handler + interface. + operationId: postPolicies + requestBody: + content: + application/json: + example: + access_rights: + Itachi API: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi API + disable_introspection: false + versions: + - Default + active: true + hmac_enabled: false + is_inactive: false + key_expires_in: 2.592e+06 + max_query_depth: -1 + meta_data: + email: itachi@tyk.io + user_type: mobile_user + name: Sample policy + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/Policy' + responses: + "200": + content: + application/json: + example: + Message: 663b4bbd5715ec323b424dca + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Policy created. + "400": + content: + application/json: + example: + Message: This policy name has already been used. Enter a unique policy + name. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when the policy body fails validation. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when you send a malformed request body or when you + don't have permission to add this object. + "500": + content: + application/json: + example: + Message: Failure creating data, please contact your administrator. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create policy definition. + tags: + - Policies + /api/portal/policies/{id}: + delete: + description: Delete a Policy by ID. + operationId: deletePolicy + parameters: + - description: ID of policy to delete. + example: 66570989d98dd00001da17f1 + in: path + name: id + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: Data deleted + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Deleted policy successfully. + "400": + content: + application/json: + example: + Message: Invalid policy ID. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when you send a policy ID that is invalid. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/portal/policies/{id}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned if you do not have access to policies. + "404": + content: + application/json: + example: + Message: Could not retrieve object for deletion + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned if policy with specified ID does not exist. + "500": + content: + application/json: + example: + Message: Failure deleting data, please contact your administrator. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete a single policy by ID. + tags: + - Policies + get: + description: Get a policy by ID. + operationId: getPolicy + parameters: + - description: ID of policy to get. + example: 66570989d98dd00001da17f1 + in: path + name: id + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + access_rights: + Itachi API: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi API + disable_introspection: false + versions: + - Default + active: true + hmac_enabled: false + is_inactive: false + key_expires_in: 2.592e+06 + max_query_depth: -1 + meta_data: + email: itachi@tyk.io + user_type: mobile_user + name: Sample policy + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/Policy' + description: Policy fetched. + "400": + content: + application/json: + example: + Message: Invalid policy ID. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when you send a policy ID that is invalid. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/portal/policies/{id}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve portal object. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Policy with the given ID was not found. + "500": + content: + application/json: + example: + Message: Failure creating data, please contact your administrator. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get a single policy by ID. + tags: + - Policies + put: + description: Update a policy definition. + operationId: putPolicies + parameters: + - description: ID of policy to update. + example: 66570989d98dd00001da17f1 + in: path + name: id + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + access_rights: + Itachi API: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi API + disable_introspection: false + versions: + - Default + active: true + hmac_enabled: false + is_inactive: false + key_expires_in: 2.592e+06 + max_query_depth: -1 + meta_data: + email: itachi@tyk.io + user_type: mobile_user + name: Sample policy + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + tags: + - security + - messages + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/Policy' + responses: + "200": + content: + application/json: + example: + Message: Data updated + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Policy updated. + "400": + content: + application/json: + example: + Message: Invalid policy ID. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when you send an invalid ID or when the policy body + fails validation. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when you send a malformed request body or when you + don't have permission to update this object. + "404": + content: + application/json: + example: + Message: Could not retrieve portal object. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned if policy with specified ID does not exist. + "500": + content: + application/json: + example: + Message: Failure saving data, please contact your administrator. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update policy definition. + tags: + - Policies + /api/portal/policies/search: + get: + description: Search list of policies. If query parameter q is a policy ID it + will look for policies that have the given ID. However if q is not a policy + ID it will return policies with whose name matches the patten based via q + query parameter. If you send a policy ID in query parameter q and also send + query parameter policy_ids,only policy_ids will be used for searching. + operationId: searchPolicies + parameters: + - description: Search for policy using policy ID or name. + example: 5eb6349543f0440001373f5c + in: query + name: q + required: false + schema: + type: string + - description: A list of comma separated policy IDs that you want to search + for. + example: 5eb6349543f0440001373f5c,5ead7120575961000181867e + in: query + name: policy_ids + required: false + schema: + type: string + - description: Send any value in this query parameter to return only the active + policies. + example: "true" + in: query + name: active + required: false + schema: + type: string + - description: Return policies whose state field matches the sent value e.g + if you send state as deny policies returned are those whose state filed + value is set as deny. + example: deny + in: query + name: state + required: false + schema: + enum: + - deny + - active + - draft + type: string + - description: Field you want to use to sort the returned policies. + example: name + in: query + name: sort + required: false + schema: + enum: + - date_created + - name + - state + type: string + - description: Comma separate list of API IDs. Return only policy that that + have the given API IDs in their access_right. + example: 5963f8fdedee405143f5858ea17de422 + in: query + name: api_id + required: false + schema: + type: string + - description: Return policy whose auth_type field has the given value. + example: authToken + in: query + name: auth_type + required: false + schema: + type: string + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + responses: + "200": + content: + application/json: + examples: + policiesExample: + $ref: '#/components/examples/policiesExample' + schema: + $ref: '#/components/schemas/ReturnDataStruct' + description: List of policies. + "400": + content: + application/json: + example: + Message: Policy ID is not in hex format. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Returned when you send policy IDs that are not in hexadecimal + format. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/portal/policies/search' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve policies. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Not Found + "500": + content: + application/json: + example: + Message: Failed to marshal data + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Search list of policies. + tags: + - Policies + /api/schema: + get: + description: Get OAS schema. + operationId: getSchema + parameters: + - description: The OAS version. + example: 3.0.3 + in: query + name: oasVersion + required: false + schema: + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/OASSchemaResponse' + description: OAS schema response. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/schema' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Could not retrieve OAS schema. Schema not found for version. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get OAS schema. + tags: + - Schema + /api/sso: + post: + description: The Dashboard exposes the /api/sso Dashboard API which allows you + to generate a temporary authentication token, valid for 60 seconds. + operationId: generateAuthToken + requestBody: + content: + application/json: + example: + DisplayName: "" + EmailAddress: name@somewhere.com + ForSection: dashboard + GroupID: "" + OrgID: 588b4f0bb275ff0001cc7471 + SSOOnlyForRegisteredUsers: false + UserNotAllowed: false + schema: + $ref: '#/components/schemas/SSOAccessData' + responses: + "200": + content: + application/json: + example: + Message: SSO Nonce created. + Meta: YTNiOGUzZjctYWZkYi00OTNhLTYwODItZTAzMDI3MjM0OTEw + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Created successfully. + "400": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: SSO not enabled for org. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Failed to read response body, body empty. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Generate authentication token. + tags: + - Single Sign On + /api/system/stats: + get: + description: Get system usage info with license entitlements for a specified + date range. Return history for current and previous year if no date query + parameters are provided. + operationId: getSystemStats + parameters: + - $ref: '#/components/parameters/startDate' + - $ref: '#/components/parameters/endDate' + - description: Resolve daily. + example: day + in: query + name: resolution + required: false + schema: + enum: + - day + type: string + - description: The entity for which stats should be retrieved. + example: apis + in: query + name: entity + required: false + schema: + default: apis + enum: + - apis + - dataplanes + - dataplanes.gateways + type: string + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/SystemStatsResp' + description: System statistics details. + "400": + content: + application/json: + example: + Message: Request validation failed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Bad request. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/system/stats' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Stats not found. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Stats not found. + "500": + content: + application/json: + example: + Message: Failed to system stats. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get system usage info. + tags: + - System + /api/usergroups: + get: + description: This will return a list of all the user groups. The returned user + groups are paginated. + operationId: listUserGroups + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + responses: + "200": + content: + application/json: + example: + groups: + - active: true + description: devs company + id: "363634393938366435373135656334633936636265663262" + name: devs + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + user_permissions: + analytics: read + api_assets: write + apis: write + certs: write + hooks: write + idm: write + keys: write + log: read + oauth: write + owned_analytics: deny + policies: write + portal: write + system: write + user_groups: write + users: write + websockets: read + - active: true + description: Devops logs and analytics access + id: "363634396664346235373135656334633936636265663338" + name: Devops + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + user_permissions: + analytics: read + log: read + pages: 1 + schema: + $ref: '#/components/schemas/UserGroups' + description: User groups fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/usergroups' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve user groups. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to fetch groups. + "500": + content: + application/json: + example: + Message: Failed to unmarshal keys data from Tyk API. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List user groups. + tags: + - UserGroup + post: + description: Instead of assigning permission to each individual users, per user, + you can create a user group and configure the permissions for all users in + the group. This endpoint allow you to create a user group and set permission + for the user group. + operationId: createUserGroup + requestBody: + content: + application/json: + example: + active: true + description: Devops logs and analytics access + name: Devops + org_id: 5e9d9544a1dcd60001d0ed20 + user_permissions: + analytics: read + log: read + schema: + $ref: '#/components/schemas/UserGroup' + responses: + "200": + content: + application/json: + example: + Message: User group created + Meta: 6649fb3e5715ec4c96cbef36 + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: User group created. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request data. + "500": + content: + application/json: + example: + Message: Failed to read response body, body empty. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Create user group. + tags: + - UserGroup + /api/usergroups/{groupId}: + delete: + description: Delete user group using the group ID. + operationId: deleteUserGroup + parameters: + - description: ID of the group you want to delete. + example: 6649fd535715ec4c96cbef39 + in: path + name: groupId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: User group deleted + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OK + "400": + content: + application/json: + example: + Message: Could not delete the user group. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failed to delete user group. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/usergroups/{groupId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve user detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Group not found. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete user group. + tags: + - UserGroup + get: + description: Return a user group object with all the details of a specified + group. + operationId: getUserGroup + parameters: + - description: ID of the group you want to fetch. + example: 6649fd535715ec4c96cbef39 + in: path + name: groupId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + active: true + description: Devops logs and analytics access + id: "363634396664346235373135656334633936636265663338" + name: Devops + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + user_permissions: + analytics: read + log: read + schema: + $ref: '#/components/schemas/UserGroup' + description: User grouped fetched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/usergroups/{groupId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve user group detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Group not found. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get user group details. + tags: + - UserGroup + put: + description: Update the details of a user group. You must have either admin + or user groups permission to be able to modify user groups. Note you cannot + update the ResetPassword permission with this endpoint. For that you need + to use Admin API. When updating a user group you also need to specify at least + one permission in the user_permissions field. + operationId: updateUserGroup + parameters: + - description: ID of the group you want to update. + example: 6649fd535715ec4c96cbef39 + in: path + name: groupId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + active: true + description: Devops logs and analytics access + name: Devops + org_id: 5e9d9544a1dcd60001d0ed20 + user_permissions: + analytics: read + log: read + schema: + $ref: '#/components/schemas/UserGroup' + responses: + "200": + content: + application/json: + example: + Message: User group updated + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OK + "400": + content: + application/json: + example: + Message: Group ID does not exist + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Group not found or malformed request body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/usergroups/{groupId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update user group. + tags: + - UserGroup + /api/users: + get: + description: Lists dashboard users + operationId: getUsers + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + responses: + "200": + content: + application/json: + example: + pages: 1 + users: + - access_key: d7ebef749e4348cb67fec3cfc81f0a50 + active: true + api_model: {} + created_at: "2024-05-19T08:23:29.173+03:00" + email_address: multi-org-user@example.org + first_name: Multi org + group_id: "" + id: "363634393863643165326663643130303031383465636235" + last_login_date: "2024-05-19T08:45:09.53319+03:00" + last_name: User + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:23:29.281+03:00" + user_permissions: + IsAdmin: admin + ResetPassword: admin + - access_key: f4b94c64017043dc4d1918db7e3436dd + active: true + api_model: {} + created_at: "2024-05-19T08:23:29.034+03:00" + email_address: admin-user@example.org + first_name: Admin + group_id: "" + id: "363634393863643165326663643130303031383465636234" + last_login_date: "2024-05-19T08:42:22.659839+03:00" + last_name: User + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:23:29.146+03:00" + user_permissions: + IsAdmin: admin + ResetPassword: admin + - access_key: d19fc75cd3aa497f6cb042f72e47ce8c + active: true + api_model: {} + created_at: "2024-05-19T08:45:09.53319+03:00" + email_address: itachi.w@tyk.io + first_name: sasuke + group_id: "" + id: "363634393931653535373135656334633936636265663261" + last_login_date: "2024-05-19T08:45:09.53319+03:00" + last_name: itachi + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:45:09.53319+03:00" + user_permissions: + IsAdmin: admin + - access_key: b26feb8ff86b48e15ae2513a2de6f8f7 + active: true + api_model: {} + created_at: "2024-05-19T09:14:13.461142+03:00" + email_address: munene@gmail.com + first_name: munene + group_id: 6649986d5715ec4c96cbef2b + id: "363634393938623535373135656334633936636265663263" + last_login_date: "2024-05-19T08:45:09.53319+03:00" + last_name: wachira + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T09:14:13.461142+03:00" + user_permissions: + analytics: read + api_assets: write + apis: write + certs: write + hooks: write + idm: write + keys: write + log: read + oauth: write + policies: write + portal: write + system: write + user_groups: write + users: write + websockets: read + schema: + $ref: '#/components/schemas/Users' + description: Users retrieved successfully. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve users. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Error retrieving users from db. + "500": + content: + application/json: + example: + Message: Failed to unmarshal keys data from Tyk API + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: List users + tags: + - Users + post: + description: 'Create a user. If you want to create an admin user, you need to + send {IsAdmin: admin} in the user_permissions field e.g ```{user_permissions: + {IsAdmin: admin},last_name: sasuke,email_address: itachi@gmail.com,first_name: + itachi}```. You can add a user to a given user-group by sending the group_id + in the request body. If you want to give a user access only to specific objects + e.g policies you can send the object and the permission granted to the user + (read or write permission in the user_permissions field (check the request + example given for more details)).' + operationId: addUser + requestBody: + content: + application/json: + example: + active: true + email_address: itachi@gmail.com + first_name: itachi + last_name: sasuke + user_permissions: + analytics: read + api_assets: write + apis: write + certs: write + hooks: write + idm: write + keys: write + log: read + oauth: write + policies: write + portal: write + system: write + user_groups: write + users: write + websockets: read + schema: + $ref: '#/components/schemas/User' + responses: + "200": + content: + application/json: + example: + Message: User and session have been created + Meta: 6649a9e85715ec4c96cbef2f + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: User added successfully. + "400": + content: + application/json: + example: + Message: User object validation failed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failure to send all required fields. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: User email already exists for this org. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User already exist. + "500": + content: + application/json: + example: + Message: Couldn't retrieve user session details. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Add user. + tags: + - Users + /api/users/{userId}: + delete: + description: Delete a user with user ID. + operationId: deleteUser + parameters: + - description: User ID of the user to delete. + example: 66498cd1e2fcd1000184ecb4 + in: path + name: userId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: User deleted + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OK + "400": + content: + application/json: + example: + Message: Could not delete the user. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Failed to delete user. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/{userId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve user detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User not found. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Delete a user. + tags: + - Users + get: + description: Return a user object with details of the user specified by user + ID in path. + operationId: getUser + parameters: + - description: User ID of the user to retrieve data for. + example: 66498cd1e2fcd1000184ecb4 + in: path + name: userId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + access_key: f4b94c64017043dc4d1918db7e3436dd + active: true + api_model: {} + created_at: "2024-05-19T08:23:29.034+03:00" + email_address: admin-user@example.org + first_name: Admin + group_id: "" + id: "363634393863643165326663643130303031383465636234" + last_login_date: "2024-05-19T08:42:22.659839+03:00" + last_name: User + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:23:29.146+03:00" + user_permissions: + IsAdmin: admin + ResetPassword: admin + schema: + $ref: '#/components/schemas/User' + description: User retrieved successfully. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/{userId}' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve user detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User not found. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get user details. + tags: + - Users + put: + description: Update a user with user ID. If you update the user as inactive + they will be logged out of all dashboard sessions. User password can only + be updated via admin API or the update password endpoint. ResetPassword is + also only available via the admin API. + operationId: updateUser + parameters: + - description: USER ID of the user to update + example: 66498cd1e2fcd1000184ecb4 + in: path + name: userId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + active: true + email_address: itachi@gmail.com + first_name: itachi + last_name: sasuke + user_permissions: + IsAdmin: admin + schema: + properties: + active: + type: boolean + email_address: + type: string + first_name: + type: string + last_name: + type: string + user_permissions: + $ref: '#/components/schemas/UserPermissionObject' + type: object + responses: + "200": + content: + application/json: + example: + Message: User updated + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: Updated successfully. + "400": + content: + application/json: + example: + Message: user does not exist. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User not found or malformed request body. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: To create a user specify at least one permission, or make + them an admin. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Empty user rights or invalid email format. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Update user. + tags: + - Users + /api/users/{userId}/actions/key/reset: + put: + description: Reset specified user's Dashboard API access credentials by generating + a new access key for the specified user. + operationId: resetUserKey + parameters: + - description: User ID of the user whose key you want to reset. + example: 66498cd1e2fcd1000184ecb4 + in: path + name: userId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: User session renewed + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: New access key generated. + "400": + content: + application/json: + example: + Message: Problem updating user with new key. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to update user details. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/{userId}/actions/key/reset' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve user detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User not found + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Reset user Dashboard API access credentials. + tags: + - Users + /api/users/{userId}/actions/reset: + post: + description: Set a user's password. The password need to be 6 character long. + If you are trying to update another users password you also need to have permission + to update they password or you need to be a super-admin. You cannot also reuse + a password. + operationId: setUserPassword + parameters: + - description: User ID of the user whose password is being reset. + example: 66498cd1e2fcd1000184ecb4 + in: path + name: userId + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + api_model: {} + current_password: minimum6charactersPassword + new_password: newMinimum6CharactersPassword + schema: + $ref: '#/components/schemas/UserPassword' + responses: + "200": + content: + application/json: + example: + Message: User password updated + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OK + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: Request body malformed. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Malformed request body or you don't have permission to change + this users password. + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Set user password. + tags: + - Users + /api/users/{userId}/actions/revoke: + put: + description: This will set the use account as inactive. It will also disable + API Access and log out the user from all dashboards. + operationId: revokeUser + parameters: + - description: User ID of the user whose access you want to revoke. + example: 66498cd1e2fcd1000184ecb4 + in: path + name: userId + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + Message: User revoked + Meta: null + Status: OK + schema: + $ref: '#/components/schemas/ApiResponse' + description: OK + "400": + content: + application/json: + example: + Message: Could not retrieve user detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User not found. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/{userId}/actions/revoke' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "500": + content: + application/json: + example: + Message: Attempted unauthorised access. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Revoke user. + tags: + - Users + /api/users/me: + get: + description: Return a user object with the details of the current user. This + request need to have a session cookie with the key authorisation. + operationId: currentUserDetail + parameters: + - description: authorisation session cookie + example: 1b7eecc5-6dt5-4df8-5472-0c7frc3ae4f2 + in: cookie + name: authorisation + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + access_key: d7ebef749e4348cb67fec3cfc81f0a50 + active: true + api_model: {} + created_at: "2024-05-19T08:23:29.173+03:00" + email_address: multi-org-user@example.org + first_name: Multi org + group_id: "" + id: "363634393863643165326663643130303031383465636235" + last_login_date: "2024-05-19T08:45:09.53319+03:00" + last_name: User + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:23:29.281+03:00" + user_permissions: + IsAdmin: admin + ResetPassword: admin + schema: + $ref: '#/components/schemas/User' + description: OK + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/me' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not retrieve current user detail. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: User not found + "500": + content: + application/json: + example: + Message: Failed to marshal current user data. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Internal server error. + summary: Get current user. + tags: + - Users + /api/users/search: + get: + deprecated: true + description: This endpoint allows you to search for users by providing their + email address as a query parameter. + operationId: searchUserGet + parameters: + - description: Query term used to search for users (email address). + example: itachi@tyk.io + in: query + name: q + required: true + schema: + type: string + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + responses: + "200": + content: + application/json: + example: + pages: 1 + users: + - access_key: d19fc75cd3aa497f6cb042f72e47ce8c + active: true + api_model: {} + created_at: "2024-05-19T08:45:09.53319+03:00" + email_address: itachi.w@tyk.io + first_name: sasuke + group_id: "" + id: "363634393931653535373135656334633936636265663261" + last_login_date: "2024-05-19T08:45:09.53319+03:00" + last_name: itachi + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:45:09.53319+03:00" + user_permissions: + IsAdmin: admin + schema: + $ref: '#/components/schemas/Users' + description: User searched. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/search' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not search users. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to search user. + summary: Search Users(Deprecated) + tags: + - Users + post: + description: This endpoint allows you to search for users with their email address + (e.g if you send the filter @gmail.com` in the request payload, all users + whole email contain the string @gmail.com will be returned). + operationId: searchUser + parameters: + - description: Use p query parameter to say which page you want returned. Send + number less than 0 to return all items. + example: 1 + in: query + name: p + required: false + schema: + type: integer + requestBody: + content: + application/json: + example: + filters: + query: itachi@tyk.io + schema: + $ref: '#/components/schemas/UserSearchPayload' + description: User search criteria. + responses: + "200": + content: + application/json: + example: + pages: 1 + users: + - access_key: d19fc75cd3aa497f6cb042f72e47ce8c + active: true + api_model: {} + created_at: "2024-05-19T08:45:09.53319+03:00" + email_address: itachi.w@tyk.io + first_name: sasuke + group_id: "" + id: "363634393931653535373135656334633936636265663261" + last_login_date: "2024-05-19T08:45:09.53319+03:00" + last_name: itachi + org_id: 5e9d9544a1dcd60001d0ed20 + password_max_days: 0 + password_updated: "2024-05-19T08:45:09.53319+03:00" + user_permissions: + IsAdmin: admin + schema: + $ref: '#/components/schemas/Users' + description: User searched. + "400": + content: + application/json: + example: + Message: Could not extract search filter from request body. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to get filters. + "401": + content: + application/json: + example: + Message: Not authorised + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unauthorized + "403": + content: + application/json: + example: + Message: 'access denied: You do not have permission to access /api/users/search' + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Forbidden + "404": + content: + application/json: + example: + Message: Could not search users. + Meta: null + Status: Error + schema: + $ref: '#/components/schemas/ApiResponse' + description: Unable to search user. + summary: Search user with email. + tags: + - Users +components: + examples: + aggregateAnalytics: + value: + data: + - error: 4 + hits: 31 + id: + alias: "" + api_id: 41351a6a94094da05f75146a695a16f6 + api_name: Keyless + code: 404 + day: 0 + hour: 0 + iso_country: "" + key: "" + month: 0 + path: /anything + url: "" + year: 0 + last_hit: "2024-06-19T07:11:39Z" + latency: 0 + max_latency: 0 + max_upstream_latency: 0 + min_latency: 0 + min_upstream_latency: 0 + request_time: 174.5 + success: 27 + upstream_latency: 0 + pages: 1 + oasExample: + value: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsersSample + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + paginatedApiExample: + value: + apis: + - api_definition: + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Tyk Test API + org_id: 664a14650619d40001f1f00f + proxy: + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default + pages: 1 + policiesExample: + value: + Data: + - _id: "363635373039383964393864643030303031646131376631" + access_rights: + 8ddd91f3cda9453442c477b06c4e2da4: + allowance_scope: "" + allowed_types: [] + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi API + disable_introspection: false + field_access_rights: [] + limit: + max_query_depth: 0 + per: 0 + quota_max: 0 + quota_remaining: 0 + quota_renewal_rate: 0 + quota_renews: 0 + rate: 0 + set_by_policy: false + smoothing: + delay: 30 + enabled: false + step: 100 + threshold: 500 + trigger: 0.8 + throttle_interval: 0 + throttle_retry_limit: 0 + restricted_types: [] + versions: + - Default + active: true + date_created: "2024-05-27T10:24:31.099Z" + hmac_enabled: false + id: "" + is_inactive: false + key_expires_in: 2.592e+06 + last_updated: "1716980105" + max_query_depth: -1 + meta_data: + user_type: mobile_user + name: Sample policy + org_id: 664a14650619d40001f1f00f + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + smoothing: + delay: 30 + enabled: false + step: 100 + threshold: 500 + trigger: 0.8 + tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + Pages: 1 + singleAPIDef: + value: + api_definition: + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + id: 66596520c7f5720001b22558 + name: Tyk Test API + org_id: 664a14650619d40001f1f00f + proxy: + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default + parameters: + AccessType: + description: Filter for internal or external API versions. + example: internal + in: query + name: accessType + required: false + schema: + enum: + - internal + - external + type: string + AllowList: + description: Enable allowList middleware for all endpoints. + in: query + name: allowList + required: false + schema: + $ref: '#/components/schemas/BooleanQueryParam' + Authentication: + description: Enable/disable the authentication mechanism in your Tyk Gateway + for your OAS API. + in: query + name: authentication + schema: + $ref: '#/components/schemas/BooleanQueryParam' + CustomDomain: + description: Custom domain for the API. + example: tyk.io + in: query + name: customDomain + required: false + schema: + type: string + ListenPath: + description: Listen path for the API. + example: /user-test/ + in: query + name: listenPath + required: false + schema: + type: string + MockResponse: + description: Enable mockResponse middleware for all endpoints having responses + configured. + in: query + name: mockResponse + required: false + schema: + $ref: '#/components/schemas/BooleanQueryParam' + SearchText: + description: Search for API version name. + example: Sample oas + in: query + name: searchText + required: false + schema: + type: string + TemplateID: + description: The Asset ID of template applied while creating or importing an + OAS API. + example: my-unique-template-id + in: query + name: templateID + schema: + type: string + UpstreamURL: + description: Upstream URL for the API. + example: https://localhost:8080 + in: query + name: upstreamURL + required: false + schema: + type: string + ValidateRequest: + description: Enable validateRequest middleware for all endpoints having a request + body with media type application/json. + in: query + name: validateRequest + required: false + schema: + $ref: '#/components/schemas/BooleanQueryParam' + endDate: + description: end date + example: ' 2023-07-31' + in: query + name: end_day + schema: + format: date + type: string + startDate: + description: start date + example: "2023-07-01" + in: query + name: start_day + schema: + format: date + type: string + schemas: + APICertificateStatusMessage: + properties: + id: + example: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + type: string + message: + example: Certificate added + type: string + status: + example: ok + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/gateway + APIDefinition: + properties: + CORS: + $ref: '#/components/schemas/CORSConfig' + active: + type: boolean + allowed_ips: + items: + type: string + nullable: true + type: array + analytics_plugin: + $ref: '#/components/schemas/AnalyticsPluginConfig' + api_id: + type: string + auth: + $ref: '#/components/schemas/AuthConfig' + auth_configs: + additionalProperties: + $ref: '#/components/schemas/AuthConfig' + nullable: true + type: object + auth_provider: + $ref: '#/components/schemas/AuthProviderMeta' + base_identity_provided_by: + type: string + basic_auth: + properties: + body_password_regexp: + type: string + body_user_regexp: + type: string + cache_ttl: + type: integer + disable_caching: type: boolean - x-go-name: Debug - enable: + extract_from_body: type: boolean - x-go-name: Enable - exposed_headers: + type: object + blacklisted_ips: + items: + type: string + nullable: true + type: array + cache_options: + $ref: '#/components/schemas/CacheOptions' + certificate_pinning_disabled: + type: boolean + certificates: + items: + type: string + nullable: true + type: array + client_certificates: + items: + type: string + nullable: true + type: array + config_data: + additionalProperties: {} + nullable: true + type: object + config_data_disabled: + type: boolean + custom_middleware: + $ref: '#/components/schemas/MiddlewareSection' + custom_middleware_bundle: + type: string + custom_middleware_bundle_disabled: + type: boolean + custom_plugin_auth_enabled: + type: boolean + definition: + $ref: '#/components/schemas/VersionDefinition' + detailed_tracing: + type: boolean + disable_quota: + type: boolean + disable_rate_limit: + type: boolean + do_not_track: + type: boolean + domain: + type: string + domain_disabled: + type: boolean + dont_set_quota_on_create: + type: boolean + enable_batch_request_support: + type: boolean + enable_context_vars: + type: boolean + enable_coprocess_auth: + type: boolean + enable_detailed_recording: + type: boolean + enable_ip_blacklisting: + type: boolean + enable_ip_whitelisting: + type: boolean + enable_jwt: + type: boolean + enable_proxy_protocol: + type: boolean + enable_signature_checking: + type: boolean + event_handlers: + $ref: '#/components/schemas/EventHandlerMetaConfig' + expiration: + type: string + expire_analytics_after: + format: int64 + type: integer + external_oauth: + $ref: '#/components/schemas/ExternalOAuth' + global_rate_limit: + $ref: '#/components/schemas/GlobalRateLimit' + graphql: + $ref: '#/components/schemas/GraphQLConfig' + hmac_allowed_algorithms: + items: + type: string + nullable: true + type: array + hmac_allowed_clock_skew: + format: double + type: number + id: + type: string + idp_client_id_mapping_disabled: + type: boolean + internal: + type: boolean + is_oas: + type: boolean + jwt_client_base_field: + type: string + jwt_default_policies: + items: + type: string + nullable: true + type: array + jwt_expires_at_validation_skew: + minimum: 0 + type: integer + jwt_identity_base_field: + type: string + jwt_issued_at_validation_skew: + minimum: 0 + type: integer + jwt_not_before_validation_skew: + minimum: 0 + type: integer + jwt_policy_field_name: + type: string + jwt_scope_claim_name: + type: string + jwt_scope_to_policy_mapping: + additionalProperties: + type: string + nullable: true + type: object + jwt_signing_method: + type: string + jwt_skip_kid: + type: boolean + jwt_source: + type: string + listen_port: + type: integer + name: + type: string + notifications: + $ref: '#/components/schemas/NotificationsManager' + oauth_meta: + properties: + allowed_access_types: items: type: string + nullable: true type: array - x-go-name: ExposedHeaders - max_age: - format: int64 - type: integer - x-go-name: MaxAge - options_passthrough: - type: boolean - x-go-name: OptionsPassthrough + allowed_authorize_types: + items: + type: string + nullable: true + type: array + auth_login_redirect: + type: string + type: object + openid_options: + $ref: '#/components/schemas/OpenIDOptions' + org_id: + type: string + pinned_public_keys: + additionalProperties: + type: string + nullable: true + type: object + protocol: + type: string + proxy: + $ref: '#/components/schemas/ProxyConfig' + request_signing: + $ref: '#/components/schemas/RequestSigningMeta' + response_processors: + items: + $ref: '#/components/schemas/ResponseProcessor' + nullable: true + type: array + scopes: + $ref: '#/components/schemas/ScopesType2' + session_lifetime: + format: int64 + type: integer + session_lifetime_respects_key_expiration: + type: boolean + session_provider: + $ref: '#/components/schemas/SessionProviderMeta' + slug: + type: string + strip_auth_data: + type: boolean + tag_headers: + items: + type: string + nullable: true + type: array + tags: + items: + type: string + nullable: true + type: array + tags_disabled: + type: boolean + upstream_certificates: + additionalProperties: + type: string + nullable: true + type: object + upstream_certificates_disabled: + type: boolean + uptime_tests: + $ref: '#/components/schemas/UptimeTests' + use_basic_auth: + type: boolean + use_go_plugin_auth: + type: boolean + use_keyless: + type: boolean + use_mutual_tls_auth: + type: boolean + use_oauth2: + type: boolean + use_openid: + type: boolean + use_standard_auth: + type: boolean + version_data: + $ref: '#/components/schemas/VersionData' + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + APILimit: + nullable: true + properties: + max_query_depth: + type: integer + per: + format: double + type: number + quota_max: + format: int64 + type: integer + quota_remaining: + format: int64 + type: integer + quota_renewal_rate: + format: int64 + type: integer + quota_renews: + format: int64 + type: integer + rate: + format: double + type: number + set_by_policy: + type: boolean + smoothing: + $ref: '#/components/schemas/RateLimitSmoothing' + throttle_interval: + format: double + type: number + throttle_retry_limit: + type: integer + type: object + AccessDefinition: + properties: + allowance_scope: + type: string + allowed_types: + items: + $ref: '#/components/schemas/GraphqlType' + nullable: true + type: array + allowed_urls: + items: + $ref: '#/components/schemas/AccessSpec' + nullable: true + type: array + api_id: + example: d1dfc6a927a046c54c0ed470f19757cc + type: string + api_name: + example: Rate Limit Proxy API + type: string + disable_introspection: + example: false + type: boolean + endpoints: + items: + $ref: '#/components/schemas/SessionEndpoint' + type: array + field_access_rights: + items: + $ref: '#/components/schemas/FieldAccessDefinition' + nullable: true + type: array + limit: + $ref: '#/components/schemas/APILimit' + restricted_types: + items: + $ref: '#/components/schemas/GraphqlType' + nullable: true + type: array + versions: + example: + - Default + - v2 + items: + type: string + nullable: true + type: array + type: object + AccessManagementPayload: + properties: + userGroupIds: + example: + - 663a4ed6b6be920001b191aa + - 663a4ed6b6be920001b191ab + items: + type: string + type: array + userIds: + example: + - 663b2a835715ecb6edef24e3 + - 663a5bbf5715ec8040251f2a + items: + type: string + type: array + type: object + AccessSpec: + properties: + methods: + example: + - GET + - PATCH + - HEAD + - PUT + - DELETE + items: + type: string + nullable: true + type: array + url: + example: anything/rate-limit-1-per-5 + type: string + type: object + AggregateAnalyticsData: + properties: + data: + items: + $ref: '#/components/schemas/ResultUnit' + nullable: true + type: array + pages: + type: integer + type: object + AllCategoriesResponse: + properties: + categories: + items: + $ref: '#/components/schemas/CategoryCount' + nullable: true + type: array + type: object + AllKeys: + properties: + keys: + items: + type: string + nullable: true + type: array + type: object + Allowance: + nullable: true + properties: + enabled: + type: boolean + ignoreCase: + type: boolean + type: object + AnalyticsPluginConfig: + properties: + enable: + type: boolean + func_name: + type: string + plugin_path: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + ApiDefinitionWrapper: + properties: + api_definition: + $ref: '#/components/schemas/APIDefinition' + api_model: + $ref: '#/components/schemas/ApiModel' + categories: + $ref: '#/components/schemas/Categories' + created_at: + format: date-time + nullable: true + type: string + hook_references: + items: + $ref: '#/components/schemas/HookReference' + nullable: true + type: array + is_site: + type: boolean + oas: + $ref: '#/components/schemas/OAS' + sort_by: + type: integer + updated_at: + format: date-time + nullable: true + type: string + user_group_owners: + items: + type: string + nullable: true + type: array + user_owners: + items: + type: string + nullable: true + type: array + type: object + ApiDefinitionsResponse: + properties: + apis: + items: + $ref: '#/components/schemas/ApiDefinitionWrapper' + nullable: true + type: array + pages: + type: integer + type: object + ApiImportByUrlPayload: + properties: + url: + type: string + type: object + ApiModel: + type: object + ApiResponse: + properties: + ID: + type: string + Message: + type: string + Meta: {} + Status: + type: string + type: object + ApiStatusMessage: + properties: + message: + type: string + status: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/gateway + Asset: + properties: + _id: + description: database id of asset + example: 659b9613a1ed7ef7afdccb9d + readOnly: true + type: string + data: + $ref: '#/components/schemas/JSONRawMessage' + description: + type: string + id: + description: custom id of asset that can be provided while creation/updating. + example: my-unique-template-id + type: string + kind: + default: oas-template + description: the asset type, which is set to oas-template + enum: + - oas-template + example: oas-template + type: string + last_updated: + description: last updated time stamp + example: "2024-01-10T08:48:36.183Z" + format: date-time + readOnly: true + type: string + name: + description: human-readable name for the template + type: string + org_id: + type: string + type: object + AuthConfig: + properties: + auth_header_name: + type: string + cookie_name: + type: string + disable_header: + type: boolean + name: + type: string + param_name: + type: string + signature: + $ref: '#/components/schemas/SignatureConfig' + use_certificate: + type: boolean + use_cookie: + type: boolean + use_param: + type: boolean + validate_signature: + type: boolean + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + AuthProviderMeta: + properties: + meta: + additionalProperties: {} + nullable: true + type: object + name: + type: string + storage_engine: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + AuthSource: + nullable: true + properties: + enabled: + type: boolean + name: + type: string + type: object + AuthSources: + properties: + cookie: + $ref: '#/components/schemas/AuthSource' + header: + $ref: '#/components/schemas/AuthSource' + query: + $ref: '#/components/schemas/AuthSource' + type: object + Authentication: + nullable: true + properties: + baseIdentityProvider: + type: string + custom: + $ref: '#/components/schemas/CustomPluginAuthentication' + enabled: + type: boolean + hmac: + $ref: '#/components/schemas/HMAC' + oidc: + $ref: '#/components/schemas/OIDC' + securitySchemes: + $ref: '#/components/schemas/SecuritySchemes' + stripAuthorizationData: + type: boolean + type: object + AuthenticationPlugin: + nullable: true + properties: + enabled: + type: boolean + functionName: + type: string + idExtractor: + $ref: '#/components/schemas/IDExtractor' + path: + type: string + rawBodyOnly: + type: boolean + type: object + BooleanQueryParam: + enum: + - true + - false + example: true + type: boolean + CORS: + nullable: true + properties: + allowCredentials: + type: boolean + allowedHeaders: + items: + type: string + type: array + allowedMethods: + items: + type: string + type: array + allowedOrigins: + items: + type: string + type: array + debug: + type: boolean + enabled: + type: boolean + exposedHeaders: + items: + type: string + type: array + maxAge: + type: integer + optionsPassthrough: + type: boolean + type: object + CORSConfig: + properties: + allow_credentials: + type: boolean + allowed_headers: + items: + type: string + nullable: true + type: array + allowed_methods: + items: + type: string + nullable: true + type: array + allowed_origins: + items: + type: string + nullable: true + type: array + debug: + type: boolean + enable: + type: boolean + exposed_headers: + items: + type: string + nullable: true + type: array + max_age: + type: integer + options_passthrough: + type: boolean + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + Cache: + nullable: true + properties: + cacheAllSafeRequests: + type: boolean + cacheByHeaders: + items: + type: string + type: array + cacheResponseCodes: + items: + type: integer + type: array + controlTTLHeaderName: + type: string + enableUpstreamCacheControl: + type: boolean + enabled: + type: boolean + timeout: + format: int64 + type: integer + type: object + CacheMeta: + properties: + cache_key_regex: + type: string + cache_response_codes: + items: + type: integer + nullable: true + type: array + disabled: + type: boolean + method: + type: string + path: + type: string + timeout: + format: int64 + type: integer + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + CacheOptions: + properties: + cache_all_safe_requests: + type: boolean + cache_by_headers: + items: + type: string + nullable: true + type: array + cache_control_ttl_header: + type: string + cache_response_codes: + items: + type: integer + nullable: true + type: array + cache_timeout: + format: int64 + type: integer + enable_cache: + type: boolean + enable_upstream_cache_control: + type: boolean + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + CachePlugin: + nullable: true + properties: + cacheByRegex: + type: string + cacheResponseCodes: + items: + type: integer + type: array + enabled: + type: boolean + timeout: + format: int64 + type: integer + type: object + CallbackRef: + type: object + Callbacks: + additionalProperties: + $ref: '#/components/schemas/CallbackRef' + type: object + Categories: + items: + type: string + type: array + CategoriesPayload: + properties: + categories: + items: + type: string + nullable: true + type: array + type: object + CategoryCount: + properties: + count: + example: 3 + type: integer + name: + example: tag1 + type: string + type: object + CertificateBasics: + properties: + cert_basics: + items: + $ref: '#/components/schemas/CertsCertificateBasics' + nullable: true + type: array + pages: + type: integer + type: object + CertificateDependencies: + properties: + certID: + example: 5e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + type: string + client_cert_api_names: + example: + - Ngrok Dashboard API + items: + type: string + nullable: true + type: array + client_cert_apis: + example: + - edc9b2bd3e7b4cc55c4ff0a7e1529b45 + items: + type: string + nullable: true + type: array + key_cert: + example: 5e9d9544a1dcd60001d0ed205e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + type: string + upstream_cert_api_names: + example: + - External HTTPbin + items: + type: string + nullable: true + type: array + upstream_cert_apis: + example: + - 627efb71ebae49df7a853b9769b65fce + items: + type: string + nullable: true + type: array + type: object + CertificateDetailedList: + properties: + certificates: + items: + $ref: '#/components/schemas/CertsCertificateMeta' + nullable: true + type: array + pages: + type: integer + type: object + CertificateList: + properties: + certs: + items: + type: string + nullable: true + type: array + pages: + type: integer + type: object + CertificatePinning: + nullable: true + properties: + domainToPublicKeysMapping: + $ref: '#/components/schemas/PinnedPublicKeys' + enabled: + type: boolean + type: object + CertsCertificateBasics: + properties: + dns_names: + items: + type: string + nullable: true + type: array + has_private: + type: boolean + id: + type: string + is_ca: + type: boolean + issuer_cn: + type: string + not_after: + format: date-time + type: string + not_before: + format: date-time + type: string + subject_cn: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/certs + CertsCertificateMeta: + properties: + dns_names: + items: + type: string + type: array + fingerprint: + type: string + has_private: + type: boolean + id: + type: string + is_ca: + type: boolean + issuer: + $ref: '#/components/schemas/PkixName' + not_after: + format: date-time + type: string + not_before: + format: date-time + type: string + subject: + $ref: '#/components/schemas/PkixName' + type: object + x-go-package: github.com/TykTechnologies/tyk/certs + CheckCommand: + properties: + message: + type: string + name: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + CircuitBreaker: + nullable: true + properties: + coolDownPeriod: + type: integer + enabled: + type: boolean + halfOpenStateEnabled: + type: boolean + sampleSize: + type: integer + threshold: + format: double + type: number + type: object + CircuitBreakerMeta: + properties: + disable_half_open_state: + type: boolean + disabled: + type: boolean + method: + type: string + path: + type: string + return_to_service_after: + type: integer + samples: + format: int64 + type: integer + threshold_percent: + format: double + type: number + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + ClientCertificates: + nullable: true + properties: + allowlist: + items: + type: string + nullable: true + type: array + enabled: + type: boolean + type: object + ClientToPolicy: + properties: + clientId: + type: string + policyId: + type: string + type: object + Components: + nullable: true + properties: + callbacks: + $ref: '#/components/schemas/Callbacks' + examples: + $ref: '#/components/schemas/Examples' + headers: + $ref: '#/components/schemas/HeadersType2' + links: + $ref: '#/components/schemas/Links' + parameters: + $ref: '#/components/schemas/ParametersMap' + requestBodies: + $ref: '#/components/schemas/RequestBodies' + responses: + $ref: '#/components/schemas/Responses' + schemas: + $ref: '#/components/schemas/Schemas' + securitySchemes: + $ref: '#/components/schemas/SecuritySchemesType2' + type: object + Contact: + nullable: true + properties: + email: + type: string + name: + type: string + url: + type: string + type: object + ContextVariables: + nullable: true + properties: + enabled: + type: boolean + type: object + CustomPlugin: + properties: + enabled: + type: boolean + functionName: + type: string + path: + type: string + rawBodyOnly: + type: boolean + requireSession: + type: boolean + type: object + CustomPluginAuthentication: + nullable: true + properties: + AuthSources: + $ref: '#/components/schemas/AuthSources' + config: + $ref: '#/components/schemas/AuthenticationPlugin' + enabled: + type: boolean + type: object + CustomPlugins: + items: + $ref: '#/components/schemas/CustomPlugin' + type: array + DatasourceMappingConfiguration: + nullable: true + properties: + disabled: + type: boolean + path: + type: string + type: object + DatasourceSourceConfig: + properties: + data_source_config: {} + kind: + type: string + type: object + DatasourceTypeFieldConfiguration: + properties: + data_source: + $ref: '#/components/schemas/DatasourceSourceConfig' + field_name: + type: string + mapping: + $ref: '#/components/schemas/DatasourceMappingConfiguration' + type_name: + type: string + type: object + DcrpRegistration: + properties: + access_token: + type: string + client_uri: + type: string + provider: + type: string + type: object + DetailedActivityLogs: + nullable: true + properties: + enabled: + type: boolean + type: object + DetailedExampleAPIMetadata: + properties: + api_definition: + $ref: '#/components/schemas/APIDefinition' + description: + type: string + features: + items: + type: string + nullable: true + type: array + location: + type: string + min_version: + type: string + name: + type: string + oas: + $ref: '#/components/schemas/OAS' + readme: + type: string + type: object + DetailedTracing: + nullable: true + properties: + enabled: + type: boolean + type: object + Domain: + nullable: true + properties: + certificates: + items: + type: string + type: array + enabled: + type: boolean + name: + type: string + type: object + DomainToCertificate: + properties: + certificate: + type: string + domain: + type: string + type: object + DryRunRequest: + properties: + oas: + $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + tyk_oas: + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykApiGateway' + type: object + EndPointMeta: + properties: + disabled: + type: boolean + ignore_case: + type: boolean + method: + type: string + method_actions: + additionalProperties: + $ref: '#/components/schemas/EndpointMethodMeta' type: object - active: + path: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + EndpointMethodMeta: + properties: + action: + type: string + code: + type: integer + data: + type: string + headers: + additionalProperties: + type: string + nullable: true + type: object + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + EndpointPostPlugin: + properties: + enabled: type: boolean - x-go-name: Active - allowed_ips: + functionName: + type: string + name: + type: string + path: + type: string + type: object + EndpointPostPlugins: + items: + $ref: '#/components/schemas/EndpointPostPlugin' + type: array + EnforceTimeout: + nullable: true + properties: + enabled: + type: boolean + value: + type: integer + type: object + EntityStats: + nullable: true + properties: + apis: items: - type: string + $ref: '#/components/schemas/IndividualStats' + nullable: true type: array - x-go-name: AllowedIPs - api_id: + dataplanes: + items: + $ref: '#/components/schemas/IndividualStats' + type: array + dataplanes_gateways: + items: + $ref: '#/components/schemas/IndividualStats' + type: array + type: object + EventHandler: + properties: + enabled: + type: boolean + id: type: string - x-go-name: APIID - auth: - $ref: '#/components/schemas/Auth' - auth_provider: - $ref: '#/components/schemas/AuthProviderMeta' - base_identity_provided_by: - $ref: '#/components/schemas/AuthTypeEnum' - basic_auth: - properties: - body_password_regexp: - type: string - x-go-name: BodyPasswordRegexp - body_user_regexp: - type: string - x-go-name: BodyUserRegexp - cache_ttl: - format: int64 - type: integer - x-go-name: CacheTTL - disable_caching: - type: boolean - x-go-name: DisableCaching - extract_from_body: - type: boolean - x-go-name: ExtractFromBody + name: + type: string + trigger: + type: string + type: + type: string + type: object + EventHandlerMetaConfig: + properties: + events: + additionalProperties: + items: + $ref: '#/components/schemas/EventHandlerTriggerConfig' + type: array + nullable: true type: object - x-go-name: BasicAuth - blacklisted_ips: + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + EventHandlerTriggerConfig: + properties: + handler_meta: + additionalProperties: {} + nullable: true + type: object + handler_name: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + EventHandlers: + items: + $ref: '#/components/schemas/EventHandler' + type: array + ExampleAPIMetadata: + properties: + location: + example: udg/vat-checker + type: string + name: + example: VAT number checker UDG + type: string + shortDescription: + example: Simple REST API wrapped in GQL using Universal Data Graph that + allows user to check validity of a VAT number and display some details + about it. + type: string + type: object + ExampleRef: + type: object + Examples: + additionalProperties: + $ref: '#/components/schemas/ExampleRef' + type: object + ExtendedPathsSet: + properties: + advance_cache_config: items: - type: string + $ref: '#/components/schemas/CacheMeta' type: array - x-go-name: BlacklistedIPs - cache_options: - $ref: '#/components/schemas/CacheOptions' - certificates: + black_list: items: - type: string + $ref: '#/components/schemas/EndPointMeta' type: array - x-go-name: Certificates - client_certificates: + cache: items: type: string type: array - x-go-name: ClientCertificates - config_data: - additionalProperties: - type: object - type: object - x-go-name: ConfigData - custom_middleware: - $ref: '#/components/schemas/MiddlewareSection' - custom_middleware_bundle: + circuit_breakers: + items: + $ref: '#/components/schemas/CircuitBreakerMeta' + type: array + do_not_track_endpoints: + items: + $ref: '#/components/schemas/TrackEndpointMeta' + type: array + go_plugin: + items: + $ref: '#/components/schemas/GoPluginMeta' + type: array + hard_timeouts: + items: + $ref: '#/components/schemas/HardTimeoutMeta' + type: array + ignored: + items: + $ref: '#/components/schemas/EndPointMeta' + type: array + internal: + items: + $ref: '#/components/schemas/InternalMeta' + type: array + method_transforms: + items: + $ref: '#/components/schemas/MethodTransformMeta' + type: array + mock_response: + items: + $ref: '#/components/schemas/MockResponseMeta' + type: array + persist_graphql: + items: + $ref: '#/components/schemas/PersistGraphQLMeta' + nullable: true + type: array + rate_limit: + items: + $ref: '#/components/schemas/RateLimitMeta' + nullable: true + type: array + size_limits: + items: + $ref: '#/components/schemas/RequestSizeMeta' + type: array + track_endpoints: + items: + $ref: '#/components/schemas/TrackEndpointMeta' + type: array + transform: + items: + $ref: '#/components/schemas/TemplateMeta' + type: array + transform_headers: + items: + $ref: '#/components/schemas/HeaderInjectionMeta' + type: array + transform_jq: + items: + $ref: '#/components/schemas/TransformJQMeta' + type: array + transform_jq_response: + items: + $ref: '#/components/schemas/TransformJQMeta' + type: array + transform_response: + items: + $ref: '#/components/schemas/TemplateMeta' + type: array + transform_response_headers: + items: + $ref: '#/components/schemas/HeaderInjectionMeta' + type: array + url_rewrites: + items: + $ref: '#/components/schemas/URLRewriteMeta' + type: array + validate_json: + items: + $ref: '#/components/schemas/ValidatePathMeta' + type: array + validate_request: + items: + $ref: '#/components/schemas/ValidateRequestMeta' + type: array + virtual: + items: + $ref: '#/components/schemas/VirtualMeta' + type: array + white_list: + items: + $ref: '#/components/schemas/EndPointMeta' + type: array + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + ExternalDocs: + nullable: true + properties: + description: type: string - x-go-name: CustomMiddlewareBundle - definition: - properties: - key: - type: string - x-go-name: Key - location: - type: string - x-go-name: Location - strip_path: - type: boolean - x-go-name: StripPath - type: object - x-go-name: VersionDefinition - disable_quota: - type: boolean - x-go-name: DisableQuota - disable_rate_limit: - type: boolean - x-go-name: DisableRateLimit - do_not_track: - type: boolean - x-go-name: DoNotTrack - domain: + url: type: string - x-go-name: Domain - dont_set_quota_on_create: - type: boolean - x-go-name: DontSetQuotasOnCreate - enable_batch_request_support: - type: boolean - x-go-name: EnableBatchRequestSupport - enable_context_vars: - type: boolean - x-go-name: EnableContextVars - enable_coprocess_auth: - type: boolean - x-go-name: EnableCoProcessAuth - enable_ip_blacklisting: - type: boolean - x-go-name: EnableIpBlacklisting - enable_ip_whitelisting: + type: object + ExternalOAuth: + properties: + enabled: type: boolean - x-go-name: EnableIpWhiteListing - enable_jwt: + providers: + items: + $ref: '#/components/schemas/ProviderType2' + nullable: true + type: array + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + FieldAccessDefinition: + properties: + field_name: + type: string + limits: + $ref: '#/components/schemas/FieldLimits' + type_name: + type: string + type: object + FieldLimits: + properties: + max_query_depth: + type: integer + type: object + FormDataFile: + properties: + file: + $ref: '#/components/schemas/MultipartFile' + required: + - file + type: object + FromOASExamples: + nullable: true + properties: + code: + type: integer + contentType: + type: string + enabled: type: boolean - x-go-name: EnableJWT - enable_signature_checking: + exampleName: + type: string + type: object + GatewayTags: + nullable: true + properties: + enabled: type: boolean - x-go-name: EnableSignatureChecking - event_handlers: - $ref: '#/components/schemas/EventHandlerMetaConfig' - expire_analytics_after: - format: int64 - type: integer - x-go-name: ExpireAnalyticsAfter - global_rate_limit: - $ref: '#/components/schemas/GlobalRateLimit' - hmac_allowed_algorithms: + tags: items: type: string + nullable: true type: array - x-go-name: HmacAllowedAlgorithms - hmac_allowed_clock_skew: + type: object + Global: + nullable: true + properties: + cache: + $ref: '#/components/schemas/Cache' + contextVariables: + $ref: '#/components/schemas/ContextVariables' + cors: + $ref: '#/components/schemas/CORS' + pluginConfig: + $ref: '#/components/schemas/PluginConfig' + postAuthenticationPlugin: + $ref: '#/components/schemas/PostAuthenticationPlugin' + postAuthenticationPlugins: + $ref: '#/components/schemas/CustomPlugins' + postPlugin: + $ref: '#/components/schemas/PostPlugin' + postPlugins: + $ref: '#/components/schemas/CustomPlugins' + prePlugin: + $ref: '#/components/schemas/PrePlugin' + prePlugins: + $ref: '#/components/schemas/CustomPlugins' + responsePlugin: + $ref: '#/components/schemas/ResponsePlugin' + responsePlugins: + $ref: '#/components/schemas/CustomPlugins' + trafficLogs: + $ref: '#/components/schemas/TrafficLogs' + transformRequestHeaders: + $ref: '#/components/schemas/TransformHeaders' + transformResponseHeaders: + $ref: '#/components/schemas/TransformHeaders' + type: object + GlobalRateLimit: + properties: + disabled: + type: boolean + per: format: double type: number - x-go-name: HmacAllowedClockSkew - id: - $ref: '#/components/schemas/ObjectID' - internal: + rate: + format: double + type: number + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GoPluginMeta: + properties: + disabled: type: boolean - x-go-name: Internal - jwt_client_base_field: + func_name: type: string - x-go-name: JWTClientIDBaseField - jwt_expires_at_validation_skew: - format: uint64 - type: integer - x-go-name: JWTExpiresAtValidationSkew - jwt_identity_base_field: + method: type: string - x-go-name: JWTIdentityBaseField - jwt_issued_at_validation_skew: - format: uint64 - type: integer - x-go-name: JWTIssuedAtValidationSkew - jwt_not_before_validation_skew: - format: uint64 - type: integer - x-go-name: JWTNotBeforeValidationSkew - jwt_policy_field_name: + path: type: string - x-go-name: JWTPolicyFieldName - jwt_scope_claim_name: + plugin_path: type: string - x-go-name: JWTScopeClaimName - jwt_scope_to_policy_mapping: - additionalProperties: - type: string - type: object - x-go-name: JWTScopeToPolicyMapping - jwt_signing_method: + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLConfig: + properties: + enabled: + type: boolean + engine: + $ref: '#/components/schemas/GraphQLEngineConfig' + execution_mode: + type: string + introspection: + $ref: '#/components/schemas/GraphQLIntrospectionConfig' + last_schema_update: + format: date-time + nullable: true + type: string + playground: + $ref: '#/components/schemas/GraphQLPlayground' + proxy: + $ref: '#/components/schemas/GraphQLProxyConfig' + schema: type: string - x-go-name: JWTSigningMethod - jwt_skip_kid: + subgraph: + $ref: '#/components/schemas/GraphQLSubgraphConfig' + supergraph: + $ref: '#/components/schemas/GraphQLSupergraphConfig' + type_field_configurations: + items: + $ref: '#/components/schemas/DatasourceTypeFieldConfiguration' + nullable: true + type: array + version: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLEngineConfig: + properties: + data_sources: + items: + $ref: '#/components/schemas/GraphQLEngineDataSource' + nullable: true + type: array + field_configs: + items: + $ref: '#/components/schemas/GraphQLFieldConfig' + nullable: true + type: array + global_headers: + items: + $ref: '#/components/schemas/UDGGlobalHeader' + nullable: true + type: array + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLEngineDataSource: + properties: + config: {} + internal: type: boolean - x-go-name: JWTSkipKid - jwt_source: + kind: type: string - x-go-name: JWTSource name: type: string - x-go-name: Name - notifications: - $ref: '#/components/schemas/NotificationsManager' - oauth_meta: - properties: - allowed_access_types: - items: - $ref: '#/components/schemas/AccessRequestType' - type: array - x-go-name: AllowedAccessTypes - allowed_authorize_types: - items: - $ref: '#/components/schemas/AuthorizeRequestType' - type: array - x-go-name: AllowedAuthorizeTypes - auth_login_redirect: - type: string - x-go-name: AuthorizeLoginRedirect - type: object - x-go-name: Oauth2Meta - openid_options: - $ref: '#/components/schemas/OpenIDOptions' - org_id: - type: string - x-go-name: OrgID - pinned_public_keys: - additionalProperties: - type: string - type: object - x-go-name: PinnedPublicKeys - proxy: - properties: - check_host_against_uptime_tests: - type: boolean - x-go-name: CheckHostAgainstUptimeTests - disable_strip_slash: - type: boolean - x-go-name: DisableStripSlash - enable_load_balancing: - type: boolean - x-go-name: EnableLoadBalancing - listen_path: - type: string - x-go-name: ListenPath - preserve_host_header: - type: boolean - x-go-name: PreserveHostHeader - service_discovery: - $ref: '#/components/schemas/ServiceDiscoveryConfiguration' - strip_listen_path: - type: boolean - x-go-name: StripListenPath - target_list: - items: - type: string - type: array - x-go-name: Targets - target_url: - type: string - x-go-name: TargetURL - transport: - properties: - proxy_url: - type: string - x-go-name: ProxyURL - ssl_ciphers: - items: - type: string - type: array - x-go-name: SSLCipherSuites - ssl_insecure_skip_verify: - type: boolean - x-go-name: SSLInsecureSkipVerify - ssl_min_version: - format: uint16 - type: integer - x-go-name: SSLMinVersion - type: object - x-go-name: Transport - type: object - x-go-name: Proxy - response_processors: + root_fields: items: - $ref: '#/components/schemas/ResponseProcessor' + $ref: '#/components/schemas/GraphQLTypeFields' + nullable: true type: array - x-go-name: ResponseProcessors - session_lifetime: - format: int64 - type: integer - x-go-name: SessionLifetime - session_provider: - $ref: '#/components/schemas/SessionProviderMeta' - slug: - type: string - x-go-name: Slug - strip_auth_data: + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLFieldConfig: + properties: + disable_default_mapping: type: boolean - x-go-name: StripAuthData - tag_headers: + field_name: + type: string + path: items: type: string + nullable: true type: array - x-go-name: TagHeaders - upstream_certificates: + type_name: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLIntrospectionConfig: + properties: + disabled: + type: boolean + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLPlayground: + properties: + enabled: + type: boolean + path: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLProxyConfig: + properties: + auth_headers: additionalProperties: type: string + nullable: true type: object - x-go-name: UpstreamCertificates - uptime_tests: - properties: - check_list: - items: - $ref: '#/components/schemas/HostCheckObject' - type: array - x-go-name: CheckList - config: - properties: - expire_utime_after: - format: int64 - type: integer - x-go-name: ExpireUptimeAnalyticsAfter - recheck_wait: - format: int64 - type: integer - x-go-name: RecheckWait - service_discovery: - $ref: '#/components/schemas/ServiceDiscoveryConfiguration' - type: object - x-go-name: Config + features: + $ref: '#/components/schemas/GraphQLProxyFeaturesConfig' + request_headers: + additionalProperties: + type: string + nullable: true type: object - x-go-name: UptimeTests - use_basic_auth: - type: boolean - x-go-name: UseBasicAuth - use_keyless: - type: boolean - x-go-name: UseKeylessAccess - use_mutual_tls_auth: - type: boolean - x-go-name: UseMutualTLSAuth - use_oauth2: - type: boolean - x-go-name: UseOauth2 - use_openid: - type: boolean - x-go-name: UseOpenID - use_standard_auth: - type: boolean - x-go-name: UseStandardAuth - version_data: - properties: - default_version: - type: string - x-go-name: DefaultVersion - not_versioned: - type: boolean - x-go-name: NotVersioned - versions: - additionalProperties: - $ref: '#/components/schemas/VersionInfo' - type: object - x-go-name: Versions + request_headers_rewrite: + additionalProperties: + $ref: '#/components/schemas/RequestHeadersRewriteConfig' + nullable: true type: object - x-go-name: VersionData - title: >- - APIDefinition represents the configuration for a single proxied API and - it's versions. + subscription_type: + type: string + use_response_extensions: + $ref: '#/components/schemas/GraphQLResponseExtensions' type: object x-go-package: github.com/TykTechnologies/tyk/apidef - APILimit: - title: APILimit stores quota and rate limit on ACL level (per API) + GraphQLProxyFeaturesConfig: properties: - per: - format: double - type: number - x-go-name: Per - quota_max: - format: int64 - type: integer - x-go-name: QuotaMax - quota_remaining: - format: int64 - type: integer - x-go-name: QuotaRemaining - quota_renewal_rate: - format: int64 - type: integer - x-go-name: QuotaRenewalRate - quota_renews: - format: int64 - type: integer - x-go-name: QuotaRenews - rate: - format: double - type: number - x-go-name: Rate - set_by_policy: + use_immutable_headers: type: boolean - x-go-name: SetByPolicy - throttle_interval: - format: double - type: number - x-go-name: ThrottleInterval - throttle_retry_limit: - format: int64 - type: integer - x-go-name: ThrottleRetryLimit - smoothing: - type: object - $ref: '#/components/schemas/RateLimitSmoothing' - description: Smoothing contains rate limit smoothing settings. - x-go-name: Smoothing type: object - x-go-package: github.com/TykTechnologies/tyk/user - AccessDefinition: - description: AccessDefinition defines which versions of an API a key has access to + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLResponseExtensions: properties: - allowed_urls: - items: - $ref: '#/components/schemas/AccessSpec' - type: array - x-go-name: AllowedURLs - api_id: - type: string - x-go-name: APIID - api_name: - type: string - x-go-name: APIName - limit: - $ref: '#/components/schemas/APILimit' - versions: - items: - type: string - type: array - x-go-name: Versions + on_error_forwarding: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/user - AccessRequestType: - description: AccessRequestType is the type for OAuth param `grant_type` - type: string - x-go-package: github.com/TykTechnologies/tyk/vendor/github.com/lonelycode/osin - AccessSpec: - description: >- - AccessSpecs define what URLS a user has access to an what methods are - enabled + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLSubgraphConfig: properties: - methods: - items: - type: string - type: array - x-go-name: Methods - url: + sdl: type: string - x-go-name: URL type: object - x-go-package: github.com/TykTechnologies/tyk/user - Auth: + x-go-package: github.com/TykTechnologies/tyk/apidef + GraphQLSubgraphEntity: properties: - auth_header_name: + api_id: type: string - x-go-name: AuthHeaderName - cookie_name: + headers: + additionalProperties: + type: string + nullable: true + type: object + name: type: string - x-go-name: CookieName - param_name: + sdl: + type: string + subscription_type: + type: string + url: type: string - x-go-name: ParamName - signature: - $ref: '#/components/schemas/SignatureConfig' - use_certificate: - type: boolean - x-go-name: UseCertificate - use_cookie: - type: boolean - x-go-name: UseCookie - use_param: - type: boolean - x-go-name: UseParam - validate_signature: - type: boolean - x-go-name: ValidateSignature type: object x-go-package: github.com/TykTechnologies/tyk/apidef - AuthProviderCode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - AuthProviderMeta: + GraphQLSupergraphConfig: properties: - meta: + disable_query_batching: + type: boolean + global_headers: additionalProperties: - type: object + type: string + nullable: true type: object - x-go-name: Meta - name: - $ref: '#/components/schemas/AuthProviderCode' - storage_engine: - $ref: '#/components/schemas/StorageEngineCode' + merged_sdl: + type: string + subgraphs: + items: + $ref: '#/components/schemas/GraphQLSubgraphEntity' + nullable: true + type: array + updated_at: + format: date-time + nullable: true + type: string type: object x-go-package: github.com/TykTechnologies/tyk/apidef - AuthTypeEnum: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - AuthorizeRequestType: - description: AuthorizeRequestType is the type for OAuth param `response_type` - type: string - x-go-package: github.com/TykTechnologies/tyk/vendor/github.com/lonelycode/osin - CacheMeta: + GraphQLTypeFields: properties: - cache_response_codes: + fields: items: - format: int64 - type: integer + type: string + nullable: true type: array - x-go-name: CacheOnlyResponseCodes - cache_key_regex: - type: string - x-go-name: CacheKeyRegex - method: - type: string - x-go-name: Method - path: + type: type: string - x-go-name: Path type: object x-go-package: github.com/TykTechnologies/tyk/apidef - CacheOptions: + GraphqlType: properties: - cache_all_safe_requests: - type: boolean - x-go-name: CacheAllSafeRequests - cache_control_ttl_header: + fields: + items: + type: string + nullable: true + type: array + name: type: string - x-go-name: CacheControlTTLHeader - cache_response_codes: + type: object + HMAC: + nullable: true + properties: + AuthSources: + $ref: '#/components/schemas/AuthSources' + allowedAlgorithms: items: - format: int64 - type: integer + type: string type: array - x-go-name: CacheOnlyResponseCodes - cache_timeout: - format: int64 - type: integer - x-go-name: CacheTimeout - enable_cache: - type: boolean - x-go-name: EnableCache - enable_upstream_cache_control: + allowedClockSkew: + format: double + type: number + enabled: type: boolean - x-go-name: EnableUpstreamCacheControl type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - CircuitBreakerMeta: + HardTimeoutMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path - return_to_service_after: - format: int64 - type: integer - x-go-name: ReturnToServiceAfter - samples: - format: int64 + timeout: type: integer - x-go-name: Samples - threshold_percent: - format: double - type: number - x-go-name: ThresholdPercent type: object x-go-package: github.com/TykTechnologies/tyk/apidef - EndPointMeta: + Header: properties: - method_actions: + name: + type: string + value: + type: string + type: object + HeaderInjectionMeta: + properties: + act_on: + type: boolean + add_headers: additionalProperties: - $ref: '#/components/schemas/EndpointMethodMeta' + type: string + nullable: true type: object - x-go-name: MethodActions + delete_headers: + items: + type: string + nullable: true + type: array + disabled: + type: boolean + method: + type: string path: type: string - x-go-name: Path type: object x-go-package: github.com/TykTechnologies/tyk/apidef - EndpointMethodAction: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - EndpointMethodMeta: + HeaderRef: + type: object + Headers: + items: + $ref: '#/components/schemas/Header' + type: array + HeadersType2: + additionalProperties: + $ref: '#/components/schemas/HeaderRef' + type: object + HookReference: properties: - action: - $ref: '#/components/schemas/EndpointMethodAction' - code: + event_name: + type: string + event_timeout: format: int64 type: integer - x-go-name: Code - data: + hook: + $ref: '#/components/schemas/WebHookHandlerConf' + type: object + HostCheckObject: + properties: + body: type: string - x-go-name: Data + commands: + items: + $ref: '#/components/schemas/CheckCommand' + nullable: true + type: array + enable_proxy_protocol: + type: boolean headers: additionalProperties: type: string + nullable: true type: object - x-go-name: Headers + method: + type: string + protocol: + type: string + timeout: + $ref: '#/components/schemas/TimeDuration' + url: + type: string type: object x-go-package: github.com/TykTechnologies/tyk/apidef - EventHandlerMetaConfig: + IDExtractor: + nullable: true properties: - events: - x-go-name: Events + config: + $ref: '#/components/schemas/IDExtractorConfig' + enabled: + type: boolean + source: + type: string + with: + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - RateLimitMeta: + IDExtractorConfig: + nullable: true properties: - disabled: - type: boolean - x-go-name: Disabled - method: + formParamName: type: string - x-go-name: Method - path: + headerName: + type: string + regexp: + type: string + regexpMatchIndex: + type: integer + xPathExp: type: string - x-go-name: Path - per: - type: number - format: double - x-go-name: Per - rate: - type: number - format: double - x-go-name: Rate - title: RateLimitMeta configures rate limits per API path. type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - ExtendedPathsSet: + IndividualStats: properties: - advance_cache_config: - items: - $ref: '#/components/schemas/CacheMeta' - type: array - x-go-name: AdvanceCacheConfig - black_list: - items: - $ref: '#/components/schemas/EndPointMeta' - type: array - x-go-name: BlackList - cache: - items: - type: string - type: array - x-go-name: Cached - circuit_breakers: - items: - $ref: '#/components/schemas/CircuitBreakerMeta' - type: array - x-go-name: CircuitBreaker - do_not_track_endpoints: - items: - $ref: '#/components/schemas/TrackEndpointMeta' - type: array - x-go-name: DoNotTrackEndpoints - hard_timeouts: - items: - $ref: '#/components/schemas/HardTimeoutMeta' - type: array - x-go-name: HardTimeouts - ignored: - items: - $ref: '#/components/schemas/EndPointMeta' - type: array - x-go-name: Ignored - internal: - items: - $ref: '#/components/schemas/InternalMeta' - type: array - x-go-name: Internal - method_transforms: - items: - $ref: '#/components/schemas/MethodTransformMeta' - type: array - x-go-name: MethodTransforms - rate_limit: - type: array - items: - $ref: '#/components/schemas/RateLimitMeta' - x-go-name: RateLimit - size_limits: - items: - $ref: '#/components/schemas/RequestSizeMeta' - type: array - x-go-name: SizeLimit - track_endpoints: - items: - $ref: '#/components/schemas/TrackEndpointMeta' - type: array - x-go-name: TrackEndpoints - transform: - items: - $ref: '#/components/schemas/TemplateMeta' - type: array - x-go-name: Transform - transform_headers: - items: - $ref: '#/components/schemas/HeaderInjectionMeta' - type: array - x-go-name: TransformHeader - transform_jq: - items: - $ref: '#/components/schemas/TransformJQMeta' - type: array - x-go-name: TransformJQ - transform_jq_response: - items: - $ref: '#/components/schemas/TransformJQMeta' - type: array - x-go-name: TransformJQResponse - transform_response: - items: - $ref: '#/components/schemas/TemplateMeta' - type: array - x-go-name: TransformResponse - transform_response_headers: - items: - $ref: '#/components/schemas/HeaderInjectionMeta' - type: array - x-go-name: TransformResponseHeader - url_rewrites: - items: - $ref: '#/components/schemas/URLRewriteMeta' - type: array - x-go-name: URLRewrite - validate_json: - items: - $ref: '#/components/schemas/ValidatePathMeta' - type: array - x-go-name: ValidateJSON - virtual: - items: - $ref: '#/components/schemas/VirtualMeta' - type: array - x-go-name: Virtual - white_list: - items: - $ref: '#/components/schemas/EndPointMeta' - type: array - x-go-name: WhiteList + avg_active_usage: + example: 13 + type: integer + avg_usage: + example: 15 + type: integer + date: + example: "2023-07-01" + type: string + license_entitlement: + example: 25 + type: integer + license_entitlement_active: + example: 20 + type: integer + max_active_usage: + example: 18 + type: integer + max_usage: + example: 20 + type: integer + min_active_usage: + example: 8 + type: integer + min_usage: + example: 10 + type: integer type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - GlobalRateLimit: + Info: properties: - per: - format: double - type: number - x-go-name: Per - rate: - format: double - type: number - x-go-name: Rate + dbId: + type: string + expiration: + type: string + id: + type: string + name: + type: string + orgId: + type: string + state: + $ref: '#/components/schemas/State' + versioning: + $ref: '#/components/schemas/Versioning' + type: object + InfoType2: + nullable: true + properties: + contact: + $ref: '#/components/schemas/Contact' + description: + type: string + license: + $ref: '#/components/schemas/License' + termsOfService: + type: string + title: + type: string + version: + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - GraphAccessDefinition: + Internal: + nullable: true + properties: + enabled: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/user - HardTimeoutMeta: + InternalMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + Introspection: + properties: + cache: + $ref: '#/components/schemas/IntrospectionCache' + client_id: + type: string + client_secret: + type: string + enabled: + type: boolean + identity_base_field: + type: string + url: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + IntrospectionCache: + properties: + enabled: + type: boolean timeout: format: int64 type: integer - x-go-name: TimeOut type: object x-go-package: github.com/TykTechnologies/tyk/apidef - HashType: - type: string - x-go-package: github.com/TykTechnologies/tyk/user - HeaderInjectionMeta: + JSONRawMessage: + example: + info: + title: Our Sample OAS + version: 1.0.0 + openapi: 3.0.3 + paths: + /anything: + post: + operationId: anythingpost + responses: + "200": + description: Post created + x-tyk-api-gateway: + middleware: + global: + cache: + cacheAllSafeRequests: true + enabled: true + timeout: 5 + operations: + anythingpost: + requestSizeLimit: + enabled: true + value: 100 + type: object + JWTValidation: properties: - act_on: + enabled: type: boolean - x-go-name: ActOnResponse - add_headers: - additionalProperties: - type: string - type: object - x-go-name: AddHeaders - delete_headers: - items: - type: string - type: array - x-go-name: DeleteHeaders - method: + expires_at_validation_skew: + minimum: 0 + type: integer + identity_base_field: type: string - x-go-name: Method - path: + issued_at_validation_skew: + minimum: 0 + type: integer + not_before_validation_skew: + minimum: 0 + type: integer + signing_method: + type: string + source: type: string - x-go-name: Path type: object x-go-package: github.com/TykTechnologies/tyk/apidef - HostCheckObject: + KeyData: properties: - body: + api_model: + $ref: '#/components/schemas/ApiModel' + data: + $ref: '#/components/schemas/SessionState' + key_hash: + example: 41c5cb1e type: string - x-go-name: Body - headers: - additionalProperties: - type: string - type: object - x-go-name: Headers - method: + key_id: + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + type: string + type: object + Keys: + properties: + data: + $ref: '#/components/schemas/AllKeys' + pages: + type: integer + type: object + KeysDetailed: + properties: + keys: + items: + $ref: '#/components/schemas/KeyData' + nullable: true + type: array + pages: + type: integer + type: object + License: + nullable: true + properties: + name: type: string - x-go-name: Method url: type: string - x-go-name: CheckURL type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - IdExtractorSource: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - IdExtractorType: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - InternalMeta: + LinkRef: + type: object + Links: + additionalProperties: + $ref: '#/components/schemas/LinkRef' + type: object + ListenPath: properties: - method: - type: string - x-go-name: Method - path: + strip: + type: boolean + value: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef MethodTransformMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path to_method: type: string - x-go-name: ToMethod type: object x-go-package: github.com/TykTechnologies/tyk/apidef + Middleware: + nullable: true + properties: + global: + $ref: '#/components/schemas/Global' + operations: + $ref: '#/components/schemas/Operations' + type: object MiddlewareDefinition: properties: + disabled: + type: boolean name: type: string - x-go-name: Name path: type: string - x-go-name: Path + raw_body_only: + type: boolean require_session: type: boolean - x-go-name: RequireSession type: object x-go-package: github.com/TykTechnologies/tyk/apidef - MiddlewareDriver: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef MiddlewareIdExtractor: properties: + disabled: + type: boolean extract_from: - $ref: '#/components/schemas/IdExtractorSource' + type: string extract_with: - $ref: '#/components/schemas/IdExtractorType' + type: string extractor_config: - additionalProperties: - type: object + additionalProperties: {} + nullable: true type: object - x-go-name: ExtractorConfig type: object x-go-package: github.com/TykTechnologies/tyk/apidef MiddlewareSection: @@ -4333,1369 +10968,1933 @@ components: auth_check: $ref: '#/components/schemas/MiddlewareDefinition' driver: - $ref: '#/components/schemas/MiddlewareDriver' + type: string id_extractor: $ref: '#/components/schemas/MiddlewareIdExtractor' post: items: $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true type: array - x-go-name: Post post_key_auth: items: $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true type: array - x-go-name: PostKeyAuth pre: items: $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true type: array - x-go-name: Pre response: items: $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true type: array - x-go-name: Response type: object x-go-package: github.com/TykTechnologies/tyk/apidef + MockResponse: + nullable: true + properties: + body: + type: string + code: + type: integer + enabled: + type: boolean + fromOASExamples: + $ref: '#/components/schemas/FromOASExamples' + headers: + $ref: '#/components/schemas/Headers' + type: object + MockResponseMeta: + properties: + body: + type: string + code: + type: integer + disabled: + type: boolean + headers: + additionalProperties: + type: string + nullable: true + type: object + ignore_case: + type: boolean + method: + type: string + path: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + MultipartFile: + format: binary + nullable: true + type: string + MutualTLS: + nullable: true + properties: + domainToCertificateMapping: + items: + $ref: '#/components/schemas/DomainToCertificate' + nullable: true + type: array + enabled: + type: boolean + type: object + NewAdditionalPermissions: + properties: + additional_permissions: + additionalProperties: + type: string + example: + api_developer: API Developer + api_manager: API Manager + custom_permission: Custom Permission + nullable: true + type: object + type: object NewClientRequest: - description: >- - NewClientRequest is an outward facing JSON object translated from osin - OAuthClients properties: api_id: type: string - x-go-name: APIID + api_model: + $ref: '#/components/schemas/ApiModel' + client_id: + type: string + client_name: + type: string + description: + type: string + meta_data: {} + policy_id: + type: string + redirect_uri: + type: string + secret: + type: string + type: object + NewOPARules: + properties: + open_policy: + properties: + rules: + type: string + type: object + type: object + NotificationsManager: + properties: + oauth_on_keychange_url: + type: string + shared_secret: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + OAS: + nullable: true + properties: + components: + $ref: '#/components/schemas/Components' + externalDocs: + $ref: '#/components/schemas/ExternalDocs' + info: + $ref: '#/components/schemas/InfoType2' + openapi: + type: string + paths: + $ref: '#/components/schemas/Paths' + security: + $ref: '#/components/schemas/SecurityRequirements' + servers: + $ref: '#/components/schemas/Servers' + tags: + $ref: '#/components/schemas/Tags' + type: object + OASSchemaResponse: + properties: + message: + type: string + schema: {} + status: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/gateway + OAuthApps: + properties: + apps: + items: + $ref: '#/components/schemas/OAuthClient' + nullable: true + type: array + pages: + type: integer + type: object + OAuthClient: + properties: client_id: type: string - x-go-name: ClientID + client_name: + type: string + dcr_registration: + $ref: '#/components/schemas/DcrpRegistration' description: type: string - x-go-name: Description meta_data: + additionalProperties: + type: string type: object - x-go-name: MetaData policy_id: type: string - x-go-name: PolicyID redirect_uri: type: string - x-go-name: ClientRedirectURI secret: type: string - x-go-name: ClientSecret type: object - x-go-package: github.com/TykTechnologies/tyk - NotificationsManager: - description: 'TODO: Make this more generic' + OAuthClientToken: + properties: + code: + type: string + expires: + format: int64 + type: integer + type: object + OAuthClientTokens: + items: + $ref: '#/components/schemas/OAuthClientToken' + nullable: true + type: array + OIDC: + nullable: true + properties: + AuthSources: + $ref: '#/components/schemas/AuthSources' + enabled: + type: boolean + providers: + items: + $ref: '#/components/schemas/Provider' + type: array + scopes: + $ref: '#/components/schemas/Scopes' + segregateByClientId: + type: boolean + type: object + OIDProviderConfig: + properties: + client_ids: + additionalProperties: + type: string + nullable: true + type: object + issuer: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + OpenIDOptions: + properties: + providers: + items: + $ref: '#/components/schemas/OIDProviderConfig' + nullable: true + type: array + segregate_by_client: + type: boolean + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + Operation: + properties: + allow: + $ref: '#/components/schemas/Allowance' + block: + $ref: '#/components/schemas/Allowance' + cache: + $ref: '#/components/schemas/CachePlugin' + circuitBreaker: + $ref: '#/components/schemas/CircuitBreaker' + doNotTrackEndpoint: + $ref: '#/components/schemas/TrackEndpoint' + enforceTimeout: + $ref: '#/components/schemas/EnforceTimeout' + ignoreAuthentication: + $ref: '#/components/schemas/Allowance' + internal: + $ref: '#/components/schemas/Internal' + mockResponse: + $ref: '#/components/schemas/MockResponse' + postPlugins: + $ref: '#/components/schemas/EndpointPostPlugins' + rateLimit: + $ref: '#/components/schemas/RateLimitEndpoint' + requestSizeLimit: + $ref: '#/components/schemas/RequestSizeLimit' + trackEndpoint: + $ref: '#/components/schemas/TrackEndpoint' + transformRequestBody: + $ref: '#/components/schemas/TransformBody' + transformRequestHeaders: + $ref: '#/components/schemas/TransformHeaders' + transformRequestMethod: + $ref: '#/components/schemas/TransformRequestMethod' + transformResponseBody: + $ref: '#/components/schemas/TransformBody' + transformResponseHeaders: + $ref: '#/components/schemas/TransformHeaders' + urlRewrite: + $ref: '#/components/schemas/URLRewrite' + validateRequest: + $ref: '#/components/schemas/ValidateRequest' + virtualEndpoint: + $ref: '#/components/schemas/VirtualEndpoint' + type: object + OperationType2: + nullable: true + properties: + callbacks: + $ref: '#/components/schemas/Callbacks' + deprecated: + type: boolean + description: + type: string + externalDocs: + $ref: '#/components/schemas/ExternalDocs' + operationId: + type: string + parameters: + $ref: '#/components/schemas/Parameters' + requestBody: + $ref: '#/components/schemas/RequestBodyRef' + responses: + $ref: '#/components/schemas/Responses' + security: + $ref: '#/components/schemas/SecurityRequirements' + servers: + $ref: '#/components/schemas/Servers' + summary: + type: string + tags: + items: + type: string + type: array + type: object + Operations: + additionalProperties: + $ref: '#/components/schemas/Operation' + type: object + ParameterRef: + type: object + Parameters: + items: + $ref: '#/components/schemas/ParameterRef' + type: array + ParametersMap: + additionalProperties: + $ref: '#/components/schemas/ParameterRef' + type: object + PathItem: + properties: + $ref: + type: string + connect: + $ref: '#/components/schemas/OperationType2' + delete: + $ref: '#/components/schemas/OperationType2' + description: + type: string + get: + $ref: '#/components/schemas/OperationType2' + head: + $ref: '#/components/schemas/OperationType2' + options: + $ref: '#/components/schemas/OperationType2' + parameters: + $ref: '#/components/schemas/Parameters' + patch: + $ref: '#/components/schemas/OperationType2' + post: + $ref: '#/components/schemas/OperationType2' + put: + $ref: '#/components/schemas/OperationType2' + servers: + $ref: '#/components/schemas/Servers' + summary: + type: string + trace: + $ref: '#/components/schemas/OperationType2' + type: object + Paths: + additionalProperties: + $ref: '#/components/schemas/PathItem' + type: object + PersistGraphQLMeta: properties: - oauth_on_keychange_url: + method: type: string - x-go-name: OAuthKeyChangeURL - shared_secret: + operation: type: string - x-go-name: SharedSecret - title: >- - NotificationsManager handles sending notifications to OAuth endpoints to - notify the provider of key changes. + path: + type: string + variables: + additionalProperties: {} + nullable: true + type: object type: object x-go-package: github.com/TykTechnologies/tyk/apidef - OAuthClientToken: + PinnedPublicKey: properties: - code: + domain: type: string - x-go-name: Token - expires: - format: int64 - type: integer - x-go-name: Expires + publicKeys: + items: + type: string + nullable: true + type: array type: object - x-go-package: github.com/TykTechnologies/tyk - OIDProviderConfig: + PinnedPublicKeys: + items: + $ref: '#/components/schemas/PinnedPublicKey' + nullable: true + type: array + PkixName: + type: object + PluginBundle: + nullable: true properties: - client_ids: - additionalProperties: - type: string - type: object - x-go-name: ClientIDs - issuer: + enabled: + type: boolean + path: type: string - x-go-name: Issuer type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - ObjectID: - description: 'http://www.mongodb.org/display/DOCS/Object+IDs' - title: >- - ObjectID is a unique ID identifying a BSON value. It must be exactly 12 - bytes - - long. MongoDB objects by default have such a property set in their "_id" - - property. - type: string - x-go-package: github.com/TykTechnologies/tyk/vendor/gopkg.in/mgo.v2/bson - OpenIDOptions: + PluginConfig: + nullable: true properties: - providers: - items: - $ref: '#/components/schemas/OIDProviderConfig' - type: array - x-go-name: Providers - segregate_by_client: + bundle: + $ref: '#/components/schemas/PluginBundle' + data: + $ref: '#/components/schemas/PluginConfigData' + driver: + type: string + type: object + PluginConfigData: + nullable: true + properties: + enabled: type: boolean - x-go-name: SegregateByClient + value: + additionalProperties: {} + nullable: true + type: object type: object - x-go-package: github.com/TykTechnologies/tyk/apidef Policy: properties: _id: - $ref: '#/components/schemas/ObjectID' + type: string + access_rights: + additionalProperties: + $ref: '#/components/schemas/AccessDefinition' + nullable: true type: object - x-go-name: MID + active: + type: boolean + date_created: + format: date-time + type: string + hmac_enabled: + type: boolean id: type: string - x-go-name: ID + is_inactive: + type: boolean + key_expires_in: + format: int64 + type: integer + last_updated: + type: string + max_query_depth: + type: integer + meta_data: + additionalProperties: {} + nullable: true + type: object name: type: string - x-go-name: Name org_id: type: string - x-go-name: OrgID - rate: - format: double - type: number - x-go-name: Rate + partitions: + properties: + acl: + type: boolean + complexity: + type: boolean + per_api: + type: boolean + quota: + type: boolean + rate_limit: + type: boolean + type: object per: format: double type: number - x-go-name: Per quota_max: format: int64 type: integer - x-go-name: QuotaMax quota_renewal_rate: format: int64 type: integer - x-go-name: QuotaRenewalRate + rate: + format: double + type: number + smoothing: + $ref: '#/components/schemas/RateLimitSmoothing' + tags: + items: + type: string + nullable: true + type: array throttle_interval: format: double type: number - x-go-name: ThrottleInterval throttle_retry_limit: - type: number - x-go-name: ThrottleRetryLimit - max_query_depth: - type: number - x-go-name: MaxQueryDepth - access_rights: - type: object - x-go-name: AccessRights - additionalProperties: - $ref: '#/components/schemas/AccessDefinition' - hmac_enabled: + type: integer + type: object + PolicyList: + items: + $ref: '#/components/schemas/Policy' + nullable: true + type: array + PostAuthenticationPlugin: + nullable: true + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object + PostPlugin: + nullable: true + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object + PrePlugin: + nullable: true + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object + Provider: + properties: + clientToPolicyMapping: + items: + $ref: '#/components/schemas/ClientToPolicy' + type: array + issuer: + type: string + type: object + ProviderType2: + properties: + introspection: + $ref: '#/components/schemas/Introspection' + jwt: + $ref: '#/components/schemas/JWTValidation' + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + ProxyConfig: + properties: + check_host_against_uptime_tests: type: boolean - x-go-name: HMACEnabled - enable_http_signature_validation: + disable_strip_slash: type: boolean - x-go-name: EnableHTTPSignatureValidation - active: + enable_load_balancing: type: boolean - x-go-name: Active - is_inactive: + listen_path: + type: string + preserve_host_header: type: boolean - x-go-name: IsInactive - tags: - type: array + service_discovery: + $ref: '#/components/schemas/ServiceDiscoveryConfiguration' + strip_listen_path: + type: boolean + target_list: items: type: string - x-go-name: Tags - key_expires_in: - format: int64 - type: number - x-go-name: KeyExpiresIn - partitions: - $ref: '#/components/schemas/PolicyPartitions' - type: object - x-go-name: Partitions - last_updated: + nullable: true + type: array + target_url: type: string - x-go-name: LastUpdates - smoothing: - type: object - $ref: '#/components/schemas/RateLimitSmoothing' - description: Smoothing contains rate limit smoothing settings. - x-go-name: Smoothing - meta_data: + transport: + properties: + proxy_url: + type: string + ssl_ciphers: + items: + type: string + nullable: true + type: array + ssl_force_common_name_check: + type: boolean + ssl_insecure_skip_verify: + type: boolean + ssl_max_version: + minimum: 0 + type: integer + ssl_min_version: + minimum: 0 + type: integer type: object - x-go-name: MetaData - graphql_access_rights: - $ref: '#/components/schemas/GraphAccessDefinition' type: object - title: Policy represents a user policy - x-go-package: github.com/TykTechnologies/tyk/user - PolicyPartitions: + x-go-package: github.com/TykTechnologies/tyk/apidef + RateLimit: + nullable: true properties: - quota: - type: boolean - x-go-name: Quota - rate_limit: - type: boolean - x-go-name: RateLimit - complexity: + enabled: type: boolean - x-go-name: Complexity - acl: + per: + $ref: '#/components/schemas/TimeReadableDuration' + rate: + type: integer + type: object + RateLimitEndpoint: + nullable: true + properties: + enabled: type: boolean - x-go-name: Acl - per_api: + per: + $ref: '#/components/schemas/TimeReadableDuration' + rate: + type: integer + type: object + RateLimitMeta: + properties: + disabled: type: boolean - x-go-name: PerAPI + method: + type: string + path: + type: string + per: + format: double + type: number + rate: + format: double + type: number type: object - x-go-package: github.com/TykTechnologies/tyk/user + x-go-package: github.com/TykTechnologies/tyk/apidef RateLimitSmoothing: + nullable: true properties: delay: - type: integer + description: Delay is a hold-off between smoothing events and controls how + frequently the current allowance will step up or down (in seconds). format: int64 - description: Delay is a hold-off between smoothing events and controls how frequently the current allowance will step up or down (in seconds). minimum: 1 - x-go-name: Delay + type: integer enabled: + description: ' Enabled indicates if rate limit smoothing is active.' type: boolean - description: Enabled indicates if rate limit smoothing is active. - x-go-name: Enabled step: - type: integer + description: Step is the increment by which the current allowance will be + increased or decreased each time a smoothing event is emitted. format: int64 - description: Step is the increment by which the current allowance will be increased or decreased each time a smoothing event is emitted. minimum: 1 - x-go-name: Step - threshold: type: integer + threshold: + description: Threshold is the initial rate limit beyond which smoothing + will be applied. It is a count of requests during the per interval and + should be less than the maximum configured rate. format: int64 - description: Threshold is the initial rate limit beyond which smoothing will be applied. It is a count of requests during the `per` interval and should be less than the maximum configured `rate`. minimum: 1 - x-go-name: Threshold + type: integer trigger: - type: number + description: Trigger is a fraction (typically in the range 0.1-1.0) of the + step at which point a smoothing event will be emitted as the request rate + approaches the current allowance. format: double - description: Trigger is a fraction (typically in the range 0.1-1.0) of the step at which point a smoothing event will be emitted as the request rate approaches the current allowance. minimum: 0 - exclusiveMinimum: true multipleOf: 0.01 - x-go-name: Trigger - title: RateLimitSmoothing holds the rate smoothing configuration. - description: |- - Rate Limit Smoothing is a mechanism to dynamically adjust the request rate - limits based on the current traffic patterns. It helps in managing request - spikes by gradually increasing or decreasing the rate limit instead of making - abrupt changes or blocking requests excessively. - - Once the rate limit smoothing triggers an allowance change, one of the - following events is emitted: - - - `RateLimitSmoothingUp` when the allowance increases - - `RateLimitSmoothingDown` when the allowance decreases - - Events are emitted based on the configuration: - - - `enabled` (boolean) to enable or disable rate limit smoothing - - `threshold` after which to apply smoothing (minimum rate for window) - - `trigger` configures at which fraction of a step a smoothing event is emitted - - `step` is the value by which the rate allowance will get adjusted - - `delay` is a hold-off in seconds providing a minimum period between rate allowance adjustments - - To determine if the request rate is growing and needs to be smoothed, the - `step * trigger` value is subtracted from the request allowance and, if - the request rate goes above that, then a RateLimitSmoothingUp event is - emitted and the rate allowance is increased by `step`. - - Once the request allowance has been increased above the `threshold`, Tyk - will start to check for decreasing request rate. When the request rate - drops `step * (1 + trigger)` below the request allowance, a - `RateLimitSmoothingDown` event is emitted and the rate allowance is - decreased by `step`. - - After the request allowance has been adjusted (up or down), the request - rate will be checked again over the next `delay` seconds and, if - required, further adjustment made to the rate allowance after the - hold-off. - - For any allowance, events are emitted based on the following calculations: - - - When the request rate rises above `allowance - (step * trigger)`, - a RateLimitSmoothingUp event is emitted and allowance increases by `step`. - - When the request rate falls below `allowance - (step + step * trigger)`, - a RateLimitSmoothingDown event is emitted and allowance decreases by `step`. - - Example: Threshold: 400, Request allowance: 600, Current rate: 500, Step: 100, Trigger: 0.5. - - To trigger a RateLimitSmoothingUp event, the request rate must exceed: - - - Calculation: Allowance - (Step * Trigger). - - Example: 600 - (100 * 0.5) = `550`. - - Exceeding a request rate of `550` will increase the allowance to 700 (Allowance + Step). - - To trigger a RateLimitSmoothingDown event, the request rate must fall below: - - - Calculation: Allowance - (Step + (Step * Trigger)). - - Example: 600 - (100 + (100 * 0.5)) = 450. - - As the request rate falls below 450, that will decrease the allowance to 500 (Allowance - Step). - - The request allowance will be smoothed between `threshold`, and the - defined `rate` limit (maximum). The request allowance will be updated - internally every `delay` seconds. + type: number + type: object + RequestBodies: + additionalProperties: + $ref: '#/components/schemas/RequestBodyRef' + type: object + RequestBodyRef: + type: object + RequestHeadersRewriteConfig: + properties: + remove: + type: boolean + value: + type: string type: object x-go-package: github.com/TykTechnologies/tyk/apidef - Regexp: - description: Regexp is a wrapper around regexp.Regexp but with caching + RequestSigningMeta: properties: - FromCache: + algorithm: + type: string + certificate_id: + type: string + header_list: + items: + type: string + nullable: true + type: array + is_enabled: type: boolean + key_id: + type: string + secret: + type: string + signature_header: + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/regexp - RequestInputType: - type: string x-go-package: github.com/TykTechnologies/tyk/apidef + RequestSizeLimit: + nullable: true + properties: + enabled: + type: boolean + value: + format: int64 + type: integer + type: object RequestSizeMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path size_limit: format: int64 type: integer - x-go-name: SizeLimit type: object x-go-package: github.com/TykTechnologies/tyk/apidef + ResponsePlugin: + nullable: true + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object ResponseProcessor: properties: name: type: string - x-go-name: Name - options: - type: object - x-go-name: Options + options: {} type: object x-go-package: github.com/TykTechnologies/tyk/apidef + ResponseRef: + type: object + Responses: + additionalProperties: + $ref: '#/components/schemas/ResponseRef' + type: object + ResultId: + properties: + alias: + type: string + api_id: + example: 7364617cc7d345d9755d182635dfd46d + type: string + api_name: + example: OAS http + type: string + code: + type: integer + day: + example: 12 + type: integer + hour: + example: 0 + type: integer + iso_country: + type: string + key: + type: string + month: + example: 6 + type: integer + path: + type: string + queries: + additionalProperties: + type: integer + type: object + url: + type: string + year: + example: 2024 + type: integer + type: object + ResultUnit: + properties: + error: + example: 4 + type: integer + hits: + example: 26 + type: integer + id: + $ref: '#/components/schemas/ResultId' + last_hit: + example: "2024-06-19T06:33:30Z" + format: date-time + type: string + latency: + example: 0 + format: double + type: number + max_latency: + example: 0 + format: int64 + type: integer + max_upstream_latency: + example: 0 + format: int64 + type: integer + min_latency: + example: 0 + format: int64 + type: integer + min_upstream_latency: + example: 0 + format: int64 + type: integer + request_time: + example: 190.2 + format: double + type: number + success: + example: 22 + type: integer + upstream_latency: + example: 0 + format: double + type: number + type: object + ReturnDataStruct: + properties: + Data: + $ref: '#/components/schemas/PolicyList' + Pages: + type: integer + type: object RoutingTrigger: properties: - 'on': - $ref: '#/components/schemas/RoutingTriggerOnType' + "on": + type: string options: $ref: '#/components/schemas/RoutingTriggerOptions' rewrite_to: type: string - x-go-name: RewriteTo type: object x-go-package: github.com/TykTechnologies/tyk/apidef - RoutingTriggerOnType: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef RoutingTriggerOptions: properties: header_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: HeaderMatches path_part_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: PathPartMatches payload_matches: $ref: '#/components/schemas/StringRegexMap' query_val_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: QueryValMatches request_context_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: RequestContextMatches session_meta_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true + type: object + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + SSOAccessData: + properties: + DisplayName: + type: string + EmailAddress: + type: string + ForSection: + enum: + - dashboard + - portal + type: string + GroupID: + type: string + OrgID: + type: string + SSOOnlyForRegisteredUsers: + type: boolean + UserNotAllowed: + type: boolean + type: object + SchemaRef: + type: object + Schemas: + additionalProperties: + $ref: '#/components/schemas/SchemaRef' + type: object + ScopeClaim: + properties: + scope_claim_name: + type: string + scope_to_policy: + additionalProperties: + type: string type: object - x-go-name: SessionMetaMatches type: object x-go-package: github.com/TykTechnologies/tyk/apidef + ScopeToPolicy: + properties: + policyId: + type: string + scope: + type: string + type: object + Scopes: + nullable: true + properties: + claimName: + type: string + scopeToPolicyMapping: + items: + $ref: '#/components/schemas/ScopeToPolicy' + type: array + type: object + ScopesType2: + properties: + jwt: + $ref: '#/components/schemas/ScopeClaim' + oidc: + $ref: '#/components/schemas/ScopeClaim' + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + SecurityRequirement: + additionalProperties: + items: + type: string + type: array + type: object + SecurityRequirements: + items: + $ref: '#/components/schemas/SecurityRequirement' + nullable: true + type: array + SecuritySchemeRef: + type: object + SecuritySchemes: + additionalProperties: {} + type: object + SecuritySchemesType2: + additionalProperties: + $ref: '#/components/schemas/SecuritySchemeRef' + type: object + Server: + properties: + authentication: + $ref: '#/components/schemas/Authentication' + clientCertificates: + $ref: '#/components/schemas/ClientCertificates' + customDomain: + $ref: '#/components/schemas/Domain' + detailedActivityLogs: + $ref: '#/components/schemas/DetailedActivityLogs' + detailedTracing: + $ref: '#/components/schemas/DetailedTracing' + eventHandlers: + $ref: '#/components/schemas/EventHandlers' + gatewayTags: + $ref: '#/components/schemas/GatewayTags' + listenPath: + $ref: '#/components/schemas/ListenPath' + type: object + ServerType2: + properties: + description: + type: string + url: + type: string + variables: + additionalProperties: + $ref: '#/components/schemas/ServerVariable' + type: object + type: object + ServerVariable: + properties: + default: + type: string + description: + type: string + enum: + items: + type: string + type: array + type: object + Servers: + items: + $ref: '#/components/schemas/ServerType2' + nullable: true + type: array + ServiceDiscovery: + nullable: true + properties: + cache: + $ref: '#/components/schemas/ServiceDiscoveryCache' + cacheTimeout: + format: int64 + type: integer + dataPath: + type: string + enabled: + type: boolean + endpointReturnsList: + type: boolean + parentDataPath: + type: string + portDataPath: + type: string + queryEndpoint: + type: string + targetPath: + type: string + useNestedQuery: + type: boolean + useTargetList: + type: boolean + type: object + ServiceDiscoveryCache: + nullable: true + properties: + enabled: + type: boolean + timeout: + format: int64 + type: integer + type: object ServiceDiscoveryConfiguration: properties: + cache_disabled: + type: boolean cache_timeout: format: int64 type: integer - x-go-name: CacheTimeout data_path: type: string - x-go-name: DataPath endpoint_returns_list: type: boolean - x-go-name: EndpointReturnsList parent_data_path: type: string - x-go-name: ParentDataPath port_data_path: type: string - x-go-name: PortDataPath query_endpoint: type: string - x-go-name: QueryEndpoint target_path: type: string - x-go-name: TargetPath use_discovery_service: type: boolean - x-go-name: UseDiscoveryService use_nested_query: type: boolean - x-go-name: UseNestedQuery use_target_list: type: boolean - x-go-name: UseTargetList type: object x-go-package: github.com/TykTechnologies/tyk/apidef - SessionProviderCode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef + SessionEndpoint: + properties: + methods: + items: + $ref: '#/components/schemas/SessionEndpointMethod' + type: array + path: + type: string + type: object + SessionEndpointMethod: + properties: + limit: + $ref: '#/components/schemas/SessionEndpointRateLimit' + name: + type: string + type: object + SessionEndpointRateLimit: + properties: + per: + format: int64 + type: integer + rate: + format: int64 + type: integer + type: object SessionProviderMeta: properties: meta: - additionalProperties: - type: object + additionalProperties: {} + nullable: true type: object - x-go-name: Meta name: - $ref: '#/components/schemas/SessionProviderCode' + type: string storage_engine: - $ref: '#/components/schemas/StorageEngineCode' + type: string type: object x-go-package: github.com/TykTechnologies/tyk/apidef SessionState: - description: >- - There's a data structure that's based on this and it's used for Protocol - Buffer support, make sure to update - "coprocess/proto/coprocess_session_state.proto" and generate the - bindings using: cd coprocess/proto && ./update_bindings.sh properties: - tags: - items: - type: string - type: array - x-go-name: Tags access_rights: additionalProperties: $ref: '#/components/schemas/AccessDefinition' + nullable: true type: object - x-go-name: AccessRights alias: + example: portal-developer@example.org type: string - x-go-name: Alias allowance: + example: 1000 format: double type: number - x-go-name: Allowance apply_policies: + example: + - 641c15dd0fffb800010197bf + - 615d2e528bf3980001c7c6c2 items: type: string + nullable: true type: array - x-go-name: ApplyPolicies apply_policy_id: + deprecated: true + description: deprecated use apply_policies going forward instead to send + a list of policies ids + example: 641c15dd0fffb800010197bf type: string - x-go-name: ApplyPolicyID basic_auth_data: properties: hash_type: - $ref: '#/components/schemas/HashType' + example: bcrypt + type: string password: + example: testuse1 + type: string + user: + example: admin-user@example.org type: string - x-go-name: Password type: object - x-go-name: BasicAuthData certificate: type: string - x-go-name: Certificate data_expires: + example: 0 format: int64 type: integer - x-go-name: DataExpires - enable_detail_recording: + date_created: + example: "2024-05-14T13:15:46.560506+03:00" + format: date-time + type: string + enable_detailed_recording: + example: true type: boolean - x-go-name: EnableDetailedRecording expires: + example: 1.716895221e+09 format: int64 type: integer - x-go-name: Expires hmac_enabled: + example: false type: boolean - x-go-name: HMACEnabled hmac_string: type: string - x-go-name: HmacSecret id_extractor_deadline: + example: 0 format: int64 type: integer - x-go-name: IdExtractorDeadline is_inactive: type: boolean - x-go-name: IsInactive jwt_data: properties: secret: type: string - x-go-name: Secret type: object - x-go-name: JWTData + key_id: + type: string last_check: + example: 0 format: int64 type: integer - x-go-name: LastCheck last_updated: + example: "1715681746" type: string - x-go-name: LastUpdated + max_query_depth: + example: 5 + type: integer meta_data: - additionalProperties: - type: object - type: object - x-go-name: MetaData + example: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 monitor: properties: trigger_limits: + example: + - 80 + - 60 + - 50 items: format: double type: number + nullable: true type: array - x-go-name: TriggerLimits type: object - x-go-name: Monitor oauth_client_id: type: string - x-go-name: OauthClientID oauth_keys: additionalProperties: type: string + nullable: true type: object - x-go-name: OauthKeys org_id: + example: 5e9d9544a1dcd60001d0ed20 type: string - x-go-name: OrgID per: + example: 60 format: double type: number - x-go-name: Per quota_max: + example: 1.710302205e+09 format: int64 type: integer - x-go-name: QuotaMax quota_remaining: + example: 20000 format: int64 type: integer - x-go-name: QuotaRemaining quota_renewal_rate: + example: -1 format: int64 type: integer - x-go-name: QuotaRenewalRate quota_renews: + example: 1.715681745e+09 format: int64 type: integer - x-go-name: QuotaRenews rate: + example: 1000 format: double type: number - x-go-name: Rate session_lifetime: + example: 0 format: int64 type: integer - x-go-name: SessionLifetime smoothing: - type: object $ref: '#/components/schemas/RateLimitSmoothing' - description: Smoothing contains rate limit smoothing settings. - x-go-name: Smoothing + tags: + example: + - edge + - edge-eu + items: + type: string + nullable: true + type: array throttle_interval: + example: 10 format: double type: number - x-go-name: ThrottleInterval throttle_retry_limit: - format: int64 + example: -1 type: integer - x-go-name: ThrottleRetryLimit - title: >- - SessionState objects represent a current API session, mainly used for - rate limiting. type: object - x-go-package: github.com/TykTechnologies/tyk/user SignatureConfig: properties: algorithm: type: string - x-go-name: Algorithm allowed_clock_skew: format: int64 type: integer - x-go-name: AllowedClockSkew error_code: - format: int64 type: integer - x-go-name: ErrorCode error_message: type: string - x-go-name: ErrorMessage header: type: string - x-go-name: Header + param_name: + type: string secret: type: string - x-go-name: Secret + use_param: + type: boolean type: object x-go-package: github.com/TykTechnologies/tyk/apidef - StorageEngineCode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef + State: + properties: + active: + type: boolean + internal: + type: boolean + type: object StringRegexMap: properties: match_rx: type: string - x-go-name: MatchPattern reverse: type: boolean - x-go-name: Reverse type: object x-go-package: github.com/TykTechnologies/tyk/apidef + SystemStatsResp: + properties: + message: + type: string + stats: + $ref: '#/components/schemas/EntityStats' + status: + example: Success + type: string + type: object + Tag: + properties: + description: + type: string + externalDocs: + $ref: '#/components/schemas/ExternalDocs' + name: + type: string + type: object + Tags: + items: + $ref: '#/components/schemas/Tag' + type: array TemplateData: properties: enable_session: type: boolean - x-go-name: EnableSession input_type: - $ref: '#/components/schemas/RequestInputType' + type: string template_mode: - $ref: '#/components/schemas/TemplateMode' + type: string template_source: type: string - x-go-name: TemplateSource type: object x-go-package: github.com/TykTechnologies/tyk/apidef TemplateMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path template_data: $ref: '#/components/schemas/TemplateData' type: object x-go-package: github.com/TykTechnologies/tyk/apidef - TemplateMode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - TrackEndpointMeta: + Test: + nullable: true properties: - method: - type: string - x-go-name: Method - path: - type: string - x-go-name: Path + serviceDiscovery: + $ref: '#/components/schemas/ServiceDiscovery' type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - TransformJQMeta: + TimeDuration: + format: int64 + type: integer + TimeReadableDuration: + format: int64 + type: integer + TrackEndpoint: + nullable: true properties: - filter: - type: string - x-go-name: Filter - method: - type: string - x-go-name: Method - path: - type: string - x-go-name: Path + enabled: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - URLRewriteMeta: + TrackEndpointMeta: properties: - MatchRegexp: - $ref: '#/components/schemas/Regexp' - match_pattern: - type: string - x-go-name: MatchPattern + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path - rewrite_to: - type: string - x-go-name: RewriteTo - triggers: - items: - $ref: '#/components/schemas/RoutingTrigger' - type: array - x-go-name: Triggers type: object x-go-package: github.com/TykTechnologies/tyk/apidef - UserSearchCriteria: - type: object + TrafficLogs: + nullable: true properties: - filters: - type: object - properties: - query: - type: string - description: Query term used to search for users (email address) - required: - - query - required: - - filters - ValidatePathMeta: + enabled: + type: boolean + type: object + TransformBody: + nullable: true properties: - error_response_code: - description: >- - Allows override of default 422 Unprocessible Entity response code - for validation errors. - format: int64 - type: integer - x-go-name: ErrorResponseCode - method: + body: type: string - x-go-name: Method - path: + enabled: + type: boolean + format: type: string - x-go-name: Path - schema: - additionalProperties: - type: object - type: object - x-go-name: Schema - schema_b64: + path: type: string - x-go-name: SchemaB64 type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - VersionInfo: + TransformHeaders: + nullable: true properties: - paths: - properties: - black_list: - items: - type: string - type: array - x-go-name: BlackList - ignored: - items: - type: string - type: array - x-go-name: Ignored - white_list: - items: - type: string - type: array - x-go-name: WhiteList - type: object - x-go-name: Paths - expires: - type: string - x-go-name: Expires - extended_paths: - $ref: '#/components/schemas/ExtendedPathsSet' - global_headers: - additionalProperties: - type: string - type: object - x-go-name: GlobalHeaders - global_headers_remove: + add: + $ref: '#/components/schemas/Headers' + enabled: + type: boolean + remove: items: type: string type: array - x-go-name: GlobalHeadersRemove - global_size_limit: - format: int64 - type: integer - x-go-name: GlobalSizeLimit - name: - type: string - x-go-name: Name - override_target: - type: string - x-go-name: OverrideTarget - use_extended_paths: - type: boolean - x-go-name: UseExtendedPaths type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - VirtualMeta: + TransformJQMeta: properties: - function_source_type: - type: string - x-go-name: FunctionSourceType - function_source_uri: + filter: type: string - x-go-name: FunctionSourceURI method: type: string - x-go-name: Method path: type: string - x-go-name: Path - proxy_on_error: + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + TransformRequestMethod: + nullable: true + properties: + enabled: type: boolean - x-go-name: ProxyOnError - response_function_name: + toMethod: + type: string + type: object + UDGGlobalHeader: + properties: + key: + type: string + value: type: string - x-go-name: ResponseFunctionName - use_session: - type: boolean - x-go-name: UseSession type: object x-go-package: github.com/TykTechnologies/tyk/apidef - apiAllKeys: - description: apiAllKeys represents a list of keys in the memory store + URLRewrite: + nullable: true properties: - keys: + enabled: + type: boolean + pattern: + type: string + rewriteTo: + type: string + triggers: items: - type: string + $ref: '#/components/schemas/URLRewriteTrigger' type: array - x-go-name: APIKeys type: object - x-go-package: github.com/TykTechnologies/tyk - CategoriesPayload: - description: CategoriesPayload is a list of category names + URLRewriteMeta: properties: - categories: + disabled: + type: boolean + match_pattern: + type: string + method: + type: string + path: + type: string + rewrite_to: + type: string + triggers: items: - type: string + $ref: '#/components/schemas/RoutingTrigger' + nullable: true type: array - x-go-name: CategoriesPayload type: object - x-go-package: github.com/TykTechnologies/tyk-analytics/dashboard - AllCategoriesResponse: - description: allCategoriesPayload is a list of all the currently defined categories, each with a count of the number of APIs that have been tagged with that category name + x-go-package: github.com/TykTechnologies/tyk/apidef + URLRewriteRule: properties: - categories: + in: + type: string + name: + type: string + negate: + type: boolean + pattern: + type: string + type: object + URLRewriteTrigger: + properties: + condition: + type: string + rewriteTo: + type: string + rules: items: - type: object - properties: - name: - type: string - x-go-name: Name - count: - type: integer - x-go-name: Count + $ref: '#/components/schemas/URLRewriteRule' type: array - x-go-name: AllCategoriesResponse type: object - x-go-package: github.com/TykTechnologies/tyk-analytics/dashboard - apiModifyKeySuccess: - description: apiModifyKeySuccess represents when a Key modification was successful + URLVals: properties: - action: - type: string - x-go-name: Action - key: - description: 'in:body' + ApiURL: type: string - x-go-name: Key - key_hash: + BasePath: type: string - x-go-name: KeyHash - status: + Host: type: string - x-go-name: Status type: object - x-go-package: github.com/TykTechnologies/tyk - apiStatusMessage: - description: apiStatusMessage represents an API status message + Upstream: properties: - message: - description: Response details - type: string - x-go-name: Message - status: + certificatePinning: + $ref: '#/components/schemas/CertificatePinning' + mutualTLS: + $ref: '#/components/schemas/MutualTLS' + rateLimit: + $ref: '#/components/schemas/RateLimit' + serviceDiscovery: + $ref: '#/components/schemas/ServiceDiscovery' + test: + $ref: '#/components/schemas/Test' + url: type: string - x-go-name: Status type: object - x-go-package: github.com/TykTechnologies/tyk - APIAllCertificates: - description: APIAllCertificates represents a list of certificates + UptimeTests: properties: - certs: + check_list: items: - type: string + $ref: '#/components/schemas/HostCheckObject' + nullable: true type: array - x-go-name: Certs + config: + $ref: '#/components/schemas/UptimeTestsConfig' type: object - x-go-package: github.com/TykTechnologies/tyk - APIAllCertificateBasics: - description: APIAllCertificates represents a list of certificate basics + x-go-package: github.com/TykTechnologies/tyk/apidef + UptimeTestsConfig: properties: - cert_basics: - items: - $ref: '#/components/schemas/CertificateBasics' - type: array - x-go-name: Certs - pages: + expire_utime_after: + format: int64 + type: integer + recheck_wait: type: integer + service_discovery: + $ref: '#/components/schemas/ServiceDiscoveryConfiguration' type: object - x-go-package: github.com/TykTechnologies/tyk - CertificateBasics: - description: CertificateBasics represents basic details of a certificate + x-go-package: github.com/TykTechnologies/tyk/apidef + User: properties: - id: - type: string - x-go-name: ID - issuer_cn: + access_key: + example: d7ebef749e4348cb67fec3cfc81f0a50 type: string - x-go-name: IssuerCN - subject_cn: + active: + example: true + type: boolean + api_model: + $ref: '#/components/schemas/ApiModel' + created_at: + example: "2024-05-19T08:23:29.034+03:00" + format: date-time type: string - x-go-name: SubjectCN - dns_names: - type: array - items: - type: string - x-go-name: DNSNames - has_private: + email_address: + example: multi-org-user@example.org type: string - x-go-name: HasPrivateKey - not_before: + first_name: + example: itachi type: string - x-go-name: NotBefore - not_after: + group_id: + example: 5e9d9544a1dcd60001d0ed20 type: string - x-go-name: NotAfter - is_ca: - type: boolean - x-go-name: IsCA - description: Indicates whether the certificate is a root Certificate Authority (CA) certificate. - type: object - x-go-package: github.com/TykTechnologies/tyk - CertificateMeta: - description: CertificateBasics represents basic details of a certificate - properties: id: + example: 66498cd1e2fcd1000184ecb5 type: string - x-go-name: ID - fingerprint: + last_login_date: + example: "2024-05-19T08:42:22.659839+03:00" + format: date-time type: string - x-go-name: Fingerprint - has_private: + last_name: + example: sasuke type: string - x-go-name: HasPrivateKey - issuer: - $ref: '#/components/schemas/pkixName' - subject: - $ref: '#/components/schemas/pkixName' - not_before: + org_id: + example: 5e9d9544a1dcd60001d0ed20 type: string - x-go-name: NotBefore - not_after: + password_max_days: + example: 0 + type: integer + password_updated: + example: "2024-05-19T08:23:29.146+03:00" + format: date-time type: string - x-go-name: NotAfter - dns_names: - type: array - items: - type: string - x-go-name: DNSNames - is_ca: + user_permissions: + $ref: '#/components/schemas/UserPermissionObject' + required: + - first_name + - last_name + - email_address + - user_permissions + type: object + UserGroup: + properties: + active: + example: true type: boolean - x-go-name: IsCA - description: Indicates whether the certificate is a root Certificate Authority (CA) certificate. + description: + example: Devops logs and analytics access + type: string + id: + example: 6649986d5715ec4c96cbef2b + type: string + name: + example: 66498cd1e2fcd1000184ecb8 + type: string + org_id: + example: 5e9d9544a1dcd60001d0ed20 + type: string + password_max_days: + example: 0 + type: integer + user_permissions: + $ref: '#/components/schemas/UserPermissionObject' type: object - x-go-package: github.com/TykTechnologies/tyk - AllCertificateDetailedList: - title: AllCertificateDetailedList represents list of certificates with certificate details. + UserGroups: properties: - certificates: - type: array + groups: items: - $ref: '#/components/schemas/CertificateMeta' + $ref: '#/components/schemas/UserGroup' + nullable: true + type: array pages: type: integer - CertificateDependencies: - title: CertificateDependencies represents the dependencies of the certificate. - description: CertificateDependencies contains the information about the usage of this certificate. type: object + UserPassword: properties: - certID: + api_model: + $ref: '#/components/schemas/ApiModel' + current_password: + example: testuser1password + minLength: 6 type: string - key_cert: + new_password: + example: newtestuser1password + minLength: 6 type: string - client_cert_apis: - type: array - items: - type: string - upstream_cert_apis: - type: array - items: - type: string - client_cert_api_names: - type: array - items: - type: string - upstream_cert_api_names: - type: array - items: - type: string - pkixName: - description: Name represents an X.509 distinguished name + type: object + UserPermissionObject: + additionalProperties: + type: string + type: object + UserSearchPayload: properties: - Country: - type: array + filters: + properties: + query: + example: itachi@tyk.io + type: string + type: object + type: object + Users: + properties: + pages: + type: integer + users: items: - type: string - Organization: + $ref: '#/components/schemas/User' + nullable: true type: array - items: + type: object + ValidatePathMeta: + properties: + disabled: + type: boolean + error_response_code: + type: integer + method: + type: string + path: + type: string + schema: + additionalProperties: {} + nullable: true + type: object + schema_b64: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + ValidateRequest: + nullable: true + properties: + enabled: + type: boolean + errorResponseCode: + type: integer + type: object + ValidateRequestMeta: + properties: + enabled: + type: boolean + error_response_code: + type: integer + method: + type: string + path: + type: string + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + VersionData: + properties: + default_version: + type: string + not_versioned: + type: boolean + versions: + additionalProperties: + $ref: '#/components/schemas/VersionInfo' + nullable: true + type: object + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + VersionDefinition: + properties: + default: + type: string + enabled: + type: boolean + fallback_to_default: + type: boolean + key: + type: string + location: + type: string + name: + type: string + strip_path: + type: boolean + strip_versioning_data: + type: boolean + url_versioning_pattern: + type: string + versions: + additionalProperties: type: string - OrganizationalUnit: - type: array - items: + nullable: true + type: object + type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + VersionInfo: + properties: + expires: + type: string + extended_paths: + $ref: '#/components/schemas/ExtendedPathsSet' + global_headers: + additionalProperties: type: string - Locality: - type: array + nullable: true + type: object + global_headers_disabled: + type: boolean + global_headers_remove: items: type: string - Province: + nullable: true type: array - items: + global_response_headers: + additionalProperties: type: string - StreetAddress: - type: array + nullable: true + type: object + global_response_headers_disabled: + type: boolean + global_response_headers_remove: items: type: string - PostalCode: + nullable: true type: array - items: - type: string - SerialNumber: + global_size_limit: + format: int64 + type: integer + ignore_endpoint_case: + type: boolean + name: type: string - CommonName: + override_target: type: string - Names: - type: array - items: - $ref: '#/components/schemas/pkixAttributeTypeAndValue' - ExtraNames: - type: array - items: - $ref: '#/components/schemas/pkixAttributeTypeAndValueSET' - pkixAttributeTypeAndValue: - description: AttributeTypeAndValue mirrors the ASN.1 structure of the same name in RFC 5280, Section 4.1.2.4. - properties: - Type: - type: array - items: - type: integer - Value: + paths: + properties: + black_list: + items: + type: string + nullable: true + type: array + ignored: + items: + type: string + nullable: true + type: array + white_list: + items: + type: string + nullable: true + type: array type: object - ImportOrPatchFromURL: + use_extended_paths: + type: boolean type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + VersionMeta: properties: - url: + expirationDate: + type: string + id: + type: string + internal: + type: boolean + isDefaultVersion: + type: boolean + name: + type: string + versionName: type: string - format: uri - description: The URL from which to import the OpenAPI document. - required: - - url - XTykApiGateway: - type: object - properties: - x-tyk-api-gateway: - type: object - properties: - info: - type: object - properties: - id: - type: string - dbId: - type: string - orgId: - type: string - name: - type: string - state: - type: object - properties: - active: - type: boolean - upstream: - type: object - properties: - url: - type: string - server: - type: object - properties: - listenPath: - type: object - properties: - value: - type: string - strip: - type: boolean - TykOasApiDefinition: - allOf: - - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - - $ref: "#/components/schemas/XTykApiGateway" - DryRunRequest: type: object + VersionMetas: properties: - oas: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - tyk_oas: - $ref: "#/components/schemas/TykOasApiDefinition" - - APIAccessManagementPayload: - description: APIAccessManagementPayload represents two lists containing users and user groups that have access to an API - properties: - userIds: - type: array - items: - type: string - userGroupIds: - type: array - items: - type: string - type: object - x-go-name: AccessManagementPayload - x-go-package: github.com/TykTechnologies/tyk-analytics/dashboard/model - pkixAttributeTypeAndValueSET: - description: AttributeTypeAndValueSET represents a set of ASN.1 sequences of AttributeTypeAndValue sequences from RFC 2986 (PKCS #10). - properties: - Type: - type: array + apis: items: - type: integer - Value: + $ref: '#/components/schemas/VersionMeta' + nullable: true type: array - items: - type: array - items: - $ref: '#/components/schemas/pkixAttributeTypeAndValue' - APICertificateStatusMessage: - description: Status message when certificate is added + pages: + type: integer + type: object + VersionToID: properties: id: type: string - x-go-name: CertID - status: - type: string - x-go-name: Status - message: + name: type: string - x-go-name: Message - type: object - x-go-package: github.com/TykTechnologies/tyk - OASSchemaResponse: - description: OAS schema endpoint response type: object + Versioning: + nullable: true properties: - status: + default: type: string - message: + enabled: + type: boolean + fallbackToDefault: + type: boolean + key: type: string - schema: + location: type: string - description: - BooleanQueryParam: - type: boolean - enum: [ true, false ] - example: true - APIVersionMeta: - description: API version meta + name: + type: string + stripVersioningData: + type: boolean + urlVersioningPattern: + type: string + versions: + items: + $ref: '#/components/schemas/VersionToID' + nullable: true + type: array type: object + VirtualEndpoint: + nullable: true properties: - id: + body: + type: string + enabled: + type: boolean + functionName: type: string name: type: string - versionName: + path: type: string - internal: + proxyOnError: type: boolean - expirationDate: - type: string - isDefaultVersion: + requireSession: type: boolean - NewDataSource: - description: Defines a new data source to be imported type: object + VirtualMeta: properties: - type: + disabled: + type: boolean + function_source_type: type: string - enum: - - asyncapi - - openapi - data: + function_source_uri: type: string - DataSourceImported: - description: A new data source imported successfully - type: object - properties: - status: + method: type: string - x-go-name: Status - message: + path: type: string - x-go-name: Message - meta: + proxy_on_error: + type: boolean + response_function_name: type: string - x-go-name: Meta - SystemStats: + use_session: + type: boolean type: object + x-go-package: github.com/TykTechnologies/tyk/apidef + WebHookHandlerConf: properties: - code: + api_model: + $ref: '#/components/schemas/ApiModel' + event_timeout: + example: 0 + format: int64 type: integer - example: 200 - message: - type: string - example: 'success' - stats: + header_map: + additionalProperties: + type: string + example: + secret: superscretkey + x-auth: authvalue + nullable: true type: object - properties: - apis: - type: array - items: - $ref: '#/components/schemas/Stats' - Stats: - type: object - properties: - date: + id: + example: 664b613f5715ec4c96cbef3e type: string - example: 2023-07-01 - max_usage: - type: integer - example: 20 - max_active_usage: - type: integer - example: 18 - min_usage: - type: integer - example: 10 - min_active_usage: - type: integer - example: 8 - avg_usage: - type: integer - example: 15 - avg_active_usage: - type: integer - example: 13 - license_entitlement: - type: integer - example: 25 - license_entitlement_active: - type: integer - example: 20 - Asset: - type: object - properties: - _id: - description: database id of asset + method: + example: POST type: string - readOnly: true - example: 659b9613a1ed7ef7afdccb9d - id: - description: custom id of asset that can be provided while creation/updation. + name: + example: Expired Keys webhook type: string - example: my-asset - kind: - description: Type of asset. + org_id: + example: 5e9d9544a1dcd60001d0ed20 type: string - enum: - - oas-template - default: oas-template - example: oas-template - data: - type: object - description: Data associated with the asset - example: { "info": { "title": "oas doc title","version": "1" },"openapi": "3.0.3","paths": { },"x-tyk-api-gateway": { "info": { "orgId": "659f7ebba1ed7e3ab9796caa","name": "oas api","state": { "active": false } },"upstream": { "url": "" },"server": { "listenPath": { "value": "/" } } } } - last_updated_at: + target_path: + example: https://httpbin.org/expired-keys type: string - description: last updated time stamp - readOnly: true - example: '2024-01-10T08:48:36.183Z' - parameters: - UpstreamURL: - name: upstreamURL - in: query - description: Upstream URL for the API - required: false - schema: - type: string - ListenPath: - name: listenPath - in: query - description: Listen path for the API - schema: - type: string - required: false - CustomDomain: - name: customDomain - schema: - type: string - description: Custom domain for the API - in: query - required: false - ValidateRequest: - name: validateRequest - in: query - description: Enable validateRequest middleware for all endpoints having a request body with media type application/json - required: false - schema: - $ref: '#/components/schemas/BooleanQueryParam' - MockResponse: - name: mockResponse - in: query - description: Enable mockResponse middleware for all endpoints having responses configured. - required: false - schema: - $ref: '#/components/schemas/BooleanQueryParam' - AllowList: - name: allowList - in: query - description: Enable allowList middleware for all endpoints - required: false - schema: - $ref: '#/components/schemas/BooleanQueryParam' - Authentication: - name: authentication - in: query - description: Enable/disable the authentication mechanism in your Tyk Gateway for your OAS API - schema: - $ref: '#/components/schemas/BooleanQueryParam' - TemplateID: - name: templateID - in: query - description: The asset ID of template applied while creating or importing an OAS API. - schema: - $ref: '#/components/schemas/BooleanQueryParam' - SearchText: - name: searchText - schema: - type: string - description: Search for API version name - in: query - required: false - AccessType: - name: accessType - schema: - type: string - enum: [ "internal", "external" ] - description: Filter for internal or external API versions - in: query - required: false -security: - - bearerAuth: [ ] + template_path: + example: templates/default_webhook.json + type: string + webhook_id: + example: 1f78e319202b430e92286cff3ca759e3 + type: string + required: + - method + - target_path + type: object + WebHooks: + properties: + hooks: + items: + $ref: '#/components/schemas/WebHookHandlerConf' + nullable: true + type: array + pages: + type: integer + type: object + XTykAPIGateway: + properties: + info: + $ref: '#/components/schemas/Info' + middleware: + $ref: '#/components/schemas/Middleware' + server: + $ref: '#/components/schemas/Server' + upstream: + $ref: '#/components/schemas/Upstream' + type: object + XTykApiGateway: + properties: + x-tyk-api-gateway: + $ref: '#/components/schemas/XTykAPIGateway' + type: object + securitySchemes: + bearerAuth: + description: The Tyk Dashboard API Access Credentials + scheme: bearer + type: http diff --git a/tyk-docs/assets/others/enterprise-developer-portal-swagger.yaml b/tyk-docs/assets/others/enterprise-developer-portal-swagger.yaml index 0d7b15b935..812e175c3d 100644 --- a/tyk-docs/assets/others/enterprise-developer-portal-swagger.yaml +++ b/tyk-docs/assets/others/enterprise-developer-portal-swagger.yaml @@ -15,7 +15,7 @@ info: This API requires an admin authorisation token that is available for admin users of the portal in the profile page. - version: v1.8.0 + version: v1.12.0 servers: - url: http://localhost:3001/portal-api tags: @@ -4403,6 +4403,163 @@ paths: summary: Detach a tag from a post tags: - Posts + + /apps/{app_id}/custom_credentials: + get: + summary: List Custom Credentials + description: Retrieve a list of custom credentials for a specific application. + tags: + - Applications and credentials + parameters: + - name: app_id + in: path + required: true + description: The ID of the application. + schema: + type: string + responses: + '200': + description: A list of custom credentials + content: + application/json: + schema: + $ref: '#/components/schemas/CustomCredential-index' + security: + - AdminAPIToken: [] + + post: + summary: Create a Custom Credential + description: Create a new custom credential for a specific application. + tags: + - Applications and credentials + parameters: + - name: app_id + in: path + required: true + description: The ID of the application. + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CustomCredential-create' + responses: + '201': + description: Custom credential created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/CustomCredential-show' + "422": + description: Validator error + content: + application/json: + schema: + $ref: "#/components/schemas/OnlyErrors" + + security: + - AdminAPIToken: [] + + /apps/{app_id}/custom_credentials/{credential_id}: + get: + summary: Get a Custom Credential + description: Retrieve a specific custom credential by its ID. + tags: + - Applications and credentials + parameters: + - name: app_id + in: path + required: true + description: The ID of the application. + schema: + type: string + - name: credential_id + in: path + required: true + description: The ID of the custom credential. + schema: + type: string + responses: + '200': + description: Custom credential details + content: + application/json: + schema: + $ref: '#/components/schemas/CustomCredential-show' + security: + - AdminAPIToken: [] + + put: + summary: Update a Custom Credential + description: Update an existing custom credential for a specific application. + tags: + - Applications and credentials + parameters: + - name: app_id + in: path + required: true + description: The ID of the application. + schema: + type: string + - name: credential_id + in: path + required: true + description: The ID of the custom credential. + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CustomCredential-update' + responses: + '200': + description: Custom credential updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/CustomCredential-show' + "422": + description: Validator error + content: + application/json: + schema: + $ref: "#/components/schemas/OnlyErrors" + + security: + - AdminAPIToken: [] + + delete: + summary: Delete a Custom Credential + description: Delete a specific custom credential for a specific application. + tags: + - Applications and credentials + parameters: + - name: app_id + in: path + required: true + description: The ID of the application. + schema: + type: string + - name: credential_id + in: path + required: true + description: The ID of the custom credential. + schema: + type: string + responses: + '200': + description: Custom credential deleted successfully + content: + application/json: + schema: + $ref: '#/components/schemas/StatusWithMessage' # Updated to return StatusWithMessage + security: + - AdminAPIToken: [] + components: schemas: Product-APIDetail-index: @@ -7438,6 +7595,121 @@ components: type: integer description: Unique identifier of the product's provider example: 1 + + CustomCredential: + type: object + properties: + ID: + type: integer + description: Unique identifier for the custom credential + Alias: + type: string + description: Alias for the custom credential + Type: + type: string + enum: + - CREDENTIAL_TYPE_TYK_MANAGED + - CREDENTIAL_TYPE_CUSTOM + description: Type of the custom credential + PlanID: + type: string + description: Plan ID associated with the custom credential + AuthenticationMethod: + type: string + description: Authentication method used for the custom credential + ProductIDs: + type: array + items: + type: integer + description: List of product IDs associated with the custom credential + AuthTokenType: + type: string + enum: + - AUTH_TOKEN_CUSTOM + - AUTH_TOKEN_STANDARD + description: Type of authentication token used + KeyID: + type: string + description: Key ID for the custom credential + ProviderID: + type: integer + description: ID for OAuth2.0 provider + ClientTypeID: + type: integer + description: ID for OAuth2.0 client type + + CustomCredential-create: + type: object + properties: + Alias: + type: string + description: Alias for the custom credential + Type: + type: string + enum: + - CREDENTIAL_TYPE_TYK_MANAGED + - CREDENTIAL_TYPE_CUSTOM + description: Type of the custom credential + PlanID: + type: integer + description: Plan ID associated with the custom credential + AuthenticationMethod: + type: string + description: Authentication method used for the custom credential + ProductIDs: + type: array + items: + type: integer + description: List of product IDs associated with the custom credential + AuthTokenType: + type: string + enum: + - AUTH_TOKEN_CUSTOM + - AUTH_TOKEN_STANDARD + description: Type of authentication token used + KeyID: + type: string + description: Key ID for the custom credential + CredentialKey: + type: string + description: Key for the custom credential + CredentialSecret: + type: string + description: Secret for the custom credential + ProviderID: + type: integer + description: ID for OAuth2.0 provider + ClientTypeID: + type: integer + description: ID for OAuth2.0 client type + + CustomCredential-update: + type: object + properties: + Alias: + type: string + description: Alias for the custom credential + + CustomCredential-index: + type: array + items: + $ref: '#/components/schemas/CustomCredential' + + CustomCredential-show: + allOf: + - $ref: '#/components/schemas/CustomCredential' + - type: object + properties: + CreatedAt: + pattern: ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$ + type: string + description: Timestamp of when this webhook was created + example: 2023-06-25 13:37 + UpdatedAt: + pattern: ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$ + type: string + description: Timestamp of when this webhook was updated the last time + example: 2023-06-25 13:37 securitySchemes: AdminAPIToken: type: apiKey diff --git a/tyk-docs/assets/others/gateway-swagger.yml b/tyk-docs/assets/others/gateway-swagger.yml index 5a23adcfb4..a4a63660ff 100644 --- a/tyk-docs/assets/others/gateway-swagger.yml +++ b/tyk-docs/assets/others/gateway-swagger.yml @@ -1,4013 +1,7856 @@ -openapi: 3.0.0 +openapi: 3.0.3 info: - title: Tyk Gateway API - version: 5.5.0 - description: |- + contact: + email: support@tyk.io + name: Tyk Technologies + url: https://tyk.io/contact + description: |+ The Tyk Gateway API is the primary means for integrating your application with the Tyk API Gateway system. This API is very small, and has no granular permissions system. It is intended to be used purely for internal automation and integration. **Warning: Under no circumstances should outside parties be granted access to this API.** The Tyk Gateway API is capable of: - * Managing session objects (key generation) - * Managing and listing policies - * Managing and listing API Definitions (only when not using the Dashboard) - * Hot reloads / reloading a cluster configuration - * OAuth client creation (only when not using the Dashboard) - + * Managing session objects (key generation). + * Managing and listing policies. + * Managing and listing API Definitions (only when not using the Tyk Dashboard). + * Hot reloads / reloading a cluster configuration. + * OAuth client creation (only when not using the Tyk Dashboard). - In order to use the Gateway API, you'll need to set the `secret` parameter in your tyk.conf file. + In order to use the Gateway API, you'll need to set the **secret** parameter in your tyk.conf file. The shared secret you set should then be sent along as a header with each Gateway API Request in order for it to be successful: - ``` - x-tyk-authorization: - ``` + **x-tyk-authorization: ***
+ The Tyk Gateway API is subsumed by the Tyk Dashboard API in Pro installations. + + license: + name: Mozilla Public License Version 2.0 + url: https://github.com/TykTechnologies/tyk/blob/master/LICENSE.md + title: Tyk Gateway API + version: 5.6.0 servers: - - url: 'http://localhost/' - - url: 'https://localhost/' +- url: https://{tenant} + variables: + tenant: + default: localhost:8080 + description: Your gateway host +security: +- api_key: [] tags: - - name: Keys - description: |- - All keys that are used to access services via Tyk correspond to a session object that informs Tyk about the context of this particular token, like access rules and rate/quota allowance. - - name: Policies - description: |- - A Tyk security policy incorporates several security options that can be applied to an API key. It acts as a template that can override individual sections of an API key (or identity) in Tyk. - - name: OAuth - description: |- - Manage OAuth clients, and manage their tokens - - name: Cache Invalidation - description: |- - Sometimes a cache might contain stale data, or it may just need to be cleared because of an invalid configuration. This call will purge all keys associated with a cache on an API-by-API basis. - - name: Hot Reload - description: - Force restart of the Gateway or whole cluster - - name: Health Checking - description: Check health status of the Gateway and loaded APIs - - name: Organisation Quotas - description: |- - It is possible to force API quota and rate limit across all keys that belong to a specific organisation ID. Rate limiting at an organisation level is useful for creating tiered access levels and trial accounts. - The Organisation rate limiting middleware works with both Quotas and Rate Limiters. In order to manage this functionality, a simple API has been put in place to manage these sessions. - Although the Organisation session-limiter uses the same session object, all other security keys are optional as they are not used. - -

Managing active status

- To disallow access to an entire group of keys without rate limiting the organisation, create a session object with the "is_inactive" key set to true. This will block access before any other middleware is executed. It is useful when managing subscriptions for an organisation group and access needs to be blocked because of non-payment. - - name: Batch requests - description: |- - Tyk supports batch requests, so a client makes a single request to the API but gets a compound response object back. - - This is especially handy if clients have complex requests that have multiple synchronous dependencies and do not wish to have the entire request / response cycle running for each event. - - To enable batch request support, set the `enable_batch_request_support` value to `true` - - This is especially handy if clients have complex requests that have multiple synchronous dependencies and do not wish to have the entire request / response cycle running for each event. - - Batch requests that come into Tyk are *run through the whole Tyk machinery* and *use a relative path to prevent spamming*. This means that a batch request to Tyk for three resources with the same API key will have three requests applied to their session quota and request limiting could become active if they are being throttled. - - Tyk reconstructs the API request based on the data in the batch request. This is to ensure that Tyk is not being used to proxy requests to other hosts outside of the upstream API being accessed. - - Batch requests are created by POSTing to the `/{listen_path}/tyk/batch/` endpoint. These requests **do not require a valid key**, but their request list does. - -

Sample Request

- - ```{json} - { - "requests": [ - { - "method": "GET", - "headers": { - "x-tyk-test": "1", - "x-tyk-version": "1.2", - "authorization": "1dbc83b9c431649d7698faa9797e2900f" - }, - "body": "", - "relative_url": "get" - }, - { - "method": "GET", - "headers": { - "x-tyk-test": "2", - "x-tyk-version": "1.2", - "authorization": "1dbc83b9c431649d7698faa9797e2900f" - }, - "body": "", - "relative_url": "get" - } - ], - "suppress_parallel_execution": false - } - ``` - - The response will will be a structured reply that encapsulates the responses for each of the outbound requests. If `suppress_parallel_execution` is set to `true`, requests will be made synchronously. If set to `false` then they will run in parallel and the response order is not guaranteed. +- description: | + **Note: Applies only to Tyk Gateway Community Edition**
-

Sample Response

+ API management is very simple using the Tyk Rest API: each update only affects the underlying file, and this endpoint will only work with disk based installations, not database-backed ones.
- ``` - [ - { - "relative_url": "get", - "code": 200, - "headers": { - "Access-Control-Allow-Credentials": [ - "true" - ], - "Access-Control-Allow-Origin": [ - "*" - ], - "Content-Length": [ - "497" - ], - "Content-Type": [ - "application/json" - ], - "Date": [ - "Wed, 12 Nov 2014 15:32:43 GMT" - ], - "Server": [ - "gunicorn/18.0" - ], - "Via": [ - "1.1 vegur" - ] - }, - "body": "{ - "args": {}, - "headers": { - "Accept-Encoding": "gzip", - "Authorization": "1dbc83b9c431649d7698faa9797e2900f", - "Connect-Time": "2", - "Connection": "close", - "Host": "httpbin.org", - "Total-Route-Time": "0", - "User-Agent": "Go 1.1 package http", - "Via": "1.1 vegur", - "X-Request-Id": "6a22499a-2776-4aa1-80c0-686581a8be4d", - "X-Tyk-Test": "2", - "X-Tyk-Version": "1.2" - }, - "origin": "127.0.0.1, 62.232.114.250", - "url": "http://httpbin.org/get" - }" - }, - { - "relative_url": "get", - "code": 200, - "headers": { - "Access-Control-Allow-Credentials": [ - "true" - ], - "Access-Control-Allow-Origin": [ - "*" - ], - "Content-Length": [ - "497" - ], - "Content-Type": [ - "application/json" - ], - "Date": [ - "Wed, 12 Nov 2014 15:32:43 GMT" - ], - "Server": [ - "gunicorn/18.0" - ], - "Via": [ - "1.1 vegur" - ] - }, - "body": "{ - "args": {}, - "headers": { - "Accept-Encoding": "gzip", - "Authorization": "1dbc83b9c431649d7698faa9797e2900f", - "Connect-Time": "7", - "Connection": "close", - "Host": "httpbin.org", - "Total-Route-Time": "0", - "User-Agent": "Go 1.1 package http", - "Via": "1.1 vegur", - "X-Request-Id": "1ab61f50-51ff-4828-a7e2-17240385a6d2", - "X-Tyk-Test": "1", - "X-Tyk-Version": "1.2" - }, - "origin": "127.0.0.1, 62.232.114.250", - "url": "http://httpbin.org/get" - }" - } - ] - ``` - With the body for each request string encoded in the `body` field. + APIs that are added this way are flushed to to disk into the app_path folder using the format: *{api-id}.json*. Updating existing APIs that use a different naming convention will cause those APIs to be added, which could subsequently lead to a loading error and crash if they use the same listen_path.
- * `expire_analytics_after`: If you are running a busy API, you may want to ensure that your MongoDB database does not overflow with old data. Set the `expire_analytics_after` value to the number of seconds you would like the data to last for. Setting this flag to anything above `0` will set an `expireAt` field for each record that is written to the database. + These methods only work on a single API node. If updating a cluster, it is important to ensure that all nodes are updated before initiating a reload.
+ name: APIs +- description: |+ + **Note: Applies only to Tyk Gateway Community Edition**
- **Important:** Tyk will not create the expiry index for you. In order to implement data expiry for your analytics data, ensure that the index is created This is easily achieved using the [MongoDB command line interface](https://docs.mongodb.com/getting-started/shell/client/). + name: Tyk OAS APIs +- description: | + All keys that are used to access services via Tyk correspond to a session object that informs Tyk about the context of this particular token, like access rules and rate/quota allowance. + name: Keys +- description: | + It is possible to force API quota and rate limit across all keys that belong to a specific organisation ID. Rate limiting at an organisation level is useful for creating tiered access levels and trial accounts.
- * `dont_set_quota_on_create`: This setting defaults to `false`, but if set to `true`, when the API is used to edit, create or add keys, the quota cache in Redis will not be re-set. By default, all updates or creates to Keys that have Quotas set will re-set the quota (This has been the default behaviour since 1.0). + The Organisation rate limiting middleware works with both Quotas and Rate Limiters. In order to manage this functionality, a simple API has been put in place to manage these sessions.
- This behaviour can be bypassed on a case-by-case basis by using the `suppress_reset` parameter when making a REST API request. This is the advised mode of operation as it allows for manual, granular control over key quotas and reset timings. + Although the Organisation session-limiter uses the same session object, all other security keys are optional as they are not used.
- * `cache_options`: This section enables you to configure the caching behaviour of Tyk and to enable or disable the caching middleware for your API. +

Managing active status


- * `cache_options.enable_cache`: Set this value to `true` if the cache should be enabled for this endpoint, setting it to false will stop all caching behaviour. - - * `cache_options.cache_timeout`: The amount of time, in seconds, to keep cached objects, defaults to `60` seconds. - - * `cache_options.cache_all_safe_requests`: Set this to `true` if you want all *safe* requests (GET, HEAD, OPTIONS) to be cached. This is a blanket setting for APIs where caching is required but you don't want to set individual paths up in the definition. - - * `cache_options.enable_upstream_cache_control`: Set this to `true` if you want your application to control the cache options for Tyk (TTL and whether to cache or not). See [Caching](/docs/basic-config-and-security/reduce-latency/caching/) for more details. - - * `response_processors`: Response processors need to be specifically defined so they are loaded on API creation, otherwise the middleware will not fire. In order to have the two main response middleware components fire, the following configuration object should be supplied. - - ```{json} - "response_processors": [ - { - "name": "header_injector", - "options": { - "add_headers": {"name": "value"}, - "remove_headers": ["name"] - } - }, - { - "name": "response_body_transform", - "options": {} - } - ] - ``` - The options for the `header_injector` are global, and will apply to all outbound requests. - - - - name: APIs - description: |- - **Note: Applies only to Tyk Gateway Community Edition** - - API Management is very simple using the Tyk REST API: each update only affects the underlying file, and this endpoint will only work with disk based installations, not Database-backed ones. - - APIs that are added this way are flushed to to disk into the app_path folder using the format: `{api-id}.json`. Updating existing APIs that use a different naming convention will cause those APIs to be added, which could subsequently lead to a loading error and crash if they use the same listen_path. - - These methods only work on a single API node. If updating a cluster, it is important to ensure that all nodes are updated before initiating a reload. + To disallow access to an entire group of keys without rate limiting the organisation, create a session object with the "is_inactive" key set to true. This will block access before any other middleware is executed. It is useful when managing subscriptions for an organisation group and access needs to be blocked because of non-payment.
+ name: Organisation Quotas +- description: | + Sometimes a cache might contain stale data, or it may just need to be cleared because of an invalid configuration. This call will purge all keys associated with a cache on an API-by-API basis. + name: Cache Invalidation +- description: Use the endpoints under this tag to manage your certificates. You can + add, delete and list certificates using these endpoints. + name: Certs +- description: | + Force restart of the Gateway or whole cluster. + name: Hot Reload +- description: | + Check health status of the Tyk Gateway and loaded APIs. + name: Health Checking +- description: | + A Tyk security policy incorporates several security options that can be applied to an API key. It acts as a template that can override individual sections of an API key (or identity) in Tyk. + name: Policies +- description: | + Manage OAuth clients, and manage their tokens + name: OAuth paths: - '/tyk/apis': + /hello: get: - description: |- - List APIs - Only if used without the Tyk Dashboard + description: From v2.7.5 you can now rename the `/hello` endpoint by using + the `health_check_endpoint_name` option. + operationId: hello + responses: + "200": + content: + application/json: + example: + description: Tyk GW + details: + redis: + componentType: datastore + status: pass + time: "2020-05-19T03:42:55+01:00" + status: pass + version: v5.5.0-dev + schema: + $ref: '#/components/schemas/HealthCheckResponse' + description: Success. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "405": + content: + application/json: + example: + message: Method Not Allowed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Method Not Allowed + summary: Check the health of the Tyk Gateway. tags: - - APIs + - Health Checking + /tyk/apis: + get: + description: List APIs from Tyk Gateway operationId: listApis responses: - '200': - description: List of API definitions + "200": content: application/json: + example: + - api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Tyk Test API + org_id: 664a14650619d40001f1f00f + proxy: + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default schema: - type: array items: $ref: '#/components/schemas/APIDefinition' + type: array + description: List of API definitions. + "403": + content: + application/json: example: - - name: "TestAPI" - use_keyless: true - active: true - proxy: - listen_path: "/test" - post: - description: |- - Create API - A single Tyk node can have its API Definitions queried, deleted and updated remotely. This functionality enables you to remotely update your Tyk definitions without having to manage the files manually. + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: Get list of apis tags: - - APIs + - APIs + post: + description: Create API. A single Tyk node can have its API Definitions queried, + deleted and updated remotely. This functionality enables you to remotely update + your Tyk definitions without having to manage the files manually. operationId: createApi parameters: - - name: base_api_id - in: query - required: false - schema: - type: string - description: The base API which the new version will be linked to. - - name: base_api_version_name - in: query - required: false - schema: - type: string - description: The version name of the base API while creating the first version. This doesn't have to be sent for the next versions but if it is set, it will override base API version name. - - name: new_version_name - in: query - required: false - schema: - type: string - description: The version name of the created version. - - name: set_default - in: query - required: false - schema: - type: boolean - description: If true, the new version is set as default version. + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: + type: string + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: + type: string + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: + type: string + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean requestBody: content: application/json: - schema: - $ref: "#/components/schemas/APIDefinition" example: - name: "TestAPI" - use_keyless: true - active: true + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Tyk Test API + org_id: 664a14650619d40001f1f00f proxy: - listen_path: "/test" + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default + schema: + $ref: '#/components/schemas/APIDefinition' responses: - '200': - description: API created + "200": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "created" - key: "{...API JSON definition...}" - '400': - description: Malformed data + action: added + key: b84fe1a04e5648927971c0557971565c + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API created. + "400": content: application/json: + example: + message: Request malformed + status: error schema: - $ref: "#/components/schemas/apiStatusMessage" + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: example: - status: "error" - message: "Malformed API data" - /tyk/apis/oas: - get: - description: |- - List all OAS format APIs, when used without the Tyk Dashboard. - tags: - - OAS APIs - operationId: listApisOAS - parameters: - - description: |- - Mode of OAS get, by default mode could be empty which means to get OAS spec including OAS Tyk extension. - When mode=public, OAS spec excluding Tyk extension will be returned in the response - name: mode - in: query - schema: - type: string - example: public - responses: - '200': - description: List of API definitions in OAS format + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": content: application/json: + example: + message: file object creation failed, write error + status: error schema: - type: array - items: - $ref: '#/components/schemas/OASSchemaResponse' - post: - description: |- - Create API with OAS format - A single Tyk node can have its API Definitions queried, deleted and updated remotely. This functionality enables you to remotely update your Tyk definitions without having to manage the files manually. + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Creat an API tags: - - OAS APIs - operationId: createApiOAS + - APIs + /tyk/apis/{apiID}: + delete: + description: Deleting an API definition will remove the file from the file store, + the API definition will NOT be unloaded, a separate reload request will need + to be made to disable the API endpoint. + operationId: deleteApi parameters: - - name: base_api_id - in: query - required: false - schema: - type: string - description: The base API which the new version will be linked to. - - name: base_api_version_name - in: query - required: false - schema: - type: string - description: The version name of the base API while creating the first version. This doesn't have to be sent for the next versions but if it is set, it will override base API version name. - - name: new_version_name - in: query - required: false - schema: - type: string - description: The version name of the created version. - - name: set_default - in: query - required: false - schema: - type: boolean - description: If true, the new version is set as default version. - requestBody: - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" + - description: The API ID. + example: 1bd5c61b0e694082902cf15ddcc9e6a7 + in: path + name: apiID + required: true + schema: + type: string responses: - '200': - description: API created + "200": content: application/json: + example: + action: deleted + key: 1bd5c61b0e694082902cf15ddcc9e6a7 + status: ok schema: - $ref: "#/components/schemas/apiModifyKeySuccess" + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API deleted. + "403": + content: + application/json: example: - status: "ok" - action: "created" - key: "{...API JSON definition...}" - '400': - description: Malformed data + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: + example: + message: API not found + status: error schema: - $ref: "#/components/schemas/apiStatusMessage" + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + "500": + content: + application/json: example: - status: "error" - message: "Malformed API data" - - '/tyk/apis/{apiID}': - parameters: - - description: The API ID - name: apiID + message: Delete failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Deleting an API definition with ID. + tags: + - APIs + get: + description: Get API definition from Tyk Gateway. + operationId: getApi + parameters: + - description: The API ID. + example: keyless in: path + name: apiID required: true schema: type: string - get: - description: |- - Get API definition - Only if used without the Tyk Dashboard - tags: - - APIs - operationId: getApi responses: - '200': - description: API definition + "200": content: application/json: - schema: - $ref: "#/components/schemas/APIDefinition" example: - name: "TestAPI" - use_keyless: true - active: true + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Tyk Test API + org_id: 664a14650619d40001f1f00f proxy: - listen_path: "/test" + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default + schema: + $ref: '#/components/schemas/APIDefinition' + description: API definition. headers: x-tyk-base-api-id: + description: ID of the base API if the requested API is a version. schema: type: string - description: ID of the base API if the requested API is a version. + style: simple + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: API not found. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + summary: Get API definition with it's ID. + tags: + - APIs put: - description: | - Updating an API definition uses the same signature an object as a `POST`, however it will first ensure that the API ID that is being updated is the same as the one in the object being `PUT`. - + description: |- + Updating an API definition uses the same signature and object as a `POST`, however it will first ensure that the API ID that is being updated is the same as the one in the object being `PUT`. Updating will completely replace the file descriptor and will not change an API Definition that has already been loaded, the hot-reload endpoint will need to be called to push the new definition to live. - tags: - - APIs operationId: updateApi + parameters: + - description: The API ID. + example: 1bd5c61b0e694082902cf15ddcc9e6a7 + in: path + name: apiID + required: true + schema: + type: string requestBody: content: application/json: - schema: - $ref: "#/components/schemas/APIDefinition" example: - name: "TestAPI" - use_keyless: true - active: true + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Update the API name sample + org_id: 664a14650619d40001f1f00f proxy: - listen_path: "/test" + listen_path: /update-listen-path + strip_listen_path: true + target_url: https://tyk.io/api + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default + schema: + $ref: '#/components/schemas/APIDefinition' responses: - '200': - description: API updated + "200": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "updated" - key: "{...API JSON definition...}" - '400': - description: Malformed data + action: modified + key: 1bd5c61b0e694082902cf15ddcc9e6a7 + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API updated. + "400": content: application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" example: - status: "error" - message: "Malformed API data" - - delete: - description: |- - Deleting an API definition will remove the file from the file store, the API definition will NOT be unloaded, a separate reload request will need to be made to disable the API endpoint. - tags: - - APIs - operationId: deleteApi - responses: - '200': - description: API deleted + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: API deleted - status: ok - '400': - description: No API ID specified + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: + example: + message: API not found + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + "500": + content: + application/json: example: - message: API ID not specified + message: File object creation failed, write error. status: error - + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Updating an API definition with its ID. + tags: + - APIs /tyk/apis/{apiID}/versions: - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string get: - description: |- - Listing versions of an OAS API - tags: - - APIs + description: Listing versions of an API. operationId: listApiVersions parameters: - - $ref: '#/components/parameters/SearchText' - - $ref: '#/components/parameters/AccessType' - responses: - '200': - description: API version metas - content: - application/json: - schema: - properties: - apis: - type: array - items: - $ref: '#/components/schemas/APIVersionMeta' - - '/tyk/apis/oas/{apiID}': - parameters: - - description: The API ID - name: apiID + - description: The API ID. + example: keyless in: path + name: apiID required: true schema: type: string - get: - description: |- - Get API definition in OAS format - Only if used without the Tyk Dashboard - tags: - - OAS APIs - parameters: - - description: |- - Mode of OAS get, by default mode could be empty which means to get OAS spec including OAS Tyk extension. - When mode=public, OAS spec excluding Tyk extension will be returned in the response - name: mode - in: query - schema: - type: string - example: public - operationId: listApiOAS + - $ref: '#/components/parameters/SearchText' + - $ref: '#/components/parameters/AccessType' responses: - '200': - description: API definition + "200": content: application/json: + example: + apis: + - expirationDate: "" + id: keyless + internal: false + isDefaultVersion: false + name: Tyk Test Keyless API + versionName: "" + - expirationDate: "" + id: 1f20d5d2731d47ac9c79fddf826eda00 + internal: false + isDefaultVersion: true + name: Version three Api + versionName: v2 + status: success schema: - $ref: "#/components/schemas/OASSchemaResponse" - headers: - x-tyk-base-api-id: - schema: - type: string - description: ID of the base API if the requested API is a version. - put: - description: | - Updating an API definition uses the same signature an object as a `POST`, however it will first ensure that the API ID that is being updated is the same as the one in the object being `PUT`. - - - Updating will completely replace the file descriptor and will not change an API Definition that has already been loaded, the hot-reload endpoint will need to be called to push the new definition to live. - tags: - - OAS APIs - operationId: updateApiOAS - requestBody: - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - responses: - '200': - description: API updated + $ref: '#/components/schemas/VersionMetas' + description: API version metas. + "403": content: application/json: - schema: - $ref: "#/components/schemas/apiModifyKeySuccess" example: - status: "ok" - action: "updated" - key: "{...API JSON definition...}" - '400': - description: Malformed data + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" example: - status: "error" - message: "Malformed API data" - patch: - summary: Patch a single OAS API by ID - description: |- - Update API with OAS format. You can use this endpoint to update OAS part of the tyk API definition. - This endpoint allows you to configure tyk OAS extension based on query params provided(similar to import) + message: API not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + summary: Listing versions of an API. tags: - - OAS APIs - operationId: patchApiOAS + - APIs + /tyk/apis/oas: + get: + description: List all APIs in Tyk OAS API format, from Tyk Gateway. + operationId: listApisOAS parameters: - - $ref: '#/components/parameters/UpstreamURL' - - $ref: '#/components/parameters/ListenPath' - - $ref: '#/components/parameters/CustomDomain' - - $ref: '#/components/parameters/ValidateRequest' - - $ref: '#/components/parameters/AllowList' - - $ref: '#/components/parameters/MockResponse' - - $ref: '#/components/parameters/Authentication' - requestBody: - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" + - description: "By default mode is empty which means it will return the Tyk + API OAS spec including the x-tyk-api-gateway part. \n When mode=public, + the Tyk OAS API spec will exclude the x-tyk-api-gateway part in the response." + example: public + in: query + name: mode + required: false + schema: + enum: + - public + type: string responses: - '200': - description: API patched + "200": content: application/json: + examples: + oasExampleList: + $ref: '#/components/examples/oasExampleList' schema: - $ref: "#/components/schemas/apiModifyKeySuccess" - example: - status: "ok" - action: "modified" - key: "{updated APIID}" - '400': - description: Bad request + items: + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykAPIGateway' + type: array + description: List of API definitions in Tyk OAS format. + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: "#/components/schemas/apiStatusMessage" - examples: - malformedBody: - summary: When the request body is malformed - value: - message: "Request malformed" - status: "error" - missingAPIID: - summary: When the request is missing APIID in query Param - value: - message: "Must specify an apiID to patch" - status: "error" - nonExistingAPIID: - summary: When the client sends and APIID which doesn't exists in tyk gw - value: - message: "No API found for APIID {APIID}" - status: "error" - invalidUpstreamURL: - summary: When the client sends query param upstreamURL which isn't valid - value: - message: "invalid upstream URL" - status: "error" - 500: - description: When patch request is send while using dashboard app configs - content: - application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - summary: dashboard app configs is used for tyk api definitions - value: - message: "Due to enabled use_db_app_configs, please use the Dashboard API" - status: "error" - delete: - description: |- - Deleting an API definition will remove the file from the file store, the API definition will NOT be unloaded, a separate reload request will need to be made to disable the API endpoint. + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: List all APIs in Tyk OAS API format. tags: - - OAS APIs - operationId: deleteOASApi + - Tyk OAS APIs + post: + description: Create an API with Tyk OAS API format on the Tyk Gateway. + operationId: createApiOAS + parameters: + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: + type: string + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: + type: string + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: + type: string + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean + requestBody: + content: + application/json: + example: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsers + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + schema: + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykAPIGateway' responses: - '200': - description: API deleted + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: API deleted + action: added + key: e30bee13ad4248c3b529a4c58bb7be4e status: ok - '400': - description: No API ID specified + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API created. + "400": content: application/json: + example: + message: the payload should contain x-tyk-api-gateway + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: example: - message: API ID not specified + message: Attempted administrative access with invalid or missing key! status: error - - /tyk/apis/oas/{apiID}/versions: - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string - get: - description: |- - Listing versions of an OAS API - tags: - - OASAPIs - operationId: listOASApiVersions - parameters: - - $ref: '#/components/parameters/SearchText' - - $ref: '#/components/parameters/AccessType' - responses: - '200': - description: API version metas + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": content: application/json: + example: + message: file object creation failed, write error + status: error schema: - properties: - apis: - type: array - items: - $ref: '#/components/schemas/APIVersionMeta' - - - '/tyk/apis/oas/{apiID}/export': - parameters: - - description: The API ID - name: apiID + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Create an API with Tyk OAS format. + tags: + - Tyk OAS APIs + /tyk/apis/oas/{apiID}: + delete: + description: Deleting an API definition will remove the file from the file store, + the API definition will not be unloaded, a separate reload request will need + to be made to disable the API endpoint. + operationId: deleteOASApi + parameters: + - description: The API ID. + example: 1bd5c61b0e694082902cf15ddcc9e6a7 in: path + name: apiID required: true schema: type: string - get: - description: |- - Download all OAS format APIs, when used without the Tyk Dashboard. - tags: - - OAS APIs - operationId: downloadApiOASPublic - parameters: - - description: |- - Mode of OAS export, by default mode could be empty which means to export OAS spec including OAS Tyk extension. - When mode=public, OAS spec excluding Tyk extension is exported - name: mode - in: query - schema: - type: string - example: public responses: - '200': - description: API definition + "200": content: application/json: + example: + action: deleted + key: 1bd5c61b0e694082902cf15ddcc9e6a7 + status: ok schema: - $ref: "#/components/schemas/OASSchemaResponse" - /tyk/apis/oas/export: - get: - description: |- - Download all OAS format APIs, when used without the Tyk Dashboard. - tags: - - OAS APIs - operationId: downloadApisOASPublic - parameters: - - description: |- - The mode of OAS export. By default the mode is not set which means the OAS spec is exported including the OAS Tyk extension. - If the mode is set to public, the OAS spec excluding the Tyk extension is exported. - name: mode - in: query - schema: - type: string - example: public - responses: - '200': - description: API definition + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API deleted + "400": content: application/json: + example: + message: Must specify an apiID to delete + status: error schema: - type: array - items: - $ref: '#/components/schemas/OASSchemaResponse' - /tyk/apis/oas/import: - post: - description: |- - Create a new OAS format API, without x-tyk-gateway. - For use with an existing OAS API that you want to expose via your Tyk Gateway. (New) - tags: - - OAS APIs - operationId: importOAS - parameters: - - $ref: '#/components/parameters/UpstreamURL' - - $ref: '#/components/parameters/ListenPath' - - $ref: '#/components/parameters/CustomDomain' - - $ref: '#/components/parameters/ApiID' - - $ref: '#/components/parameters/AllowList' - - $ref: '#/components/parameters/MockResponse' - - $ref: '#/components/parameters/ValidateRequest' - - $ref: '#/components/parameters/Authentication' - requestBody: - content: - application/json: - schema: - $ref: "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json" - responses: - '200': - description: API definition created + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: "#/components/schemas/apiModifyKeySuccess" + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: example: - status: "ok" - action: "added" - key: "{created APIID}" - '400': - description: Bad request + message: API not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + "500": content: application/json: + example: + message: Delete failed + status: error schema: - $ref: "#/components/schemas/apiStatusMessage" - examples: - malformedBody: - summary: When the request body is malformed - value: - message: "Request malformed" - status: "error" - invalidUpstreamURL: - summary: When the client sends a query param upstreamURL which isn't valid - value: - message: "invalid upstream URL" - status: "error" - 500: - description: When an import request is sent using your Tyk Dashboard app configs - content: - application/json: - schema: - $ref: "#/components/schemas/apiStatusMessage" - example: - summary: Tyk Dashboard app configs are being used for Tyk API definitions - value: - message: "Due to enabled use_db_app_configs, please use the Dashboard API" - status: "error" - '/tyk/cache/{apiID}': - parameters: - - description: The API ID - name: apiID + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Deleting a Tyk OAS API. + tags: + - Tyk OAS APIs + get: + description: Get Tyk OAS API definition using an API ID. + operationId: getOASApi + parameters: + - description: "By default mode is empty which means it will return the Tyk + API OAS spec including the x-tyk-api-gateway part. \n When mode=public, + the Tyk OAS API spec will exclude the x-tyk-api-gateway part in the response." + example: public + in: query + name: mode + required: false + schema: + enum: + - public + type: string + - description: ID of the API you want to fetch + example: 4c1c0d8fc885401053ddac4e39ef676b in: path + name: apiID required: true schema: type: string - delete: - summary: Invalidate cache - description: Invalidate cache for the given API - tags: - - Cache Invalidation - operationId: invalidateCache responses: - '200': - description: Invalidate cache + "200": content: application/json: + examples: + oasExample: + $ref: '#/components/examples/oasExample' schema: - $ref: '#/components/schemas/apiStatusMessage' - example: - message: cache invalidated - status: ok - '/tyk/reload/': - get: - summary: Hot-reload a single node - description: Tyk is capable of reloading configurations without having to stop serving requests. This means that API configurations can be added at runtime, or even modified at runtime and those rules applied immediately without any downtime. - parameters: - - description: Block a response until the reload is performed. This can be useful in scripting environments like CI/CD workflows. - name: block - in: query - required: false - schema: - type: boolean - enum: [true] - tags: - - Hot Reload - operationId: hotReload - responses: - '200': - description: Reload gateway + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykAPIGateway' + description: OK + headers: + x-tyk-base-api-id: + description: ID of the base API if the requested API is a version. + schema: + type: string + style: simple + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - status: ok - '/tyk/reload/group': - get: - summary: Hot-reload a Tyk group - description: To reload a whole group of Tyk nodes (without using the Dashboard or host manager). You can send an API request to a single node, this node will then send a notification through the pub/sub infrastructure to all other listening nodes (including the host manager if it is being used to manage NginX) which will then trigger a global reload. - tags: - - Hot Reload - operationId: hotReloadGroup - responses: - '200': - description: Reload the Tyk Gateway + message: the requested API definition is in Tyk classic format, please + use old API endpoint + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - status: ok - '/tyk/hello': - get: - summary: Check the Health of the Tyk Gateway - description: | - From v2.7.5 you can now rename the `/hello` endpoint by using the `health_check_endpoint_name` option - - Returns 200 response in case of success - tags: - - Health Checking - operationId: hello - responses: - '200': - description: Success - content: - text/html: + message: Attempted administrative access with invalid or missing key! + status: error schema: - type: string - example: "Hello Tiki" - '/tyk/certs': - get: - parameters: - - description: Organisation ID to list the certificates - in: query - name: org_id - required: true - schema: - type: string - - description: Mode to list the certificate details - name: mode - in: query - required: false - schema: - type: string - example: 'detailed' - - description: Comma separated list of certificates to list - name: certID - in: query - required: false - schema: - type: string - example: 'e6ce2b49-3e31-44de-95a7-12f054724283,234a37ac-28d1-4f12-b936-ffb4211b79f1' - summary: List Certificates - description: List All Certificates in the Tyk Gateway - tags: - - Certs - operationId: listCerts - responses: - '200': - description: List of all Certificates + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: + example: + message: API not found + status: error schema: - oneOf: - - $ref: '#/components/schemas/APIAllCertificates' - - $ref: '#/components/schemas/APIAllCertificateBasics' - - type: array - items: - $ref: '#/components/schemas/CertificateMeta' - post: - summary: Add a certificate - description: Add a certificate to the Tyk Gateway + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + summary: Get a Tyk OAS API definition. tags: - - Certs - operationId: addCert + - Tyk OAS APIs + patch: + description: |- + You can use this endpoint to update Tyk OAS part of the Tyk API definition. + This endpoint allows you to configure Tyk OAS extension based on query params provided(similar to import). + operationId: patchApiOAS parameters: - - description: Organisation ID to list the certificates - in: query - name: org_id - required: true - schema: - type: string + - description: ID of the API you want to fetch. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiID + required: true + schema: + type: string + - $ref: '#/components/parameters/UpstreamURL' + - $ref: '#/components/parameters/ListenPath' + - $ref: '#/components/parameters/CustomDomain' + - $ref: '#/components/parameters/AllowList' + - $ref: '#/components/parameters/ValidateRequest' + - $ref: '#/components/parameters/MockResponse' + - $ref: '#/components/parameters/Authentication' requestBody: content: - text/plain: + application/json: + example: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsers + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 schema: - type: string + $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json responses: - '200': - description: New Key added + "200": content: application/json: schema: - $ref: '#/components/schemas/APICertificateStatusMessage' - example: - id: 'e6ce2b49-3e31-44de-95a7-12f054724283' - message: 'Certificate added' - status: ok - '403': - description: Malformed data + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API patched. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Malformed cert data + message: Must specify an apiID to patch status: error - delete: - parameters: - - description: Certifiicate ID to be deleted - in: query - name: certID - required: true - schema: - type: string - - description: Organisation ID to list the certificates - in: query - name: org_id - required: true - schema: - type: string - summary: Delete Certificate - description: Delete certificate by id - tags: - - Certs - operationId: deleteCerts - responses: - '200': - description: Deleted certificate + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: example: - message: removed - status: ok - - '/tyk/keys': - get: - summary: List Keys - description: You can retrieve all the keys in your Tyk instance. Returns an array of Key IDs. - tags: - - Keys - operationId: listKeys - responses: - '200': - description: List of all API keys + message: API not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found. + "500": content: application/json: + example: + message: file object creation failed, write error + status: error schema: - $ref: "#/components/schemas/apiAllKeys" - post: - summary: Create a key - description: |- - Tyk will generate the access token based on the OrgID specified in the API Definition and a random UUID. This ensures that keys can be "owned" by different API Owners should segmentation be needed at an organisational level. -

- API keys without access_rights data will be written to all APIs on the system (this also means that they will be created across all SessionHandlers and StorageHandlers, it is recommended to always embed access_rights data in a key to ensure that only targeted APIs and their back-ends are written to. + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Patch API in Tyk OAS format. tags: - - Keys - operationId: addKey + - Tyk OAS APIs + put: + description: |- + Updating an API definition uses the same signature an object as a `POST`, however it will first ensure that the API ID that is being updated is the same as the one in the object being `PUT`. + + + Updating will completely replace the file descriptor and will not change an API Definition that has already been loaded, the hot-reload endpoint will need to be called to push the new definition to live. + operationId: updateApiOAS + parameters: + - description: ID of the API you want to fetch + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiID + required: true + schema: + type: string requestBody: content: application/json: - schema: - $ref: "#/components/schemas/SessionState" example: - quota_max: 60 - quota_renews: 1406121006 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsers + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + schema: + allOf: + - $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json + - $ref: '#/components/schemas/XTykAPIGateway' responses: - '200': - description: New Key added + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: created - key: '{...KEY JSON definition...}' + action: modified + key: e30bee13ad4248c3b529a4c58bb7be4e status: ok - '400': - description: Malformed data + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API updated + "400": content: application/json: + example: + message: Request APIID does not match that in Definition! For Update + operations these must match. + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: example: - message: Malformed Key data + message: Attempted administrative access with invalid or missing key! status: error - '/tyk/keys/{keyID}': - parameters: - - description: The Key ID - name: keyID - in: path - required: true - schema: - type: string - - description: Use the hash of the key as input instead of the full key - name: hashed - in: query - required: false - schema: - type: boolean - get: - summary: Get a Key - description: Get session info about the specified key. Should return up to date rate limit and quota usage numbers. - tags: - - Keys - operationId: getKey - responses: - '200': - description: Key object + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: + example: + message: API not found + status: error schema: - $ref: '#/components/schemas/SessionState' + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found + "500": + content: + application/json: example: - quota_max: 60 - quota_renews: 1406121006 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 - put: - summary: Update Key - description: |- - You can also manually add keys to Tyk using your own key-generation algorithm. It is recommended if using this approach to ensure that the OrgID being used in the API Definition and the key data is blank so that Tyk does not try to prepend or manage the key in any way. + message: file object creation failed, write error + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Update a Tyk OAS API definition. tags: - - Keys - operationId: updateKey - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SessionState" - example: - quota_max: 60 - quota_renews: 1406121006 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 + - Tyk OAS APIs + /tyk/apis/oas/{apiID}/export: + get: + description: Use the mode query parameter to specify if you want the x-tyk-api-gateway + stripped out. + operationId: downloadApiOASPublic parameters: - - description: |- - Adding the suppress_reset parameter and setting it to 1, will cause Tyk not to reset the quota limit that is in the current live quota manager. By default Tyk will reset the quota in the live quota manager (initialising it) when adding a key. Adding the `suppress_reset` flag to the URL parameters will avoid this behaviour. - name: suppress_reset - in: query - required: false - schema: - type: string - enum: ["1"] + - description: ID of the API you want to fetch. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiID + required: true + schema: + type: string + - description: "By default mode is empty which means it will return the Tyk + API OAS spec including the x-tyk-api-gateway part. \n When mode=public, + the Tyk OAS API spec will exclude the x-tyk-api-gateway part in the response." + example: public + in: query + name: mode + required: false + schema: + enum: + - public + type: string responses: - '200': - description: Key updated + "200": + content: + application/octet-stream: + schema: + format: binary + type: string + description: Exported API definition file + "400": content: application/json: + example: + message: requesting API definition that is in Tyk classic format + status: error schema: - $ref: '#/components/schemas/apiModifyKeySuccess' + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: example: - action: updated - status: ok - '400': - description: No or incorrect Key ID specified + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: + example: + message: API not found + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + "500": + content: + application/json: example: - message: Key ID not specified + message: Unexpected error status: error - post: - summary: Create Custom Key / Import Key - description: |- - You can use the `POST /tyk/keys/{KEY_ID}` endpoint as defined below to import existing keys into Tyk. - - This example uses standard `authorization` header authentication, and assumes that the Gateway is located at `127.0.0.1:8080` and the Tyk secret is `352d20ee67be67f6340b4c0605b044b7` - update these as necessary to match your environment. - - To import a key called `mycustomkey`, save the JSON contents as `token.json` (see example below), then run the following Curl command. - - ``` - curl http://127.0.0.1:8080/tyk/keys/mycustomkey -H 'x-tyk-authorization: 352d20ee67be67f6340b4c0605b044b7' -H 'Content-Type: application/json' -d @token.json - ``` - - The following request will fail as the key doesn't exist. - - ``` - curl http://127.0.0.1:8080/quickstart/headers -H 'Authorization. invalid123' - ``` - - But this request will now work, using the imported key. - - ``` - curl http://127.0.0.1:8080/quickstart/headers -H 'Authorization: mycustomkey' - ``` - -

Example token.json file

- - ``` - { - "allowance": 1000, - "rate": 1000, - "per": 60, - "expires": -1, - "quota_max": -1, - "quota_renews": 1406121006, - "quota_remaining": 0, - "quota_renewal_rate": 60, - "access_rights": { - "3": { - "api_name": "Tyk Test API", - "api_id": "3" - } - }, - "org_id": "53ac07777cbb8c2d53000002", - "basic_auth_data": { - "password": "", - "hash_type": "" - }, - "hmac_enabled": false, - "hmac_string": "", - "is_inactive": false, - "apply_policy_id": "", - "apply_policies": [ - "59672779fa4387000129507d", - "53222349fa4387004324324e", - "543534s9fa4387004324324d" - ], - "monitor": { - "trigger_limits": [] - } - } - ``` + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Download a Tyk OAS format API. tags: - - Keys - operationId: createCustomKey - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SessionState" - example: - quota_max: 60 - quota_renews: 1406121006 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 + - Tyk OAS APIs + /tyk/apis/oas/{apiID}/versions: + get: + description: Listing versions of a Tyk OAS API. + operationId: listOASApiVersions parameters: - - description: |- - Adding the suppress_reset parameter and setting it to 1, will cause Tyk not to reset the quota limit that is in the current live quota manager. By default Tyk will reset the quota in the live quota manager (initialising it) when adding a key. Adding the `suppress_reset` flag to the URL parameters will avoid this behaviour. - name: suppress_reset - in: query - required: false - schema: - type: string - enum: ["1"] + - description: ID of the API you want to fetch. + example: 4c1c0d8fc885401053ddac4e39ef676b + in: path + name: apiID + required: true + schema: + type: string + - $ref: '#/components/parameters/SearchText' + - $ref: '#/components/parameters/AccessType' responses: - '200': - description: Key updated + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: updated - status: ok - '400': - description: No or incorrect Key ID specified + apis: + - expirationDate: "" + id: keyless + internal: false + isDefaultVersion: false + name: Tyk Test Keyless API + versionName: "" + - expirationDate: "" + id: 1f20d5d2731d47ac9c79fddf826eda00 + internal: false + isDefaultVersion: true + name: Version three Api + versionName: v2 + status: success + schema: + $ref: '#/components/schemas/VersionMetas' + description: API version metas. + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: example: - message: Key ID not specified + message: API not found. status: error - delete: - summary: Delete Key - description: Deleting a key will remove it permanently from the system, however analytics relating to that key will still be available. + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: API not found + summary: Listing versions of a Tyk OAS API. tags: - - Keys - operationId: deleteKey + - Tyk OAS APIs + /tyk/apis/oas/export: + get: + description: Download all Tyk OAS format APIs, from the Gateway. + operationId: downloadApisOASPublic + parameters: + - description: "By default mode is empty which means it will return the Tyk + API OAS spec including the x-tyk-api-gateway part. \n When mode=public, + the Tyk OAS API spec will exclude the x-tyk-api-gateway part in the response." + example: public + in: query + name: mode + required: false + schema: + enum: + - public + type: string responses: - '200': - description: Key deleted + "200": content: - application/json: + application/octet-stream: schema: - $ref: '#/components/schemas/apiStatusMessage' + format: binary + type: string + description: Get a list of Tyk OAS APIs definitions. + "403": + content: + application/json: example: - action: Key deleted - status: ok - '/tyk/policies': - get: - summary: List Policies - description: You can retrieve all the policies in your Tyk instance. Returns an array policies. - tags: - - Policies - operationId: listPolicies - responses: - '200': - description: List of all policies + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": content: application/json: + example: + message: Unexpected error + status: error schema: - type: array - items: - $ref: "#/components/schemas/Policy" - post: - summary: Create a Policy - description: You can create a Policy in your Tyk Instance + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Download all Tyk OAS format APIs. tags: - - Policies - operationId: addPolicy + - Tyk OAS APIs + /tyk/apis/oas/import: + post: + description: |- + Import an Tyk OAS format API without x-tyk-gateway. + For use with an existing Tyk OAS API that you want to expose via your Tyk Gateway. + operationId: importOAS + parameters: + - $ref: '#/components/parameters/UpstreamURL' + - $ref: '#/components/parameters/ListenPath' + - $ref: '#/components/parameters/CustomDomain' + - $ref: '#/components/parameters/AllowList' + - $ref: '#/components/parameters/ValidateRequest' + - $ref: '#/components/parameters/MockResponse' + - $ref: '#/components/parameters/Authentication' + - description: The base API which the new version will be linked to. + example: 663a4ed9b6be920001b191ae + in: query + name: base_api_id + required: false + schema: + type: string + - description: The version name of the base API while creating the first version. + This doesn't have to be sent for the next versions but if it is set, it + will override base API version name. + example: Default + in: query + name: base_api_version_name + required: false + schema: + type: string + - description: The version name of the created version. + example: v2 + in: query + name: new_version_name + required: false + schema: + type: string + - description: If true, the new version is set as default version. + example: true + in: query + name: set_default + required: false + schema: + type: boolean requestBody: content: application/json: - schema: - $ref: "#/components/schemas/Policy" example: - name: new policy - quota_max: 60 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsers + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + schema: + $ref: https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.0/schema.json responses: - '200': - description: Policy created + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: created + action: added + key: e30bee13ad4248c3b529a4c58bb7be4e status: ok - '400': - description: Bad Request + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: API imported. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Request malformed + message: the import payload should not contain x-tyk-api-gateway status: error - '500': - description: Internal server error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: example: - message: Failed to create file! + message: file object creation failed, write error status: error - '/tyk/policies/{polID}': - parameters: - - description: The policy ID - name: polID + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Import an API in Tyk OAS format. + tags: + - Tyk OAS APIs + /tyk/cache/{apiID}: + delete: + description: Invalidate cache for the given API. + operationId: invalidateCache + parameters: + - description: The API ID. + example: ae67bb862a3241a49117508e0f9ee839 in: path + name: apiID required: true schema: type: string - get: - summary: Get a Policy - description: You can retrieve details of a single policy by ID in your Tyk instance. Returns an array policies. - tags: - - Policies - operationId: getPolicy responses: - '200': - description: Get details of a single Policy + "200": content: application/json: + example: + message: cache invalidated + status: ok schema: - $ref: "#/components/schemas/Policy" - '404': - description: Policy not found + $ref: '#/components/schemas/ApiStatusMessage' + description: Cache invalidated. + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: example: - message: Policy not found + message: Cache invalidation failed. status: error - put: - summary: Update a Policy - description: You can update a Policy in your Tyk Instance by ID + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Invalidate cache. tags: - - Policies - operationId: updatePolicy + - Cache Invalidation + /tyk/certs: + get: + description: List all certificates in the Tyk Gateway. + operationId: listCerts + parameters: + - description: Organisation ID to list the certificates. + example: 5e9d9544a1dcd60001d0ed20 + in: query + name: org_id + required: false + schema: + type: string + - description: Mode to list the certificate details. + example: detailed + in: query + name: mode + required: false + schema: + enum: + - detailed + type: string + responses: + "200": + content: + application/json: + examples: + certIdList: + $ref: '#/components/examples/certIdList' + certificateBasicList: + $ref: '#/components/examples/certificateBasicList' + schema: + oneOf: + - $ref: '#/components/schemas/APIAllCertificateBasics' + - $ref: '#/components/schemas/APIAllCertificates' + description: OK + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: List certificates. + tags: + - Certs + post: + description: Add a certificate to the Tyk Gateway. + operationId: addCert + parameters: + - description: Organisation ID to add the certificate to. + example: 5e9d9544a1dcd60001d0ed20 + in: query + name: org_id + required: false + schema: + type: string requestBody: content: - application/json: + text/plain: schema: - $ref: "#/components/schemas/Policy" - example: - name: new policy - quota_max: 60 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 + type: string responses: - '200': - description: Policy updated + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: updated + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + message: Certificate added status: ok - '400': - description: Bad Request + schema: + $ref: '#/components/schemas/APICertificateStatusMessage' + description: New certificate added. + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: PUT operation on different IDs + message: Certificate with ID already exists. status: error - '500': - description: Internal server error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: When certificates you send already exist in the gateway. + "405": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Failed to create file! + message: Malformed request body status: error - delete: - summary: Delete a Policy - description: Delete a policy by ID in your Tyk instance. + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Malformed request body. + summary: Add a certificate. tags: - - Policies - operationId: deletePolicy + - Certs + /tyk/certs/{certID}: + delete: + description: Delete certificate by ID. + operationId: deleteCerts + parameters: + - description: Certificate ID to be deleted. + example: 5e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + in: path + name: certID + required: true + schema: + type: string + - description: Organisation ID to delete the certificates from. + example: 5e9d9544a1dcd60001d0ed20 + in: query + name: org_id + required: false + schema: + type: string responses: - '200': - description: Delete policy by ID + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: deleted + message: removed status: ok - '500': - description: Internal server error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Deleted certificate. + "403": content: application/json: - schema: - $ref: '#/components/schemas/apiStatusMessage' example: - message: Delete failed + message: Attempted administrative access with invalid or missing key! status: error - '/tyk/oauth/clients/create': - post: - summary: Create new OAuth client - description: Any OAuth keys must be generated with the help of a client ID. These need to be pre-registered with Tyk before they can be used (in a similar vein to how you would register your app with Twitter before attempting to ask user permissions using their API). -

-

Creating OAuth clients with Access to Multiple APIs

- New from Tyk Gateway 2.6.0 is the ability to create OAuth clients with access to more than one API. If you provide the api_id it works the same as in previous releases. If you don't provide the api_id the request uses policy access rights and enumerates APIs from their setting in the newly created OAuth-client. - - + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: Delete certificate. tags: - - OAuth - operationId: createOAuthClient - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/NewClientRequest" - example: - client_id: test - api_id: id - policy_id: policy + - Certs + get: + description: |- + Note that the certID path parameter can take a list of certIDs separated with commas (e.g /tyk/certs/certIDOne,certIDTwo). + If you send a single certID it will return a single CertificateMeta object otherwise if you send more than two certIDs is will return an array of certificateMeta objects. + operationId: listCertsWithIDs + parameters: + - description: Comma separated list of certificates to list. + example: e6ce2b49-3e31-44de-95a7-12f054724283,5e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + in: path + name: certID + required: true + schema: + type: string responses: - '200': - description: Client created + "200": content: application/json: + examples: + certificateMetaExample: + $ref: '#/components/examples/certificateMetaExample' + certificateMetaListExample: + $ref: '#/components/examples/certificateMetaListExample' schema: - $ref: '#/components/schemas/NewClientRequest' - example: - client_id: test - api_id: id - policy_id: policy - '/tyk/oauth/clients/{apiID}': - put: - summary: Update OAuth metadata and Policy ID - description: Allows you to update the metadata and Policy ID for an OAuth client. - tags: - - OAuth - operationId: updateoAuthClient - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string - responses: - '200': - description: OAuth client metadata updated + oneOf: + - $ref: '#/components/schemas/CertsCertificateMeta' + - items: + $ref: '#/components/schemas/CertsCertificateMeta' + nullable: true + type: array + description: OK + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - type: array - items: - $ref: '#/components/schemas/NewClientRequest' - get: - summary: List oAuth clients - description: OAuth Clients are organised by API ID, and therefore are queried as such. - tags: - - OAuth - operationId: listOAuthClients - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string - responses: - '200': - description: Get OAuth client details or a list of OAuth clients + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: + example: + message: Certificate with given SHA256 fingerprint not found. + status: error schema: - type: array - items: - $ref: '#/components/schemas/NewClientRequest' - '/tyk/oauth/clients/{apiID}/{keyName}': - get: - summary: Get OAuth client + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + summary: Return one certificate or list multiple certificates in the Tyk Gateway + given a comma separated list of cert IDs. tags: - - OAuth - operationId: getOAuthClient - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string - minimum: 1 - - description: The Client ID - name: keyName - in: path - required: true - schema: - type: string + - CertsTag + /tyk/debug: + post: + description: Used to test API definition by sending sample request and analysing + output of both response and logs. + operationId: debugApiDefinition + requestBody: + content: + application/json: + example: + request: + method: GET + path: /update-listen-path + spec: + api_id: b84fe1a04e5648927971c0557971565c + auth: + auth_header_name: authorization + definition: + key: version + location: header + name: Tyk Test API + org_id: 664a14650619d40001f1f00f + proxy: + listen_path: /tyk-api-test/ + strip_listen_path: true + target_url: https://httpbin.org + use_oauth2: true + version_data: + not_versioned: true + versions: + Default: + name: Default + schema: + $ref: '#/components/schemas/TraceRequest' responses: - '200': - description: Get OAuth client details or a list of OAuth clients + "200": content: application/json: - schema: - $ref: '#/components/schemas/NewClientRequest' example: - client_id: test - api_id: id - policy_id: policy - delete: - summary: Delete OAuth client - description: Please note that tokens issued with the client ID will still be valid until they expire. - tags: - - OAuth - operationId: deleteOAuthClient - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string - minimum: 1 - - description: The Client ID - name: keyName - in: path - required: true - schema: - type: string - responses: - '200': - description: OAuth client deleted + logs: '{"level":"warning","msg":"Legacy path detected! Upgrade to + extended....' + message: ok + response: "====== Request ======\nGET / HTTP/1.1\r\nHost: httpbin.org\r\n\r\n\n====== + Response..." + schema: + $ref: '#/components/schemas/TraceResponse' + description: Success tracing request. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: deleted - status: ok - '/tyk/oauth/clients/{apiID}/{keyName}/tokens': - get: - summary: List tokens - description: This endpoint allows you to retrieve a list of all current tokens and their expiry date for a provided API ID and OAuth-client ID in the following format. This endpoint will work only for newly created tokens. -
-
- You can control how long you want to store expired tokens in this list using `oauth_token_expired_retain_period` gateway option, which specifies retain period for expired tokens stored in Redis. By default expired token not get removed. See here for more details. - tags: - - OAuth - operationId: getOAuthClientTokens - parameters: - - description: The API ID - name: apiID - in: path - required: true - schema: - type: string - minimum: 1 - - description: The Client ID - name: keyName - in: path - required: true - schema: - type: string - responses: - '200': - description: Get a list of tokens + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: - schema: - type: array - items: - type: string example: - - "tok1" - - "tok2" - '/tyk/oauth/revoke': - post: - description: revoke a single token - summary: revoke token - requestBody: - required: true - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - token: - description: token to be revoked - type: string - client_id: - description: id of oauth client - type: string - token_type_hint: - description: type of token to be revoked, if sent then the accepted values are access_token and refresh_token. String value and optional, of not provided then it will attempt to remove access and refresh tokens that matchs - type: string - example: - token: eyJvcmciOiI1ZTIwOTFjNGQ0YWVmY2U2MGMwNGZiOTIiLCJpZCI6ImJlMjlhYjVkODc1OTRhZDJhYTBhNjAwNzFlNzE1ZmQxIiwiaCI6Im11cm11cjY0In0= - client_id: 411f0800957c4a3e81fe181141dbc22a - tags: - - OAuth - operationId: revokeSingleToken - responses: - '200': - description: Succesful response - '/tyk/oauth/revoke_all': - post: - description: revoke all the tokens for a given oauth client - summary: revoke all client's tokens - requestBody: - required: true - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - client_id: - description: id of oauth client - type: string - client_secret: - description: OAuth client secret to ensure that its a valid operation - type: string - example: - client_id: 411f0800957c4a3e81fe181141dbc22a - client_secret: N2Y0YjgzMjctMTEwNi00YWExLWJjM2MtYjg1NWZhM2M1NmNj - tags: - - OAuth - operationId: revokeAllTokens - responses: - '200': - description: Succesful response - '400': - description: Bad request, form malformed or client secret and client id doesn't match - '404': - description: oauth client doesn't have any api related - - '/tyk/oauth/refresh/{keyName}': - delete: - summary: Invalidate OAuth refresh token - description: It is possible to invalidate refresh tokens in order to manage OAuth client access more robustly. - tags: - - OAuth - operationId: invalidateOAuthRefresh - parameters: - - description: The API id - name: api_id - in: query - required: true - schema: - type: string - - description: Refresh token - name: keyName - in: path - required: true - schema: - type: string - responses: - '200': - description: Deleted + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": content: application/json: + example: + message: 'Unexpected failure:' + status: error schema: - $ref: '#/components/schemas/apiModifyKeySuccess' - '/tyk/oauth/authorize-client/': - post: - description: With the OAuth flow you will need to create authorisation or access tokens for your clients, in order to do this, Tyk provides a private API endpoint for your application to generate these codes and redirect the end-user back to the API Client. - summary: Authorize client - requestBody: - required: true - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - response_type: - description: Should be provided by requesting client as part of authorisation request, this should be either `code` or `token` depending on the methods you have specified for the API. - type: string - client_id: - description: Should be provided by requesting client as part of authorisation request. The Client ID that is making the request. - type: string - redirect_uri: - description: Should be provided by requesting client as part of authorisation request. Must match with the record stored with Tyk. - type: string - key_rules: - description: A string representation of a Session Object (form-encoded). This should be provided by your application in order to apply any quotas or rules to the key. - type: string - example: - response_type: code - client_id: 21e2baf424674f6461faca6d45285bbb - redirect_uri: http%3A%2F%2Foauth.com%2Fredirect - key_rules: '%7B+++++%22allowance%22%3A+999%2C+++++%22rate%22%3A+1000%2C+++++%22per%22%3A+60%2C+++++%22expires%22%3A+0%2C+++++%22quota_max%22%3A+-1%2C+++++%22quota_renews%22%3A+1406121006%2C+++++%22quota_remaining%22%3A+0%2C+++++%22quota_renewal_rate%22%3A+60%2C+++++%22access_rights%22%3A+%7B+++++++++%22528a67c1ac9940964f9a41ae79235fcc%22%3A+%7B+++++++++++++%22api_name%22%3A+%22OAuth+Test+API%22%2C+++++++++++++%22api_id%22%3A+%22528a67c1ac9940964f9a41ae79235fcc%22%2C+++++++++++++%22versions%22%3A+%5B+++++++++++++++++%22Default%22+++++++++++++%5D+++++++++%7D+++++%7D%2C+++++%22org_id%22%3A+%2253ac07777cbb8c2d53000002%22+%7D' + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Test an an API definition. tags: - - OAuth - operationId: authorizeClient + - Debug + /tyk/keys: + get: + description: List all the API keys. + operationId: listKeys responses: - '200': - description: Succesful response + "200": content: application/json: schema: - type: object - example: - code: MWY0ZDRkMzktOTYwNi00NDRiLTk2YmQtOWQxOGQ3Mjc5Yzdk - redirect_to: 'http://client-app.com/oauth-redirect/?code=MWY0ZDRkMzktOTYwNi00NDRiLTk2YmQtOWQxOGQ3Mjc5Yzdk' - '/tyk/org/keys': - get: - summary: List Organisation Keys - description: |- - You can now set rate limits at the organisation level by using the following fields - allowance and rate. These are the number of allowed requests for the specified per value, and need to be set to the same value. If you don't want to have organisation level rate limiting, set 'rate' or 'per' to zero, or don't add them to your request. - tags: - - Organisation Quotas - operationId: listOrgKeys - responses: - '200': - description: List of all API keys + $ref: '#/components/schemas/ApiAllKeys' + description: List of all API keys. + "403": content: application/json: schema: - type: object - properties: - keys: - type: array - items: - type: string - example: - keys: - - "key1" - - "key2" - '/tyk/org/keys/{keyID}': - parameters: - - description: The Key ID - name: keyID - in: path - required: true - schema: - type: string - get: - summary: Get an Organisation Key - description: Get session info about specified orgnanisation key. Should return up to date rate limit and quota usage numbers. - tags: - - Organisation Quotas - operationId: getOrgKey - responses: - '200': - description: Key object + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: schema: - $ref: '#/components/schemas/SessionState' + $ref: '#/components/schemas/ApiStatusMessage' + description: Disabled hashed key listing. + summary: List keys. + tags: + - Keys post: - summary: Create an organisation key description: |- - This work similar to Keys API except that Key ID is always equals Organisation ID - tags: - - Organisation Quotas - operationId: addOrgKey + Tyk will generate the access token based on the OrgID specified in the API Definition and a random UUID. This ensures that keys can be owned by different API Owners should segmentation be needed at an organisational level. +

+ API keys without access_rights data will be written to all APIs on the system (this also means that they will be created across all SessionHandlers and StorageHandlers, it is recommended to always embed access_rights data in a key to ensure that only targeted APIs and their back-ends are written to. + operationId: addKey + parameters: + - description: When set to true the key_hash returned will be similar to the + un-hashed key name. + example: true + in: query + name: hashed + required: false + schema: + enum: + - true + - false + type: boolean requestBody: content: application/json: - schema: - $ref: "#/components/schemas/SessionState" example: - quota_max: 60 - quota_renews: 1406121006 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' responses: - '200': - description: New Key added + "200": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: created - key: '{...KEY JSON definition...}' + action: added + key: 5e9d9544a1dcd60001d0ed20a2290376f89846b798b7e5197584ef6d status: ok - put: - summary: Update Organisation Key - description: |- - This work similar to Keys API except that Key ID is always equals Organisation ID - - For Gateway v2.6.0 onwards, you can now set rate limits at the organisation level by using the following fields - allowance and rate. These are the number of allowed requests for the specified per value, and need to be set to the same value. If you don't want to have organisation level rate limiting, set `rate` or `per` to zero, or don't add them to your request. - tags: - - Organisation Quotas - operationId: updateOrgKey - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SessionState" - example: - quota_max: 60 - quota_renews: 1406121006 - quota_renewal_rate: 60 - allowance: 100 - rate: 100 - per: 5 - org_id: 53ac07777cbb8c2d53000002 - parameters: - - description: |- - Adding the `reset_quota` parameter and setting it to 1, will cause Tyk reset the organisations quota in the live quota manager, it is recommended to use this mechanism to reset organisation-level access if a monthly subscription is in place. - name: reset_quota - in: query - required: false - schema: - type: string - enum: ["1"] - responses: - '200': - description: Key updated + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: New key added. + "400": content: application/json: - schema: - $ref: '#/components/schemas/apiModifyKeySuccess' example: - action: updated - status: ok - delete: - summary: Delete Organisation Key - description: Deleting a key will remove all limits from organisation. It does not affects regualar keys created within organisation. - tags: - - Organisation Quotas - operationId: deleteOrgKey - responses: - '200': - description: Key deleted + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error schema: - $ref: '#/components/schemas/apiStatusMessage' + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: example: - action: Key deleted - status: ok - '/{listen_path}/tyk/batch': - parameters: - - name: listen_path + message: Failed to create key, ensure security settings are correct. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Create a key. + tags: + - Keys + /tyk/keys/{keyID}: + delete: + description: Deleting a key will remove it permanently from the system, however + analytics relating to that key will still be available. + operationId: deleteKey + parameters: + - description: Use the hash of the key as input instead of the full key. + example: false + in: query + name: hashed + required: false + schema: + enum: + - true + - false + type: boolean + - description: The key ID. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 in: path + name: keyID required: true - description: "API listen path" schema: type: string - post: - summary: Run batch request - tags: - - Batch requests - operationId: batch responses: - '200': - description: Success + "200": content: application/json: + example: + action: deleted + key: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + status: ok schema: - $ref: '#/components/schemas/apiStatusMessage' - '/tyk/schema': - get: - description: |- - Get OAS schema - tags: - - Schema - operationId: getSchema - parameters: - - description: The OAS version - name: oasVersion - in: query - schema: - type: string - responses: - '200': - description: OAS schema response + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Key deleted. + "400": content: application/json: - schema: - $ref: '#/components/schemas/OASSchemaResponse' example: - status: Success - schema: - '400': - description: The response when the parameter oasVersion is missing + message: Failed to remove the key + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": content: application/json: - schema: - $ref: '#/components/schemas/OASSchemaResponse' example: - message: 'Should provide a value for parameter oasVersion' - status: 'Failed' - '404': - description: The response when the requested OAS schema is not found + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": content: application/json: - schema: - $ref: '#/components/schemas/OASSchemaResponse' example: - message: 'Schema not found for version 5.0.0' - status: 'Failed' - -components: - responses: - parameterBodies: - content: - application/json: - schema: - $ref: '#/components/schemas/OAuthClientToken' - description: parameterBodies - schemas: - APIDefinition: - properties: + message: There is no such key found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Key not found. + summary: Delete a key. + tags: + - Keys + get: + description: Get session info about the specified key. Should return up to date + rate limit and quota usage numbers. + operationId: getKey + parameters: + - description: Use the hash of the key as input instead of the full key. + example: true + in: query + name: hashed + required: false + schema: + enum: + - true + - false + type: boolean + - description: The key ID. + example: 5e9d9544a1dcd60001d0ed20e7f75f9e03534825b7aef9df749582e5 + in: path + name: keyID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + description: Key fetched. + "400": + content: + application/json: + example: + message: Key requested by hash but key hashing is not enabled. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Key not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Key not found. + summary: Get a key with ID. + tags: + - Keys + post: + description: You can use this endpoint to import existing keys into Tyk or to + create a new custom key. + operationId: createCustomKey + parameters: + - description: Adding the suppress_reset parameter and setting it to 1, will + cause Tyk not to reset the quota limit that is in the current live quota + manager. By default Tyk will reset the quota in the live quota manager (initialising + it) when adding a key. Adding the `suppress_reset` flag to the URL parameters + will avoid this behaviour. + example: "1" + in: query + name: suppress_reset + required: false + schema: + enum: + - "1" + type: string + - description: When set to true the key_hash returned will be similar to the + un-hashed key name. + example: true + in: query + name: hashed + required: false + schema: + enum: + - true + - false + type: boolean + - description: Name to give the custom key. + example: customKey + in: path + name: keyID + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + example: + action: added + key: 5e9d9544a1dcd60001d0ed20customKey + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: New custom key added. + "400": + content: + application/json: + example: + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Failed to create key, ensure security settings are correct. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Create custom key / Import key + tags: + - Keys + put: + description: ' You can also manually add keys to Tyk using your own key-generation + algorithm. It is recommended that when using this approach to ensure that + the OrgID being used in the API Definition and the key data is blank so that + Tyk does not try to prepend or manage the key in any way.' + operationId: updateKey + parameters: + - description: Adding the suppress_reset parameter and setting it to 1 will + cause Tyk not to reset the quota limit that is in the current live quota + manager. By default Tyk will reset the quota in the live quota manager (initialising + it) when adding a key. Adding the `suppress_reset` flag to the URL parameters + will avoid this behaviour. + example: "1" + in: query + name: suppress_reset + required: false + schema: + enum: + - "1" + type: string + - description: When set to true the key_hash returned will be similar to the + un-hashed key name. + example: true + in: query + name: hashed + required: false + schema: + enum: + - true + - false + type: boolean + - description: ID of the key you want to update. + example: 5e9d9544a1dcd60001d0ed20766d9a6ec6b4403b93a554feefef4708 + in: path + name: keyID + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + - update-sample-tag + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + example: + action: modified + key: 5e9d9544a1dcd60001d0ed20766d9a6ec6b4403b93a554feefef4708 + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Key updated. + "400": + content: + application/json: + example: + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Key is not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Key not found. + "500": + content: + application/json: + example: + message: Failed to create key, ensure security settings are correct. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Update key. + tags: + - Keys + /tyk/keys/create: + post: + description: Create a key. + operationId: createKey + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + example: + action: added + key: 5e9d9544a1dcd60001d0ed207eb558517c3c48fb826c62cc6f6161eb + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Key created. + "400": + content: + application/json: + example: + message: Failed to create key, keys must have at least one Access + Rights record set. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: No access right. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Unmarshalling failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Malformed body. + summary: Create a key. + tags: + - Keys + /tyk/keys/policy/{keyID}: + post: + description: This will set policies to a hashed key. + operationId: setPoliciesToHashedKey + parameters: + - description: Name to give the custom key. + example: 5e9d9544a1dcd60001d0ed207eb558517c3c48fb826c62cc6f6161eb + in: path + name: keyID + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + apply_policies: + - 5ead7120575961000181867e + policy: "" + schema: + $ref: '#/components/schemas/PolicyUpdateObj' + responses: + "200": + content: + application/json: + example: + action: updated + key: 5e9d9544a1dcd60001d0ed207eb558517c3c48fb826c62cc6f6161eb + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Updated hashed key. + "400": + content: + application/json: + example: + message: Couldn't decode instruction + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Malformed request body. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Key not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Key not found. + "500": + content: + application/json: + example: + message: Could not write key data. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Set policies for a hashed key. + tags: + - Keys + /tyk/keys/preview: + post: + description: This will check if the body of a key definition is valid. And return + a response with how the key would look like if you were to create it. + operationId: validateAKeyDefinition + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + description: Key definition is valid. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Unmarshalling failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: This will validate a key definition. + tags: + - Keys + /tyk/oauth/clients/{apiID}: + get: + description: OAuth Clients are organised by API ID, and therefore are queried + as such. + operationId: listOAuthClients + parameters: + - description: The API ID + example: 1bd5c61b0e694082902cf15ddcc9e6a7 + in: path + name: apiID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + - api_id: b84fe1a04e5648927971c0557971565c + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + items: + $ref: '#/components/schemas/NewClientRequest' + type: array + description: Get OAuth client details or a list of OAuth clients + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + description: Api no found + summary: List oAuth clients + tags: + - OAuth + /tyk/oauth/clients/{apiID}/{keyName}: + delete: + description: Please note that tokens issued with the client ID will still be + valid until they expire. + operationId: deleteOAuthClient + parameters: + - description: The API id + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiID + required: true + schema: + type: string + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: keyName + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + action: deleted + key: 2a06b398c17f46908de3dffcb71ef87df + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: OAuth client deleted + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: OAuth Client ID not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Not found + "500": + content: + application/json: + example: + message: Delete failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Delete OAuth client + tags: + - OAuth + get: + description: Get OAuth client details tied to an api + operationId: getOAuthClient + parameters: + - description: The API id + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiID + required: true + schema: + type: string + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: keyName + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: changed description sample + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/NewClientRequest' + description: OAuth client details + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: OAuth Client ID not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: OAuth Client not found + summary: Get OAuth client + tags: + - OAuth + put: + description: Allows you to update the metadata,redirecturi,description and Policy + ID for an OAuth client. + operationId: updateOAuthClient + parameters: + - description: The API id + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiID + required: true + schema: + type: string + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: keyName + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + api_id: b84fe1a04e5648927971c0557971565c + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: changed description sample + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/NewClientRequest' + responses: + "200": + content: + application/json: + example: + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: changed description sample + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/NewClientRequest' + description: OAuth client updated + "400": + content: + application/json: + example: + message: Policy access rights doesn't contain API this OAuth client + belongs to + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: API doesn't exist + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + "500": + content: + application/json: + example: + message: Unmarshalling failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: malformed request body + summary: Update OAuth metadata,redirecturi,description and Policy ID + tags: + - OAuth + /tyk/oauth/clients/{apiID}/{keyName}/rotate: + put: + description: Generate a new secret + operationId: rotateOauthClient + parameters: + - description: The API id + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiID + required: true + schema: + type: string + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: keyName + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/NewClientRequest' + description: New secret has been created + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: API doesn't exist + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + "500": + content: + application/json: + example: + message: Failure in storing client data + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Rotate the oath client secret + tags: + - OAuth + /tyk/oauth/clients/{apiID}/{keyName}/tokens: + get: + description: |- + This endpoint allows you to retrieve a list of all current tokens and their expiry date for a provided API ID and OAuth-client ID .If page query parameter is sent the tokens will be paginated. This endpoint will work only for newly created tokens. +
+
+ You can control how long you want to store expired tokens in this list using `oauth_token_expired_retain_period` gateway option, which specifies retain period for expired tokens stored in Redis. By default expired token not get removed. See here for more details. + operationId: getOAuthClientTokens + parameters: + - description: The API id + example: b84fe1a04e5648927971c0557971565c + in: path + name: apiID + required: true + schema: + type: string + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: keyName + required: true + schema: + type: string + - description: Use page query parameter to say which page number you want returned. + example: 1 + in: query + name: page + required: false + schema: + default: 1 + type: integer + responses: + "200": + content: + application/json: + examples: + paginatedTokenExample: + $ref: '#/components/examples/paginatedTokenExample' + tokenListExample: + $ref: '#/components/examples/tokenListExample' + schema: + oneOf: + - $ref: '#/components/schemas/PaginatedOAuthClientTokens' + - items: + $ref: '#/components/schemas/OAuthClientToken' + nullable: true + type: array + description: Tokens returned successfully. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: OAuth Client ID not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: OAuth Client ID not found + "500": + content: + application/json: + example: + message: Get client tokens failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: List tokens for a provided API ID and OAuth-client ID + tags: + - OAuth + /tyk/oauth/clients/apis/{appID}: + get: + description: Get all API IDs for APIs that have use_oauth2 enabled and use the + client_id (appID) specified in the path parameter for OAuth2. You can use + the org_id query parameter to specify from which organization you want the + API IDs to be returned. To return APIs from all organizations, send org_id + as an empty string. + operationId: getApisForOauthApp + parameters: + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: appID + required: true + schema: + type: string + - description: The Org Id + in: query + name: orgID + required: false + schema: + type: string + responses: + "200": + content: + application/json: + example: + - b84fe1a04e5648927971c0557971565c + schema: + items: + type: string + type: array + description: Return an array of apis ids + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: Get API IDs for APIS that use the specified client_id(appID) for OAuth + tags: + - OAuth + /tyk/oauth/clients/create: + post: + description: | + Any OAuth keys must be generated with the help of a client ID. These need to be pre-registered with Tyk before they can be used (in a similar vein to how you would register your app with Twitter before attempting to ask user permissions using their API). +

+

Creating OAuth clients with Access to Multiple APIs

+ New from Tyk Gateway 2.6.0 is the ability to create OAuth clients with access to more than one API. If you provide the api_id it works the same as in previous releases. If you don't provide the api_id the request uses policy access rights and enumerates APIs from their setting in the newly created OAuth-client. + operationId: createOAuthClient + requestBody: + content: + application/json: + example: + api_id: b84fe1a04e5648927971c0557971565c + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/NewClientRequest' + responses: + "200": + content: + application/json: + example: + client_id: 2a06b398c17f46908de3dffcb71ef87df + description: google client + meta_data: + user_id: 362b3fb9a1d5e4f00017226f5 + redirect_uri: https://httpbin.org/ip + secret: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + schema: + $ref: '#/components/schemas/NewClientRequest' + description: Client created + "400": + content: + application/json: + example: + message: API doesn't exist + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Api Not found + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Unmarshalling failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Unmarshalling failed + summary: Create new OAuth client + tags: + - OAuth + /tyk/oauth/refresh/{keyName}: + delete: + description: It is possible to invalidate refresh tokens in order to manage + OAuth client access more robustly. + operationId: invalidateOAuthRefresh + parameters: + - description: The Client ID + example: 2a06b398c17f46908de3dffcb71ef87df + in: path + name: keyName + required: true + schema: + type: string + - description: The API id + example: b84fe1a04e5648927971c0557971565c + in: query + name: api_id + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + action: deleted + key: 2a06b398c17f46908de3dffcb71ef87df + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Deleted + "400": + content: + application/json: + example: + message: Missing parameter api_id + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: missing api_Id query parameter + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: API for this refresh token not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + "500": + content: + application/json: + example: + message: Failed to invalidate refresh token + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Invalidate OAuth refresh token + tags: + - OAuth + /tyk/oauth/revoke: + post: + description: revoke a single token + operationId: revokeSingleToken + requestBody: + content: + application/x-www-form-urlencoded: + schema: + properties: + client_id: + description: id of oauth client + example: 2a06b398c17f46908de3dffcb71ef87df + type: string + org_id: + example: 6492f66e6ebbc56c6a6bf022 + type: string + token: + description: token to be revoked + example: eyJvcmciOiI1ZTIwOTFjNGQ0YWVmY2U2MGMwNGZiOTIiLCJpZCI6IjIyODQ1NmFjNmJlMjRiMzI5MTIyOTdlODQ5NTc4NjJhIiwiaCI6Im11cm11cjY0In0= + type: string + token_type_hint: + description: type of token to be revoked, if sent then the accepted + values are access_token and refresh_token. String value and optional, + of not provided then it will attempt to remove access and refresh + tokens that matches + example: access_token + type: string + required: + - token + - client_id + type: object + description: token revoked successfully + responses: + "200": + content: + application/json: + example: + message: token revoked successfully + status: ok + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: token revoked + "400": + content: + application/json: + example: + message: cannot parse form. Form malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: malformed form data + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: revoke token + tags: + - OAuth + /tyk/oauth/revoke_all: + post: + description: Revoke all the tokens for a given oauth client + operationId: revokeAllTokens + requestBody: + content: + application/x-www-form-urlencoded: + schema: + properties: + client_id: + description: id of oauth client + example: 2a06b398c17f46908de3dffcb71ef87df + type: string + client_secret: + description: OAuth client secret to ensure that its a valid operation + example: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 + type: string + org_id: + example: 6492f66e6ebbc56c6a6bf022 + type: string + required: + - client_secret + - client_id + type: object + responses: + "200": + content: + application/json: + example: + message: tokens revoked successfully + status: ok + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: tokens revoked + "400": + content: + application/json: + example: + message: cannot parse form. Form malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "401": + content: + application/json: + example: + message: client_id is required + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: missing client id + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: oauth client doesn't exist + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: not found + summary: Revoke all client's tokens + tags: + - OAuth + /tyk/oauth/tokens: + delete: + description: Purge all lapsed OAuth token + operationId: purgeLapsedOAuthTokens + parameters: + - description: purge lapsed tokens + example: lapsed + in: query + name: scope + required: true + schema: + enum: + - lapsed + type: string + responses: + "200": + content: + application/json: + example: + message: lapsed tokens purged + status: ok + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: lapsed tokens purged successfully + "400": + content: + application/json: + example: + message: unknown scope + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Sending a value other than lapsed in scope query + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "422": + content: + application/json: + example: + message: scope parameter is required + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Missing lapsed query parameter + "500": + content: + application/json: + example: + message: error purging lapsed tokens + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Purge lapsed OAuth tokens + tags: + - OAuth + /tyk/org/keys: + get: + description: You can now set rate limits at the organisation level by using + the following fields - allowance and rate. These are the number of allowed + requests for the specified per value, and need to be set to the same value. + If you don't want to have organisation level rate limiting, set 'rate' or + 'per' to zero, or don't add them to your request. + operationId: listOrgKeys + parameters: + - description: Retrieves all keys starting with the specified filter(filter + is a prefix - e.g. default* or default will return all keys starting with + default like defaultbd,defaulttwo etc).We don't use filter for hashed keys + example: default* + in: query + name: filter + required: false + schema: + type: string + responses: + "200": + content: + application/json: + example: + keys: + - 5e9d9544a1dcd60001d0ed2008500e44fa644f939b640a4b8b4ea58c + schema: + $ref: '#/components/schemas/ApiAllKeys' + description: List of all org keys + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: ORG not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: ORG not found + summary: List Organisation Keys + tags: + - Organisation Quotas + /tyk/org/keys/{keyID}: + delete: + description: Deleting a key will remove all limits from organisation. It does + not affects regular keys created within organisation. + operationId: deleteOrgKey + parameters: + - description: The Key ID + example: e389ae00a2b145feaf28d6cc11f0f86d + in: path + name: keyID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + action: deleted + key: e389ae00a2b145feaf28d6cc11f0f86d + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: OK + "400": + content: + application/json: + example: + message: Failed to remove the key + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Org not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Org not found + summary: Delete Key + tags: + - Organisation Quotas + get: + description: Get session info about specified organisation key. Should return + up to date rate limit and quota usage numbers. + operationId: getOrgKey + parameters: + - description: The Org ID + example: 664a14650619d40001f1f00f + in: query + name: orgID + required: false + schema: + type: string + - description: The Key ID + example: e389ae00a2b145feaf28d6cc11f0f86d + in: path + name: keyID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + properties: + access_rights: + additionalProperties: + properties: + allowed_urls: + items: + properties: + methods: + items: + type: string + nullable: true + type: array + url: + type: string + type: object + nullable: true + type: array + api_id: + type: string + api_name: + type: string + limit: + properties: + per: + type: integer + quota_max: + type: integer + quota_remaining: + type: integer + quota_renewal_rate: + type: integer + rate: + type: integer + throttle_interval: + type: integer + throttle_retry_limit: + type: integer + type: object + versions: + items: + type: string + nullable: true + type: array + type: object + nullable: true + type: object + alias: + type: string + allowance: + type: integer + apply_policies: + items: + type: string + nullable: true + type: array + date_created: + format: date-time + type: string + enable_detailed_recording: + type: boolean + last_updated: + type: string + meta_data: + additionalProperties: + type: string + nullable: true + type: object + org_id: + type: string + per: + type: integer + quota_max: + type: integer + quota_renewal_rate: + type: integer + quota_renews: + type: integer + rate: + type: integer + tags: + items: + type: string + nullable: true + type: array + throttle_interval: + type: integer + throttle_retry_limit: + type: integer + type: object + description: OK + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Org not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Org not found + summary: Get an Organisation Key + tags: + - Organisation Quotas + post: + description: This work similar to Keys API except that Key ID is always equals + Organisation ID + operationId: addOrgKey + parameters: + - description: The Key ID + example: e389ae00a2b145feaf28d6cc11f0f86d + in: path + name: keyID + required: true + schema: + type: string + - description: Adding the reset_quota parameter and setting it to 1, will cause + Tyk reset the organisations quota in the live quota manager, it is recommended + to use this mechanism to reset organisation-level access if a monthly subscription + is in place. + example: "1" + in: query + name: reset_quota + required: false + schema: + enum: + - "1" + type: string + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + example: + action: added + key: e389ae00a2b145feaf28d6cc11f0f86d + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: OK + "400": + content: + application/json: + example: + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: No such organisation found in Active API list + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + "500": + content: + application/json: + example: + message: 'Error writing to key store ' + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Create an organisation key + tags: + - Organisation Quotas + put: + description: |- + This work similar to Keys API except that Key ID is always equals Organisation ID + + For Gateway v2.6.0 onwards, you can now set rate limits at the organisation level by using the following fields - allowance and rate. These are the number of allowed requests for the specified per value, and need to be set to the same value. If you don't want to have organisation level rate limiting, set `rate` or `per` to zero, or don't add them to your request. + operationId: updateOrgKey + parameters: + - description: Adding the reset_quota parameter and setting it to 1, will cause + Tyk reset the organisations quota in the live quota manager, it is recommended + to use this mechanism to reset organisation-level access if a monthly subscription + is in place. + example: "1" + in: query + name: reset_quota + required: false + schema: + enum: + - "1" + type: string + - description: The Key ID + example: e389ae00a2b145feaf28d6cc11f0f86d + in: path + name: keyID + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + limit: + per: 60 + quota_max: 10000 + quota_remaining: 10000 + quota_renewal_rate: 3600 + rate: 1000 + throttle_interval: 10 + throttle_retry_limit: 10 + versions: + - Default + alias: portal-key + allowance: 1000 + apply_policies: + - 5ead7120575961000181867e + date_created: "2024-08-09T14:40:34.87614+03:00" + enable_detailed_recording: true + last_updated: "1723203634" + meta_data: + new-update-key-sample: update-key-sample + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + update: sample policy update + user_type: mobile_user + org_id: 5e9d9544a1dcd60001d0ed20 + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + quota_renews: 1.723207234e+09 + rate: 1000 + tags: + - security + - edge + - edge-eu + - update-sample-tag + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/SessionState' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: OK + "400": + content: + application/json: + example: + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Bad Request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: No such organisation found in Active API list + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Not Found + "500": + content: + application/json: + example: + message: 'Error writing to key store ' + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Update Organisation Key + tags: + - Organisation Quotas + /tyk/policies: + get: + description: Retrieve all the policies in your Tyk instance. Returns an array + policies. + operationId: listPolicies + responses: + "200": + content: + application/json: + examples: + policiesExample: + $ref: '#/components/examples/policiesExample' + schema: + items: + $ref: '#/components/schemas/Policy' + type: array + description: List of all policies. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: List policies. + tags: + - Policies + post: + description: Create a policy in your Tyk Instance. + operationId: addPolicy + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + disable_introspection: false + versions: + - Default + active: true + hmac_enabled: false + id: 5ead7120575961000181867e + is_inactive: false + key_expires_in: 2.592e+06 + max_query_depth: -1 + meta_data: + update: sample policy update + user_type: mobile_user + name: Sample policy + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/Policy' + responses: + "200": + content: + application/json: + example: + action: added + key: 5ead7120575961000181867e + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Policy created. + "400": + content: + application/json: + example: + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Malformed request. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Due to enabled service policy source, please use the Dashboard + API. + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Create a policy. + tags: + - Policies + /tyk/policies/{polID}: + delete: + description: Delete a policy by ID in your Tyk instance. + operationId: deletePolicy + parameters: + - description: You can retrieve details of a single policy by ID in your Tyk + instance. + example: 5ead7120575961000181867e + in: path + name: polID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + action: deleted + key: 5ead7120575961000181867e + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Deleted policy by ID + "400": + content: + application/json: + example: + message: Must specify an apiID to update + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Policy Id not provided + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Delete failed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Delete a policy. + tags: + - Policies + get: + description: You can retrieve details of a single policy by ID in your Tyk instance. + operationId: getPolicy + parameters: + - description: You can retrieve details of a single policy by ID in your Tyk + instance. + example: 5ead7120575961000181867e + in: path + name: polID + required: true + schema: + type: string + responses: + "200": + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + disable_introspection: false + versions: + - Default + active: true + hmac_enabled: false + id: 5ead7120575961000181867e + is_inactive: false + key_expires_in: 2.592e+06 + max_query_depth: -1 + meta_data: + update: sample policy update + user_type: mobile_user + name: Sample policy + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/Policy' + description: Get details of a single policy. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Policy not found + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Policy not found + summary: Get a policy. + tags: + - Policies + put: + description: You can update a Policy in your Tyk Instance by ID. + operationId: updatePolicy + parameters: + - description: You can retrieve details of a single policy by ID in your Tyk + instance. + example: 5ead7120575961000181867e + in: path + name: polID + required: true + schema: + type: string + requestBody: + content: + application/json: + example: + access_rights: + itachi-api: + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + disable_introspection: false + versions: + - Default + active: true + hmac_enabled: false + id: 5ead7120575961000181867e + is_inactive: false + key_expires_in: 2.592e+06 + max_query_depth: -1 + meta_data: + update: sample policy update + user_type: mobile_user + name: update policy sample + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + schema: + $ref: '#/components/schemas/Policy' + responses: + "200": + content: + application/json: + example: + action: modified + key: 5ead7120575961000181867e + status: ok + schema: + $ref: '#/components/schemas/ApiModifyKeySuccess' + description: Policy updated + "400": + content: + application/json: + example: + message: Request malformed + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: malformed request + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "500": + content: + application/json: + example: + message: Failed to create file! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Internal server error. + summary: Update a policy. + tags: + - Policies + /tyk/reload: + get: + description: Tyk is capable of reloading configurations without having to stop + serving requests. This means that API configurations can be added at runtime, + or even modified at runtime and those rules applied immediately without any + downtime. + operationId: hotReload + parameters: + - description: Block a response until the reload is performed. This can be useful + in scripting environments like CI/CD workflows. + example: false + in: query + name: block + required: false + schema: + enum: + - true + - false + type: boolean + responses: + "200": + content: + application/json: + example: + message: "" + status: ok + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Reload gateway. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: Hot-reload a single node. + tags: + - Hot Reload + /tyk/reload/group: + get: + description: To reload a whole group of Tyk nodes (without using the Dashboard + or host manager). You can send an API request to a single node, this node + will then send a notification through the pub/sub infrastructure to all other + listening nodes (including the host manager if it is being used to manage + Nginx) which will then trigger a global reload. + operationId: hotReloadGroup + responses: + "200": + content: + application/json: + example: + message: "" + status: ok + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Reload the Tyk Gateway. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + summary: Hot-reload a group of Tyk nodes. + tags: + - Hot Reload + /tyk/schema: + get: + description: Get OAS schema definition using a version. + operationId: getSchema + parameters: + - description: The OAS version to fetch. + example: 3.0.3 + in: query + name: oasVersion + required: false + schema: + type: string + responses: + "200": + content: + application/json: + example: + message: "" + status: Success + schema: + $ref: '#/components/schemas/OASSchemaResponse' + description: OAS schema response. + "403": + content: + application/json: + example: + message: Attempted administrative access with invalid or missing key! + status: error + schema: + $ref: '#/components/schemas/ApiStatusMessage' + description: Forbidden + "404": + content: + application/json: + example: + message: Schema not found for version "4" + status: Failed + schema: + $ref: '#/components/schemas/OASSchemaResponse' + description: Version not found + summary: Get OAS schema. + tags: + - Schema +components: + examples: + certIdList: + value: + certs: + - 5e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + - 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + certificateBasicList: + value: + certs: + - dns_names: + - example.com + - www.example.com + has_private: true + id: 5e9d9544a1dcd60001d0ed20a6ab77653d5da938f452bb8cc9b55b0630a6743dabd8dc92bfb025abb09ce035 + is_ca: false + issuer_cn: Issuer 1 + not_after: "2024-01-01T00:00:00Z" + not_before: "2023-01-01T00:00:00Z" + subject_cn: Subject 1 + - dns_names: + - example.org + - www.example.org + has_private: false + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + is_ca: true + issuer_cn: Issuer 2 + not_after: "2024-02-01T00:00:00Z" + not_before: "2023-02-01T00:00:00Z" + subject_cn: Subject 2 + certificateMetaExample: + value: + dns_names: + - .*tyk.io + fingerprint: 7c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + has_private: false + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + is_ca: false + issuer: + CommonName: tyk.io + Country: + - Peachtree + ExtraNames: null + Locality: null + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: Peachtree + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: null + Province: null + SerialNumber: "" + StreetAddress: null + not_after: "2034-03-26T08:46:37Z" + not_before: "2024-03-25T08:46:37Z" + subject: + CommonName: tyk.io + Country: + - Peachtree + ExtraNames: null + Locality: null + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: Peachtree + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: null + Province: null + SerialNumber: "" + StreetAddress: null + certificateMetaListExample: + value: + - dns_names: + - .*tyk.io + fingerprint: 7c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + has_private: false + id: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + is_ca: false + issuer: + CommonName: tyk.io + Country: + - Peachtree + ExtraNames: null + Locality: null + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: Peachtree + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: null + Province: null + SerialNumber: "" + StreetAddress: null + not_after: "2034-03-26T08:46:37Z" + not_before: "2024-03-25T08:46:37Z" + subject: + CommonName: tyk.io + Country: + - Peachtree + ExtraNames: null + Locality: null + Names: + - Type: + - 2 + - 5 + - 4 + - 6 + Value: Peachtree + - Type: + - 2 + - 5 + - 4 + - 10 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 11 + Value: tyk + - Type: + - 2 + - 5 + - 4 + - 3 + Value: tyk.io + - Type: + - 1 + - 2 + - 840 + - 113549 + - 1 + - 9 + - 1 + Value: support@tyk.io + Organization: + - tyk + OrganizationalUnit: + - tyk + PostalCode: null + Province: null + SerialNumber: "" + StreetAddress: null + oasExample: + value: + components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsers + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + oasExampleList: + value: + - components: + securitySchemes: + bearerAuth: + description: The API Access Credentials + scheme: bearer + type: http + info: + description: This is a sample OAS. + title: OAS Sample + version: 1.0.0 + openapi: 3.0.3 + paths: + /api/sample/users: + get: + operationId: getUsers + responses: + "200": + content: + application/json: + schema: + items: + properties: + name: + type: string + type: object + type: array + description: fetched users + summary: Get users + tags: + - users + security: + - bearerAuth: [] + servers: + - url: https://localhost:8080 + x-tyk-api-gateway: + info: + name: user + state: + active: true + server: + listenPath: + strip: true + value: /user-test/ + upstream: + url: https://localhost:8080 + paginatedTokenExample: + value: + Pagination: + page_num: 1 + page_size: 100 + page_total: 0 + Tokens: + - code: 5a7d110be6355b0c071cc339327563cb45174ae387f52f87a80d2496 + expires: 1.518158407e+09 + - code: 5a7d110be6355b0c071cc33988884222b0cf436eba7979c6c51d6dbd + expires: 1.518158594e+09 + - code: 5a7d110be6355b0c071cc33990bac8b5261041c5a7d585bff291fec4 + expires: 1.518158638e+09 + - code: 5a7d110be6355b0c071cc339a66afe75521f49388065a106ef45af54 + expires: 1.518159792e+09 + policiesExample: + value: + - _id: "" + access_rights: + 8ddd91f3cda9453442c477b06c4e2da4: + allowance_scope: "" + allowed_types: [] + allowed_urls: + - methods: + - GET + url: /users + api_id: 8ddd91f3cda9453442c477b06c4e2da4 + api_name: Itachi api + disable_introspection: false + field_access_rights: [] + limit: + max_query_depth: 0 + per: 0 + quota_max: 0 + quota_remaining: 0 + quota_renewal_rate: 0 + quota_renews: 0 + rate: 0 + smoothing: + delay: 30 + enabled: false + step: 100 + threshold: 500 + trigger: 0.8 + throttle_interval: 0 + throttle_retry_limit: 0 + restricted_types: [] + versions: + - Default + active: true + enable_http_signature_validation: false + graphql_access_rights: null + hmac_enabled: false + id: 5ead7120575961000181867e + is_inactive: false + key_expires_in: 2.592e+06 + last_updated: "1716980105" + max_query_depth: -1 + meta_data: + user_type: mobile_user + name: Sample policy + org_id: 664a14650619d40001f1f00f + partitions: + acl: true + complexity: false + per_api: false + quota: true + rate_limit: true + per: 60 + quota_max: 10000 + quota_renewal_rate: 3600 + rate: 1000 + smoothing: + delay: 30 + enabled: false + step: 100 + threshold: 500 + trigger: 0.8 tags: + - security + throttle_interval: 10 + throttle_retry_limit: 10 + tokenListExample: + value: + - code: 5a7d110be6355b0c071cc339327563cb45174ae387f52f87a80d2496 + expires: 1.518158407e+09 + - code: 5a7d110be6355b0c071cc33988884222b0cf436eba7979c6c51d6dbd + expires: 1.518158594e+09 + - code: 5a7d110be6355b0c071cc33990bac8b5261041c5a7d585bff291fec4 + expires: 1.518158638e+09 + - code: 5a7d110be6355b0c071cc339a66afe75521f49388065a106ef45af54 + expires: 1.518159792e+09 + parameters: + AccessType: + description: Filter for internal or external API versions + example: internal + in: query + name: accessType + required: false + schema: + enum: + - internal + - external + type: string + AllowList: + description: Enable allowList middleware for all endpoints + in: query + name: allowList + required: false + schema: + $ref: '#/components/schemas/BooleanQueryParam' + Authentication: + description: Enable/disable the authentication mechanism in your Tyk Gateway + for your OAS API + in: query + name: authentication + schema: + $ref: '#/components/schemas/BooleanQueryParam' + CustomDomain: + description: Custom domain for the API + example: tyk.io + in: query + name: customDomain + required: false + schema: + type: string + ListenPath: + description: Listen path for the API + example: /user-test/ + in: query + name: listenPath + required: false + schema: + type: string + MockResponse: + description: Enable mockResponse middleware for all endpoints having responses + configured. + in: query + name: mockResponse + required: false + schema: + $ref: '#/components/schemas/BooleanQueryParam' + SearchText: + description: Search for API version name + example: Sample oas + in: query + name: searchText + required: false + schema: + type: string + UpstreamURL: + description: Upstream URL for the API + example: https://localhost:8080 + in: query + name: upstreamURL + required: false + schema: + type: string + ValidateRequest: + description: Enable validateRequest middleware for all endpoints having a request + body with media type application/json + in: query + name: validateRequest + required: false + schema: + $ref: '#/components/schemas/BooleanQueryParam' + schemas: + APIAllCertificateBasics: + properties: + certs: + items: + $ref: '#/components/schemas/CertsCertificateBasics' + nullable: true + type: array + type: object + APIAllCertificates: + properties: + certs: items: type: string + nullable: true type: array - x-go-name: Tags + type: object + APICertificateStatusMessage: + properties: + id: + example: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + type: string + message: + example: Certificate added + type: string + status: + example: ok + type: string + type: object + APIDefinition: + properties: CORS: + $ref: '#/components/schemas/CORSConfig' + active: + type: boolean + allowed_ips: + items: + type: string + nullable: true + type: array + analytics_plugin: + $ref: '#/components/schemas/AnalyticsPluginConfig' + api_id: + type: string + auth: + $ref: '#/components/schemas/AuthConfig' + auth_configs: + additionalProperties: + $ref: '#/components/schemas/AuthConfig' + nullable: true + type: object + auth_provider: + $ref: '#/components/schemas/AuthProviderMeta' + base_identity_provided_by: + type: string + basic_auth: properties: - allow_credentials: + body_password_regexp: + type: string + body_user_regexp: + type: string + cache_ttl: + type: integer + disable_caching: type: boolean - x-go-name: AllowCredentials - allowed_headers: - items: - type: string - type: array - x-go-name: AllowedHeaders - allowed_methods: - items: - type: string - type: array - x-go-name: AllowedMethods - allowed_origins: + extract_from_body: + type: boolean + type: object + blacklisted_ips: + items: + type: string + nullable: true + type: array + cache_options: + $ref: '#/components/schemas/CacheOptions' + certificate_pinning_disabled: + type: boolean + certificates: + items: + type: string + nullable: true + type: array + client_certificates: + items: + type: string + nullable: true + type: array + config_data: + additionalProperties: {} + nullable: true + type: object + config_data_disabled: + type: boolean + custom_middleware: + $ref: '#/components/schemas/MiddlewareSection' + custom_middleware_bundle: + type: string + custom_middleware_bundle_disabled: + type: boolean + custom_plugin_auth_enabled: + type: boolean + definition: + $ref: '#/components/schemas/VersionDefinition' + detailed_tracing: + type: boolean + disable_quota: + type: boolean + disable_rate_limit: + type: boolean + do_not_track: + type: boolean + domain: + type: string + domain_disabled: + type: boolean + dont_set_quota_on_create: + type: boolean + enable_batch_request_support: + type: boolean + enable_context_vars: + type: boolean + enable_coprocess_auth: + type: boolean + enable_detailed_recording: + type: boolean + enable_ip_blacklisting: + type: boolean + enable_ip_whitelisting: + type: boolean + enable_jwt: + type: boolean + enable_proxy_protocol: + type: boolean + enable_signature_checking: + type: boolean + event_handlers: + $ref: '#/components/schemas/EventHandlerMetaConfig' + expiration: + type: string + expire_analytics_after: + type: integer + external_oauth: + $ref: '#/components/schemas/ExternalOAuth' + global_rate_limit: + $ref: '#/components/schemas/GlobalRateLimit' + graphql: + $ref: '#/components/schemas/GraphQLConfig' + hmac_allowed_algorithms: + items: + type: string + nullable: true + type: array + hmac_allowed_clock_skew: + type: number + id: + type: string + idp_client_id_mapping_disabled: + type: boolean + internal: + type: boolean + is_oas: + type: boolean + jwt_client_base_field: + type: string + jwt_default_policies: + items: + type: string + nullable: true + type: array + jwt_expires_at_validation_skew: + minimum: 0 + type: integer + jwt_identity_base_field: + type: string + jwt_issued_at_validation_skew: + minimum: 0 + type: integer + jwt_not_before_validation_skew: + minimum: 0 + type: integer + jwt_policy_field_name: + type: string + jwt_scope_claim_name: + type: string + jwt_scope_to_policy_mapping: + additionalProperties: + type: string + nullable: true + type: object + jwt_signing_method: + type: string + jwt_skip_kid: + type: boolean + jwt_source: + type: string + listen_port: + type: integer + name: + type: string + notifications: + $ref: '#/components/schemas/NotificationsManager' + oauth_meta: + properties: + allowed_access_types: items: type: string + nullable: true type: array - x-go-name: AllowedOrigins - debug: - type: boolean - x-go-name: Debug - enable: - type: boolean - x-go-name: Enable - exposed_headers: + allowed_authorize_types: items: type: string + nullable: true type: array - x-go-name: ExposedHeaders - max_age: - format: int64 - type: integer - x-go-name: MaxAge - options_passthrough: - type: boolean - x-go-name: OptionsPassthrough + auth_login_redirect: + type: string type: object - active: + openid_options: + $ref: '#/components/schemas/OpenIDOptions' + org_id: + type: string + pinned_public_keys: + additionalProperties: + type: string + nullable: true + type: object + protocol: + type: string + proxy: + $ref: '#/components/schemas/ProxyConfig' + request_signing: + $ref: '#/components/schemas/RequestSigningMeta' + response_processors: + items: + $ref: '#/components/schemas/ResponseProcessor' + nullable: true + type: array + scopes: + $ref: '#/components/schemas/Scopes' + session_lifetime: + type: integer + session_lifetime_respects_key_expiration: type: boolean - x-go-name: Active - allowed_ips: + session_provider: + $ref: '#/components/schemas/SessionProviderMeta' + slug: + type: string + strip_auth_data: + type: boolean + tag_headers: + items: + type: string + nullable: true + type: array + tags: + example: + - Default + - v1 items: type: string + nullable: true + type: array + tags_disabled: + type: boolean + upstream_certificates: + additionalProperties: + type: string + nullable: true + type: object + upstream_certificates_disabled: + type: boolean + uptime_tests: + $ref: '#/components/schemas/UptimeTests' + use_basic_auth: + type: boolean + use_go_plugin_auth: + type: boolean + use_keyless: + type: boolean + use_mutual_tls_auth: + type: boolean + use_oauth2: + type: boolean + use_openid: + type: boolean + use_standard_auth: + type: boolean + version_data: + $ref: '#/components/schemas/VersionData' + type: object + APILimit: + properties: + max_query_depth: + type: integer + per: + type: number + quota_max: + type: integer + quota_remaining: + type: integer + quota_renewal_rate: + type: integer + quota_renews: + type: integer + rate: + type: number + smoothing: + $ref: '#/components/schemas/RateLimitSmoothing' + throttle_interval: + type: number + throttle_retry_limit: + type: integer + type: object + AccessDefinition: + properties: + allowance_scope: + example: d371b83b249845a2497ab9a947fd6210 + type: string + allowed_types: + items: + $ref: '#/components/schemas/GraphqlType' + nullable: true + type: array + allowed_urls: + items: + $ref: '#/components/schemas/AccessSpec' + nullable: true type: array - x-go-name: AllowedIPs api_id: + example: d1dfc6a927a046c54c0ed470f19757cc type: string - x-go-name: APIID - auth: - $ref: '#/components/schemas/Auth' - auth_provider: - $ref: '#/components/schemas/AuthProviderMeta' - base_identity_provided_by: - $ref: '#/components/schemas/AuthTypeEnum' - basic_auth: - properties: - body_password_regexp: - type: string - x-go-name: BodyPasswordRegexp - body_user_regexp: - type: string - x-go-name: BodyUserRegexp - cache_ttl: - format: int64 - type: integer - x-go-name: CacheTTL - disable_caching: - type: boolean - x-go-name: DisableCaching - extract_from_body: - type: boolean - x-go-name: ExtractFromBody - type: object - x-go-name: BasicAuth - blacklisted_ips: + api_name: + example: Rate Limit Proxy API + type: string + disable_introspection: + example: false + type: boolean + endpoints: + $ref: '#/components/schemas/Endpoints' + field_access_rights: + items: + $ref: '#/components/schemas/FieldAccessDefinition' + nullable: true + type: array + limit: + $ref: '#/components/schemas/APILimit' + restricted_types: + items: + $ref: '#/components/schemas/GraphqlType' + nullable: true + type: array + versions: + example: + - Default + - v2 items: type: string + nullable: true type: array - x-go-name: BlacklistedIPs - cache_options: - $ref: '#/components/schemas/CacheOptions' - certificates: + type: object + AccessSpec: + properties: + methods: + example: + - GET + - POST + - DELETE + - PUT items: type: string + nullable: true type: array - x-go-name: Certificates - client_certificates: + url: + example: anything/rate-limit-1-per-5 + type: string + type: object + Allowance: + properties: + enabled: + type: boolean + ignoreCase: + type: boolean + type: object + AnalyticsPluginConfig: + properties: + enable: + type: boolean + func_name: + type: string + plugin_path: + type: string + type: object + ApiAllKeys: + properties: + keys: items: type: string + nullable: true type: array - x-go-name: ClientCertificates - config_data: - additionalProperties: - type: object - type: object - x-go-name: ConfigData - custom_middleware: - $ref: '#/components/schemas/MiddlewareSection' - custom_middleware_bundle: + type: object + ApiModifyKeySuccess: + properties: + action: + example: modified type: string - x-go-name: CustomMiddlewareBundle - definition: - properties: - key: - type: string - x-go-name: Key - location: - type: string - x-go-name: Location - strip_path: - type: boolean - x-go-name: StripPath + key: + example: b13d928b9972bd18 + type: string + key_hash: + type: string + status: + example: ok + type: string + type: object + ApiStatusMessage: + properties: + message: + type: string + status: + type: string + type: object + AuthConfig: + properties: + auth_header_name: + example: Authorization + type: string + cookie_name: + type: string + disable_header: + type: boolean + name: + type: string + param_name: + type: string + signature: + $ref: '#/components/schemas/SignatureConfig' + use_certificate: + type: boolean + use_cookie: + type: boolean + use_param: + type: boolean + validate_signature: + type: boolean + type: object + AuthProviderMeta: + properties: + meta: + additionalProperties: {} + nullable: true type: object - x-go-name: VersionDefinition - disable_quota: + name: + type: string + storage_engine: + type: string + type: object + AuthSource: + properties: + enabled: type: boolean - x-go-name: DisableQuota - disable_rate_limit: + name: + type: string + type: object + AuthSources: + properties: + cookie: + $ref: '#/components/schemas/AuthSource' + header: + $ref: '#/components/schemas/AuthSource' + query: + $ref: '#/components/schemas/AuthSource' + type: object + Authentication: + properties: + baseIdentityProvider: + type: string + custom: + $ref: '#/components/schemas/CustomPluginAuthentication' + enabled: type: boolean - x-go-name: DisableRateLimit - do_not_track: + hmac: + $ref: '#/components/schemas/HMAC' + oidc: + $ref: '#/components/schemas/OIDC' + securitySchemes: + $ref: '#/components/schemas/SecuritySchemes' + stripAuthorizationData: type: boolean - x-go-name: DoNotTrack - domain: + type: object + AuthenticationPlugin: + properties: + enabled: + type: boolean + functionName: type: string - x-go-name: Domain - dont_set_quota_on_create: + idExtractor: + $ref: '#/components/schemas/IDExtractor' + path: + type: string + rawBodyOnly: type: boolean - x-go-name: DontSetQuotasOnCreate - enable_batch_request_support: + type: object + BasicAuthData: + properties: + hash_type: + type: string + password: + type: string + type: object + BooleanQueryParam: + enum: + - true + - false + example: true + type: boolean + CORS: + properties: + allowCredentials: type: boolean - x-go-name: EnableBatchRequestSupport - enable_context_vars: + allowedHeaders: + items: + type: string + type: array + allowedMethods: + items: + type: string + type: array + allowedOrigins: + items: + type: string + type: array + debug: + type: boolean + enabled: + type: boolean + exposedHeaders: + items: + type: string + type: array + maxAge: + type: integer + optionsPassthrough: + type: boolean + type: object + CORSConfig: + properties: + allow_credentials: + example: false + type: boolean + allowed_headers: + example: + - Origin + - Accept + - Content-Type + - Authorization + items: + type: string + nullable: true + type: array + allowed_methods: + example: + - GET + - HEAD + - POST + items: + type: string + nullable: true + type: array + allowed_origins: + example: + - https://*.foo.com + items: + type: string + nullable: true + type: array + debug: + example: true type: boolean - x-go-name: EnableContextVars - enable_coprocess_auth: + enable: + example: false type: boolean - x-go-name: EnableCoProcessAuth - enable_ip_blacklisting: + exposed_headers: + example: + - Accept + - Content-Type + items: + type: string + nullable: true + type: array + max_age: + example: 24 + type: integer + options_passthrough: + example: false type: boolean - x-go-name: EnableIpBlacklisting - enable_ip_whitelisting: + type: object + Cache: + properties: + cacheAllSafeRequests: type: boolean - x-go-name: EnableIpWhiteListing - enable_jwt: + cacheByHeaders: + items: + type: string + type: array + cacheResponseCodes: + items: + type: integer + type: array + controlTTLHeaderName: + type: string + enableUpstreamCacheControl: type: boolean - x-go-name: EnableJWT - enable_signature_checking: + enabled: type: boolean - x-go-name: EnableSignatureChecking - event_handlers: - $ref: '#/components/schemas/EventHandlerMetaConfig' - expire_analytics_after: - format: int64 + timeout: type: integer - x-go-name: ExpireAnalyticsAfter - global_rate_limit: - $ref: '#/components/schemas/GlobalRateLimit' - hmac_allowed_algorithms: + type: object + CacheMeta: + properties: + cache_key_regex: + type: string + cache_response_codes: items: - type: string + type: integer + nullable: true type: array - x-go-name: HmacAllowedAlgorithms - hmac_allowed_clock_skew: - format: double - type: number - x-go-name: HmacAllowedClockSkew - id: - $ref: '#/components/schemas/ObjectID' - internal: + disabled: type: boolean - x-go-name: Internal - jwt_client_base_field: + method: type: string - x-go-name: JWTClientIDBaseField - jwt_expires_at_validation_skew: - format: uint64 - type: integer - x-go-name: JWTExpiresAtValidationSkew - jwt_identity_base_field: + path: type: string - x-go-name: JWTIdentityBaseField - jwt_issued_at_validation_skew: - format: uint64 - type: integer - x-go-name: JWTIssuedAtValidationSkew - jwt_not_before_validation_skew: - format: uint64 + timeout: + format: int64 type: integer - x-go-name: JWTNotBeforeValidationSkew - jwt_policy_field_name: - type: string - x-go-name: JWTPolicyFieldName - jwt_scope_claim_name: - type: string - x-go-name: JWTScopeClaimName - jwt_scope_to_policy_mapping: - additionalProperties: - type: string - type: object - x-go-name: JWTScopeToPolicyMapping - jwt_signing_method: - type: string - x-go-name: JWTSigningMethod - jwt_skip_kid: + type: object + CacheOptions: + properties: + cache_all_safe_requests: + example: false type: boolean - x-go-name: JWTSkipKid - jwt_source: - type: string - x-go-name: JWTSource - name: - type: string - x-go-name: Name - notifications: - $ref: '#/components/schemas/NotificationsManager' - oauth_meta: - properties: - allowed_access_types: - items: - $ref: '#/components/schemas/AccessRequestType' - type: array - x-go-name: AllowedAccessTypes - allowed_authorize_types: - items: - $ref: '#/components/schemas/AuthorizeRequestType' - type: array - x-go-name: AllowedAuthorizeTypes - auth_login_redirect: - type: string - x-go-name: AuthorizeLoginRedirect - type: object - x-go-name: Oauth2Meta - openid_options: - $ref: '#/components/schemas/OpenIDOptions' - org_id: - type: string - x-go-name: OrgID - pinned_public_keys: - additionalProperties: + cache_by_headers: + items: type: string - type: object - x-go-name: PinnedPublicKeys - proxy: - properties: - check_host_against_uptime_tests: - type: boolean - x-go-name: CheckHostAgainstUptimeTests - disable_strip_slash: - type: boolean - x-go-name: DisableStripSlash - enable_load_balancing: - type: boolean - x-go-name: EnableLoadBalancing - listen_path: - type: string - x-go-name: ListenPath - preserve_host_header: - type: boolean - x-go-name: PreserveHostHeader - service_discovery: - $ref: '#/components/schemas/ServiceDiscoveryConfiguration' - strip_listen_path: - type: boolean - x-go-name: StripListenPath - target_list: - items: - type: string - type: array - x-go-name: Targets - target_url: - type: string - x-go-name: TargetURL - transport: - properties: - proxy_url: - type: string - x-go-name: ProxyURL - ssl_ciphers: - items: - type: string - type: array - x-go-name: SSLCipherSuites - ssl_insecure_skip_verify: - type: boolean - x-go-name: SSLInsecureSkipVerify - ssl_min_version: - format: uint16 - type: integer - x-go-name: SSLMinVersion - type: object - x-go-name: Transport - type: object - x-go-name: Proxy - response_processors: + nullable: true + type: array + cache_control_ttl_header: + type: string + cache_response_codes: items: - $ref: '#/components/schemas/ResponseProcessor' + type: integer + nullable: true type: array - x-go-name: ResponseProcessors - session_lifetime: + cache_timeout: + example: 60 format: int64 type: integer - x-go-name: SessionLifetime - session_provider: - $ref: '#/components/schemas/SessionProviderMeta' - slug: - type: string - x-go-name: Slug - strip_auth_data: + enable_cache: + example: true type: boolean - x-go-name: StripAuthData - tag_headers: + enable_upstream_cache_control: + example: false + type: boolean + type: object + CachePlugin: + properties: + cacheByRegex: + type: string + cacheResponseCodes: items: - type: string + type: integer type: array - x-go-name: TagHeaders - upstream_certificates: - additionalProperties: - type: string - type: object - x-go-name: UpstreamCertificates - uptime_tests: - properties: - check_list: - items: - $ref: '#/components/schemas/HostCheckObject' - type: array - x-go-name: CheckList - config: - properties: - expire_utime_after: - format: int64 - type: integer - x-go-name: ExpireUptimeAnalyticsAfter - recheck_wait: - format: int64 - type: integer - x-go-name: RecheckWait - service_discovery: - $ref: '#/components/schemas/ServiceDiscoveryConfiguration' - type: object - x-go-name: Config - type: object - x-go-name: UptimeTests - use_basic_auth: + enabled: type: boolean - x-go-name: UseBasicAuth - use_keyless: + timeout: + type: integer + type: object + CertificatePinning: + properties: + domainToPublicKeysMapping: + $ref: '#/components/schemas/PinnedPublicKeys' + enabled: type: boolean - x-go-name: UseKeylessAccess - use_mutual_tls_auth: + type: object + CertsCertificateBasics: + properties: + dns_names: + items: + type: string + nullable: true + type: array + has_private: type: boolean - x-go-name: UseMutualTLSAuth - use_oauth2: + id: + type: string + is_ca: type: boolean - x-go-name: UseOauth2 - use_openid: + issuer_cn: + type: string + not_after: + format: date-time + type: string + not_before: + format: date-time + type: string + subject_cn: + type: string + type: object + CertsCertificateMeta: + properties: + dns_names: + example: + - .*tyk.io + items: + type: string + type: array + fingerprint: + example: 7c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + type: string + has_private: + example: false type: boolean - x-go-name: UseOpenID - use_standard_auth: + id: + example: 5e9d9544a1dcd60001d0ed207c440d66ebb0a4629d21329808dce9091acf5f2fde328067a6e60e5347271d90 + type: string + is_ca: type: boolean - x-go-name: UseStandardAuth - version_data: - properties: - default_version: - type: string - x-go-name: DefaultVersion - not_versioned: - type: boolean - x-go-name: NotVersioned - versions: - additionalProperties: - $ref: '#/components/schemas/VersionInfo' - type: object - x-go-name: Versions - type: object - x-go-name: VersionData - title: >- - APIDefinition represents the configuration for a single proxied API and - it's versions. + issuer: + $ref: '#/components/schemas/PkixName' + not_after: + example: "2034-03-26T08:46:37Z" + format: date-time + type: string + not_before: + example: "2024-03-25T08:46:37Z" + format: date-time + type: string + subject: + $ref: '#/components/schemas/PkixName' type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - APILimit: - title: APILimit stores quota and rate limit on ACL level (per API) + CheckCommand: properties: - per: - format: double - type: number - x-go-name: Per - quota_max: - format: int64 - type: integer - x-go-name: QuotaMax - quota_remaining: - format: int64 - type: integer - x-go-name: QuotaRemaining - quota_renewal_rate: - format: int64 - type: integer - x-go-name: QuotaRenewalRate - quota_renews: - format: int64 + message: + type: string + name: + type: string + type: object + CircuitBreaker: + properties: + coolDownPeriod: type: integer - x-go-name: QuotaRenews - rate: - format: double - type: number - x-go-name: Rate - set_by_policy: + enabled: type: boolean - x-go-name: SetByPolicy - throttle_interval: - format: double - type: number - x-go-name: ThrottleInterval - throttle_retry_limit: - format: int64 + halfOpenStateEnabled: + type: boolean + sampleSize: type: integer - x-go-name: ThrottleRetryLimit - smoothing: - type: object - $ref: '#/components/schemas/RateLimitSmoothing' - description: Smoothing contains rate limit smoothing settings. - x-go-name: Smoothing + threshold: + type: number type: object - x-go-package: github.com/TykTechnologies/tyk/user - AccessDefinition: - description: AccessDefinition defines which versions of an API a key has access to + CircuitBreakerMeta: properties: - allowed_urls: - items: - $ref: '#/components/schemas/AccessSpec' - type: array - x-go-name: AllowedURLs - api_id: + disable_half_open_state: + type: boolean + disabled: + type: boolean + method: type: string - x-go-name: APIID - api_name: + path: type: string - x-go-name: APIName - limit: - $ref: '#/components/schemas/APILimit' - versions: - items: - type: string - type: array - x-go-name: Versions + return_to_service_after: + type: integer + samples: + format: int64 + type: integer + threshold_percent: + type: number type: object - x-go-package: github.com/TykTechnologies/tyk/user - AccessRequestType: - description: AccessRequestType is the type for OAuth param `grant_type` - type: string - x-go-package: github.com/TykTechnologies/tyk/vendor/github.com/lonelycode/osin - AccessSpec: - description: >- - AccessSpecs define what URLS a user has access to an what methods are - enabled + ClientCertificates: properties: - methods: + allowlist: items: type: string + nullable: true type: array - x-go-name: Methods - url: - type: string - x-go-name: URL + enabled: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/user - Auth: + ClientToPolicy: properties: - auth_header_name: + clientId: type: string - x-go-name: AuthHeaderName - cookie_name: - type: string - x-go-name: CookieName - param_name: + policyId: type: string - x-go-name: ParamName - signature: - $ref: '#/components/schemas/SignatureConfig' - use_certificate: + type: object + ContextVariables: + properties: + enabled: type: boolean - x-go-name: UseCertificate - use_cookie: + type: object + CustomPlugin: + properties: + enabled: type: boolean - x-go-name: UseCookie - use_param: + functionName: + type: string + path: + type: string + rawBodyOnly: type: boolean - x-go-name: UseParam - validate_signature: + requireSession: type: boolean - x-go-name: ValidateSignature type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - AuthProviderCode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - AuthProviderMeta: + CustomPluginAuthentication: properties: - meta: - additionalProperties: - type: object - type: object - x-go-name: Meta - name: - $ref: '#/components/schemas/AuthProviderCode' - storage_engine: - $ref: '#/components/schemas/StorageEngineCode' - type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - AuthTypeEnum: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - AuthorizeRequestType: - description: AuthorizeRequestType is the type for OAuth param `response_type` - type: string - x-go-package: github.com/TykTechnologies/tyk/vendor/github.com/lonelycode/osin - CacheMeta: + AuthSources: + $ref: '#/components/schemas/AuthSources' + config: + $ref: '#/components/schemas/AuthenticationPlugin' + enabled: + type: boolean + type: object + CustomPlugins: + items: + $ref: '#/components/schemas/CustomPlugin' + type: array + DatasourceMappingConfiguration: properties: - cache_response_codes: - items: - format: int64 - type: integer - type: array - x-go-name: CacheOnlyResponseCodes - cache_key_regex: + disabled: + type: boolean + path: type: string - x-go-name: CacheKeyRegex - method: + type: object + DatasourceSourceConfig: + properties: + data_source_config: {} + kind: type: string - x-go-name: Method - path: + type: object + DatasourceTypeFieldConfiguration: + properties: + data_source: + $ref: '#/components/schemas/DatasourceSourceConfig' + field_name: + type: string + mapping: + $ref: '#/components/schemas/DatasourceMappingConfiguration' + type_name: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - CacheOptions: + DetailedActivityLogs: properties: - cache_all_safe_requests: + enabled: type: boolean - x-go-name: CacheAllSafeRequests - cache_control_ttl_header: - type: string - x-go-name: CacheControlTTLHeader - cache_response_codes: + type: object + DetailedTracing: + properties: + enabled: + type: boolean + type: object + Domain: + properties: + certificates: items: - format: int64 - type: integer + type: string type: array - x-go-name: CacheOnlyResponseCodes - cache_timeout: - format: int64 - type: integer - x-go-name: CacheTimeout - enable_cache: - type: boolean - x-go-name: EnableCache - enable_upstream_cache_control: + enabled: type: boolean - x-go-name: EnableUpstreamCacheControl + name: + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - CircuitBreakerMeta: + DomainToCertificate: properties: - method: + certificate: type: string - x-go-name: Method - path: + domain: type: string - x-go-name: Path - return_to_service_after: - format: int64 - type: integer - x-go-name: ReturnToServiceAfter - samples: - format: int64 - type: integer - x-go-name: Samples - threshold_percent: - format: double - type: number - x-go-name: ThresholdPercent type: object - x-go-package: github.com/TykTechnologies/tyk/apidef EndPointMeta: properties: + disabled: + type: boolean + ignore_case: + type: boolean + method: + type: string method_actions: additionalProperties: $ref: '#/components/schemas/EndpointMethodMeta' type: object - x-go-name: MethodActions path: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - EndpointMethodAction: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef + Endpoint: + properties: + methods: + $ref: '#/components/schemas/EndpointMethods' + path: + type: string + type: object + EndpointMethod: + properties: + limit: + $ref: '#/components/schemas/RateLimitType2' + name: + type: string + type: object EndpointMethodMeta: properties: action: - $ref: '#/components/schemas/EndpointMethodAction' + enum: + - no_action + - reply + type: string code: - format: int64 type: integer - x-go-name: Code data: type: string - x-go-name: Data headers: additionalProperties: type: string + nullable: true type: object - x-go-name: Headers type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - EventHandlerMetaConfig: + EndpointMethods: + items: + $ref: '#/components/schemas/EndpointMethod' + type: array + EndpointPostPlugin: properties: - events: - x-go-name: Events + enabled: + type: boolean + functionName: + type: string + name: + type: string + path: + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - RateLimitMeta: + EndpointPostPlugins: + items: + $ref: '#/components/schemas/EndpointPostPlugin' + type: array + Endpoints: + items: + $ref: '#/components/schemas/Endpoint' + type: array + EnforceTimeout: properties: - disabled: + enabled: type: boolean - x-go-name: Disabled - method: + value: + type: integer + type: object + EventHandler: + properties: + enabled: + type: boolean + id: type: string - x-go-name: Method - path: + name: + type: string + trigger: + type: string + type: + type: string + type: object + EventHandlerMetaConfig: + properties: + events: + additionalProperties: + items: + $ref: '#/components/schemas/EventHandlerTriggerConfig' + type: array + nullable: true + type: object + type: object + EventHandlerTriggerConfig: + properties: + handler_meta: + additionalProperties: {} + nullable: true + type: object + handler_name: type: string - x-go-name: Path - per: - type: number - format: double - x-go-name: Per - rate: - type: number - format: double - x-go-name: Rate - title: RateLimitMeta configures rate limits per API path. type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + EventHandlers: + items: + $ref: '#/components/schemas/EventHandler' + type: array ExtendedPathsSet: properties: advance_cache_config: items: $ref: '#/components/schemas/CacheMeta' type: array - x-go-name: AdvanceCacheConfig black_list: items: $ref: '#/components/schemas/EndPointMeta' type: array - x-go-name: BlackList cache: items: type: string type: array - x-go-name: Cached circuit_breakers: items: $ref: '#/components/schemas/CircuitBreakerMeta' type: array - x-go-name: CircuitBreaker do_not_track_endpoints: items: $ref: '#/components/schemas/TrackEndpointMeta' type: array - x-go-name: DoNotTrackEndpoints + go_plugin: + items: + $ref: '#/components/schemas/GoPluginMeta' + type: array hard_timeouts: items: $ref: '#/components/schemas/HardTimeoutMeta' type: array - x-go-name: HardTimeouts ignored: items: $ref: '#/components/schemas/EndPointMeta' type: array - x-go-name: Ignored internal: items: $ref: '#/components/schemas/InternalMeta' type: array - x-go-name: Internal method_transforms: items: $ref: '#/components/schemas/MethodTransformMeta' type: array - x-go-name: MethodTransforms - rate_limit: + mock_response: + items: + $ref: '#/components/schemas/MockResponseMeta' type: array + persist_graphql: + items: + $ref: '#/components/schemas/PersistGraphQLMeta' + nullable: true + type: array + rate_limit: items: $ref: '#/components/schemas/RateLimitMeta' - x-go-name: RateLimit + nullable: true + type: array size_limits: items: $ref: '#/components/schemas/RequestSizeMeta' type: array - x-go-name: SizeLimit track_endpoints: items: $ref: '#/components/schemas/TrackEndpointMeta' type: array - x-go-name: TrackEndpoints transform: items: $ref: '#/components/schemas/TemplateMeta' type: array - x-go-name: Transform transform_headers: items: - $ref: '#/components/schemas/HeaderInjectionMeta' + $ref: '#/components/schemas/HeaderInjectionMeta' + type: array + transform_jq: + items: + $ref: '#/components/schemas/TransformJQMeta' + type: array + transform_jq_response: + items: + $ref: '#/components/schemas/TransformJQMeta' + type: array + transform_response: + items: + $ref: '#/components/schemas/TemplateMeta' + type: array + transform_response_headers: + items: + $ref: '#/components/schemas/HeaderInjectionMeta' + type: array + url_rewrites: + items: + $ref: '#/components/schemas/URLRewriteMeta' + type: array + validate_json: + items: + $ref: '#/components/schemas/ValidatePathMeta' + type: array + validate_request: + items: + $ref: '#/components/schemas/ValidateRequestMeta' + type: array + virtual: + items: + $ref: '#/components/schemas/VirtualMeta' + type: array + white_list: + items: + $ref: '#/components/schemas/EndPointMeta' + type: array + type: object + ExternalOAuth: + properties: + enabled: + type: boolean + providers: + items: + $ref: '#/components/schemas/Provider' + nullable: true + type: array + type: object + FieldAccessDefinition: + properties: + field_name: + type: string + limits: + $ref: '#/components/schemas/FieldLimits' + type_name: + type: string + type: object + FieldLimits: + properties: + max_query_depth: + type: integer + type: object + FromOASExamples: + properties: + code: + type: integer + contentType: + type: string + enabled: + type: boolean + exampleName: + type: string + type: object + GatewayTags: + properties: + enabled: + type: boolean + tags: + items: + type: string + nullable: true + type: array + type: object + Global: + properties: + cache: + $ref: '#/components/schemas/Cache' + contextVariables: + $ref: '#/components/schemas/ContextVariables' + cors: + $ref: '#/components/schemas/CORS' + pluginConfig: + $ref: '#/components/schemas/PluginConfig' + postAuthenticationPlugin: + $ref: '#/components/schemas/PostAuthenticationPlugin' + postAuthenticationPlugins: + $ref: '#/components/schemas/CustomPlugins' + postPlugin: + $ref: '#/components/schemas/PostPlugin' + postPlugins: + $ref: '#/components/schemas/CustomPlugins' + prePlugin: + $ref: '#/components/schemas/PrePlugin' + prePlugins: + $ref: '#/components/schemas/CustomPlugins' + responsePlugin: + $ref: '#/components/schemas/ResponsePlugin' + responsePlugins: + $ref: '#/components/schemas/CustomPlugins' + trafficLogs: + $ref: '#/components/schemas/TrafficLogs' + transformRequestHeaders: + $ref: '#/components/schemas/TransformHeaders' + transformResponseHeaders: + $ref: '#/components/schemas/TransformHeaders' + type: object + GlobalRateLimit: + properties: + disabled: + type: boolean + per: + type: number + rate: + type: number + type: object + GoPluginMeta: + properties: + disabled: + type: boolean + func_name: + type: string + method: + type: string + path: + type: string + plugin_path: + type: string + type: object + GraphAccessDefinition: + type: object + GraphQLConfig: + properties: + enabled: + type: boolean + engine: + $ref: '#/components/schemas/GraphQLEngineConfig' + execution_mode: + enum: + - proxyOnly + - executionEngine + - subgraph + - supergraph + type: string + introspection: + $ref: '#/components/schemas/GraphQLIntrospectionConfig' + last_schema_update: + format: date-time + nullable: true + type: string + playground: + $ref: '#/components/schemas/GraphQLPlayground' + proxy: + $ref: '#/components/schemas/GraphQLProxyConfig' + schema: + type: string + subgraph: + $ref: '#/components/schemas/GraphQLSubgraphConfig' + supergraph: + $ref: '#/components/schemas/GraphQLSupergraphConfig' + type_field_configurations: + items: + $ref: '#/components/schemas/DatasourceTypeFieldConfiguration' + nullable: true type: array - x-go-name: TransformHeader - transform_jq: + version: + enum: + - '''' + - "1" + - "2" + type: string + type: object + GraphQLEngineConfig: + properties: + data_sources: items: - $ref: '#/components/schemas/TransformJQMeta' + $ref: '#/components/schemas/GraphQLEngineDataSource' + nullable: true type: array - x-go-name: TransformJQ - transform_jq_response: + field_configs: items: - $ref: '#/components/schemas/TransformJQMeta' + $ref: '#/components/schemas/GraphQLFieldConfig' + nullable: true type: array - x-go-name: TransformJQResponse - transform_response: + global_headers: items: - $ref: '#/components/schemas/TemplateMeta' + $ref: '#/components/schemas/UDGGlobalHeader' + nullable: true type: array - x-go-name: TransformResponse - transform_response_headers: + type: object + GraphQLEngineDataSource: + properties: + config: {} + internal: + type: boolean + kind: + type: string + name: + type: string + root_fields: items: - $ref: '#/components/schemas/HeaderInjectionMeta' + $ref: '#/components/schemas/GraphQLTypeFields' + nullable: true type: array - x-go-name: TransformResponseHeader - url_rewrites: + type: object + GraphQLFieldConfig: + properties: + disable_default_mapping: + type: boolean + field_name: + type: string + path: items: - $ref: '#/components/schemas/URLRewriteMeta' + type: string + nullable: true type: array - x-go-name: URLRewrite - validate_json: + type_name: + type: string + type: object + GraphQLIntrospectionConfig: + properties: + disabled: + type: boolean + type: object + GraphQLPlayground: + properties: + enabled: + type: boolean + path: + type: string + type: object + GraphQLProxyConfig: + properties: + auth_headers: + additionalProperties: + type: string + nullable: true + type: object + features: + $ref: '#/components/schemas/GraphQLProxyFeaturesConfig' + request_headers: + additionalProperties: + type: string + nullable: true + type: object + request_headers_rewrite: + additionalProperties: + $ref: '#/components/schemas/RequestHeadersRewriteConfig' + nullable: true + type: object + subscription_type: + type: string + use_response_extensions: + $ref: '#/components/schemas/GraphQLResponseExtensions' + type: object + GraphQLProxyFeaturesConfig: + properties: + use_immutable_headers: + type: boolean + type: object + GraphQLResponseExtensions: + properties: + on_error_forwarding: + type: boolean + type: object + GraphQLSubgraphConfig: + properties: + sdl: + type: string + type: object + GraphQLSubgraphEntity: + properties: + api_id: + type: string + headers: + additionalProperties: + type: string + nullable: true + type: object + name: + type: string + sdl: + type: string + subscription_type: + type: string + url: + type: string + type: object + GraphQLSupergraphConfig: + properties: + disable_query_batching: + type: boolean + global_headers: + additionalProperties: + type: string + nullable: true + type: object + merged_sdl: + type: string + subgraphs: items: - $ref: '#/components/schemas/ValidatePathMeta' + $ref: '#/components/schemas/GraphQLSubgraphEntity' + nullable: true type: array - x-go-name: ValidateJSON - virtual: + updated_at: + format: date-time + nullable: true + type: string + type: object + GraphQLTypeFields: + properties: + fields: items: - $ref: '#/components/schemas/VirtualMeta' + type: string + nullable: true type: array - x-go-name: Virtual - white_list: + type: + type: string + type: object + GraphqlType: + properties: + fields: items: - $ref: '#/components/schemas/EndPointMeta' + type: string + nullable: true type: array - x-go-name: WhiteList + name: + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - GlobalRateLimit: + HMAC: properties: - per: - format: double - type: number - x-go-name: Per - rate: - format: double + AuthSources: + $ref: '#/components/schemas/AuthSources' + allowedAlgorithms: + items: + type: string + type: array + allowedClockSkew: type: number - x-go-name: Rate - type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - GraphAccessDefinition: + enabled: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/user HardTimeoutMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path timeout: - format: int64 type: integer - x-go-name: TimeOut type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - HashType: - type: string - x-go-package: github.com/TykTechnologies/tyk/user + Header: + properties: + name: + type: string + value: + type: string + type: object HeaderInjectionMeta: properties: act_on: type: boolean - x-go-name: ActOnResponse add_headers: additionalProperties: type: string + nullable: true type: object - x-go-name: AddHeaders delete_headers: items: type: string + nullable: true type: array - x-go-name: DeleteHeaders + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + Headers: + items: + $ref: '#/components/schemas/Header' + type: array + HealthCheckItem: + properties: + componentId: + type: string + componentType: + type: string + output: + type: string + status: + enum: + - pass + - fail + - warn + type: string + time: + type: string + type: object + HealthCheckResponse: + properties: + description: + type: string + details: + additionalProperties: + $ref: '#/components/schemas/HealthCheckItem' + type: object + output: + type: string + status: + enum: + - pass + - fail + - warn + type: string + version: + type: string + type: object HostCheckObject: properties: body: type: string - x-go-name: Body + commands: + items: + $ref: '#/components/schemas/CheckCommand' + nullable: true + type: array + enable_proxy_protocol: + type: boolean headers: additionalProperties: type: string + nullable: true type: object - x-go-name: Headers method: type: string - x-go-name: Method + protocol: + type: string + timeout: + type: integer url: type: string - x-go-name: CheckURL type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - IdExtractorSource: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef - IdExtractorType: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef + HttpHeader: + additionalProperties: + items: + type: string + type: array + type: object + IDExtractor: + properties: + config: + $ref: '#/components/schemas/IDExtractorConfig' + enabled: + type: boolean + source: + type: string + with: + type: string + type: object + IDExtractorConfig: + properties: + formParamName: + type: string + headerName: + type: string + regexp: + type: string + regexpMatchIndex: + type: integer + xPathExp: + type: string + type: object + Info: + properties: + dbId: + type: string + expiration: + type: string + id: + type: string + name: + type: string + orgId: + type: string + state: + $ref: '#/components/schemas/State' + versioning: + $ref: '#/components/schemas/Versioning' + type: object + Internal: + properties: + enabled: + type: boolean + type: object InternalMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + Introspection: + properties: + cache: + $ref: '#/components/schemas/IntrospectionCache' + client_id: + type: string + client_secret: + type: string + enabled: + type: boolean + identity_base_field: + type: string + url: + type: string + type: object + IntrospectionCache: + properties: + enabled: + type: boolean + timeout: + format: int64 + type: integer + type: object + JWTData: + properties: + secret: + type: string + type: object + JWTValidation: + properties: + enabled: + type: boolean + expires_at_validation_skew: + minimum: 0 + type: integer + identity_base_field: + type: string + issued_at_validation_skew: + minimum: 0 + type: integer + not_before_validation_skew: + minimum: 0 + type: integer + signing_method: + type: string + source: + type: string + type: object + ListenPath: + properties: + strip: + type: boolean + value: + type: string + type: object MethodTransformMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path to_method: type: string - x-go-name: ToMethod type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + Middleware: + properties: + global: + $ref: '#/components/schemas/Global' + operations: + $ref: '#/components/schemas/Operations' + type: object MiddlewareDefinition: properties: + disabled: + type: boolean name: + example: PreMiddlewareFunction type: string - x-go-name: Name path: type: string - x-go-name: Path + raw_body_only: + example: false + type: boolean require_session: + example: false type: boolean - x-go-name: RequireSession type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - MiddlewareDriver: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef MiddlewareIdExtractor: properties: + disabled: + type: boolean extract_from: - $ref: '#/components/schemas/IdExtractorSource' + type: string extract_with: - $ref: '#/components/schemas/IdExtractorType' + type: string extractor_config: - additionalProperties: - type: object + additionalProperties: {} + nullable: true type: object - x-go-name: ExtractorConfig type: object - x-go-package: github.com/TykTechnologies/tyk/apidef MiddlewareSection: properties: auth_check: $ref: '#/components/schemas/MiddlewareDefinition' driver: - $ref: '#/components/schemas/MiddlewareDriver' + type: string id_extractor: $ref: '#/components/schemas/MiddlewareIdExtractor' post: items: $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true type: array - x-go-name: Post post_key_auth: items: $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true type: array - x-go-name: PostKeyAuth pre: items: - $ref: '#/components/schemas/MiddlewareDefinition' + $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true + type: array + response: + items: + $ref: '#/components/schemas/MiddlewareDefinition' + nullable: true + type: array + type: object + MockResponse: + properties: + body: + type: string + code: + type: integer + enabled: + type: boolean + fromOASExamples: + $ref: '#/components/schemas/FromOASExamples' + headers: + $ref: '#/components/schemas/Headers' + type: object + MockResponseMeta: + properties: + body: + type: string + code: + type: integer + disabled: + type: boolean + headers: + additionalProperties: + type: string + nullable: true + type: object + ignore_case: + type: boolean + method: + type: string + path: + type: string + type: object + Monitor: + properties: + trigger_limits: + example: + - 80 + - 60 + - 50 + items: + type: number + nullable: true type: array - x-go-name: Pre - response: + type: object + MutualTLS: + properties: + domainToCertificateMapping: items: - $ref: '#/components/schemas/MiddlewareDefinition' + $ref: '#/components/schemas/DomainToCertificate' + nullable: true type: array - x-go-name: Response + enabled: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/apidef NewClientRequest: - description: >- - NewClientRequest is an outward facing JSON object translated from osin - OAuthClients properties: api_id: + example: keyless type: string - x-go-name: APIID client_id: + example: 2a06b398c17f46908de3dffcb71ef87b type: string - x-go-name: ClientID description: + example: google client login type: string - x-go-name: Description meta_data: + additionalProperties: + type: string + nullable: true type: object - x-go-name: MetaData policy_id: type: string - x-go-name: PolicyID redirect_uri: + example: https://httpbin.org/ip type: string - x-go-name: ClientRedirectURI secret: + example: MmQwNTI5NGQtYjU0YS00NjMyLWIwZjktNTZjY2M1ZjhjYWY0 type: string - x-go-name: ClientSecret type: object - x-go-package: github.com/TykTechnologies/tyk NotificationsManager: - description: 'TODO: Make this more generic' properties: oauth_on_keychange_url: type: string - x-go-name: OAuthKeyChangeURL shared_secret: type: string - x-go-name: SharedSecret - title: >- - NotificationsManager handles sending notifications to OAuth endpoints to - notify the provider of key changes. type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + OASSchemaResponse: + properties: + message: + type: string + schema: {} + status: + type: string + type: object OAuthClientToken: properties: code: type: string - x-go-name: Token expires: - format: int64 type: integer - x-go-name: Expires type: object - x-go-package: github.com/TykTechnologies/tyk + OIDC: + properties: + AuthSources: + $ref: '#/components/schemas/AuthSources' + enabled: + type: boolean + providers: + items: + $ref: '#/components/schemas/ProviderType2' + type: array + scopes: + $ref: '#/components/schemas/ScopesType2' + segregateByClientId: + type: boolean + type: object OIDProviderConfig: properties: client_ids: additionalProperties: type: string + nullable: true type: object - x-go-name: ClientIDs issuer: type: string - x-go-name: Issuer type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - ObjectID: - description: 'http://www.mongodb.org/display/DOCS/Object+IDs' - title: >- - ObjectID is a unique ID identifying a BSON value. It must be exactly 12 - bytes - - long. MongoDB objects by default have such a property set in their "_id" - - property. - type: string - x-go-package: github.com/TykTechnologies/tyk/vendor/gopkg.in/mgo.v2/bson OpenIDOptions: properties: providers: items: $ref: '#/components/schemas/OIDProviderConfig' + nullable: true type: array - x-go-name: Providers segregate_by_client: type: boolean - x-go-name: SegregateByClient type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + Operation: + properties: + allow: + $ref: '#/components/schemas/Allowance' + block: + $ref: '#/components/schemas/Allowance' + cache: + $ref: '#/components/schemas/CachePlugin' + circuitBreaker: + $ref: '#/components/schemas/CircuitBreaker' + doNotTrackEndpoint: + $ref: '#/components/schemas/TrackEndpoint' + enforceTimeout: + $ref: '#/components/schemas/EnforceTimeout' + ignoreAuthentication: + $ref: '#/components/schemas/Allowance' + internal: + $ref: '#/components/schemas/Internal' + mockResponse: + $ref: '#/components/schemas/MockResponse' + postPlugins: + $ref: '#/components/schemas/EndpointPostPlugins' + rateLimit: + $ref: '#/components/schemas/RateLimitEndpoint' + requestSizeLimit: + $ref: '#/components/schemas/RequestSizeLimit' + trackEndpoint: + $ref: '#/components/schemas/TrackEndpoint' + transformRequestBody: + $ref: '#/components/schemas/TransformBody' + transformRequestHeaders: + $ref: '#/components/schemas/TransformHeaders' + transformRequestMethod: + $ref: '#/components/schemas/TransformRequestMethod' + transformResponseBody: + $ref: '#/components/schemas/TransformBody' + transformResponseHeaders: + $ref: '#/components/schemas/TransformHeaders' + urlRewrite: + $ref: '#/components/schemas/URLRewrite' + validateRequest: + $ref: '#/components/schemas/ValidateRequest' + virtualEndpoint: + $ref: '#/components/schemas/VirtualEndpoint' + type: object + Operations: + additionalProperties: + $ref: '#/components/schemas/Operation' + type: object + PaginatedOAuthClientTokens: + properties: + Pagination: + $ref: '#/components/schemas/PaginationStatus' + Tokens: + items: + $ref: '#/components/schemas/OAuthClientToken' + nullable: true + type: array + type: object + PaginationStatus: + properties: + page_num: + type: integer + page_size: + type: integer + page_total: + type: integer + type: object + PersistGraphQLMeta: + properties: + method: + type: string + operation: + type: string + path: + type: string + variables: + additionalProperties: {} + nullable: true + type: object + type: object + PinnedPublicKey: + properties: + domain: + type: string + publicKeys: + items: + type: string + nullable: true + type: array + type: object + PinnedPublicKeys: + items: + $ref: '#/components/schemas/PinnedPublicKey' + nullable: true + type: array + PkixName: + type: object + PluginBundle: + properties: + enabled: + type: boolean + path: + type: string + type: object + PluginConfig: + properties: + bundle: + $ref: '#/components/schemas/PluginBundle' + data: + $ref: '#/components/schemas/PluginConfigData' + driver: + type: string + type: object + PluginConfigData: + properties: + enabled: + type: boolean + value: + additionalProperties: {} + nullable: true + type: object + type: object Policy: properties: _id: - $ref: '#/components/schemas/ObjectID' + example: 5ead7120575961000181867e + type: string + access_rights: + additionalProperties: + $ref: '#/components/schemas/AccessDefinition' + nullable: true type: object - x-go-name: MID + active: + example: true + type: boolean + enable_http_signature_validation: + example: false + type: boolean + graphql_access_rights: + additionalProperties: + $ref: '#/components/schemas/GraphAccessDefinition' + nullable: true + type: object + hmac_enabled: + example: false + type: boolean id: + example: 5ead7120575961000181867e + type: string + is_inactive: + example: false + type: boolean + key_expires_in: + example: 0 + format: int64 + type: integer + last_updated: + example: "1655965189" type: string - x-go-name: ID + max_query_depth: + example: -1 + type: integer + meta_data: + additionalProperties: {} + nullable: true + type: object name: + example: Swagger Petstore Policy type: string - x-go-name: Name org_id: + example: 5e9d9544a1dcd60001d0ed20 type: string - x-go-name: OrgID - rate: - format: double - type: number - x-go-name: Rate + partitions: + $ref: '#/components/schemas/PolicyPartitions' per: + example: 60 format: double type: number - x-go-name: Per quota_max: + example: -1 format: int64 type: integer - x-go-name: QuotaMax quota_renewal_rate: + example: 3600 format: int64 type: integer - x-go-name: QuotaRenewalRate + rate: + example: 1000 + format: double + type: number + smoothing: + $ref: '#/components/schemas/RateLimitSmoothing' + tags: + items: + type: string + nullable: true + type: array throttle_interval: + example: -1 format: double type: number - x-go-name: ThrottleInterval throttle_retry_limit: - type: number - x-go-name: ThrottleRetryLimit - max_query_depth: - type: number - x-go-name: MaxQueryDepth - access_rights: - type: object - x-go-name: AccessRights - additionalProperties: - $ref: '#/components/schemas/AccessDefinition' - hmac_enabled: + example: -1 + type: integer + type: object + PolicyPartitions: + properties: + acl: + example: true type: boolean - x-go-name: HMACEnabled - enable_http_signature_validation: + complexity: + example: false type: boolean - x-go-name: EnableHTTPSignatureValidation - active: + per_api: + example: false type: boolean - x-go-name: Active - is_inactive: + quota: + example: true type: boolean - x-go-name: IsInactive - tags: - type: array + rate_limit: + example: true + type: boolean + type: object + PolicyUpdateObj: + properties: + apply_policies: items: type: string - x-go-name: Tags - key_expires_in: - format: int64 - type: number - x-go-name: KeyExpiresIn - partitions: - $ref: '#/components/schemas/PolicyPartitions' - type: object - x-go-name: Partitions - last_updated: + nullable: true + type: array + policy: type: string - x-go-name: LastUpdates - smoothing: - type: object - $ref: '#/components/schemas/RateLimitSmoothing' - description: Smoothing contains rate limit smoothing settings. - x-go-name: Smoothing - meta_data: - type: object - x-go-name: MetaData - graphql_access_rights: - $ref: '#/components/schemas/GraphAccessDefinition' - title: Policy represents a user policy type: object - x-go-package: github.com/TykTechnologies/tyk/user - PolicyPartitions: + PostAuthenticationPlugin: properties: - quota: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object + PostPlugin: + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object + PrePlugin: + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object + Provider: + properties: + introspection: + $ref: '#/components/schemas/Introspection' + jwt: + $ref: '#/components/schemas/JWTValidation' + type: object + ProviderType2: + properties: + clientToPolicyMapping: + items: + $ref: '#/components/schemas/ClientToPolicy' + type: array + issuer: + type: string + type: object + ProxyConfig: + properties: + check_host_against_uptime_tests: type: boolean - x-go-name: Quota - rate_limit: + disable_strip_slash: type: boolean - x-go-name: RateLimit - complexity: + enable_load_balancing: type: boolean - x-go-name: Complexity - acl: + listen_path: + example: /relative-path-examples/ + type: string + preserve_host_header: type: boolean - x-go-name: Acl - per_api: + service_discovery: + $ref: '#/components/schemas/ServiceDiscoveryConfiguration' + strip_listen_path: + example: true + type: boolean + target_list: + items: + type: string + nullable: true + type: array + target_url: + example: https://httpbin.org/ + type: string + transport: + properties: + proxy_url: + type: string + ssl_ciphers: + items: + type: string + nullable: true + type: array + ssl_force_common_name_check: + type: boolean + ssl_insecure_skip_verify: + type: boolean + ssl_max_version: + minimum: 0 + type: integer + ssl_min_version: + minimum: 0 + type: integer + type: object + type: object + RateLimit: + properties: + enabled: + type: boolean + per: + type: integer + rate: + type: integer + type: object + RateLimitEndpoint: + properties: + enabled: type: boolean - x-go-name: PerAPI + per: + type: integer + rate: + type: integer + type: object + RateLimitMeta: + properties: + disabled: + type: boolean + method: + type: string + path: + type: string + per: + type: number + rate: + type: number type: object - x-go-package: github.com/TykTechnologies/tyk/user RateLimitSmoothing: properties: delay: type: integer - format: int64 - description: Delay is a hold-off between smoothing events and controls how frequently the current allowance will step up or down (in seconds). - minimum: 1 - x-go-name: Delay enabled: type: boolean - description: Enabled indicates if rate limit smoothing is active. - x-go-name: Enabled step: type: integer - format: int64 - description: Step is the increment by which the current allowance will be increased or decreased each time a smoothing event is emitted. - minimum: 1 - x-go-name: Step threshold: type: integer - format: int64 - description: Threshold is the initial rate limit beyond which smoothing will be applied. It is a count of requests during the `per` interval and should be less than the maximum configured `rate`. - minimum: 1 - x-go-name: Threshold - trigger: - type: number - format: double - description: Trigger is a fraction (typically in the range 0.1-1.0) of the step at which point a smoothing event will be emitted as the request rate approaches the current allowance. - minimum: 0 - exclusiveMinimum: true - multipleOf: 0.01 - x-go-name: Trigger - title: RateLimitSmoothing holds the rate smoothing configuration. - description: |- - Rate Limit Smoothing is a mechanism to dynamically adjust the request rate - limits based on the current traffic patterns. It helps in managing request - spikes by gradually increasing or decreasing the rate limit instead of making - abrupt changes or blocking requests excessively. - - Once the rate limit smoothing triggers an allowance change, one of the - following events is emitted: - - - `RateLimitSmoothingUp` when the allowance increases - - `RateLimitSmoothingDown` when the allowance decreases - - Events are emitted based on the configuration: - - - `enabled` (boolean) to enable or disable rate limit smoothing - - `threshold` after which to apply smoothing (minimum rate for window) - - `trigger` configures at which fraction of a step a smoothing event is emitted - - `step` is the value by which the rate allowance will get adjusted - - `delay` is a hold-off in seconds providing a minimum period between rate allowance adjustments - - To determine if the request rate is growing and needs to be smoothed, the - `step * trigger` value is subtracted from the request allowance and, if - the request rate goes above that, then a RateLimitSmoothingUp event is - emitted and the rate allowance is increased by `step`. - - Once the request allowance has been increased above the `threshold`, Tyk - will start to check for decreasing request rate. When the request rate - drops `step * (1 + trigger)` below the request allowance, a - `RateLimitSmoothingDown` event is emitted and the rate allowance is - decreased by `step`. - - After the request allowance has been adjusted (up or down), the request - rate will be checked again over the next `delay` seconds and, if - required, further adjustment made to the rate allowance after the - hold-off. - - For any allowance, events are emitted based on the following calculations: - - - When the request rate rises above `allowance - (step * trigger)`, - a RateLimitSmoothingUp event is emitted and allowance increases by `step`. - - When the request rate falls below `allowance - (step + step * trigger)`, - a RateLimitSmoothingDown event is emitted and allowance decreases by `step`. - - Example: Threshold: 400, Request allowance: 600, Current rate: 500, Step: 100, Trigger: 0.5. - - To trigger a RateLimitSmoothingUp event, the request rate must exceed: - - - Calculation: Allowance - (Step * Trigger). - - Example: 600 - (100 * 0.5) = `550`. - - Exceeding a request rate of `550` will increase the allowance to 700 (Allowance + Step). - - To trigger a RateLimitSmoothingDown event, the request rate must fall below: - - - Calculation: Allowance - (Step + (Step * Trigger)). - - Example: 600 - (100 + (100 * 0.5)) = 450. - - As the request rate falls below 450, that will decrease the allowance to 500 (Allowance - Step). - - The request allowance will be smoothed between `threshold`, and the - defined `rate` limit (maximum). The request allowance will be updated - internally every `delay` seconds. - type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - Regexp: - description: Regexp is a wrapper around regexp.Regexp but with caching - properties: - FromCache: - type: boolean - type: object - x-go-package: github.com/TykTechnologies/tyk/regexp - RequestInputType: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef + trigger: + type: number + type: object + RateLimitType2: + properties: + per: + type: number + rate: + type: number + smoothing: + $ref: '#/components/schemas/RateLimitSmoothing' + type: object + RequestHeadersRewriteConfig: + properties: + remove: + type: boolean + value: + type: string + type: object + RequestSigningMeta: + properties: + algorithm: + type: string + certificate_id: + type: string + header_list: + items: + type: string + nullable: true + type: array + is_enabled: + type: boolean + key_id: + type: string + secret: + type: string + signature_header: + type: string + type: object + RequestSizeLimit: + properties: + enabled: + type: boolean + value: + type: integer + type: object RequestSizeMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path size_limit: format: int64 type: integer - x-go-name: SizeLimit type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + ResponsePlugin: + properties: + plugins: + $ref: '#/components/schemas/CustomPlugins' + type: object ResponseProcessor: properties: name: type: string - x-go-name: Name - options: - type: object - x-go-name: Options + options: {} type: object - x-go-package: github.com/TykTechnologies/tyk/apidef RoutingTrigger: properties: - 'on': - $ref: '#/components/schemas/RoutingTriggerOnType' + "on": + enum: + - all + - any + type: string options: $ref: '#/components/schemas/RoutingTriggerOptions' rewrite_to: type: string - x-go-name: RewriteTo type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - RoutingTriggerOnType: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef RoutingTriggerOptions: properties: header_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: HeaderMatches path_part_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: PathPartMatches payload_matches: $ref: '#/components/schemas/StringRegexMap' query_val_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: QueryValMatches request_context_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true type: object - x-go-name: RequestContextMatches session_meta_matches: additionalProperties: $ref: '#/components/schemas/StringRegexMap' + nullable: true + type: object + type: object + ScopeClaim: + properties: + scope_claim_name: + type: string + scope_to_policy: + additionalProperties: + type: string type: object - x-go-name: SessionMetaMatches type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + ScopeToPolicy: + properties: + policyId: + type: string + scope: + type: string + type: object + Scopes: + properties: + jwt: + $ref: '#/components/schemas/ScopeClaim' + oidc: + $ref: '#/components/schemas/ScopeClaim' + type: object + ScopesType2: + properties: + claimName: + type: string + scopeToPolicyMapping: + items: + $ref: '#/components/schemas/ScopeToPolicy' + type: array + type: object + SecuritySchemes: + additionalProperties: {} + type: object + Server: + properties: + authentication: + $ref: '#/components/schemas/Authentication' + clientCertificates: + $ref: '#/components/schemas/ClientCertificates' + customDomain: + $ref: '#/components/schemas/Domain' + detailedActivityLogs: + $ref: '#/components/schemas/DetailedActivityLogs' + detailedTracing: + $ref: '#/components/schemas/DetailedTracing' + eventHandlers: + $ref: '#/components/schemas/EventHandlers' + gatewayTags: + $ref: '#/components/schemas/GatewayTags' + listenPath: + $ref: '#/components/schemas/ListenPath' + type: object + ServiceDiscovery: + properties: + cache: + $ref: '#/components/schemas/ServiceDiscoveryCache' + cacheTimeout: + type: integer + dataPath: + type: string + enabled: + type: boolean + endpointReturnsList: + type: boolean + parentDataPath: + type: string + portDataPath: + type: string + queryEndpoint: + type: string + targetPath: + type: string + useNestedQuery: + type: boolean + useTargetList: + type: boolean + type: object + ServiceDiscoveryCache: + properties: + enabled: + type: boolean + timeout: + type: integer + type: object ServiceDiscoveryConfiguration: properties: + cache_disabled: + type: boolean cache_timeout: - format: int64 type: integer - x-go-name: CacheTimeout data_path: type: string - x-go-name: DataPath endpoint_returns_list: type: boolean - x-go-name: EndpointReturnsList parent_data_path: type: string - x-go-name: ParentDataPath port_data_path: type: string - x-go-name: PortDataPath query_endpoint: type: string - x-go-name: QueryEndpoint target_path: type: string - x-go-name: TargetPath use_discovery_service: type: boolean - x-go-name: UseDiscoveryService use_nested_query: type: boolean - x-go-name: UseNestedQuery use_target_list: type: boolean - x-go-name: UseTargetList type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - SessionProviderCode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef SessionProviderMeta: properties: meta: - additionalProperties: - type: object + additionalProperties: {} + nullable: true type: object - x-go-name: Meta name: - $ref: '#/components/schemas/SessionProviderCode' + type: string storage_engine: - $ref: '#/components/schemas/StorageEngineCode' + type: string type: object - x-go-package: github.com/TykTechnologies/tyk/apidef SessionState: - description: >- - There's a data structure that's based on this and it's used for Protocol - Buffer support, make sure to update - "coprocess/proto/coprocess_session_state.proto" and generate the - bindings using: cd coprocess/proto && ./update_bindings.sh properties: - tags: - items: - type: string - type: array - x-go-name: Tags access_rights: additionalProperties: $ref: '#/components/schemas/AccessDefinition' + nullable: true type: object - x-go-name: AccessRights alias: + example: portal-developer@example.org type: string - x-go-name: Alias allowance: + example: 1000 format: double type: number - x-go-name: Allowance apply_policies: + example: + - 641c15dd0fffb800010197bf items: type: string + nullable: true type: array - x-go-name: ApplyPolicies apply_policy_id: + deprecated: true + description: deprecated use apply_policies going forward instead to send + a list of policies ids + example: 641c15dd0fffb800010197bf type: string - x-go-name: ApplyPolicyID basic_auth_data: - properties: - hash_type: - $ref: '#/components/schemas/HashType' - password: - type: string - x-go-name: Password - type: object - x-go-name: BasicAuthData + $ref: '#/components/schemas/BasicAuthData' certificate: type: string - x-go-name: Certificate data_expires: + example: 0 format: int64 type: integer - x-go-name: DataExpires + date_created: + example: "2024-03-13T03:56:46.568042549Z" + format: date-time + type: string enable_detail_recording: + deprecated: true + description: deprecated use enable_detailed_recording going forward instead + example: false + type: boolean + enable_detailed_recording: + example: true + type: boolean + enable_http_signature_validation: + example: false type: boolean - x-go-name: EnableDetailedRecording expires: + example: 1.712895619e+09 format: int64 type: integer - x-go-name: Expires hmac_enabled: + example: false type: boolean - x-go-name: HMACEnabled hmac_string: type: string - x-go-name: HmacSecret id_extractor_deadline: format: int64 type: integer - x-go-name: IdExtractorDeadline is_inactive: + example: false type: boolean - x-go-name: IsInactive jwt_data: - properties: - secret: - type: string - x-go-name: Secret - type: object - x-go-name: JWTData + $ref: '#/components/schemas/JWTData' last_check: + example: 0 format: int64 type: integer - x-go-name: LastCheck last_updated: + example: "1710302206" type: string - x-go-name: LastUpdated + max_query_depth: + example: -1 + type: integer meta_data: - additionalProperties: - type: object + additionalProperties: {} + example: + tyk_developer_id: 62b3fb9a1d5e4f00017226f5 + nullable: true type: object - x-go-name: MetaData monitor: - properties: - trigger_limits: - items: - format: double - type: number - type: array - x-go-name: TriggerLimits - type: object - x-go-name: Monitor + $ref: '#/components/schemas/Monitor' oauth_client_id: type: string - x-go-name: OauthClientID oauth_keys: additionalProperties: type: string + nullable: true type: object - x-go-name: OauthKeys org_id: + example: 5e9d9544a1dcd60001d0ed20 type: string - x-go-name: OrgID per: + example: 5 format: double type: number - x-go-name: Per quota_max: + example: 20000 format: int64 type: integer - x-go-name: QuotaMax quota_remaining: + example: 20000 format: int64 type: integer - x-go-name: QuotaRemaining quota_renewal_rate: + example: 3.1556952e+07 format: int64 type: integer - x-go-name: QuotaRenewalRate quota_renews: + example: 1.710302205e+09 format: int64 type: integer - x-go-name: QuotaRenews rate: + example: 1 format: double type: number - x-go-name: Rate + rsa_certificate_id: + type: string session_lifetime: + example: 0 format: int64 type: integer - x-go-name: SessionLifetime smoothing: - type: object $ref: '#/components/schemas/RateLimitSmoothing' - description: Smoothing contains rate limit smoothing settings. - x-go-name: Smoothing + tags: + example: + - edge + - edge-eu + items: + type: string + nullable: true + type: array throttle_interval: + example: 10 format: double type: number - x-go-name: ThrottleInterval throttle_retry_limit: - format: int64 + example: 1000 type: integer - x-go-name: ThrottleRetryLimit - title: >- - SessionState objects represent a current API session, mainly used for - rate limiting. type: object - x-go-package: github.com/TykTechnologies/tyk/user SignatureConfig: properties: algorithm: type: string - x-go-name: Algorithm allowed_clock_skew: - format: int64 type: integer - x-go-name: AllowedClockSkew error_code: - format: int64 type: integer - x-go-name: ErrorCode error_message: type: string - x-go-name: ErrorMessage header: type: string - x-go-name: Header + param_name: + type: string secret: type: string - x-go-name: Secret + use_param: + type: boolean + type: object + State: + properties: + active: + type: boolean + internal: + type: boolean type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - StorageEngineCode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef StringRegexMap: properties: match_rx: type: string - x-go-name: MatchPattern reverse: type: boolean - x-go-name: Reverse type: object - x-go-package: github.com/TykTechnologies/tyk/apidef TemplateData: properties: enable_session: type: boolean - x-go-name: EnableSession input_type: - $ref: '#/components/schemas/RequestInputType' + enum: + - json + - xml + type: string template_mode: - $ref: '#/components/schemas/TemplateMode' + enum: + - blob + - file + type: string template_source: type: string - x-go-name: TemplateSource type: object - x-go-package: github.com/TykTechnologies/tyk/apidef TemplateMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path template_data: $ref: '#/components/schemas/TemplateData' type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - TemplateMode: - type: string - x-go-package: github.com/TykTechnologies/tyk/apidef + Test: + properties: + serviceDiscovery: + $ref: '#/components/schemas/ServiceDiscovery' + type: object + TraceHttpRequest: + properties: + body: + type: string + headers: + $ref: '#/components/schemas/HttpHeader' + method: + example: GET + type: string + path: + example: /keyless-test/ + type: string + type: object + TraceRequest: + properties: + request: + $ref: '#/components/schemas/TraceHttpRequest' + spec: + $ref: '#/components/schemas/APIDefinition' + type: object + TraceResponse: + properties: + logs: + example: '{"level":"warning","msg":"Legacy path detected! Upgrade to extended....' + type: string + message: + example: ok + type: string + response: + example: "====== Request ======\nGET / HTTP/1.1\r\nHost: httpbin.org\r\n\r\n\n====== + Response..." + type: string + type: object + TrackEndpoint: + properties: + enabled: + type: boolean + type: object TrackEndpointMeta: properties: + disabled: + type: boolean method: type: string - x-go-name: Method path: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + TrafficLogs: + properties: + enabled: + type: boolean + type: object + TransformBody: + properties: + body: + type: string + enabled: + type: boolean + format: + type: string + path: + type: string + type: object + TransformHeaders: + properties: + add: + $ref: '#/components/schemas/Headers' + enabled: + type: boolean + remove: + items: + type: string + type: array + type: object TransformJQMeta: properties: filter: type: string - x-go-name: Filter method: type: string - x-go-name: Method path: type: string - x-go-name: Path type: object - x-go-package: github.com/TykTechnologies/tyk/apidef + TransformRequestMethod: + properties: + enabled: + type: boolean + toMethod: + type: string + type: object + UDGGlobalHeader: + properties: + key: + type: string + value: + type: string + type: object + URLRewrite: + properties: + enabled: + type: boolean + pattern: + type: string + rewriteTo: + type: string + triggers: + items: + $ref: '#/components/schemas/URLRewriteTrigger' + type: array + type: object URLRewriteMeta: properties: - MatchRegexp: - $ref: '#/components/schemas/Regexp' + disabled: + type: boolean match_pattern: type: string - x-go-name: MatchPattern method: type: string - x-go-name: Method path: type: string - x-go-name: Path rewrite_to: type: string - x-go-name: RewriteTo triggers: items: $ref: '#/components/schemas/RoutingTrigger' + nullable: true + type: array + type: object + URLRewriteRule: + properties: + in: + type: string + name: + type: string + negate: + type: boolean + pattern: + type: string + type: object + URLRewriteTrigger: + properties: + condition: + type: string + rewriteTo: + type: string + rules: + items: + $ref: '#/components/schemas/URLRewriteRule' + type: array + type: object + Upstream: + properties: + certificatePinning: + $ref: '#/components/schemas/CertificatePinning' + mutualTLS: + $ref: '#/components/schemas/MutualTLS' + rateLimit: + $ref: '#/components/schemas/RateLimit' + serviceDiscovery: + $ref: '#/components/schemas/ServiceDiscovery' + test: + $ref: '#/components/schemas/Test' + url: + type: string + type: object + UptimeTests: + properties: + check_list: + items: + $ref: '#/components/schemas/HostCheckObject' + nullable: true type: array - x-go-name: Triggers + config: + $ref: '#/components/schemas/UptimeTestsConfig' + type: object + UptimeTestsConfig: + properties: + expire_utime_after: + type: integer + recheck_wait: + type: integer + service_discovery: + $ref: '#/components/schemas/ServiceDiscoveryConfiguration' type: object - x-go-package: github.com/TykTechnologies/tyk/apidef ValidatePathMeta: properties: + disabled: + type: boolean error_response_code: - description: >- - Allows override of default 422 Unprocessible Entity response code - for validation errors. - format: int64 type: integer - x-go-name: ErrorResponseCode method: type: string - x-go-name: Method path: type: string - x-go-name: Path schema: - additionalProperties: - type: object + additionalProperties: {} + nullable: true type: object - x-go-name: Schema schema_b64: type: string - x-go-name: SchemaB64 type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - VersionInfo: + ValidateRequest: properties: - paths: - properties: - black_list: - items: - type: string - type: array - x-go-name: BlackList - ignored: - items: - type: string - type: array - x-go-name: Ignored - white_list: - items: - type: string - type: array - x-go-name: WhiteList + enabled: + type: boolean + errorResponseCode: + type: integer + type: object + ValidateRequestMeta: + properties: + enabled: + type: boolean + error_response_code: + type: integer + method: + type: string + path: + type: string + type: object + VersionData: + properties: + default_version: + type: string + not_versioned: + type: boolean + versions: + additionalProperties: + $ref: '#/components/schemas/VersionInfo' + nullable: true + type: object + type: object + VersionDefinition: + properties: + default: + type: string + enabled: + type: boolean + fallback_to_default: + type: boolean + key: + example: x-api-version + type: string + location: + example: header + type: string + name: + type: string + strip_path: + type: boolean + strip_versioning_data: + type: boolean + url_versioning_pattern: + type: string + versions: + additionalProperties: + type: string + nullable: true type: object - x-go-name: Paths + type: object + VersionInfo: + properties: expires: type: string - x-go-name: Expires extended_paths: $ref: '#/components/schemas/ExtendedPathsSet' global_headers: additionalProperties: type: string + nullable: true type: object - x-go-name: GlobalHeaders + global_headers_disabled: + type: boolean global_headers_remove: items: type: string + nullable: true + type: array + global_response_headers: + additionalProperties: + type: string + nullable: true + type: object + global_response_headers_disabled: + type: boolean + global_response_headers_remove: + items: + type: string + nullable: true type: array - x-go-name: GlobalHeadersRemove global_size_limit: format: int64 type: integer - x-go-name: GlobalSizeLimit + ignore_endpoint_case: + type: boolean name: type: string - x-go-name: Name override_target: type: string - x-go-name: OverrideTarget + paths: + properties: + black_list: + items: + type: string + nullable: true + type: array + ignored: + items: + type: string + nullable: true + type: array + white_list: + items: + type: string + nullable: true + type: array + type: object use_extended_paths: + example: true type: boolean - x-go-name: UseExtendedPaths type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - VirtualMeta: + VersionMeta: properties: - function_source_type: - type: string - x-go-name: FunctionSourceType - function_source_uri: - type: string - x-go-name: FunctionSourceURI - method: + expirationDate: + example: 2026-03-26 09:00 type: string - x-go-name: Method - path: + id: + example: keyless type: string - x-go-name: Path - proxy_on_error: + internal: + example: false type: boolean - x-go-name: ProxyOnError - response_function_name: - type: string - x-go-name: ResponseFunctionName - use_session: + isDefaultVersion: + example: true type: boolean - x-go-name: UseSession - type: object - x-go-package: github.com/TykTechnologies/tyk/apidef - apiAllKeys: - description: apiAllKeys represents a list of keys in the memory store - properties: - keys: - items: - type: string - type: array - x-go-name: APIKeys - type: object - x-go-package: github.com/TykTechnologies/tyk - apiModifyKeySuccess: - description: apiModifyKeySuccess represents when a Key modification was successful - properties: - action: - type: string - x-go-name: Action - key: - description: 'in:body' - type: string - x-go-name: Key - key_hash: - type: string - x-go-name: KeyHash - status: - type: string - x-go-name: Status - type: object - x-go-package: github.com/TykTechnologies/tyk - apiStatusMessage: - description: apiStatusMessage represents an API status message - properties: - message: - description: Response details + name: + example: Tyk Test Keyless API type: string - x-go-name: Message - status: + versionName: + example: v2 type: string - x-go-name: Status - type: object - x-go-package: github.com/TykTechnologies/tyk - APIAllCertificates: - description: APIAllCertificates represents a list of certificates - properties: - certs: - items: - type: string - type: array - x-go-name: Certs type: object - x-go-package: github.com/TykTechnologies/tyk - APIAllCertificateBasics: - description: APIAllCertificates represents a list of certificate basics + VersionMetas: properties: - certs: + apis: items: - $ref: '#/components/schemas/CertificateBasics' + $ref: '#/components/schemas/VersionMeta' + nullable: true type: array - x-go-name: Certs + status: + example: success + type: string type: object - x-go-package: github.com/TykTechnologies/tyk - CertificateBasics: - description: CertificateBasics represents basic details of a certificate + VersionToID: properties: id: type: string - x-go-name: ID - issuer_cn: - type: string - x-go-name: IssuerCN - subject_cn: - type: string - x-go-name: SubjectCN - dns_names: - type: array - items: - type: string - x-go-name: DNSNames - has_private: - type: string - x-go-name: HasPrivateKey - not_before: - type: string - x-go-name: NotBefore - not_after: + name: type: string - x-go-name: NotAfter - is_ca: - type: boolean - x-go-name: IsCA type: object - x-go-package: github.com/TykTechnologies/tyk - CertificateMeta: - description: CertificateBasics represents basic details of a certificate + Versioning: properties: - id: - type: string - x-go-name: ID - fingerprint: + default: type: string - x-go-name: Fingerprint - has_private: + enabled: + type: boolean + fallbackToDefault: + type: boolean + key: type: string - x-go-name: HasPrivateKey - issuer: - $ref: '#/components/schemas/pkixName' - subject: - $ref: '#/components/schemas/pkixName' - not_before: + location: type: string - x-go-name: NotBefore - not_after: + name: type: string - x-go-name: NotAfter - dns_names: - type: array - items: - type: string - x-go-name: DNSNames - is_ca: + stripVersioningData: type: boolean - x-go-name: IsCA - type: object - x-go-package: github.com/TykTechnologies/tyk - pkixName: - description: Name represents an X.509 distinguished name - properties: - Country: - type: array - items: - type: string - Organization: - type: array - items: - type: string - OrganizationalUnit: - type: array - items: - type: string - Locality: - type: array - items: - type: string - Province: - type: array - items: - type: string - StreetAddress: - type: array - items: - type: string - PostalCode: - type: array - items: - type: string - SerialNumber: - type: string - CommonName: + urlVersioningPattern: type: string - Names: - type: array - items: - $ref: '#/components/schemas/pkixAttributeTypeAndValue' - ExtraNames: - type: array - items: - $ref: '#/components/schemas/pkixAttributeTypeAndValueSET' - pkixAttributeTypeAndValue: - description: AttributeTypeAndValue mirrors the ASN.1 structure of the same name in RFC 5280, Section 4.1.2.4. - properties: - Type: - type: array - items: - type: integer - Value: - type: object - pkixAttributeTypeAndValueSET: - description: AttributeTypeAndValueSET represents a set of ASN.1 sequences of AttributeTypeAndValue sequences from RFC 2986 (PKCS #10). - properties: - Type: - type: array + versions: items: - type: integer - Value: + $ref: '#/components/schemas/VersionToID' + nullable: true type: array - items: - type: array - items: - $ref: '#/components/schemas/pkixAttributeTypeAndValue' - APICertificateStatusMessage: - description: Status message when certificate is added - properties: - id: - type: string - x-go-name: CertID - status: - type: string - x-go-name: Status - message: - type: string - x-go-name: Message - type: object - x-go-package: github.com/TykTechnologies/tyk - OASSchemaResponse: - description: OAS schema endpoint response type: object + VirtualEndpoint: properties: - status: + body: type: string - x-go-name: Status - message: + enabled: + type: boolean + functionName: type: string - x-go-name: Message - schema: + name: type: string - description: - BooleanQueryParam: - type: string - enum: [ true, false ] - example: true - APIVersionMeta: - description: API version meta + path: + type: string + proxyOnError: + type: boolean + requireSession: + type: boolean type: object + VirtualMeta: properties: - id: + disabled: + type: boolean + function_source_type: + enum: + - blob + - file type: string - name: + function_source_uri: type: string - versionName: + method: type: string - internal: + path: + type: string + proxy_on_error: type: boolean - expirationDate: + response_function_name: type: string - isDefaultVersion: + use_session: type: boolean - parameters: - UpstreamURL: - name: upstreamURL - in: query - description: Upstream URL for the API - required: false - schema: - type: string - ListenPath: - name: listenPath - in: query - description: Listen path for the API - schema: - type: string - required: false - CustomDomain: - name: customDomain - schema: - type: string - description: Custom domain for the API - in: query - required: false - ApiID: - name: apiID - schema: - type: string - description: ID of the API - in: query - required: false - ValidateRequest: - name: validateRequest - in: query - description: Enable validateRequest middleware for all endpoints having a request body with media type application/json - required: false - schema: - $ref: '#/components/schemas/BooleanQueryParam' - AllowList: - name: allowList - in: query - description: Enable allowList middleware for all endpoints - required: false - schema: - $ref: '#/components/schemas/BooleanQueryParam' - MockResponse: - name: mockResponse - in: query - description: Enable mockResponse middleware for all endpoints having responses configured. - required: false - schema: - $ref: '#/components/schemas/BooleanQueryParam' - Authentication: - name: authentication - in: query - description: Enable or disable authentication in your Tyk Gateway as per your OAS document. - schema: - $ref: '#/components/schemas/BooleanQueryParam' - SearchText: - name: searchText - schema: - type: string - description: Search for API version name - in: query - required: false - AccessType: - name: accessType - schema: - type: string - enum: [ "internal", "external" ] - description: Filter for internal or external API versions - in: query - required: false + type: object + XTykAPIGateway: + properties: + info: + $ref: '#/components/schemas/Info' + middleware: + $ref: '#/components/schemas/Middleware' + server: + $ref: '#/components/schemas/Server' + upstream: + $ref: '#/components/schemas/Upstream' + type: object securitySchemes: api_key: + description: Api key in: header name: X-Tyk-Authorization type: apiKey -security: - - api_key: [] diff --git a/tyk-docs/assets/others/release-notes-condensed-template.md b/tyk-docs/assets/others/release-notes-condensed-template.md new file mode 100644 index 0000000000..a3eb3ab45b --- /dev/null +++ b/tyk-docs/assets/others/release-notes-condensed-template.md @@ -0,0 +1,154 @@ +--- +title: Tyk Release Notes +date: 2023-09-27T15:49:11Z +description: "Release notes documenting updates, enhancements, and changes for Tyk versions within the series." +tags: ["Tyk Dashboard", "Release notes", "changelog", "vX.Y", "X.Y.0", "X.Y", "X.Y.Z"] +--- + +**This page contains all release notes for version 5.2.X displayed in a reverse chronological order** + +## Support Lifetime +Our minor releases are supported until our next minor comes out. This would be scheduled in Q<1-4> if this goes ahead as planned. If not, X.Y will remain in support until our next LTS version comes out in March 2024. + +--- + +## X.Y.Z Release Notes + +### Release Date DD Mon YYYY <> + +### Release Highlights + +### Breaking Changes +This release has no breaking changes. + +### Dependencies {#dependencies-X.Y.Z} + +#### Compatibility Matrix For Tyk Components +| Gateway Version | Recommended Compatibility | Backwards Compatibility | +| --------------- | ------------------------- | ----------------------- | +| 5.3 LTS | Helm v2.2 - TBP | Helm vX - vY | +| | MDCB v2.5 - TBP | MDCB v1.7 - v2.4 | +| | Operator v1.8 - TBP | Operator vX - vY | +| | Sync v2.4.1 - TBP | Sync vX - vY | +| | | EDP vX - vY | +| | | Pump vX - vY | +| | | TIB vX - vY | + +#### 3rd Party Dependencies & Tools +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.19, 1.20, 1.21 | 1.19, 1.20, 1.21 | All our binaries| +| [MongoDB](https://www.mongodb.com/try/download/community) | 4.4.x, 5.0.x and 6.0.x | 4.4.x, 5.0.x and 6.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 11.x - 15.x LTS | 11.x - 15.x | Used by Tyk Dashboard | +| OpenAPI JSON Schema | v3.0.0... | v3.0.0... | Used by [Tyk OAS API definition](https://swagger.io/specification/) | [3.0.3](https://spec.openapis.org/oas/v3.0.3)| + +Given the time difference between your upgrade and the release of this version, we recommend customers verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations +There are no deprecations in this release. + +### Upgrade instructions +For users currently on vX.Y.Z, we strongly recommend promptly upgrading to the latest release. If you are working with an older version (lower major), it is advisable to bypass version X.Y.0 and proceed directly to this latest patch release. +
+Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade Instructions. + +### Downloads +- [docker image to pull](https://hub.docker.com/layers/tykio/tyk-{dashboard|gateway}/vX.Y.Z/images/{sha-image}) +- Helm chart - TBP (To Be Published separately after the release) + +### Changelog {#Changelog-vX.Y.Z} + +#### Added + +
    +
  • +
    +Changelog item summary + +The actual changelog item text should go here. It should be no more than three or four sentences. It should link to a content page for further explanation where applicable. There should be a blank line between the summary tags and this paragraph, otherwise, links will not be rendered. +
    +
  • +
  • +
    +Another changelog item summary + +The actual changelog item text should go here. It should be no more than three or four sentences. It should link to a content page for further explanation where applicable. There should be a blank line between the summary tags and this paragraph, otherwise, links will not be rendered. +
    +
  • +
+ + +#### Changed + +
    +
  • +
    +Changelog item summary + +The actual changelog item text should go here. It should be no more than three or four sentences. It should link to a content page for further explanation where applicable. There should be a blank line between the summary tags and this paragraph, otherwise, links will not be rendered. +
    +
  • +
  • +
    +Another changelog item summary + +The actual changelog item text should go here. It should be no more than three or four sentences. It should link to a content page for further explanation where applicable. There should be a blank line between the summary tags and this paragraph, otherwise, links will not be rendered. +
    +
  • +
+ +#### Fixed + +
    +
  • +
    +Changelog item summary + +The actual changelog item text should go here. It should be no more than three or four sentences. It should link to a content page for further explanation where applicable. There should be a blank line between the summary tags and this paragraph, otherwise, links will not be rendered. +
    +
  • +
  • +
    +Another changelog item summary + +The actual changelog item text should go here. It should be no more than three or four sentences. It should link to the content page for further explanation where applicable. There should be a blank line between the summary tags and this paragraph, otherwise, links will not be rendered. +
    +
  • +
+ +#### Security Fixes +- Fixed the following CVEs: + - [CVE-2022-33082](https://nvd.nist.gov/vuln/detail/CVE-2022-33082) + +#### Community Contributions +Special thanks to the following member of the Tyk community for their contribution to this release: + +
    +
  • +
    +Runtime log error incorrectly produced when using Go Plugin Virtual Endpoints + +Fixed a minor issue with Go Plugin virtual endpoints where a runtime log error was produced from a request, even if the response was successful. Thanks to ghub_user_tag_name for highlighting the issue and proposing a fix. +
    +
  • +
+ +--- + + + +## Further Information + +### Upgrading Tyk +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance on the upgrade strategy. + +### API Documentation +- [OpenAPI Document]({{}}) +- [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/collection/) + +### FAQ +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. + +### Miscellaneous (Optional) diff --git a/tyk-docs/assets/others/release-notes-template.md b/tyk-docs/assets/others/release-notes-learner-template.md similarity index 96% rename from tyk-docs/assets/others/release-notes-template.md rename to tyk-docs/assets/others/release-notes-learner-template.md index b9c77607a1..d9dc93f4af 100644 --- a/tyk-docs/assets/others/release-notes-template.md +++ b/tyk-docs/assets/others/release-notes-learner-template.md @@ -20,7 +20,7 @@ tags: ["Tyk Dashboard", "Release notes", "changelog", "vX.Y", "X.Y.0", "X.Y", "X **This page contains all release notes for version 5.2.X displayed in a reverse chronological order** -### Support Lifetime +## Support Lifetime Our minor releases are supported until our next minor comes out. This would be scheduled in Q<1-4> if this goes ahead as planned. If not, X.Y will remain in support until our next LTS version comes out in March 2024. @@ -28,9 +28,15 @@ Our minor releases are supported until our next minor comes out. This would be < ## X.Y.Z Release Notes -##### Release Date DD Mon YYYY <> +### Release Date DD Mon YYYY <> -#### Breaking Changes +### Release Highlights + + +### Breaking Changes This release has no breaking changes. @@ -44,14 +50,14 @@ We try to avoid making changes to our log messages, especially at error and crit Announce future scheduled breaking changes, e.g. Go version updates, DB driver updates, etc. --> -#### Dependencies +### Dependencies {#dependencies-X.Y.Z} -##### Compatibility Matrix For Tyk Components +#### Compatibility Matrix For Tyk Components There are no deprecations in this release. @@ -93,37 +99,26 @@ Once you put an item in this section, we must keep this item listed in all the f -#### Upgrade instructions +### Upgrade instructions -#### Release Highlights - -##### Topic in The Release Highlights -Topic in The Release Highlights - -##### Another Topic in The Release Highlights -Topic in The Release Highlights - -#### Downloads +### Downloads - <> - Helm chart - TBP (To Be Published separately after the release) -#### Changelog {#Changelog-vX.Y.Z} +### Changelog {#Changelog-vX.Y.Z} -##### Added +#### Added -##### Comunity Contributions +#### Community Contributions + ## Further Information ### Upgrading Tyk @@ -255,7 +251,7 @@ If there were changes in any of Tyk’s API docs: - Has a link to the endpoint documentation being included? - Has the benefit of the new/updated endpoint been explained in the release highlights and changelog? --> -- [OpenAPI Document]({{}}) +- [OpenAPI Document]({{}}) - [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/collection/) ### FAQ diff --git a/tyk-docs/assets/scss/_docs.scss b/tyk-docs/assets/scss/_docs.scss index 094194c394..4691a0f423 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; } @@ -205,8 +203,9 @@ width: 98%; max-width: 300px; white-space: normal; + @media (max-width: 555px) { - max-width: 100%; + max-width: 100%; } } @@ -274,7 +273,7 @@ } .grid.big .badge .bottom .read { - color: #258B80; + color: #258b80; font-size: 14px; font-weight: bold; margin-bottom: 10px; @@ -286,12 +285,6 @@ vertical-align: text-top; } - - - - - - .return-top { display: none; } @@ -304,12 +297,6 @@ top: 0px !important; } - - - - - - /* Edit on GitHub button */ .button.medium { color: white; @@ -342,10 +329,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 +348,6 @@ iframe { border-color: $white; } - /* Hero image */ .hero-sidebyside img { margin-right: 20px; @@ -379,12 +365,6 @@ iframe { width: 400px; } - - - - - - /* Suggest an Edit */ .suggest-edit { width: auto; @@ -405,12 +385,16 @@ iframe { margin-bottom: 26px; font-size: 30px; font-family: Inter, sans-serif; + font-weight: 500; + opacity: 0.78; } .wysiwyg h2 { font-weight: bold; font-family: Inter, sans-serif; padding-top: 2%; + font-weight: 500; + opacity: 0.78; } .wysiwyg h1:first-of-type { @@ -425,6 +409,8 @@ iframe { font-weight: bold; padding-top: 35px; margin-top: 0; + font-weight: 500; + opacity: 0.78; } .wysiwyg h4 { @@ -433,6 +419,8 @@ iframe { margin-top: 35px; font-family: "Inter", sans-serif; font-weight: bold; + font-weight: 500; + opacity: 0.78; } .wysiwyg h5 { @@ -440,6 +428,8 @@ iframe { margin-bottom: 4px; margin-top: 27px; font-family: "Inter", sans-serif; + font-weight: 500; + opacity: 0.78; } .wysiwyg p { @@ -454,6 +444,7 @@ iframe { border-top-right-radius: 25px; border-bottom-left-radius: 25px; border-bottom-right-radius: 25px; + @media screen and (min-width: 769px) and (max-width: 1049px) { max-width: 650px; // Change max-width for medium screens } @@ -521,48 +512,42 @@ 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 { display: block; + @media (max-width: 1024px) { display: flex; justify-content: center; flex-direction: row; } - #previousArticle, #nextArticle{ + + #previousArticle, + #nextArticle { @media (max-width: 1024px) { max-width: 160px; margin: auto; } } + @include breakpoint(xlarge) { background: url("../img/nav-center.png") 50% center no-repeat; background-size: 20%; } } -.docs-navigation>div { +.docs-navigation > div { display: table-row; } -.docs-navigation>div>* { +.docs-navigation > div > * { display: table-cell; vertical-align: middle; } @@ -622,15 +607,6 @@ iframe { font-family: "Inter", sans-serif; } - - - - - - - - - /* Return to Top buttons */ #return-to-top { @@ -675,16 +651,6 @@ iframe { } } - - - - - - - - - - /* Documentation : Share - Print*/ .docs-share-print { padding: 10px 0; @@ -751,7 +717,6 @@ iframe { border-radius: 20px; } - @media only screen and (max-width: 1000px) { .hero-sidebyside h1, .hero-sidebyside .hero-text { @@ -806,8 +771,6 @@ iframe { margin-right: 0; } - - .docs-navigation .button { margin-bottom: 5px; } @@ -893,9 +856,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 +866,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..d950d03cff 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,20 @@ width: calc(100% - 80px); } } - } - } .home_header { - border-bottom: 1px solid #E3CEFF; + border-bottom: 1px solid #e3ceff; } @include breakpoint(large, up) { .home_header { - padding-left: 50px; + padding-left: 20px; padding-right: 20px; - } } -.header-refresh{ +.header-refresh { display: flex; align-items: center; justify-content: space-between; @@ -387,7 +374,6 @@ margin-right: 70px; } } - } .header__nav_container { display: flex; @@ -397,10 +383,12 @@ .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..488b297af8 100644 --- a/tyk-docs/assets/scss/_side-menu.scss +++ b/tyk-docs/assets/scss/_side-menu.scss @@ -2,522 +2,516 @@ 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: 16%; + + @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; @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; + padding-top: 1.5rem; +} - a { - display: block; - position: relative; - pointer-events: auto; - width: calc(100% - 30px); +.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; + + select { + border: 1px solid $brand-black; + padding: 0 0.25rem; + border-radius: 4px; + color: $brandpurple-7; + background-color: white; + } +} - &:hover { - color: $brandpurple-dark; - } +.st-treed { + --caret-size: 25px; + font-size: 13px; + + ul { + position: relative; + } + + li { + list-style: none; + width: 100%; + padding-left: 25px; + list-style-type: none; + line-height: 20px; + //margin-bottom: 20px; // + padding-bottom: 10px; + 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: left; + background-size: 12px; + 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: 20px; + + 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: 3px; } -} + &: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: 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; + } + } - .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..df6c608a58 100644 --- a/tyk-docs/assets/scss/_structure.scss +++ b/tyk-docs/assets/scss/_structure.scss @@ -10,14 +10,13 @@ body { 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: 1.5rem; } } @@ -41,12 +40,12 @@ body { overflow-x: hidden; .hasSidebar & { - width: 80%; + width: 90%; padding-left: 30px; border-left: 1px solid $brandpurple-light; @include breakpoint(large) { - padding-inline-end: var(--main-inline-padding); + // padding-inline-end: 16px; } } @@ -60,10 +59,8 @@ body { .wysiwyg a:not(.button):not(.badge):not(.home_btn):not(.home_link) { color: $brandpurple-dark !important; text-decoration: underline; - } - &__container { width: 100%; } @@ -83,8 +80,22 @@ body { } .hasSidebar &__container { - padding-right: 2rem; + padding-right: 20px; + padding-top: 10px; + padding-left: 20px; + } + } + + @include breakpoint(xlarge) { + .hasSidebar &__main { + display: grid; + grid-template-columns: minmax(400px, 2fr) minmax(200px, 1fr); + } + + .hasSidebar &__container { + padding-right: 20px; padding-top: 60px; + padding-left: 100px; } } } @@ -127,15 +138,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 +153,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 +170,7 @@ body { .related_section { margin-top: 30px; - border-top: 1px solid #A8A8CF; + border-top: 1px solid #a8a8cf; } .improve-this-page::before { @@ -176,7 +183,7 @@ body { } .responsive-frame { - max-width: 75% ; + max-width: 75%; height: auto; max-height: 201px; } @@ -193,6 +200,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..57a7602bb2 100644 --- a/tyk-docs/assets/scss/_table-of-contents.scss +++ b/tyk-docs/assets/scss/_table-of-contents.scss @@ -1,323 +1,325 @@ /* 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; - } + 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; + } } .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: 60px 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: 13px !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: 13px !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: 13px !important; + color: #03031c; + margin: 0 !important; + font-weight: 400; + padding-bottom: 10px !important; + padding-left: 14px; + } + } + } + } + + @include breakpoint(large) { + 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: 400; + font-size: 13px; + + @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; + } + } + } } - 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..4dce44386c 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,37 @@ $border-primary: #cdcdcd; /* Elements */ $global-radius: 20px; - -$header-height: 120px; +$header-height: 70px; $header-height-small: 60px; $header-tabs-height: 16px; - - /* 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/_index.md b/tyk-docs/content/_index.md index 9cf0e22fb2..9abec8c28a 100755 --- a/tyk-docs/content/_index.md +++ b/tyk-docs/content/_index.md @@ -2,7 +2,9 @@ publishdate: 2023-03-10 lastmod: 2023-04-10 Title: Tyk API Gateway Documentation -Description: "Discover API management, security, and performance with Tyk. Key concepts, Guides, tutorials, API references and more. Start your API journey!" +Description: + "Discover API management, security, and performance with Tyk. Key concepts, Guides, tutorials, API references and + more. Start your API journey!" tags: [""] diffTitleName: menu: @@ -10,6 +12,6 @@ menu: name: Home weight: 1 diffTitle: true -hideSidebar: true +hideSidebar: false url: / --- diff --git a/tyk-docs/content/advanced-configuration/integrate/sso.md b/tyk-docs/content/advanced-configuration/integrate/sso.md index a4d1f0ec9c..de31c0eba9 100644 --- a/tyk-docs/content/advanced-configuration/integrate/sso.md +++ b/tyk-docs/content/advanced-configuration/integrate/sso.md @@ -13,7 +13,7 @@ weight: 0 ### SSO - The generic use case SSO gives users the ability to log in to multiple applications without the need to enter their password more than once. -[OIDC]({{< ref "basic-config-and-security/security/authentication-authorization/openid-connect" >}}) or SAML enables an application to verify the identity of users from an organization without the need to self store and manage them, and without doing the identification process and exposing their passwords to that application. Their lists of users and passwords are kept safe in one single place, in the IDP that the organization has chosen to use. The Authorization server of the IdP identify the users for a pre-registered and approved application (`client` in OAuth and OIDC terminology). +[OIDC]({{< ref "/api-management/authentication-authorization#use-openid-connect" >}}) or SAML enables an application to verify the identity of users from an organization without the need to self store and manage them, and without doing the identification process and exposing their passwords to that application. Their lists of users and passwords are kept safe in one single place, in the IDP that the organization has chosen to use. The Authorization server of the IdP identify the users for a pre-registered and approved application (`client` in OAuth and OIDC terminology). ### SSO in Tyk @@ -87,7 +87,7 @@ Example profile configuration: { "ActionType": "GenerateOrLoginUserProfile", "ID": "saml-sso-login", - "OrgID": "{YOUR_ORGANISATION_ID}", + "OrgID": "{YOUR_ORGANIZATION_ID}", "CustomEmailField": "", "IdentityHandlerConfig": { "DashboardCredential": "{DASHBOARD_USER_API_KEY}" @@ -169,4 +169,4 @@ Host: localhost:3000 ## SSO with LDAP Integration Detailed instruction on setting [SSO with LDAP]({{< ref "advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib" >}}). -See [apply search filters]({{< ref "advanced-configuration/integrate/3rd-party-identity-providers/ldap#a-name-ldap-search-a-using-advanced-ldap-search" >}}) to add advanced search to your LDAP authentication. +See [apply search filters]({{< ref "advanced-configuration/integrate/3rd-party-identity-providers/ldap#using-advanced-ldap-search" >}}) to add advanced search to your LDAP authentication. diff --git a/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-apis-between-environments.md b/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-apis-between-environments.md index 03a4898287..4efcbbf677 100755 --- a/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-apis-between-environments.md +++ b/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-apis-between-environments.md @@ -13,7 +13,7 @@ It is possible to move APIs between Tyk environments in the following ways: If the environments are both Self-Managed installations and are sharing a Tyk Dashboard (and optionally an MDCB instance) then you can use API and Gateway tagging to transparently and effortlessly move an API from one environment to another. -See [API Tagging]({{< ref "advanced-configuration/manage-multiple-environments/with-tyk-on-premises#a-name-api-tagging-a-api-tagging-with-on-premises" >}}) for more details. +See [API Tagging]({{< ref "advanced-configuration/manage-multiple-environments/with-tyk-on-premises#api-tagging-with-on-premises" >}}) for more details. ### API Sharding @@ -61,4 +61,4 @@ The ID you use in with any Dashboard API integrations will change as the documen ## Use Tyk-Sync -You can also use our new Tyk-Sync tool which allows you to sync your APIs (and Policies) with a Version Control System (VCS). You can then move your APIs between environments. See [Tyk-Sync]({{< ref "/product-stack/tyk-sync/overview" >}}) for more details. \ No newline at end of file +You can also use our new Tyk-Sync tool which allows you to sync your APIs (and Policies) with a Version Control System (VCS). You can then move your APIs between environments. See [Tyk-Sync]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}) for more details. \ No newline at end of file diff --git a/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-policies-between-environments.md b/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-policies-between-environments.md index 5c6e4ac960..9e95e4a0d9 100755 --- a/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-policies-between-environments.md +++ b/tyk-docs/content/advanced-configuration/manage-multiple-environments/move-policies-between-environments.md @@ -145,4 +145,4 @@ As you can see, under the hood, the policy has been migrated correctly with targ ## Use Tyk-Sync -You can also use our new Tyk-Sync tool which allows you to sync your Policies (and APIs) with a Version Control System (VCS). You can then move your Policies between environments. See [Tyk-Sync]({{< ref "/product-stack/tyk-sync/overview" >}}) for more details. +You can also use our new Tyk-Sync tool which allows you to sync your Policies (and APIs) with a Version Control System (VCS). You can then move your Policies between environments. See [Tyk-Sync]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}) for more details. diff --git a/tyk-docs/content/advanced-configuration/transform-traffic/endpoint-designer.md b/tyk-docs/content/advanced-configuration/transform-traffic/endpoint-designer.md index fe9127635f..479cf756b3 100644 --- a/tyk-docs/content/advanced-configuration/transform-traffic/endpoint-designer.md +++ b/tyk-docs/content/advanced-configuration/transform-traffic/endpoint-designer.md @@ -16,7 +16,7 @@ The Endpoint Designer allows to configure all elements of your Tyk Classic API a {{< img src="/img/dashboard/endpoint-designer/classic-endpoint-designer-core.png" alt="The Tyk Classic Endpoint Designer - Core Settings tab" >}} The **Core Settings** tab provides access to configure basic settings for the API: -- [Detailed logging]({{< ref "product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording#detailed-recording-with-tyk-classic-apis" >}}) +- [Detailed logging]({{< ref "product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording#tyk-classic" >}}) - API Settings including - Listen path - [API Categories]({{< ref "product-stack/tyk-dashboard/advanced-configurations/api-categories" >}}) @@ -25,7 +25,7 @@ The **Core Settings** tab provides access to configure basic settings for the AP - [Service Discovery]({{< ref "planning-for-production/ensure-high-availability/service-discovery" >}}) - [API Ownership]({{< ref "product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership" >}}) - [API level rate limiting]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting#configuring-the-rate-limiter-at-the-api-level" >}}) -- [Authentication]({{< ref "basic-config-and-security/security/authentication-&-authorization" >}}) +- [Authentication]({{< ref "/api-management/authentication-authorization" >}}) ## Versions @@ -41,7 +41,7 @@ At the top of the Endpoint Designer, you can see which version you are currently The **Endpoint Designer** is where you can define endpoints for your API so that you can enable and configure Tyk middleware to [perform checks and transformations]({{< ref "advanced-configuration/transform-traffic" >}}) on the API traffic. -In some cases, you will want to set global settings that affect all paths that are managed by Tyk. The **Global Version Settings** section will enable you to configure API-level [request]({{< ref "product-stack/tyk-gateway/middleware/request-header-tyk-classic#api-level-transform-1" >}}) and [response]({{< ref "product-stack/tyk-gateway/middleware/response-header-tyk-classic#api-level-transform-1" >}}) header transformation. +In some cases, you will want to set global settings that affect all paths that are managed by Tyk. The **Global Version Settings** section will enable you to configure API-level [request]({{< ref "product-stack/tyk-gateway/middleware/request-header-tyk-classic#tyk-classic-api" >}}) and [response]({{< ref "product-stack/tyk-gateway/middleware/response-header-tyk-classic#tyk-classic-api" >}}) header transformation. ## Advanced Options diff --git a/tyk-docs/content/api-management/async-apis/use-cases.md b/tyk-docs/content/api-management/async-apis/use-cases.md index 6f3f83836f..e972b1f7aa 100644 --- a/tyk-docs/content/api-management/async-apis/use-cases.md +++ b/tyk-docs/content/api-management/async-apis/use-cases.md @@ -10,7 +10,7 @@ comprehensive set of capabilities to secure, transform, monitor and monetize you ## Security -Tyk Streams supports all the authentication and authorization options available for traditional synchronous APIs. This +[Tyk Streams]({{< ref "product-stack/tyk-streaming/overview" >}}) supports all the authentication and authorization options available for traditional synchronous APIs. This ensures that your async APIs are protected with the same level of security as your REST, GraphQL, and other API types. - **Authentication**: Tyk supports multiple authentication methods for async APIs, including: @@ -23,7 +23,7 @@ ensures that your async APIs are protected with the same level of security as yo ## Transformations and Enrichment -Tyk Streams allows you to transform and enrich the messages flowing through your async APIs. You can modify message payloads, filter events, combine data from multiple sources and more. +[Tyk Streams]({{< ref "product-stack/tyk-streaming/overview" >}}) allows you to transform and enrich the messages flowing through your async APIs. You can modify message payloads, filter events, combine data from multiple sources and more. - **Transformation**: Use Tyk's powerful middleware and plugin system to transform message payloads on the fly. You can convert between different data formats (e.g., JSON to XML), filter fields, or apply custom logic. - **Enrichment**: Enrich your async API messages with additional data from external sources. For example, you can lookup customer information from a database and append it to the message payload. @@ -35,10 +35,10 @@ Tyk captures detailed analytics data for async API usage, including message rate ## Monetization -Tyk Streams enables you to monetize your async APIs by exposing them through the Developer Portal. Developers can discover, subscribe to and consume your async APIs using webhooks or streaming subscriptions. +[Tyk Streams]({{< ref "product-stack/tyk-streaming/overview" >}}) enables you to monetize your async APIs by exposing them through the Developer Portal. Developers can discover, subscribe to and consume your async APIs using webhooks or streaming subscriptions. - **Developer Portal Integration**: Async APIs can be published to the Tyk Developer Portal, allowing developers to browse, subscribe, and access documentation. Developers can manage their async API subscriptions just like traditional APIs. - **Webhooks**: Tyk supports exposing async APIs as webhooks, enabling developers to receive event notifications via HTTP callbacks. Developers can configure their webhook endpoints and subscribe to specific events or topics. -With Tyk Streams, you can easily monetize your async APIs, provide a seamless developer experience, and manage the entire lifecycle of your event-driven architecture. +With [Tyk Streams]({{< ref "product-stack/tyk-streaming/overview" >}}), you can easily monetize your async APIs, provide a seamless developer experience, and manage the entire lifecycle of your event-driven architecture. 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..0f5f45f019 --- /dev/null +++ b/tyk-docs/content/api-management/authentication-authorization.md @@ -0,0 +1,2788 @@ +--- +title: Authentication and Authorization +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: + - /advanced-configuration/integrate/api-auth-mode/json-web-tokens + - /advanced-configuration/integrate/api-auth-mode/oidc-auth0-example + - /advanced-configuration/integrate/api-auth-mode/open-id-connect + - /basic-config-and-security/security/authentication--authorization + - /basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant + - /basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant + - /basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant + - /basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant + - /basic-config-and-security/security/authentication-authorization/ + - /basic-config-and-security/security/authentication-authorization/basic-auth + - /basic-config-and-security/security/authentication-authorization/bearer-tokens + - /basic-config-and-security/security/authentication-authorization/ext-oauth-middleware + - /basic-config-and-security/security/authentication-authorization/go-plugin-authentication + - /basic-config-and-security/security/authentication-authorization/hmac-signatures + - /basic-config-and-security/security/authentication-authorization/json-web-tokens + - /basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0 + - /basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak + - /basic-config-and-security/security/authentication-authorization/json-web-tokens/split-token + - /basic-config-and-security/security/authentication-authorization/multiple-auth + - /basic-config-and-security/security/authentication-authorization/oauth-2-0 + - /basic-config-and-security/security/authentication-authorization/open-keyless + - /basic-config-and-security/security/authentication-authorization/openid-connect + - /basic-config-and-security/security/authentication-authorization/physical-key-expiry + - /basic-config-and-security/security/authentication-authorization/python-etc-plugin-authentication + - /basic-config-and-security/security/authentication-&-authorization + - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant + - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant + - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant + - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant + - /basic-config-and-security/security/mutual-tls + - /basic-config-and-security/security/mutual-tls/client-mtls + - /basic-config-and-security/security/mutual-tls/concepts + - /basic-config-and-security/security/mutual-tls/upstream-mtls + - /basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens + - /security/your-apis + - /security/your-apis/bearer-tokens + - /security/your-apis/json-web-tokens + - /security/your-apis/openid-connect + - /tyk-apis/tyk-gateway-api/api-definition-objects/jwt/docs/basic-config-and-security/security/authentication-authorization/json-web-tokens + - /basic-config-and-security/security/authentication-authorization/oauth2-0/auth-code-grant + - /basic-config-and-security/security/authentication-authorization/oauth2-0/client-credentials-grant + - /basic-config-and-security/security/authentication-authorization/oauth2-0/refresh-token-grant + - /basic-config-and-security/security/authentication-authorization/oauth2-0/username-password-grant + - /basic-config-and-security/security/authentication-authorization/oauth2.0/auth-code-grant + - /basic-config-and-security/security/authentication-authorization/physical-token-expiry + - /basic-config-and-security/security/tls-and-ssl/mutual-tls + - /basic-config-and-security/security/your-apis/oauth2.0/revoke-oauth-tokens + - /security/tls-and-ssl/mutual-tls + - /security/your-apis/oauth-2-0 + + +--- +## Introduction +In API management, authentication and authorization are responsible for controlling access to your APIs and protecting sensitive data. Each serves a distinct purpose: + +* **Authentication**: Confirms the identity of the user or system making the API request. This step validates "who" is attempting to access the API, commonly through methods like tokens, passwords, or certificates. + +* **Authorization**: Determines if the authenticated user or system has the right permissions to perform the requested action. This step defines "what" they are allowed to do based on assigned roles, scopes, or policies. + +Together, these processes allow API providers to control access, safeguard data integrity, and meet security and compliance standards, making them vital for any API management strategy. + +--- + +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 + +OAuth 2.0 is an authorization protocol that enables applications to request limited access to resources on behalf of a user, without needing the user’s password. This approach is common for allowing apps to share data across platforms securely—for example, letting a calendar app access your contacts so you can share schedules between coworkers and friends- making it easier to find an open slot in your day. + +In API management, OAuth 2.0 offers flexible ways to handle access requests depending on the scenario, such as user login or server-to-server interactions. This section will guide you through setting up OAuth 2.0 with Tyk, either by integrating it with your current setup or by using Tyk as the OAuth provider to simplify token management. + +To implement OAuth 2.0 in Tyk, you have two main options: + +### 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-seo id="C4CUDTIHynk" title="Using OAuth2.0 To Authenticate Your APIs">}} + + +### Understanding the OAuth 2.0 Flow within Tyk + +1. **Register a Client ID in Tyk**: + - Start by registering a new OAuth client on the Tyk dashboard. This generates a **Client ID** and **Client Secret** for your app, which you’ll use for secure access requests. + +2. **Request Authorization for the Client**: + - Your app directs the user to Tyk’s authorization URL (`/oauth/authorize/`) with the Client ID, prompting Tyk to check that the request follows OAuth standards and that the Client ID is active and valid. + +3. **Redirect to User Login and Authorization**: + - If the authorization request is valid, Tyk redirects the user to your app’s **Login and Authorization page**. Here, the user logs in, approves access, and grants permissions to the app, similar to a standard OAuth consent flow. + +4. **Authorize the Client in Tyk**: + - After the user approves, your app calls Tyk’s Authorization API (`/authorize-client/`), sending the Client ID and user permissions. Tyk then generates an **Authorization Code** for your app. + +5. **Redirect the User Back to Your App**: + - Tyk redirects the user to your app’s specified **redirect URL**, including the newly generated authorization code. + +6. **Exchange Authorization Code for an Access Token**: + - Your app now exchanges the authorization code for an access token by calling Tyk’s token endpoint (`/oauth/token`). This token lets the app access the user’s data per the permissions granted. + +7. **Optional: Receive Notifications via Webhook**: + - If needed, set up a webhook endpoint in your app to receive notifications from Tyk whenever a new access token is issued. This helps your app keep track of the user’s access status in real time. + +This seems like a complicated process and very verbose - however in actuality, the integration piece is very small. As an API owner, the only steps that require active integration are: + +- **Step 1**: Registering a Client ID (done in Tyk dashboard) +- **Step 3**: Creating a login and authorization page for users to approve app access +- **Step 7**: Setting up a webhook to track access tokens (optional) + + +#### Enabling OAuth 2.0 via the Dashboard + +1. **Select OAuth 2.0 for Your API**: On the Tyk Dashboard, Navigate to APIs, select the API you want to affect and select "edit". Enable + + {{< img src="/img/dashboard/system-management/oauth-auth-mode-new.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/api-management/security/create-oauth-from-api-list.png" alt="OAuth Clients" >}} + {{< img src="/img/api-management/security/fill-out-client-details-oauth.png" alt="Add New OAuth Client" >}} + +6. **Access Client Credentials**: After client creation, view the generated Client ID and Secret. + + {{< img src="/img/api-management/security/client-secret-oauth.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 Username and Password Grant + + +The Username and Password grant type uses a basic authentication key to generate a token. When you create the basic authentication key in the Dashboard, this stores the `username` and `password` used in the API token request. + +{{< img src="/img/diagrams/diagram_docs_username-_-password-grant-type@2x.png" alt="Username and password grant sequence" >}} + + +##### Token Request + +This request provides the client id and basic user credentials in exchange for an API token. + +```shell +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&client_id=ed59158fa2344e94b3e6278e8ab85142&username=oauthapiusername&password=oauthapipassword' +``` + +| Request | Value | +| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| Method | `POST` | +| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | + +| Header | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | +| `Content-Type` | `application/x-www-form-urlencoded` | + +| Data | Value | +| ------------ | --------------------------------------------------------------------- | +| `grant_type` | `password` | +| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | +| `username` | The basic username, in this case `oauthapiusername`. | +| `password` | The basic password, in this case `oauthapipassword`. | + +##### Response + +Response provides the token as `access_token` in the returned JSON which can then be used to access the API: + +```json +{ + "access_token": "580defdbe1d21e0001c67e5ce3ea17db02be4c62ba15089bbcfd1f80", + "expires_in": 3600, + "refresh_token": "YjdhOWFmZTAtNmExZi00ZTVlLWIwZTUtOGFhNmIwMWI3MzJj", + "token_type": "bearer" +} +``` + + + +#### 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 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" >}} + +{{< note success >}} +**Note** + +Refresh tokens are single use only so cannot be reused, and when they are used they also invalidate the token they are associated with. +{{< /note >}} + +##### Request new token + +```shell +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&client_id=ed59158fa2344e94b3e6278e8ab85142&client_secret=MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1&refresh_token=YjdhOWFmZTAtNmExZi00ZTVlLWIwZTUtOGFhNmIwMWI3MzJj' +``` + +| Request | Value | +| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| Method | `POST` | +| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | + +| Header | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | +| `Content-Type` | `application/x-www-form-urlencoded` | + +| Data | Value | +| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `grant_type` | `refresh_token` | +| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | +| `client_secret` | The OAuth client secret, in this case `MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`. | +| `refresh_token` | The refresh token (`refresh_token`) provided in response to the original token request, in this case `YjdhOWFmZTAtNmExZi00ZTVlLWIwZTUtOGFhNmIwMWI3MzJj`. | + +##### Response + +Response provides a new token as `access_token` and a new refresh token as `refresh_token` in the returned JSON: + +```json +{ + "access_token": "580defdbe1d21e0001c67e5c2a0a6c98ba8b4a059dc5825388501573", + "expires_in": 3600, + "refresh_token": "NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2", + "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" >}} + +##### Token Request + +This request provides the client credentials in exchange for an API token. + +```shell +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&client_secret=MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1' +``` + +| Request | Value | +| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| Method | `POST` | +| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | + +| Header | Value | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | +| `Content-Type` | `application/x-www-form-urlencoded` | + +| Data | Value | +| --------------- | ----------------------------------------------------------------------------------------- | +| `grant_type` | `client_credentials` | +| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | +| `client_secret` | The OAuth client secret, in this case `MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`. | + +##### Response + +Response provides the token as `access_token` in the returned JSON which can then be used to access the API: + +```json +{ + "access_token": "580defdbe1d21e0001c67e5c40e93eac3d23494697470b90d7c81593", + "expires_in": 3600, + "token_type": "bearer" +} +``` +{{< note success >}} +**Note** + +It does not provide a refresh token. +{{< /note >}} + + + +#### Use Bearer Tokens +##### What is a bearer token ? + +> Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. + +Tyk provides bearer token access as one of the most convenient building blocks for managing security to your API. In a Tyk setup, this is called "Access Tokens" and is the default mode of any API Definition created for Tyk. + +Bearer tokens are added to a request as a header or as a query parameter. If added as a header, they may be preceded by the word "Bearer" to indicate their type, though this is optional. + +Traditionally these tokens are used as part of the `Authorization` header. + +##### Enable bearer tokens in your API Definition with the Dashboard + +To enable the use of a bearer token in your API: + +1. Select your API from the **System Management > APIs** menu +2. Scroll to the **Authentication** options +3. Select **Authentication Token** from the drop-down list +4. Select **Strip Authorization Data** to strip any authorization data from your API requests +5. Tyk will by default assume you are using the `Authorization` header, but you can change this by setting the **Auth Key Header** name value +6. You can select whether to use a URL query string parameter as well as a header, and what parameter to use. If this is left blank, it will use the **Auth Key Header** name value. +7. You can select whether to use a **cookie value**. If this is left blank, it will use the Header name value. +8. You can select to use a **client certificate**. This allows you to create dynamic keys based on certificates. + +{{< img src="/img/api-management/security/client-mtls-api-setup.png" alt="Target Details: Auth Token" >}} + +##### Enable bearer tokens in your API Definition with file-based + +Tyk will by default use the bearer token method to protect your API unless it is told otherwise. + +These tokens can be set as a *header, url parameter, or cookie name of a request*. A request for a resource at the API endpoint of `/api/widgets/12345` that uses access tokens will require the addition of a header field, traditionally this is the `Authorization` header. + +The name of the key can be defined as part of the API definition under the `auth` section of an API Definition file: + +```{.copyWrapper} +"auth": { + "auth_header_name": "authorization", + "use_param": false, + "param_name": "", + "use_cookie": false, + "cookie_name": "" +}, +``` + +To use URL query parameters instead of a header, set the `auth.use_param` setting in your API definition to `true`. + +{{< note success >}} +**Note** + +Unlike headers, URL query parameters are *case sensitive*. +{{< /note >}} + + +To use a cookie name instead of a header or request parameter, set the `use_cookie` parameter to `true`. Cookie names are also case sensitive. + +**Signature validation** + +If you are migrating from platforms like Mashery, which use request signing, you can enable signature validation like this: + +```{.copyWrapper} +... +"auth": { + "validate_signature": true, + "signature": { + "algorithm": "MasherySHA256", + "header": "X-Signature", + "secret": "secret", + "allowed_clock_skew": 2 + } +} +... +``` +`validate_signature`: boolean value to tell Tyk whether to enable signature validation or not + +`signature.algorithm`: the algorithm you wish to validate the signature against. Currently supported + - `MasherySHA256` + - `MasheryMD5` + + `signature.header`: header key of attempted signature + + `signature.secret`: the shared secret which was used to sign the request + - Can hold a dynamic value, by referencing `$tyk_meta` or `$tyk_context` variables. + - Example: `"secret": "$tyk_meta.individual_secret"`. Which effectively means that you have created/imported the api key into Tyk, and have stored the shared secret in the field `individual_secret` of the session token's meta-data. + +`signature.allowed_clock_skew`: allowed deviation in seconds between UNIX timestamp of Tyk & UNIX timestamp used to generate the signed request + +**Custom tokens** + +It is possible to provide Tyk with your own custom tokens, this can be achieved using the Tyk Gateway REST API. This is very useful if you have your own identity provider and don't want Tyk to create and manage tokens for you, and instead just mirror those tokens within Tyk to off-load access control, quotas and rate limiting from your own application. + +##### Enabling bearer tokens with Tyk Operator + +Please consult the Tyk Operator supporting documentation for an example of how to [enable a bearer token]({{< ref "api-management/automations#auth-token-bearer-token" >}}) with Tyk Operator. + +### Revoke OAuth Tokens + +This feature gives you (both developers and Dashboard users) the ability to revoke OAuth tokens. You can revoke specific tokens by providing the token and token hint (`access_token` or `refresh_token`) or you can revoke all OAuth Client tokens. + +You can revoke OAuth tokens via the following methods: +* From a Gateway API endpoint (in compliance with https://tools.ietf.org/html/rfc7009). See the OAuth section of our [Swagger doc]({{< ref "tyk-gateway-api" >}}) for the Gateway REST API for details. +* Via a Dashboard API calls - [Revoke a token]({{< ref "tyk-apis/tyk-dashboard-api/oauth-key-management#revoke-a-single-oauth-client-token" >}}) and [revoke all tokens]({{< ref "tyk-apis/tyk-dashboard-api/oauth-key-management#revoke-all-oauth-client-tokens" >}}) +* Via a Portal Developer API call - [Revoke a token]({{< ref "tyk-apis/tyk-portal-api/portal-developers#revoke-a-single-oauth-client-token" >}}) and [revoke all tokens]({{< ref "tyk-apis/tyk-portal-api/portal-developers#revoke-all-oauth-client-tokens" >}}) +* Via the Developer menu from the Tyk Dashboard + +Here's an example of how to revoke a token via the Tyk Dashboard API + +#### 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`. | + + +## Other Authentication Methods + +### 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. + +#### How does Basic Authentication work? + +An API request made using Basic Authentication will have an `Authorization` header that contains the API key. + +The value of the `Authorization` header will be in the form: + +``` +Basic base64Encode(username:password) +``` + +A real request could look something like: + +``` +GET /api/widgets/12345 HTTP/1.1 +Host: localhost:8080 +Authorization: Basic am9obkBzbWl0aC5jb206MTIzNDU2Nw== +Cache-Control: no-cache +``` + +In this example the username is `john@smith.com` and the password is `1234567` (see [base64encode.org](https://www.base64encode.org)) + +##### The problem with Basic Authentication + +With Basic Authentication, the authentication credentials are transferred from client to server (in our case, the Tyk Gateway) as encoded plain text. This is not a particularly secure way to transfer the credentials as it is highly susceptible to intercept; as the security of user authentication is usually of critical importance to API owners, Tyk recommends that Basic Authentication should only ever be used in conjunction with a TLS such as SSL. + +##### Protect your API with Basic Authentication + +Authentication type is configured within your API Definition; this can be done via the [Tyk Dashboard](#enable-basic-authentication-using-the-tyk-dashboard) or directly within the [API Definition file](#enable-basic-authentication-in-your-file-based-api-definition). + + +#### Enable Basic Auth +##### Enable Basic Authentication using the Tyk Dashboard + +1. Select your API from the **API Management > APIs** menu +2. Scroll to the **Authentication** options +3. Select **Basic Authentication** from the drop-down list +4. Select **Strip Authorization Data** to strip any authorization data from your API requests. +5. Tyk will by default assume you are using the `Authorization` header, but you can change this by setting the **Auth Key Header** name value +6. You can select whether to use a URL query string parameter as well as a header, and what parameter to use. If this is left blank, it will use the **Auth Key Header** name value. +7. You can select whether to use a **cookie value**. If this is left blank, it will use the Header name value. + +{{< img src="/img/api-management/security/basic-auth-api-setup.png" alt="Target Details: Basic Auth" >}} + +##### Enable Basic Authentication in your file-based API Definition + +To enable Basic Authentication, the API Definition file needs to be set up to allow basic authentication rather than expecting a standard access token; this is achieved by setting `use_basic_auth` to true: + +```{.copyWrapper} +{ + "name": "Tyk Test API", + ... + "use_basic_auth": true, + ... +} +``` + +As you can see in the above example, enabling Basic Authentication is as simple as setting a flag for the feature in your API Definition object. Since Basic Authentication is a standard, Tyk will always look for the credentials as part of the `Authorization` header. + +##### Enable basic authentication using Tyk Operator + +Please consult the Tyk Operator supporting documentation for an example of how to [enable basic authentication]({{< ref "api-management/automations#basic-authentication" >}}) with Tyk Operator. + +#### Create a Basic Authentication user + +When using Basic Authentication, the API key used to access the API is not generated by the Tyk system, instead you need to create at least one Basic Authentication user in the Tyk Gateway. Tyk will compare the Basic Authentication key provided in the request against the list of users you have created. + +##### Using Tyk Dashboard + +You can use the Tyk Dashboard to register a Basic Authentication key that can then be used to access your API. + +When you select the API, you can see that Basic Authentication settings are automatically displayed in the Authentication tab: + +{{< img src="/img/api-management/security/basic-auth-api-setup.png" alt="Basic Auth tab" >}} + +Then add a username & password and save! + +Now you can curl the API in two different ways: + +``` +$ curl http://localhost:8080/basicauth/get \ + --header "Authorization: Basic $(echo -n 'myusername:mypassword' | base64)" +<200 response> + +$ curl http://myusername:mypassword@localhost:8080/basicauth/get +<200 response from upstream> +``` +We have full tutorials to guide you to [create an API Key]({{< ref "getting-started/create-api-key" >}}) via the Dashboard. + +##### Using the Tyk Gateway API + +This command creates a new basic authentication user in the Tyk Gateway with the user name `testuser` and password `mickey-mouse` by sending a `POST` command to the `/tyk/keys/` endpoint of Tyk Gateway API: + +```{.copyWrapper} +curl -X POST -H "x-tyk-authorization: 352d20fe67be67f6340b4c0605b044c3" \ + -s \ + -H "Content-Type: application/json" \ + -X POST \ + -d '{ + "allowance": 1000, + "rate": 1000, + "per": 1, + "expires": -1, + "quota_max": -1, + "org_id": "53ac07777cbb8c2d53000002", + "quota_renews": 1449051461, + "quota_remaining": -1, + "quota_renewal_rate": 60, + "access_rights": { + "{API-ID}": { + "api_id": "{API-ID}", + "api_name": "{API-NAME}", + "versions": ["Default"] + } + }, + "meta_data": {}, + "basic_auth_data": { + "password": "mickey-mouse" + } + }' http://{your-tyk-gateway-host}:{port}/tyk/keys/testuser | python -mjson.tool +``` + +{{< note success >}} +**Note** + +You use `POST` to create a new user and `PUT` to update an existing entry. + +Be careful to ensure that the `org_id` is set correctly and consistently so that the Basic Authentication user is created in the correct organization. +{{< /note >}} + +##### Using the Tyk Dashboard API + +This command creates a new basic authentication user in the Tyk Gateway with the user name `testuser2` and password `minnie-mouse` by sending a `POST` command to the `/tyk/keys/` endpoint of Tyk Dashboard API: + +```{.copyWrapper} +curl -X POST -H "Authorization: 907aed9f88514f175f1dccf8a921f741" + -s + -H "Content-Type: application/json" + -X POST + -d '{ + "allowance": 1000, + "rate": 1000, + "per": 1, + "expires": -1, + "quota_max": -1, + "org_id": "53ac07777cbb8c2d53000002", + "quota_renews": 1449051461, + "quota_remaining": -1, + "quota_renewal_rate": 60, + "access_rights": { + "{API-ID}": { + "api_id": "{API-ID}", + "api_name": "{API-NAME}", + "versions": [ + "Default" + ] + } + }, + "meta_data": {}, + "basic_auth_data": { + "password": "minnie-mouse" + } + }' http://{your-tyk-dashboard-host}:{port}/api/apis/keys/basic/testuser2 | python -mjson.tool +``` + +[See Basic Authentication via the Dashboard API]({{< ref "tyk-apis/tyk-dashboard-api/basic-authentication" >}}) + +{{< note success >}} +**Note** + +You use `POST` to create a new user and `PUT` to update an existing entry. + +Be careful to ensure that the `org_id` is set correctly and consistently so that the Basic Authentication user is created in the correct organization. +{{< /note >}} + +#### Extract credentials from the request body + +In some cases, for example when dealing with SOAP, user credentials can be passed within the request body. To handle this situation, you can configure basic auth plugin to extract username and password from the body, by providing regexps like this: + +```{.copyWrapper} +"basic_auth": { + "extract_from_body": true, + "body_user_regexp": "(.*)", + "body_password_regexp": "(.*)" +} +``` + +Note that the regexp should contain only one match group, which points to the actual value. + + +### Integrate External OAuth Middleware + +Tyk offers two types of OAuth authentication flow; Tyk itself as the identity provider (IdP) and Tyk connecting to an external 3rd party IdP. ‘External OAuth’ is what we call this second mechanism. To call an API that is protected by OAuth, you need to have an access token from the third party IDP (it could be an opaque token or a JWT). + +For subsequent calls the access token is provided alongside the API call and needs to be validated. With JWT, Tyk can confirm the validity of the JWT with the secret provided in your config. The secret signs the JWT when created and confirms that none of its contents has changed. + +For this reason, information like the expiry date which are often set within the JWT cannot be changed after the JWT has been initially created and signed. This means you are not able to revoke a token before the expiry set in the JWT with the standard JWT flow. With OAuth you can use [OAuth introspection](https://www.rfc-editor.org/rfc/rfc7662) to overcome this. With introspection, you can validate the access token via an introspection endpoint that validates the token. + +Let’s see how external OAuth middleware is configured. + +#### OAS contract + +```yaml +externalOAuthServer: + enabled: true, + providers: # only one item in the array for now (we're going to support just one IDP config in the first iteration) + - jwt: #validate JWTs generated by 3rd party Oauth servers (like Okta) + enabled: true + signingMethod: HMAC/RSA/ECDSA # to verify signing method used in jwt + source: key # secret to verify signature + issuedAtValidationSkew: 0 + notBeforeValidationSkew: 0 + expiresAtValidationSkew: 0 + identityBaseField: # identity claimName + introspection: # array for introspection details + enabled: true/false + clientID: # for introspection request + clientSecret: # for introspection request, if empty will use oAuth.secret + url: # token introspection endpoint + cache: # Tyk will cache the introspection response when `cache.enabled` is set to `true` + enabled: true/false, + timeout: 0 # The duration (in seconds) for which Tyk will retain the introspection outcome in its cache. If the value is "0", it indicates that the introspection outcome will be stored in the cache until the token's expiration. + identityBaseField: # identity claimName +``` + +#### Tyk Classic API definition contract + +```yaml +"external_oauth": { + "enabled": true, + "providers": [ + { + "jwt": { + "enabled": false, + "signing_method": rsa/ecdsa/hmac, + "source": # jwk url/ base64 encoded static secret / base64 encoded jwk url + "identity_base_field": # identity claim name + "expires_at_validation_skew": # validation skew config for exp + "not_before_validation_skew": # validation skew config for nbf + "issued_at_validation_skew" : # validation skew config for iat + }, + "introspection": { + "enabled": true, + "url": # introspection endpoint url + "client_id": # client id used for introspection + "client_secret": # client secret to be filled here (plain text for now, TODO: decide on a more secure mechanism) + "identity_base_field": # identity claim name + "cache": { + "enabled": true, + "timeout": # timeout in seconds + } + } + } + ] +} +``` +- `externalOAuthServer` set `enabled` to `true` to enable the middleware. +- `providers` is an array of multiple IDP configurations, with each IDP config being an element in the `providers` array. +- You can use this config to use JWT self validation using `jwt` or use introspection via `instropection` in the `providers` section . + +{{< note success >}} +**Note** + +For now, you’ll be limiting `providers` to have only one element, ie one IDP configured. +{{< /note >}} + +#### JWT + +There could be cases when you don’t need to introspect a JWT access token from a third party IDP, and instead you can just validate the JWT. This is similar to existing JWT middleware, adding it in External OAuth middleware for semantic reasons. + +- `enabled` - enables JWT validation. +- `signingMethod` - specifies the signing method used to sign the JWT. +- `source` - the secret source, it can be one of: + - a base64 encoded static secret + - a valid JWK url in plain text + - a valid JWK url in base64 encoded format +- `issuedAtValidationSkew` , `notBeforeValidationSkew`, `expiresAtValidationSkew` can be used to [configure clock skew](#adjust-jwt-clock-skew-configuration) for json web token validation. +- `identityBaseField` - the identity key name for claims. If empty it will default to `sub`. + +##### Example: Tyk OAS API definition with JWT validation enabled + +```json +"securitySchemes": { + "external_jwt": { + "enabled": true, + "header": { + "enabled": true, + "name": "Authorization" + }, + "providers": [ + { + "jwt": { + "enabled": true, + "signingMethod": "hmac", + "source": "dHlrLTEyMw==", + "identityBaseField": "sub" + } + } + ] + } +} +``` + +##### Example: Tyk Classic API definition with JWT validation enabled + +```json +"external_oauth": { + "enabled": true, + "providers": [ + { + "jwt": { + "enabled": true, + "signing_method": "hmac", + "source": "dHlrLTEyMw==", + "issued_at_validation_skew": 0, + "not_before_validation_skew": 0, + "expires_at_validation_skew": 0, + "identity_base_field": "sub" + }, + "introspection": { + "enabled": false, + "url": "", + "client_id": "", + "client_secret": "", + "identity_base_field": "", + "cache": { + "enabled": false, + "timeout": 0 + } + } + } + ] +} +``` +#### Introspection + +For cases where you need to introspect the OAuth access token, Tyk uses the information in the `provider.introspection` section of the contract. This makes a network call to the configured introspection endpoint with the provided `clientID` and `clientSecret` to introspect the access token. + +- `enabled` - enables OAuth introspection +- `clientID` - clientID used for OAuth introspection, available from IDP +- `clientSecret` - secret used to authenticate introspection call, available from IDP +- `url` - endpoint URL to make the introspection call +- `identityBaseField` - the identity key name for claims. If empty it will default to `sub`. + +##### Caching + +Introspection via a third party IdP is a network call. Sometimes it may be inefficient to call the introspection endpoint every time an API is called. Caching is the solution for this situation. Tyk caches the introspection response when `enabled` is set to `true` inside the `cache` configuration of `introspection`. Then it retrieves the value from the cache until the `timeout` value finishes. However, there is a trade-off here. When the timeout is long, it may result in accessing the upstream with a revoked access token. When it is short, the cache is not used as much resulting in more network calls. + +The recommended way to handle this balance is to never set the `timeout` value beyond the expiration time of the token, which would have been returned in the `exp` parameter of the introspection response. + +See the example introspection cache configuration: + +```yaml +"introspection": { + ... + "cache": { + "enabled": true, + "timeout": 60 // in seconds + } +} +``` +##### Example: Tyk OAS API definition external OAuth introspection enabled + +```json +"securitySchemes": { + "keycloak_oauth": { + "enabled": true, + "header": { + "enabled": true, + "name": "Authorization" + }, + "providers": [ + { + "introspection": { + "enabled": true, + "url": "http://localhost:8080/realms/tyk/protocol/openid-connect/token/introspect", + "clientId": "introspection-client", + "clientSecret": "DKyFN0WXu7IXWzR05QZOnnSnK8uAAZ3U", + "identityBaseField": "sub", + "cache": { + "enabled": true, + "timeout": 3 + } + } + } + ] + } +} +``` +##### Example: Tyk Classic API definition with external OAuth introspection enabled + +```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 + } + } + } + ] +} +``` + + +### 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]({{ ref "/plugins/supported-languages/golang/#supported-plugin-types" >}}) + + +### Sign Requests with HMAC + +{{< note success >}} Note + +Tyk can interact with HMAC Signing in two ways. Firstly, as a client, we can validate the signature of incoming requests and map this to API access. You can also use Tyk to generate a header containing the signature of the request for use in upstream message integrity checks. For the upstream HMAC case please see [here]({{< ref "#upstream-hmac-request-signing" >}}) {{< /note >}} + + +HMAC Signing is an access token method that adds another level of security by forcing the requesting client to also send along a signature that identifies the request temporally to ensure that the request is from the requesting user, using a secret key that is never broadcast over the wire. + +Tyk currently implements the latest draft of the [HMAC Request Signing standard](http://tools.ietf.org/html/draft-cavage-http-signatures-05). + +An HMAC signature is essentially some additional data sent along with a request to identify the end-user using a hashed value, in our case we encode the 'date' header of a request, the algorithm would look like: + +``` +Base64Encode(HMAC-SHA1("date: Mon, 02 Jan 2006 15:04:05 MST", secret_key)) +``` + +The full request header for an HMAC request uses the standard `Authorization` header, and uses set, stripped comma-delimited fields to identify the user, from the draft proposal: + +``` +Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64Encode(HMAC-SHA1(signing string))" +``` + +Tyk supports the following HMAC algorithms: "hmac-sha1", "hmac-sha256", "hmac-sha384", "hmac-sha512”, and reads value from algorithm header. You can limit allowed algorithms by setting `hmac_allowed_algorithms` field in API definition, like this: `"hmac_allowed_algorithms": ["hmac-sha256", "hmac-sha512"]`. + +The date format for an encoded string is: + +``` +Mon, 02 Jan 2006 15:04:05 MST +``` + +This is the standard for most browsers, but it is worth noting that requests will fail if they do not use the above format. + +When an HMAC-signed request comes into Tyk, the key is extracted from the `Authorization` header, and retrieved from Redis. If the key exists then Tyk will generate its own signature based on the requests "date" header, if this generated signature matches the signature in the `Authorization` header the request is passed. + +##### Supported headers + +Tyk API Gateway supports full header signing through the use of the `headers` HMAC signature field. This includes the request method and path using the`(request-target)` value. For body signature verification, HTTP Digest headers should be included in the request and in the header field value. + +{{< note success >}} +**Note** + +All headers should be in lowercase. +{{< /note >}} + + +##### A sample signature generation snippet + +```{.copyWrapper} +... + +refDate := "Mon, 02 Jan 2006 15:04:05 MST" + +// Prepare the request headers: +tim := time.Now().Format(refDate) +req.Header.Add("Date", tim) +req.Header.Add("X-Test-1", "hello") +req.Header.Add("X-Test-2", "world") + +// Prepare the signature to include those headers: +signatureString := "(request-target): " + "get /your/path/goes/here" +signatureString += "date: " + tim + "\n" +signatureString += "x-test-1: " + "hello" + "\n" +signatureString += "x-test-2: " + "world" + +// SHA1 Encode the signature +HmacSecret := "secret-key" +key := []byte(HmacSecret) +h := hmac.New(sha1.New, key) +h.Write([]byte(signatureString)) + +// Base64 and URL Encode the string +sigString := base64.StdEncoding.EncodeToString(h.Sum(nil)) +encodedString := url.QueryEscape(sigString) + +// Add the header +req.Header.Add("Authorization", + fmt.Sprintf("Signature keyId="9876",algorithm="hmac-sha1",headers="(request-target) date x-test-1 x-test-2",signature="%s"", encodedString)) + +... +``` + +##### Date header not allowed for legacy .Net + +Older versions of some programming frameworks do not allow the Date header to be set, which can causes problems with implementing HMAC, therefore, if Tyk detects a `x-aux-date` header, it will use this to replace the Date header. + +##### Clock Skew + +Tyk also implements the recommended clock-skew from the specification to prevent against replay attacks, a minimum lag of 300ms is allowed on either side of the date stamp, any more or less and the request will be rejected. This means that requesting machines need to be synchronised with NTP if possible. + +You can edit the length of the clock skew in the API Definition by setting the `hmac_allowed_clock_skew` value in your API definition. This value will default to 0, which deactivates clock skew checks. + +##### Additional notes + +HMAC Signing is a good way to secure an API if message reliability is paramount, it goes without saying that all requests should go via TLS/SSL to ensure that MITM attacks can be minimized. There are many ways of managing HMAC, and because of the additional encryption processing overhead requests will be marginally slower than more standard access methods. + +#### Setting up HMAC using the Dashboard + +To enable the use of HMAC Signing in your API from the Dashboard: + +1. Select your API from the **System Management > APIs** menu +2. Scroll to the **Authentication** options +3. Select **HMAC (Signed Authetication Key)** from the drop-down list +4. Configure your **HMAC Request Signing** settings. +5. Select **Strip Authorization Data** to strip any authorization data from your API requests. +6. Tyk will by default assume you are using the `Authorization` header, but you can change this by setting the **Auth Key Header** name value +7. You can select whether to use a URL query string parameter as well as a header, and what parameter to use. If this is left blank, it will use the **Auth Key Header** name value. +8. You can select whether to use a **cookie value**. If this is left blank, it will use the Header name value. + + +{{< img src="/img/2.10/hmac_auth_settings.png" alt="Target Details: HMAC" >}} + + +#### Setting up HMAC using an API Definition + +To enable HMAC on your API, first you will need to set the API definition up to use the method, this is done in the API Definition file/object: + +```{.copyWrapper} +{ + "name": "Tyk Test API", + ... + "enable_signature_checking": true, + "use_basic_auth": false, + "use_keyless": false, + "use_oauth2": false, + "auth": { + "auth_header_name": "" + }, + ... +} +``` + +Ensure that the other methods are set to false. + +#### Setting up an HMAC Session Object + +When creating a user session object, the settings should be modified to reflect that an HMAC secret needs to be generated alongside the key: + +```{.copyWrapper} +{ + ... + "hmac_enabled": true, + "hmac_string": "", + ... +} +``` + +Creating HMAC keys is the same as creating regular access tokens - by using the [Tyk Gateway API]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/authentication" >}}). Setting the `hmac_enabled` flag to `true`, Tyk will generate a secret key for the key owner (which should not be modified), but will be returned by the API so you can store and report it to your end-user. + + +#### Upstream HMAC request signing + +You can sign a request with HMAC, before sending to the upsteam target. + +This feature is implemented using [Draft 10](https://tools.ietf.org/html/draft-cavage-http-signatures-10) RFC. + +`(request-target)` and all the headers of the request will be used for generating signature string. +If the request doesn't contain a `Date` header, middleware will add one as it is required according to above draft. + +A config option `request_signing` can be added in an API Definition to enable/disable the request signing. It has following format: + +```{.json} +"request_signing": { + "is_enabled": true, + "secret": "xxxx", + "key_id": "1", + "algorithm": "hmac-sha256" +} +``` + +The following algorithms are supported: + +1. `hmac-sha1` +2. `hmac-sha256` +3. `hmac-sha384` +4. `hmac-sha512` + + +### Use OpenID Connect + +{{< note success >}} +**Note** + +Tyk's dedicated OpenID Connect Authentication middleware will be deprecated from Tyk 5.7.0. Tyk's [JSON Web Token (JWT)](#use-json-web-tokens-jwt) authentication method also allows you to integrate with an OIDC provider, so the dedicated OIDC middleware will be deprecated to reduce duplication and potential for misconfiguration. +{{< /note >}} + + +[OpenID Connect](https://openid.net/developers/how-connect-works) (OIDC) builds on top of OAuth 2.0, adding authentication. You can secure your APIs on Tyk by integrating with any standards compliant OIDC provider using [JSON Web Tokens](#use-json-web-tokens-jwt) (JWTs). +JWTs offer a simple way to use the third-party Identity Provider (IdP) without needing any direct integration between the Tyk and 3rd-party systems. + +To integrate a 3rd party OAuth2/OIDC IdP with Tyk, all you will need to do is ensure that your IdP can issue OAuth2 JWT access tokens as opposed to opaque tokens. + +The client application authenticates with the IdP which then provides an access token that is accepted by Tyk. Tyk will take care of the rest, ensuring that the rate limits and quotas of the underlying identity of the bearer are maintained across JWT token re-issues, so long as the "sub" (or whichever identity claim you chose to use) is available and consistent throughout and the policy that underpins the security clearance of the token exists too. + + + + +### 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 + +1. Select JSON Web Tokens as the Authentication mode +2. [Set the cryptographic signing method](#set-up-jwt-signing-method) to `HMAC (shared)` and the public secret as `tyk123` +3. Set the Identity Source and Policy Field Name + +{{< img src="/img/api-management/security/jwt-hmac.png" alt="Target Details: JSON Web Token" >}} + +##### 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. + +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-seo id="jm4V7XzbrZw" title="Protect Your APIs with Auth0 JWT and Tyk">}} + +##### 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" width="400px" height="400" >}} + +1. From the Authentication section, select **JSON Web Token (JWT)** as your authentication mode. +2. Select RSA public Key as the JWT signing method. +3. Enter your Auth0 Application Domain from Step 8 above to complete the `jwks_uri` end point `https://<>/.well-known/jwks.json` +4. Copy your `jwks_uri` in to the **Public Key** field. + +{{< img src="/img/auth0/tyk-api-auth.png" alt="Tyk API Authentication" width="800px" height="400" >}} + +1. Add an **Identity Source** and **Policy Field Name**. The defaults of `sub` and `pol` are fine. +2. Save your API. +3. From the System Management section, select Policies +4. Click Add Policy +5. Select your Auth0 API + +{{< img src="/img/auth0/policy-access-rights.png" alt="Tyk Policy access rights" width="800px" height="400" >}} + +1. You can keep the rest of the access rights at the defaults. +2. Click the **Configurations** tab and enter a **Policy Name** and a **Keys Expiry after** period. + +{{< img src="/img/auth0/policy-configuration.png" alt="Tyk Policy Configuration" width="400px" height="400" >}} + +1. Click **Create Policy**. +2. 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" width="600px" height="300" >}} + +1. From the top of the API copy the API URL +2. From a terminal window using the API URL and the Auth0 generated token. + +```.curl +curl -X GET {API URL} -H "Accept: application/json" -H "Authorization: Bearer {token}" +``` +18. If using the [httpbin upstream URL](https://httpbin.org/) as in the example Tyk API, you should see the HTML returned for the httpbin service in your terminal. +19. If there is an error with the request, you will see the following error message. + +```.bash +{ + "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" + } + ``` + +##### 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" >}}). + + +#### Create Your JWT 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/api-management/security/jwt-keycloak-api-create.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/api-management/security/jwt-keycloak-set-auth.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/api-management/security/jwt-keycloak-add-policy.png" alt="Select API for Security Policy" >}} + +12. Click on the Configurations tab and choose a policy name and TLL. + + {{< img src="/img/api-management/security/jwt-keycloak-add-policy-cont.png" alt="Create API Security Policy" >}} + +13. Add the default policy to the API. + + {{< img src="/img/api-management/security/jwt-keycloak-api-set-policy.png" alt="Add default policy to API" >}} + +14. Test access to the API using curl. +15. Retrieve the API URL. + + {{< img src="/img/api-management/security/jwt-keycloak-get-api-url.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 'friendly-slipper-gw.aws-use1.cloud-ara.tyk.io/keycloak.jwt/get' \ + -H "Authorization: Bearer TOKEN" + ``` + + + + +#### 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](#enable-dynamic-public-key-rotation-using-jwks) + +{{< 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" >}} + + +### 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`. | + + + +## 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-seo id="vYGYYXcJ6Wc" title="Protect an API with Multiple Authentication Types">}} + +#### 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/api-management/security/multiple-auth-choose-auth.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/api-management/security/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`. + +#### Enable Multi (Chained) Authentication with Tyk Operator + +Please consult the [Tyk Operator]({{< ref "api-management/automations#multiple-chained-auth" >}}) supporting documentation for an example of how to enable multi chained authentication with Tyk Operator. + + +## 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 makes a clear distinction between an API authorization key expiring and being deleted from the Redis storage. + +- When a key expires, it remains in the Redis storage but is no longer valid. Consequently, it is no longer authorized to access any APIs. If a key in Redis has expired and is passed in an API request, Tyk will return `HTTP 401 Key has expired, please renew`. + - When a key is deleted from Redis, Tyk no longer knows about it, so if it is passed in an API request, Tyk will return `HTTP 400 Access to this API has been disallowed`. + +Tyk provides separate control for the expiration and deletion of keys. + +Note that where we talk about keys here, we are referring to [Session Objects]({{< ref "getting-started/key-concepts/what-is-a-session-object" >}}), also sometimes referred to as Session Tokens + +### Key expiry + +Tyk's API keys ([token session objects]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}})) have an `expires` field. This is a UNIX timestamp and, when this date/time is reached, the key will automatically expire; any subsequent API request made using the key will be rejected. + +### Key lifetime + +Tyk does not automatically delete keys when they expire. You may prefer to leave expired keys in Redis storage, so that they can be renewed (for example if a user has - inadvisedly - hard coded the key into their application). Alternatively, you may wish to delete keys to avoid cluttering up Redis storage with obsolete keys. + +You have two options for configuring the lifetime of keys when using Tyk: + +1. At the API level +2. At the Gateway level + +#### API-level key lifetime control + +You can configure Tyk to delete keys after a configurable period (lifetime) after they have been created. Simply set the `session_lifetime` field in your API Definition and keys created for that API will automatically be deleted when that period (in seconds) has passed. + +The default value for `session_lifetime` is 0, this is interpreted as an infinite lifetime which means that keys will not be deleted from Redis. + +For example, to have keys live in Redis for only 24 hours (and be deleted 24 hours after their creation) set: + +```{.json} +"session_lifetime": 86400 +``` + +{{< note success >}} +**Note** + +There is a risk, when configuring API-level lifetime, that a key will be deleted before it has expired, as `session_lifetime` is applied regardless of whether the key is active or expired. To protect against this, you can configure the [session_lifetime_respects_key_expiration]({{< ref "tyk-oss-gateway/configuration#session_lifetime_respects_key_expiration" >}}) parameter in your `tyk.conf`, so that keys that have exceeded their lifetime will not be deleted from Redis until they have expired. +{{< /note >}} + +This feature works nicely with [JWT](#use-json-web-tokens-jwt) or [OIDC](#use-openid-connect) authentication methods, as the keys are created in Redis the first time they are in use so you know when they will be removed. Be extra careful in the case of keys created by Tyk (Auth token or JWT with individual secrets) and set a long `session_lifetime`, otherwise the user might try to use the key **after** it has already been removed from Redis. + +#### Gateway-level key lifetime control + +You can set a global lifetime for all keys created in the Redis by setting [global_session_lifetime]({{< ref "tyk-oss-gateway/configuration#global_session_lifetime" >}}) in the `tyk.conf` file; this parameter is an integer value in seconds. + +To enable this global lifetime, you must also set the [force_global_session_lifetime]({{< ref "tyk-oss-gateway/configuration#force_global_session_lifetime" >}}) parameter in the `tyk.conf` file. + +#### Summary of key lifetime precedence + +The table below shows the key lifetime assigned for the different permutations of `force_global_session_lifetime` and `session_lifetime_respects_key_expiration` configuration parameters. +| `force_global_session_lifetime` | `session_lifetime_respects_key_expiration` | Assigned lifetime | +|---------------------------------|--------------------------------------------|-------------------------------------------| +| `true` | `true` | `global_session_lifetime` | +| `true` | `false` | `global_session_lifetime` | +| `false` | `true` | larger of `session_lifetime` or `expires` | +| `false` | `false` | `session_lifetime` | + +{{< note success >}} +**Note** + +It is important to remember that a value of `0` in `session_lifetime` or `global_session_lifetime` is interpreted as infinity (i.e. key will not be deleted if that control is in use) - and if a field is not set, this is treated as `0`. +
+If you want the key to be deleted when it expires (i.e. to use the expiry configured in `expires` within the key to control deletion) then you must set a non-zero value in `session_lifetime` and configure both `session_lifetime_respects_key_expiration:true` and `force_global_session_lifetime:false`. +{{< /note >}} + + +## 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. + + +#### What is Mutual TLS? + +{{< note success >}} +**Note** + +Mutual TLS is supported from Tyk Gateway 2.4, Tyk Dashboard 1.4 and MDCB 1.4 +{{< /note >}} + + +Mutual TLS is a common security practice that uses client TLS certificates to provide an additional layer of protection, allowing to cryptographically verify the client information. + +In most cases when you try to access a secured HTTPS/TLS endpoint, you experience only the client-side check of the server certificate. The purpose of this check is to ensure that no fraud is involved and the data transfer between the client and server is encrypted. In fact, the TLS standard allows specifying the client certificate as well, so the server can accept connections only for clients with certificates registered with the server certificate authority, or provide additional security checks based on the information stored in the client certificate. This is what we call "Mutual TLS" - when both sides of the connection verify certificates. See the video below that gives you an introduction to mutual TLS and how it can be used to secure your APIs. + +{{< youtube-seo id="UzEzjon3IAo" title="Mutual TLS Intro">}} + +#### Certificates +If you have had to configure an SSL server or SSH access, the following information below should be familiar to you. + +Let's start with certificate definition. Here is what [Wikipedia](https://en.wikipedia.org/wiki/Public_key_certificate) says: + +> In cryptography, a public key certificate, also known as a digital certificate or identity certificate, is an electronic document used to prove the ownership of a public key. The certificate includes information about the key, information about the identity of its owner (called the subject), and the digital signature of an entity that has verified the certificate's contents (called the issuer). If the signature is valid, and the software examining the certificate trusts the issuer, then it can use that key to communicate securely with the certificate's subject. + +When it comes to authorization, it is enough for the server that has a public client certificate in its trusted certificate storage to trust it. However, if you need to send a request to the server protected by mutual TLS, or need to configure the TLS server itself, you also need to have a private key, used while generating the certificate, to sign the request. + +Using Tyk, you have two main certificate use cases: + +1. Certificates without public keys used for authorization and authentication +2. Certificates with private keys used for upstream access, and server certificates (in other words when we need to sign and encrypt the request or +response). + +Before a certificate can be used by Tyk, it needs to be encoded into PEM format. If you are using an `openssl` command to generate certificates, it should use PEM by default. A nice bonus of the PEM format is that it allows having multiple entries inside the same file. So in cases where a certificate also requires a private key, you can just concatenate the two files together. + +#### Certificate Management +Tyk provides two options to manage certificates: plain files or certificate storage with a separate API. + +All configuration options, which require specifying certificates, support both plain file paths or certificate IDs. You are able to mix them up, and Tyk will automatically distinguish file names from certificate IDs. + +The Tyk Gateway and Dashboard Admin APIs provide endpoints to create, remove, list, and see information about certificates. For the Gateway, the endpoints are: + +* Create: `POST /tyk/certs` with PEM body. Returns `{"id": "", ... }` +* Delete: `DELETE /tyk/certs/` +* Get info: `GET /tyk/certs/`. Returns meta info about the certificate, something similar to: +```json +{ + "id": "", + "fingerprint": , + "has_private_key": false, + "issuer": , + "subject": "", ... +} +``` +* Get info about multiple certificates: `GET /tyk/certs/,,`. +Returns array of meta info objects, similar to above. +* List all certificate IDs: `GET /tyk/certs`. Returns something similar to: + +```json +{ "certs": "", "", ... } +``` + +The Dashboard Admin API is very similar, except for a few minor differences: + +* Endpoints start with `/api` instead of `/tyk`, e.g. `/api/certs`, `/api/certs/`, etc. +* All certificates are managed in the context of the organization. In other words, certificates are not shared between organizations. + +Certificate storage uses a hex encoded certificate SHA256 fingerprint as its ID. When used with the Dashboard API, Tyk additionally appends the organization id to the certificate fingerprint. It means that certificate IDs are predictable, and you can check certificates by their IDs by manually +generating certificate SHA256 fingerprint using the following command: + +```{.copyWrapper} +openssl x509 -noout -fingerprint -sha256 -inform pem -in . +``` + +You may notice that you can't get the raw certificate back, only its meta information. This is to ensure security. Certificates with private keys have special treatment and are encoded before storing. If a private key is found it will be encrypted with AES256 algorithm 3 using the `security.private_certificate_encoding_secret` secret, defined in `tyk.conf` file. Otherwise, the certificate will use the [secret](https://tyk.io/docs/configure/tyk-gateway-configuration-options/#a-name-secret-a-secret) value in `tyk.conf`. + +##### MDCB +Mutual TLS configuration in an MDCB environment has specific requirements. An MDCB environment consists of a Control Plane and multiple Data Planes that, using MDCB, sync configuration. +The Control Plane and Data Plane deployments usually do not share any secrets; thus a certificate with private keys encoded with secret in the Control Plane will not be accessible to Data Plane gateways. + +To solve this issue, you need to set `security.private_certificate_encoding_secret` in the MDCB configuration file to the same value as specified in your management Gateway configuration file. By knowing the original secret, MDCB will be able to decode private keys, and +send them to client without password. Using a secure connection between Data Plane Gateways and MDCB is required in this case. See MDCB setup page for use_ssl usage. + +#### Authorization +At the TLS level, authorization means allowing only clients who provide client certificates that are verified and trusted by the server. + +Tyk allows you to define a list of trusted certificates at the API level or Gateway (global) level. If you are updating API definition programmatically or via files, you need to set following the keys in your API +definition: +`use_mutual_tls_auth` to `true`, and `client_certificates` as an array of strings - certificate IDs. + +From the Tyk Dashboard, to do the same from the **API Designer Core settings** section you need to select **Mutual TLS** authentication mode from the **Authentication** section, and allow the certificates using the built-in widget, as below: + +{{< img src="/img/2.10/mtls_auth_cert.png" alt="mutual_tls_auth" >}} + +If all your APIs have a common set of certificates, you can define them in your Gateway configuration file via the `security.certificates.apis` key - string array of certificate IDs or paths. + +Select **Strip Authorization Data** to strip any authorization data from your API requests. + +Be aware that mutual TLS authorization has special treatment because it is not "authentication" and does not provide any identifying functionality, like keys, so you need to mix it with another authentication modes options like **Auth Key** or **Keyless**. On the dashboard, you need to choose **Use multiple auth mechanism** in the **Authentication mode** drop-down, where you should select **Mutual TLS** and another option which suits your use-case. + +##### Fallback to HTTP Authorization +The TLS protocol has no access to the HTTP payload and works on the lower level; thus the only information we have at the TLS handshake level is the domain. In fact, even a domain is not included into a TLS handshake by default, but there is TLS extension called SNI (Server Name Indication) +which allows the client to send the domain name to the TLS handshake level. + +With this in mind, the only way to make API authorization work fully at the TLS level, each API protected by Mutual TLS should be deployed on its own domain. + +However, Tyk will gracefully fallback to a client certificate authorization at the HTTP level in cases when you want to have multiple mutual TLS protected APIs on the same domain, or you have clients that do not support the SNI extension. No additional configuration is needed. In case of such fallback, +instead of getting TLS error, a client will receive 403 HTTP error. + +#### Authentication +Tyk can be configured to guess a user authentication key based on the provided client certificate. In other words, a user does not need to provide any key, except the certificate, and Tyk will be able to identify the user, apply policies, and do the monitoring - the same as with regular Keys. + +###### Using with Authorization +Mutual TLS authentication does not require mutual TLS authorization to be turned on, and can be used separately. For example, you may allow some of the users to be authenticated by using a token in the header or similar, and some of the users via client certificates. + +If you want to use them both, just configure them separately. No additional knowledge is required. + +##### Upstream Access +If your upstream API is protected with mutual TLS you can configure Tyk to send requests with the specified client certificate. You can specify one certificate per host and define a default certificate. +Upstream certificates can be defined on API definition level or global level in your Gateway configuration file. Specified client certificates will be used not only for internal Tyk calls but also for HTTP calls inside your JSVM middleware. + +Inside your API definition you should set the `upstream_certificates` field to the following format: +`{"example.com": ""}`. Defining on a global level looks the same, but should be specified via the `security.certificates.upstream` field in your Gateway configuration file. + +##### HTTP/HTTPS Protocol + +{{< warning success >}} +**Note** + +Do NOT include the protocol or Tyk will not match your certificates to the correct domain. +{{< /warning >}} + + For example: + + - **BAD** `https://api.production.myupstream.com` + - **GOOD** `api.production.myupstream.com`. + + However, you need to include the port if the request is made via a non-standard HTTP port. + +##### Wild Cards +To set a default client certificate, use `*` instead of domain name: `{"*": ""}` + +You may use wild cards in combination with text to match the domain, but it only works one level deep. + +Meaning, if your domain is `api.production.myupstream.com` + +the only wildcard value accepted would be `*.production.myupstream.com`. The value `*.myupstream.com` will NOT work. + +**Setting through the Dashboard** + + +To do the same via the Tyk Dashboard, go to the **API Designer** > **Advanced Options** panel > **Upstream certificates** section. + +{{< img src="/img/2.10/attach_upstream_cert.png" alt="upstream_cert" >}} + +{{< img src="/img/2.10/add_upstream_cert.png" alt="add_upstream_cert" >}} + + +#### Tips and Tricks +You can create self-signed client and server certificates with this command: +```{.copyWrapper} +openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes +``` + +For the server in `common name` specify a domain, or just pass `-subj "/CN=localhost"` to OpenSSL command. Then follow our [TLS and SSL Guide]({{< ref "basic-config-and-security/security/tls-and-ssl" >}}). + +To get certificate SHA256 fingerprint use the following command: +```{.copyWrapper} +openssl x509 -noout -fingerprint -sha256 -inform pem -in +``` +If you are testing using cURL, your command will look like: + +```{.copyWrapper} +curl --cert client_cert.pem --key client_key.pem https://localhost:8181 +``` + +### mTLS for cloud users +- Cloud users can secure their upstream services with mTLS but mTLS between the client (caller of the API) and Tyk's gateway cannot be done for the time being. +- Multi cloud users - since you own and manage the gateways, you can use mTLS for gateway <--> upstream as well as client <--> gateway connections. + +### 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. + +##### Developer Portal - Self Serve Cert Trust + +Instead of manually creating keys, we can expose the Above API via the Developer Portal, where developers can add their own certs to use to access APIs. + +1. Create a policy for the API we set up above +2. Create a catalog entry for this policy +3. As a developer on the Portal, request a key for this API. This will take us to this screen: + +{{< img src="/img/dashboard/system-management/portal_cert_request.png" alt="portal_cert_request" >}} + +Add your public cert (cert.pem from above) into here and hit "Request Key". + +Now we can make an API request just using the pub + private key: + +``` +$ curl -k \ + --cert cert.pem \ + --key key.pem \ + https://localhost:8080/mtls-api/my-endpoint + +<200 response> + +``` + + +##### 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/api-management/security/client-mtls-api-setup.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. + +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. + + +##### Setup Static mTLS in Tyk Operator using the Tyk Classic API Definition + +This setup requires mutual TLS (mTLS) for client authentication using specified client certificates. The example provided shows how to create an API definition with mTLS authentication for `httpbin-client-mtls`. + +1. **Generate Self-Signed Key Pair:** + +You can generate a self-signed key pair using the following OpenSSL command: + +```bash +openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes +``` + +2. **Create Kubernetes Secret:** + +Create a secret in Kubernetes to store the client certificate: + +```bash +kubectl create secret tls my-test-tls --cert cert.pem --key key.pem +``` + +3. **Create API Definition:** + +Below is the YAML configuration for an API that uses mTLS authentication. Note that the `client_certificate_refs` field references the Kubernetes secret created in the previous step. + +```yaml {hl_lines=["19-21"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-client-mtls +spec: + name: Httpbin Client MTLS + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default + use_mutual_tls_auth: true + client_certificate_refs: + - my-test-tls +``` + +##### Setup Static mTLS in Tyk Operator using Tyk OAS API Definition + +Client certificates, In Tyk OAS API Definition, are managed using the `TykOasApiDefinition` CRD. You can reference Kubernetes secrets that store client certificates in your API definitions. + +**Example of Referencing Client Certificates in Tyk OAS** + +In this example, the `clientCertificate` section allows you to enable client certificate management and specify a list of Kubernetes secrets (`tls-cert`) that store allowed client certificates. + +```yaml {hl_lines=["48-50"],linenos=false} +# Secret is not created in this manifest. +# Please store client certificate in k8s TLS secret `tls-cert`. + +apiVersion: v1 +data: + test_oas.json: |- + { + "info": { + "title": "Petstore", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "Petstore", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://petstore.swagger.io/v2" + }, + "server": { + "listenPath": { + "value": "/petstore/", + "strip": true + } + } + } + } +kind: ConfigMap +metadata: + name: cm + namespace: default +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: petstore +spec: + tykOAS: + configmapRef: + name: cm + namespace: default + keyName: test_oas.json + clientCertificate: + enabled: true + allowlist: [tls-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" >}} + +#### Via Tyk Operator using the Tyk Classic API Definition + +Tyk Operator supports configuring upstream mTLS using one of the following fields within the ApiDefinition object: + +- **upstream_certificate_refs**: Configure using certificates stored within Kubernetes secret objects. +- **upstream_certificates**: Configure using certificates stored within Tyk Dashboard's certificate store. + +##### upstream_certificate_refs + +The `upstream_certificate_refs` field can be used to configure certificates for different domains. References can be held to multiple secrets which are used for the domain mentioned in the key. Currently "*" is used as a wildcard for all the domains + +The example listed below shows that the certificate in the secret, *my-test-tls*, is used for all domains. + +```yaml +# First apply this manifest using the command +# "kubectl apply -f config/samples/httpbin_upstream_cert.yaml" +# +# The operator will try to create the ApiDefinition and will succeed but will log an error that a certificate is missing +# in the cluster for an upstream +# +# Generate your public-private key pair , for test you can use the following command to obtain one fast: +# "openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out tls.crt -keyout tls.key" +# +# Run the following command to obtain the values that must be put inside the yaml that contians the secret resource: +# "kubectl create secret tls my-test-tls --key="tls.key" --cert="tls.crt" -n default -o yaml --dry-run=client" +# +# Apply your TLS certificate using the following command: (we already have an example one in our repo) +# "kubectl apply -f config/sample/simple_tls_secret.yaml" +# +# NOTE: the upstream_certificate_refs can hold references to multiple secrets which are used for the domain +# mentioned in the key (currently "*" is used as a wildcard for all the domains) +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + upstream_certificate_refs: + "*": my-test-tls + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default +``` + +A secret can be created and output in yaml format using the following command: + +```bash +kubectl create secret tls my-test-tls --key="keyfile.key" --cert="certfile.crt" -n default -o yaml --dry-run=client +kubectl apply -f path/to/your/tls_secret.yaml +``` + +##### upstream_certificates + +The `upstream_certificates` field allows certificates uploaded to the certificate store in Tyk Dashboard to be referenced in the Api Definition: + +```yaml +# Skip the concatenation and .pem file creation if you already have a certificate in the correct format + +# First generate your public-private key pair , for test use you can use the following command to obtain one fast: +# "openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out tls.crt -keyout tls.key" + +# Concatenate the above files to obtain a .pem file which we will upload using the dashboard UI +# "cat tls.crt tls.key > cert.pem" + +# Upload it to the tyk certificate store using the dashboard + +# Fill in the manifest with the certificate id (the long hash) that you see is given to it in the dashboard +# (in place of "INSERT UPLOADED CERTIFICATE NAME FROM DASHBOARD HERE") +# Optional: Change the domain from "*" to something more specific if you need to use different +# upstream certificates for different domains + +# Then apply this manifest using the command +# "kubectl apply -f config/samples/httpbin_upstream_cert_manual.yaml" + +# The operator will try create the ApiDefinition and will succeed and it will have the requested domain upstream certificate +# in the cluster for an upstream + +# NOTE: the upstream_certificate can hold multiple domain-certificateName pairs +# (currently "*" is used as a wildcard for all the domains) + +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + upstream_certificates: + "*": #INSERT UPLOADED CERTIFICATE NAME FROM DASHBOARD HERE# + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default +``` + +#### Via Tyk Operator using Tyk OAS API Definition{#tyk-operator-oas} +Tyk Operator supports configuring upstream mTLS using the `mutualTLS` field in `TykOasApiDefinition` object: + +```yaml{hl_lines=["12-18"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 + kind: TykOasApiDefinition + metadata: + name: petstore + namespace: default + spec: + tykOAS: + configmapRef: + name: petstore + namespace: default + keyName: petstore.json + mutualTLS: + enabled: true + domainToCertificateMapping: + - domain: "petstore.com" + certificateRef: petstore-domain + - domain: "petstore.co.uk" + certificateRef: petstore-uk-domain +``` + + + +#### 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 + +Securing your APIs is a foundational step toward managing data integrity and access control effectively. Now that you've configured authentication and authorization, the next steps in your API journey with Tyk should involve: + +Defining Access Policies: Use Tyk’s policies to refine API access controls, rate limits, and quotas. This lets you align your security model with business needs and enhance user experience through granular permissions. You can learn more about policies [here]({{< ref "basic-config-and-security/security/security-policies" >}}). + +Exploring API Analytics: Leverage Tyk’s analytics to monitor access patterns, track usage, and gain insights into potential security risks or high-demand endpoints. Understanding usage data can help in optimizing API performance and enhancing security measures. You can learn more about analytics [here]({{< ref"tyk-dashboard-analytics" >}}). \ No newline at end of file diff --git a/tyk-docs/content/api-management/automations.md b/tyk-docs/content/api-management/automations.md new file mode 100644 index 0000000000..8b3fcca757 --- /dev/null +++ b/tyk-docs/content/api-management/automations.md @@ -0,0 +1,4613 @@ +--- +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 +aliases: + - /advanced-configuration/manage-multiple-environments/tyk-sync + - /product-stack/tyk-operator/advanced-configurations/api-categories + - /product-stack/tyk-operator/advanced-configurations/api-versioning + - /product-stack/tyk-operator/advanced-configurations/client-authentication + - /product-stack/tyk-operator/advanced-configurations/internal-looping + - /product-stack/tyk-operator/advanced-configurations/management-of-api + - /product-stack/tyk-operator/advanced-configurations/tls-certificate + - /product-stack/tyk-operator/getting-started/create-an-api-overview + - /product-stack/tyk-operator/getting-started/create-an-oas-api + - /product-stack/tyk-operator/getting-started/example-tyk-oas-api + - /product-stack/tyk-operator/getting-started/quick-start-graphql + - /product-stack/tyk-operator/getting-started/quick-start-http + - /product-stack/tyk-operator/getting-started/quick-start-tcp + - /product-stack/tyk-operator/getting-started/quick-start-udg + - /product-stack/tyk-operator/getting-started/secure-an-api-overview + - /product-stack/tyk-operator/getting-started/secure-an-oas-api + - /product-stack/tyk-operator/getting-started/security-policy-example + - /product-stack/tyk-operator/getting-started/tyk-operator-api-ownership + - /product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations + - /product-stack/tyk-operator/key-concepts/custom-resources + - /product-stack/tyk-operator/key-concepts/key-concepts + - /product-stack/tyk-operator/key-concepts/operator-context + - /product-stack/tyk-operator/key-concepts/operator-user + - /product-stack/tyk-operator/reference/api-definition + - /product-stack/tyk-operator/reference/security-policy + - /product-stack/tyk-operator/reference/tyk-oas-api-definition + - /product-stack/tyk-operator/reference/version-compatibility + - /product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied + - /product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting + - /product-stack/tyk-operator/tyk-ingress-controller + - /product-stack/tyk-sync/commands/sync-dump + - /product-stack/tyk-sync/commands/sync-examples + - /product-stack/tyk-sync/commands/sync-publish + - /product-stack/tyk-sync/commands/sync-sync + - /product-stack/tyk-sync/commands/sync-update + - /product-stack/tyk-sync/installing-tyk-sync + - /product-stack/tyk-sync/overview + - /product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations + - /product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations + - /product-stack/tyk-sync/tutorials/tutorial-update-api-configurations + - /tyk-operator + - /tyk-stack/tyk-operator/access-an-api + - /tyk-stack/tyk-operator/create-an-api + - /tyk-stack/tyk-operator/getting-started-tyk-operator + - /tyk-stack/tyk-operator/installing-tyk-operator + - /tyk-stack/tyk-operator/migration + - /tyk-stack/tyk-operator/publish-an-api + - /tyk-stack/tyk-operator/secure-an-api + - /tyk-stack/tyk-operator/tyk-operator-reconciliation + - /tyk-sync + +--- +## Introduction +Managing APIs across multiple environments can quickly become complex. Updating and overseeing multiple configurations, security policies, and deployments requires a significant amount of effort without the right tools. Tyk’s suite of automation tools simplifies this process by enabling automated control over API management tasks, helping teams ensure reliability, reduce manual errors, and maintain consistency across deployments. + +In this guide, we’ll walk through the primary tools for automating API management with Tyk, including: + +* **Tyk Operator for Kubernetes**: Automate API deployments within Kubernetes environments. +* **Tyk Sync**: Sync configurations across environments for consistent API management. + +## 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]({{}}) + - For Tyk Cloud, sign up [here](https://tyk.io/sign-up/) + - Tyk Operator license key. Starting from Tyk Operator v1.0, a valid license key is required. + +- **Access to a Kubernetes cluster v1.19+** (for Tyk Operator sections) + - If you're new to Kubernetes, check out the official [Kubernetes documentation](https://kubernetes.io/docs/setup/) + +- **Helm 3+** (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 v3+ access** (for Tyk Sync setup) + - Learn how to set up the Tyk Dashboard [here]({{}}) + +- **Basic knowledge of Kubernetes, YAML, and API concepts** (important for Tyk Operator and Tyk Sync) + - 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]({{}}) + + +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. + + +## Automate API Management in Kubernetes Environments + +Using Tyk Operator within Kubernetes allows you to manage API lifecycles declaratively. This section provides instructions for setting up and configuring the Tyk Operator to automate API creation, updates, and security in Kubernetes clusters, ensuring your APIs align with Kubernetes management practices. + + +### What is Tyk Operator? +If you’re using Kubernetes, or if you’re building an API that operates within a Kubernetes environment, the Tyk Operator is a powerful tool for automating the API lifecycle. + +Tyk Operator is a native Kubernetes operator, allowing you to define and manage APIs as code. This means you can deploy, update, and secure APIs using the same declarative configuration approach Kubernetes uses for other application components. + +{{< img src="/img/operator/tyk-operator.svg" alt="Tyk Operator" width="600" >}} + + +### Key Concepts + +#### GitOps With Tyk +With Tyk Operator, you can configure your APIs using Kubernetes native manifest files. You can use the manifest files in a GitOps workflow as the single source of truth for API deployment. + +{{< note success >}} +**Note** + +If you use Tyk Operator to manage your APIs, you should set up RBAC such that human users cannot have the "write" permission on the API definition endpoints using Tyk Dashboard. +{{< /note >}} + +##### What is GitOps? +“GitOps” refers to the operating model of using Git as the “single source of truth” to drive continuous delivery for infrastructure and software through automated CI/CD workflow. + +##### Tyk Operator in your GitOps workflow +You can install Argo CD, Flux CD or the GitOps tool of your choice in a cluster, and connect it to the Git repository where you version control your API manifests. The tool can synchronise changes from Git to your cluster. The API manifest updates in cluster would be detected by Tyk Operator, which has a Kubernetes controller to automatically reconcile the API configurations on your Tyk Gateway or Tyk Dashboard. + +**Kubernetes-Native Developer Experience** +API Developers enjoy a smoother Continuous Integration process as they can develop, test, and deploy the microservices. API configurations together use familiar development toolings and pipeline. + +**Reliability** +With declarative API configurations, you have a single source of truth to recover after any system failures, reducing the meantime to recovery from hours to minutes. + +##### Single Source of Truth for API Configurations +Tyk Operator will reconcile any divergence between the Kubernetes desired state and the actual state in [Tyk Gateway]({{}}) or [Tyk Dashboard]({{}}). Therefore, you should maintain the API definition manifests in Kubernetes as the single source of truth for your system. If you update your API configurations using Tyk Dashboard, those changes would be reverted by Tyk Operator eventually. + +To learn more about Gitops with Tyk, refer the following blog posts: +- [GitOps-enabled API management in Kubernetes](https://tyk.io/blog/gitops-enabled-api-management-in-kubernetes/) +- [A practical guide using Tyk Operator, ArgoCD, and Kustomize](https://tyk.io/blog/a-practical-guide-using-tyk-operator-argocd-and-kustomize/) + +#### Custom Resources in Tyk + +In Kubernetes, a [Custom Resource (CR)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) is an extension of the Kubernetes API that allows you to introduce custom objects in your cluster. Custom Resources enable you to define and manage custom configurations and settings specific to your applications, making Kubernetes highly extensible. These custom objects are defined using Custom Resource Definitions (CRDs), which specify the schema and structure of the resource. + +Tyk Operator manages multiple custom resources to help users create and maintain their API configurations: + +**TykOasApiDefinition**: Available from Tyk Operator v1.0. It represents a [Tyk OAS API configuration]({{}}). Tyk OAS API is based on the OpenAPI specification (OAS) and is the recommended format for standard HTTP APIs. Tyk Operator supports all [Tyk OAS API feature]({{}}) as they become available on the Gateway. + +**ApiDefinition**: Available on all versions of Tyk Operator. It represents a [Tyk Classic API configuration]({{}}). Tyk Classic API is the traditional format used for defining all APIs in Tyk, and now the recommended format for non-HTTP APIs such as TCP, GraphQL, and Universal Data Graph (UDG). Tyk Operator supports the major features of Tyk Classic API and the feature support details can be tracked [here]({{< ref "#apidefinition-crd" >}}). + +**SecurityPolicy**: Available on all versions of Tyk Operator. It represents a [Tyk Security Policy configuration]({{< ref "#security-policy-example" >}}). Security Policies in Tyk provide a way to define and enforce security controls, including authentication, authorization, and rate limiting for APIs managed in Tyk. Tyk Operator supports essential features of Security Policies, allowing users to centrally manage access control and security enforcement for all APIs across clusters. + +These custom resources enable users to leverage Kubernetes' declarative configuration management to define, modify, and version their APIs, seamlessly integrating with other Kubernetes-based workflows and tools. + +##### Custom Resources for API and Policy Configuration + +The following custom resources can be used to configure APIs and policies at [Tyk Gateway]({{}}) or [Tyk Dashboard]({{}}). + +| Kind | Group | Version | Description | +|--------------------|-------------|-----------|---------------------------------------------------------------------------------------------------| +| TykOasApiDefinition| tyk.tyk.io | v1alpha1 | Defines configuration of [Tyk OAS API Definition object]({{}}) | +| ApiDefinition | tyk.tyk.io | v1alpha1 | Defines configuration of [Tyk Classic API Definition object]({{}}) | +| SecurityPolicy | tyk.tyk.io | v1alpha1 | Defines configuration of [security policies]({{}}). Operator supports linking ApiDefinition custom resources in SecurityPolicy's access list so that API IDs do not need to be hardcoded in the resource manifest. | +| SubGraph | tyk.tyk.io | v1alpha1 | Defines a [GraphQL federation subgraph]({{}}). | +| SuperGraph | tyk.tyk.io | v1alpha1 | Defines a [GraphQL federation supergraph]({{}}). | +| OperatorContext | tyk.tyk.io | v1alpha1 | Manages the context in which the Tyk Operator operates, affecting its overall behavior and environment. See [Operator Context]({{< ref "#multi-tenancy-in-tyk" >}}) for details. | + +##### Tyk Classic Developer Portal + +The following custom resources can be used to configure [Tyk Classic Developer Portal]({{}}). + +| Kind | Group | Version | Description | +|--------------------|-------------|-----------|---------------------------------------------------------------------------------------------------| +| APIDescription | tyk.tyk.io | v1alpha1 | Configures [Portal Documentation]({{}}). | +| PortalAPICatalogue | tyk.tyk.io | v1alpha1 | Configures [Portal API Catalogue]({{}}). | +| PortalConfig | tyk.tyk.io | v1alpha1 | Configures [Portal Configuration]({{}}). | + + +#### Reconcilation With Tyk Operator +##### Controllers & Operators +In Kubernetes, [controllers](https://kubernetes.io/docs/concepts/architecture/controller/) watch one or more Kubernetes resources, which can be built-in types like *Deployments* or custom resources like *ApiDefinition* - in this case, we refer to Controller as Operator. The purpose of a controller is to match the desired state by using Kubernetes APIs and external APIs. + +> A [Kubernetes operator](https://www.redhat.com/en/topics/containers/what-is-a-kubernetes-operator) is an application-specific controller that extends the functionality of the Kubernetes API to create, configure, and manage instances of complex applications on behalf of a Kubernetes user. + +##### Desired State vs Observed State +Let’s start with the *Desired State*. It is defined through Kubernetes Manifests, most likely YAML or JSON, to describe what you want your system to be in. Controllers will watch the resources and try to match the actual state (the observed state) with the desired state for Kubernetes Objects. For example, you may want to create a Deployment that is intended to run three replicas. So, you can define this desired state in the manifests, and Controllers will perform necessary operations to make it happen. + +How about *Observed State*? Although the details of the observed state may change controller by controller, usually controllers update the status field of Kubernetes objects to store the observed state. For example, in Tyk Operator, we update the status to include *api_id*, so that Tyk Operator can understand that the object was successfully created on Tyk. + +##### Reconciliation +Reconciliation is a special design paradigm used in Kubernetes controllers. Tyk Operator also uses the same paradigm, which is responsible for keeping our Kubernetes objects in sync with the underlying external APIs - which is Tyk in our case. + +**When would reconciliation happen?** +
+Before diving into Tyk Operator reconciliation, let's briefly mention some technical details about how and when reconciliation happens. Reconciliation only happens when certain events happen on your cluster or objects. Therefore, Reconciliation will **NOT** be triggered when there is an update or modification on Tyk’s side. It only watches certain Kubernetes events and is triggered based on them. Usually, the reconciliation happens when you modify a Kubernetes object or when the cache used by the controller expires - side note, controllers, in general, use cached objects to reduce the load in the Kube API server. Typically, caches expire in ~10 hours or so but the expiration time might change based on Operator configurations. + +So, in order to trigger Reconciliation, you can either +- modify an object, which will trigger reconciliation over this modified object or, +- restart Tyk Operator pod, which will trigger reconciliation over each of the objects watched by Tyk Operator. + +**What happens during Reconciliation?** +
+Tyk Operator will compare desired state of the Kubernetes object with the observed state in Tyk. If there is a drift, Tyk Operator will update the actual state on Tyk with the desired state. In the reconciliation, Tyk Operator mainly controls three operations; DELETE, CREATE, and UPDATE. + +- **CREATE** - an object is created in Kubernetes but not exists in Tyk +- **UPDATE** - an object is in different in Kubernetes and Tyk (we compare that by hash) +- **DELETE** - an object is deleted in Kubernetes but exists in Tyk + +**Drift Detection** +
+If human operators or any other system delete or modify ApiDefinition from Tyk Gateway or Dashboard, Tyk Operator will restore the desired state back to Tyk during reconciliation. This is called Drift Detection. It can protect your systems from unauthorized or accidental modifications. It is a best practice to limit user access rights on production environment to read-only in order to prevent accidental updates through API Manager directly. + + +#### CRD Versioning + +Tyk follows standard practices for naming and versioning custom resources as outlined by the Kubernetes Custom Resource Definition [versioning guidelines](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/). Although we are currently on the `v1alpha1` version, no breaking changes will be introduced to existing Custom Resources without a version bump. This means that any significant changes or updates that could impact existing resources will result in a new version (e.g., `v1beta1` or `v1`) and Operator will continue supporting all CRD versions for a reasonable time before deprecating an older version. This ensures a smooth transition and compatibility, allowing you to upgrade without disrupting your current configurations and workflows. + +For more details on Kubernetes CRD versioning practices, refer to the Kubernetes Custom Resource Definition [Versioning documentation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/). + + +#### Operator User +Tyk Operator is a Kubernetes Controller that manages Tyk Custom Resources (CRs) such as API Definitions and Security Policies. Developers define these resources as [Custom Resource (CRs)]({{< ref "#custom-resources-in-tyk" >}}), and Tyk Operator ensures that the desired state is reconciled with the Tyk Gateway or Dashboard. This involves creating, updating, or deleting API configurations until the target state matches the desired state. + +For the Tyk Dashboard, Tyk Operator functions as a system user, bound by Organization and RBAC rules. + +During start up, Tyk Operator looks for these keys from `tyk-operator-conf` secret or from the environment variables (listed in the table below). + +| Key or Environment Variable | Description | +|:-----|:-------------| +| `TYK_MODE` | "ce" for OSS or "pro" for licensed users | +| `TYK_URL` | URL of Tyk Gateway or Dashboard API | +| `TYK_ORG` | Organization ID of Operator user | +| `TYK_AUTH` | API key of Operator user | + +These would be the default credentials Tyk Operator uses to connect to Tyk. + + +#### Multi-tenancy in Tyk + +Tyk Dashboard is multi-tenant capable, which means you can use a single Tyk Dashboard instance to host separate [organizations]({{< ref "basic-config-and-security/security/dashboard/organisations">}}) for each team or department. Each organization is a completely isolated unit with its own: + +- API Definitions +- API Keys +- Users +- Developers +- Domain +- Tyk Classic Portal + +This structure is ideal for businesses with a complex hierarchy, where distinct departments operate independently but within the same overall infrastructure. + +{{< img src="/img/operator/tyk-organisations.svg" alt="Multi-tenancy in Tyk Dashboard" width="600" >}} + +##### Define OperatorContext for Multi-Tenant API Management + +The `OperatorContext` in Tyk Operator allows you to create isolated management environments by defining specific access parameters for different teams or departments within a shared Tyk Operator instance. It helps you specify: + +- The Tyk Dashboard with which the Operator interacts +- The organization under which API management occurs +- The user identity utilized for requests +- The environment in which the Operator operates + +By setting different `OperatorContext` configurations, you can define unique access and management contexts for different teams. These contexts can then be referenced directly in your `ApiDefinition` or `SecurityPolicy` custom resource definitions (CRDs) using the `contextRef` field, enabling precise control over API configurations. + +##### Example Scenarios Using OperatorContext + +1. **No OperatorContext Defined** + - If no `OperatorContext` is defined, Tyk Operator defaults to using credentials from the `tyk-operator-conf` secret or from environment variables. This means all API management actions are performed under the system’s default user credentials, with no specific contextual isolation. + +2. **OperatorContext Defined but Not Referenced** + - When an `OperatorContext` is defined but not referenced in an API configuration, Tyk Operator continues to use the default credentials from `tyk-operator-conf`. The specified `OperatorContext` is ignored, resulting in API operations being managed under default credentials. + +3. **OperatorContext Defined and Referenced** + - If a specific `OperatorContext` is both defined and referenced in an API or policy, Tyk Operator utilizes the credentials and parameters from the referenced `OperatorContext` to perform API operations. This allows each API or policy to be managed with isolated configurations, enabling team-based or department-specific API management within the same Kubernetes cluster. + +Using `OperatorContext` offers flexibility for multi-tenancy, helping organizations manage and isolate API configurations based on their specific team or departmental needs. + +{{< img src="/img/operator/tyk-operator-context.svg" alt="Multi-tenancy in Kubernetes Tyk Operator" width="600" >}} + +#### TLS Certificates + +Tyk Operator is designed to offer a seamless Kubernetes-native experience by managing TLS certificates stored within Kubernetes for your API needs. Traditionally, to use a certificate (e.g., as a client certificate, domain certificate, or certificate for accessing an upstream service), you would need to manually upload the certificate to Tyk and then reference it using a 'Certificate ID' in your API definitions. This process can become cumbersome, especially in a Kubernetes environment where certificates are often managed as secrets and may rotate frequently. + +To address this challenge, Tyk Operator allows you to directly reference certificates stored as Kubernetes secrets within your custom resource definitions (CRDs). This reduces operational overhead, minimizes the risk of API downtime due to certificate mismatches, and provides a more intuitive experience for API developers. + +##### Benefits of Managing Certificates with Tyk Operator +- **Reduced operational overhead**: Automates the process of updating certificates when they rotate. +- **Minimized risk of API downtime**: Ensures that APIs continue to function smoothly, even when certificates are updated. +- **Improved developer experience**: Removes the need for API developers to manage certificate IDs manually. + +##### Examples + +| Certificate Type | Supported in ApiDefinition | Supported in TykOasApiDefinition | +|------------------|-------------|---------| +| Client certifates | ✅ [Client mTLS]({{}}) | ✅ [Client mTLS]({{}}) | +| Custom domain certificates | ✅ [TLS and SSL]({{}}) | ✅ [TLS and SSL]({{}}) | +| Public keys pinning | ✅ [Certificate pinning]({{}}) | ✅ [Certificate pinning]({{}}) | +| Upstream mTLS | ✅ [Upstream mTLS via Operator]({{}}) | ✅ [Upstream mTLS via Operator]({{}}) | + + +### Install and Configure Tyk Operator + +We assume you have already installed Tyk. If you don’t have it, check out [Tyk +Cloud]({{}}) or [Tyk Self +Managed]({{}}) page. [Tyk Helm +Chart]({{}}) is the preferred (and easiest) way to install Tyk on Kubernetes. + +In order for policy ID matching to work correctly, Dashboard must have `allow_explicit_policy_id` and +`enable_duplicate_slugs` set to `true` and Gateway must have `policies.allow_explicit_policy_id` set to `true`. + +Tyk Operator needs a [user credential]({{< ref "#operator-user" >}}) to connect with +Tyk Dashboard. The Operator user should have write access to the resources it is going to manage, e.g. APIs, Certificates, +Policies, and Portal. It is the recommended practice to turn off write access for other users for the above resources. See +[Using Tyk Operator to enable GitOps with Tyk]({{< ref "getting-started/key-concepts/gitops-with-tyk" >}}) about +maintaining a single source of truth for your API configurations. + +#### Install cert-manager + +Tyk Operator uses cert-manager to provision certificates for the webhook server. If you don't have cert-manager +installed, you can follow this command to install it: + +```console +$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.8.0/cert-manager.yaml +``` + +Since Tyk Operator supports Kubernetes v1.19+, the minimum cert-manager version you can use is v1.8. If you run into the +cert-manager related errors, please ensure that the desired version of Kubernetes version works with the chosen version +of cert-manager by checking [supported releases page](https://cert-manager.io/docs/installation/supported-releases/) and +[cert-manager documentation](https://cert-manager.io/docs/installation/supported-releases/). + +Please wait for the cert-manager to become available before continuing with the next step. + + + +#### Option 1: Install Tyk Operator via Tyk's Umbrella Helm Charts + +If you are using [Tyk Stack]({{}}), [Tyk Control +Plane]({{}}), or [Tyk Open +Source Chart]({{}}), you can install Tyk Operator alongside other Tyk +components by setting value `global.components.operator` to `true`. + +Starting from Tyk Operator v1.0, a license key is required to use the Tyk Operator. You can provide it while installing +Tyk Stack, Tyk Control Plane or Tyk OSS helm chart by setting `global.license.operator` field. You can also set license +key via a Kubernetes secret using `global.secrets.useSecretName` field. The secret should contain a key called +`OperatorLicense` + +#### Option 2: Install Tyk Operator via stand-alone Helm Chart + +If you prefer to install Tyk Operator separately, follow this section to install Tyk Operator using Helm. + +##### Configure Tyk Operator via environment variable or tyk-operator-conf secret + +Tyk Operator configurations can be set using `envVars` field of helm chart. See the table below for a list of expected +environment variable names and example values. + +```yaml +envVars: + - name: TYK_OPERATOR_LICENSEKEY + value: "{YOUR_LICENSE_KEY}" + - name: TYK_MODE + value: "pro" + - name: TYK_URL + value: "http://dashboard-svc-tyk-tyk-dashboard.tyk.svc:3000" + - name: TYK_AUTH + value: "2d095c2155774fe36d77e5cbe3ac963b" + - name: TYK_ORG + value: "5e9d9544a1dcd60001d0ed20" +``` + +It can also be set via a Kubernetes secret. The default K8s secret name is `tyk-operator-conf`. If you want to use +another name, configure it through Helm Chart [envFrom]({{< ref "#install-tyk-operator-and-custom-resource-definitions-crds" >}}) value. + +The Kubernetes secret or envVars field should set the following keys: + +{{< tabs_start >}} + +{{< tab_start "Licensed mode (Self-managed or Tyk Cloud)" >}} + +| Key | Mandatory | Example Value | Description | +| :--------------------------- | :-------- | :-------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | +| TYK_OPERATOR_LICENSEKEY | Yes | | Tyk Operator license key | +| TYK_MODE | Yes | pro | “ce” for Tyk Open Source mode, “pro” for Tyk licensed mode. | +| TYK_URL | Yes | http://dashboard-svc-tyk-tyk-dashboard.tyk.svc:3000 | Management URL of Tyk Gateway (Open Source) or Tyk Dashboard | +| TYK_AUTH | Yes | 2d095c2155774fe36d77e5cbe3ac963b | Operator user API key. | +| TYK_ORG | Yes | 5e9d9544a1dcd60001d0ed20 | Operator user ORG ID. | +| TYK_TLS_INSECURE_SKIP_VERIFY | No | true | Set to `“true”` if the Tyk URL is HTTPS and has a self-signed certificate. If it isn't set, the default value is `false`. | +| WATCH_NAMESPACE | No | foo,bar | Comma separated list of namespaces for Operator to operate on. The default is to operate on all namespaces if not specified. | +| WATCH_INGRESS_CLASS | No | customclass | Define the ingress class Tyk Operator should watch. Default is `tyk` | +| TYK_HTTPS_INGRESS_PORT | No | 8443 | Define the ListenPort for HTTPS ingress. Default is `8443`. | +| TYK_HTTP_INGRESS_PORT | No | 8080 | Define the ListenPort for HTTP ingress. Default is `8080`. | + +{{< tab_end >}} + +{{< tab_start "Open Source" >}} + +**Note**: From Tyk Operator v1.0, although Tyk Operator is compatible with the Open Source Tyk Gateway, a valid license +key is required for running Tyk Operator. + +| Key | Mandatory | Example Value | Description | +| :--------------------------- | :-------- | :------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | +| TYK_OPERATOR_LICENSEKEY | Yes | | Tyk Operator license key | +| TYK_MODE | Yes | ce | “ce” for Tyk Open Source mode, “pro” for Tyk licensed mode. | +| TYK_URL | Yes | http://gateway-svc-tyk-ce-tyk-gateway.tyk.svc:8080 | Management URL of Tyk Gateway (Open Source) or Tyk Dashboard | +| TYK_AUTH | Yes | myapisecret | Operator user API key. | +| TYK_ORG | Yes | myorgid | Operator user ORG ID. | +| TYK_TLS_INSECURE_SKIP_VERIFY | No | true | Set to `“true”` if the Tyk URL is HTTPS and has a self-signed certificate. If it isn't set, the default value is `false`. | +| WATCH_NAMESPACE | No | foo,bar | Comma separated list of namespaces for Operator to operate on. The default is to operate on all namespaces if not specified. | +| WATCH_INGRESS_CLASS | No | customclass | Define the ingress class Tyk Operator should watch. Default is `tyk` | +| TYK_HTTPS_INGRESS_PORT | No | 8443 | Define the ListenPort for HTTPS ingress. Default is `8443`. | +| TYK_HTTP_INGRESS_PORT | No | 8080 | Define the ListenPort for HTTP ingress. Default is `8080`. | + +{{< tab_end >}} + +{{< tabs_end >}} + +**Connect to Tyk Gateway or Dashboard** + +If you install Tyk using Helm Chart, `tyk-operator-conf` will have been created with the following keys: +`TYK_OPERATOR_LICENSEKEY, TYK_AUTH, TYK_MODE, TYK_ORG`, and `TYK_URL` by default. If you didn't use Helm Chart for +installation, please prepare `tyk-operator-conf` secret yourself using the commands below: + +```console +$ kubectl create namespace tyk-operator-system + +$ kubectl create secret -n tyk-operator-system generic tyk-operator-conf \ + --from-literal "TYK_OPERATOR_LICENSEKEY=${TYK_OPERATOR_LICENSEKEY}" \ + --from-literal "TYK_AUTH=${TYK_AUTH}" \ + --from-literal "TYK_ORG=${TYK_ORG}" \ + --from-literal "TYK_MODE=${TYK_MODE}" \ + --from-literal "TYK_URL=${TYK_URL}" +``` + +{{< note success >}} **Note** + +User API key and Organization ID can be found under "Add / Edit User" page within Tyk Dashboard. `TYK_AUTH` corresponds +to Tyk Dashboard API Access Credentials. `TYK_ORG` corresponds to Organization ID. {{< /note >}} + +{{< note success >}} **Note** + +If the credentials embedded in the `tyk-operator-conf` are ever changed or updated, the tyk-operator-controller-manager +pod must be restarted to pick up these changes. {{< /note >}} + +**Watch Namespaces** + +Tyk Operator is installed with cluster permissions. However, you can optionally control which namespaces it watches by +setting the `WATCH_NAMESPACE` through `tyk-operator-conf` secret or the environment variable to a comma separated list +of k8s namespaces. For example: + +- `WATCH_NAMESPACE=""` will watch for resources across the entire cluster. +- `WATCH_NAMESPACE="foo"` will watch for resources in the `foo` namespace. +- `WATCH_NAMESPACE="foo,bar"` will watch for resources in the `foo` and `bar` namespace. + +**Watch custom ingress class** + +You can configure [Tyk Operator as Ingress Controller]({{< ref "#control-kubernetes-ingress-resources" >}}) so +that [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) resources can be managed by Tyk as +APIs. By default, Tyk Operator looks for the value `tyk` in Ingress resources `kubernetes.io/ingress.class` annotation +and will ignore all other ingress classes. If you want to override this default behavior, you may do so by setting +[WATCH_INGRESS_CLASS]({{< ref "#configure-tyk-operator-via-environment-variable-or-tyk-operator-conf-secret" >}}) through `tyk-operator-conf` or the environment variable. + +##### Install Tyk Operator and Custom Resource Definitions (CRDs) + +You can install CRDs and Tyk Operator using the stand-alone Helm Chart by running the following command: + +```console +$ helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ +$ helm repo update + +$ helm install tyk-operator tyk-helm/tyk-operator -n tyk-operator-system +``` + +This process will deploy Tyk Operator and its required Custom Resource Definitions (CRDs) into your Kubernetes cluster +in `tyk-operator-system` namespace. + +**Helm configurations** + +| Key | Type | Default | +| ------------------------------------------- | ------ | -------------------------------------- | +| envFrom[0].secretRef.name | string | `"tyk-operator-conf"` | +| envVars[0].name | string | `"TYK_OPERATOR_LICENSEKEY"` | +| envVars[0].value | string | `"{OPERATOR_LICENSEKEY}"` | +| envVars[1].name | string | `"TYK_HTTPS_INGRESS_PORT"` | +| envVars[1].value | string | `"8443"` | +| envVars[2].name | string | `"TYK_HTTP_INGRESS_PORT"` | +| envVars[2].value | string | `"8080"` | +| extraVolumeMounts | list | `[]` | +| extraVolumes | list | `[]` | +| fullnameOverride | string | `""` | +| healthProbePort | int | `8081` | +| hostNetwork | bool | `false` | +| image.pullPolicy | string | `"IfNotPresent"` | +| image.repository | string | `"tykio/tyk-operator"` | +| image.tag | string | `"v1.0.0"` | +| imagePullSecrets | list | `[]` | +| metricsPort | int | `8080` | +| nameOverride | string | `""` | +| nodeSelector | object | `{}` | +| podAnnotations | object | `{}` | +| podSecurityContext.allowPrivilegeEscalation | bool | `false` | +| rbac.image.pullPolicy | string | `"IfNotPresent"` | +| rbac.image.repository | string | `"gcr.io/kubebuilder/kube-rbac-proxy"` | +| rbac.image.tag | string | `"v0.8.0"` | +| rbac.port | int | `8443` | +| rbac.resources | object | `{}` | +| replicaCount | int | `1` | +| resources | object | `{}` | +| serviceMonitor | bool | `false` | +| webhookPort | int | `9443` | + +#### Upgrading Tyk Operator + +##### Upgrading from v0.x to v1.0+ + +Starting from Tyk Operator v1.0, a valid license key is required for the Tyk Operator to function. If Tyk Operator is +upgraded from v0.x versions to one of v1.0+ versions, Tyk Operator needs a valid license key that needs to be provided +during upgrade process. This section describes how to set Tyk Operator license key to make sure Tyk Operator continues +functioning. + +To provide the license key for Tyk Operator, Kubernetes secret used to configure Tyk Operator (typically named +tyk-operator-conf as described above) requires an additional field called `TYK_OPERATOR_LICENSEKEY`. Populate this field +with your Tyk Operator license key. + +To configure the license key: + +1. Locate the Kubernetes Secret used to configure Tyk Operator (typically named `tyk-operator-conf`). +2. Add a new field called `TYK_OPERATOR_LICENSEKEY` to this Secret. +3. Set the value of `TYK_OPERATOR_LICENSEKEY` to your Tyk Operator license key. + +After updating the Kubernetes secret with this field, proceed with the standard upgrade process outlined below. + +##### Upgrading Tyk Operator and CRDs + +You can upgrade Tyk Operator through Helm Chart by running the following command: + +```console +$ helm upgrade -n tyk-operator-system tyk-operator tyk-helm/tyk-operator --wait +``` + +[Helm does not upgrade or delete CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations) +when performing an upgrade. Because of this restriction, an additional step is required when upgrading Tyk Operator with +Helm. + +```console +$ kubectl apply -f https://raw.githubusercontent.com/TykTechnologies/tyk-charts/refs/heads/main/tyk-operator-crds/crd-$TYK_OPERATOR_VERSION.yaml +``` + +{{< note success >}} **Note** +Replace $TYK_OPERATOR_VERSION with the image tag corresponding to the Tyk Operator version to which +the Custom Resource Definitions (CRDs) belong. For example, to install CRDs compatible with Tyk Operator v1.0.0, set $TYK_OPERATOR_VERSION to v1.0.0. + {{< /note >}} + + +#### Uninstalling Tyk Operator + +To uninstall Tyk Operator, you need to run the following command: + +```console +$ helm delete tyk-operator -n tyk-operator-system +``` + +### Set Up OAS API +Setting up OpenAPI Specification (OAS) APIs with Tyk involves preparing an OAS-compliant API definition and configuring it within your Kubernetes cluster using Tyk Operator. This process allows you to streamline API management by storing the OAS definition in a Kubernetes ConfigMap and linking it to Tyk Gateway through a TykOasApiDefinition resource. + +#### Create your OAS API +##### Prepare the Tyk OAS API Definition +First, you need to have a complete Tyk OAS API definition file ready. This file will contain all the necessary configuration details for your API in OpenAPI Specification (OAS) format. + +Here is an example of what the Tyk OAS API definition might look like. Note that Tyk extension `x-tyk-api-gateway` section should be present. + +```json {hl_lines=["9-25"],linenos=true} +{ + "info": { + "title": "Petstore", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "Petstore", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://petstore.swagger.io/v2" + }, + "server": { + "listenPath": { + "value": "/petstore/", + "strip": true + } + } + } +} +``` + +Save this API definition file (e.g., `oas-api-definition.json`) locally. + +{{< note success >}} +**Tips** + +You can create and configure your API easily using Tyk Dashboard in a developer environment, and then obtain the OAS API definition following these instructions: + +1. Open the Tyk Dashboard +2. Navigate to the API you want to manage with the Tyk Operator +3. Click on the "Actions" menu button and select "View Raw Definition." +4. This will display the raw OAS API definition of your API, which you can then copy and save locally. +{{< /note >}} + +##### Create a ConfigMap for the Tyk OAS API Definition + +You need to create a [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/#configmap-object) in Kubernetes to store your Tyk OAS API definition. The Tyk Operator will reference this ConfigMap to retrieve the API configuration. + +To create the ConfigMap, run the following command: + +```sh +kubectl create configmap tyk-oas-api-config --from-file=oas-api-definition.json -n tyk +``` + +This command creates a ConfigMap named `tyk-oas-api-config` in the `tyk` namespace (replace `tyk` with your actual namespace if different). + +{{< note success >}} +**Notes** + +There is inherent size limit to a ConfigMap. The data stored in a ConfigMap cannot exceed 1 MiB. In case your OpenAPI document exceeds this size limit, it is recommended to split your API into smaller sub-APIs for easy management. For details, please consult [Best Practices for Describing Large APIs](https://learn.openapis.org/best-practices.html#describing-large-apis) from the OpenAPI initiative. +{{< /note >}} + +{{< note success >}} +**Notes** + +If you prefer to create ConfigMap with a manifest using `kubectl apply` command, you may get an error that the annotation metadata cannot exceed 256KB. It is because by using `kubectl apply`, `kubectl` automatically saves the whole configuration in the annotation [kubectl.kubernetes.io/last-applied-configuration](https://kubernetes.io/docs/reference/labels-annotations-taints/#kubectl-kubernetes-io-last-applied-configuration) for tracking changes. Your OAS API Definition may easily exceed the size limit of annotations (256KB). Therefore, `kubectl create` is used here to get around the problem. +{{< /note >}} + +##### Create a TykOasApiDefinition Custom Resource + +Now, create a `TykOasApiDefinition` resource to tell the Tyk Operator to use the OAS API definition stored in the ConfigMap. + +Create a manifest file named `tyk-oas-api-definition.yaml` with the following content: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: petstore +spec: + tykOAS: + configmapRef: + name: tyk-oas-api-config # Metadata name of the ConfigMap resource that stores the OAS API Definition + namespace: tyk # Metadata namespace of the ConfigMap resource + keyName: oas-api-definition.json # Key for retrieving OAS API Definition from the ConfigMap +``` + +##### Apply the TykOasApiDefinition Manifest + +Use `kubectl` to apply the `TykOasApiDefinition` manifest to your cluster: + +```sh +kubectl apply -f tyk-oas-api-definition.yaml +``` + +This command creates a new `TykOasApiDefinition` resource in your cluster. The Tyk Operator will watch for this resource and configures Tyk Gateway or Tyk Dashboard with a new API using the provided OAS API definition. + +##### Verify the Tyk OAS API Creation + +To verify that the API has been successfully created, check the status of the TykOasApiDefinition resource: + +```sh +kubectl get tykoasapidefinition petstore +``` + +You should see the status of the resource, which will indicate if the API creation was successful. + +```bash +NAME DOMAIN LISTENPATH PROXY.TARGETURL ENABLED SYNCSTATUS INGRESSTEMPLATE +petstore /petstore/ https://petstore.swagger.io/v2 true Successful +``` + +##### Test the Tyk OAS API +After the Tyk OAS API has been successfully created, you can test it by sending a request to the API endpoint defined in your OAS file. + +For example, if your API endpoint is `/store/inventory"`, you can use `curl` or any API client to test it: + +```sh +curl "TYK_GATEWAY_URL/petstore/store/inventory" +``` + +Replace TYK_GATEWAY_URL with a URL of Tyk Gateway. + +##### Manage and Update the Tyk OAS API +To make any changes to your API configuration, update the OAS file in your ConfigMap and then re-apply the ConfigMap using `kubectl replace`: + +```sh +kubectl create configmap tyk-oas-api-config --from-file=oas-api-definition.json -n tyk --dry-run=client -o yaml | kubectl replace -f - +``` + +The Tyk Operator will automatically detect the change and update the API in the Tyk Gateway. + +{{< note success >}} +**Notes** + +`kubectl replace` without `--save-config` option is used here instead of `kubectl apply` because we do not want to save the OAS API definition in its annotation. If you want to enable `--save-config` option or use `kubectl apply`, the OAS API definition size would be further limited to at most 262144 bytes. +{{< /note >}} + +##### OAS API Example +This example shows the minimum resources and fields required to define a Tyk OAS API using Tyk Operator. + +```yaml{hl_lines=["7-7", "41-44"],linenos=true} +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm + namespace: default +data: + test_oas.json: |- + { + "info": { + "title": "Petstore", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "Petstore", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://petstore.swagger.io/v2" + }, + "server": { + "listenPath": { + "value": "/petstore/", + "strip": true + } + } + } + } +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: petstore +spec: + tykOAS: + configmapRef: + name: cm + namespace: default + keyName: test_oas.json +``` + +Here, a `ConfigMap` is created that contains the Tyk OAS API Definition with the `data` field with key `test_oas.json`. This is linked to from a `TykOasApiDefinition` resource via `spec.tykOAS.configmapRef`. + +To apply it, simply save the manifest into a file (e.g., `tyk-oas-api.yaml`) and use `kubectl apply -f tyk-oas-api.yaml` to create the required resources in your Kubernetes cluster. This command will create the necessary ConfigMap and TykOasApiDefinition resources in the `default` namespace. + + + +#### Secure your OAS API +##### Update your Tyk OAS API Definition + +First, you'll modify your existing Tyk OAS API Definition to include the API key authentication configuration. + +When creating the OAS API, you stored your OAS definition in a file named `oas-api-definition.json` and created a ConfigMap named `tyk-oas-api-config` in the `tyk` namespace. + +Modify your Tyk OAS API Definition `oas-api-definition.json` as follow. + +```json {hl_lines=["8-14","16-20","33-40"],linenos=true} +{ + "info": { + "title": "Petstore protected", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": { + "securitySchemes": { + "petstore_auth": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "security": [ + { + "petstore_auth": [] + } + ], + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "Petstore", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://petstore.swagger.io/v2" + }, + "server": { + "authentication": { + "enabled": true, + "securitySchemes": { + "petstore_auth": { + "enabled": true + } + } + }, + "listenPath": { + "value": "/petstore/", + "strip": true + } + } + } +} +``` + +In this example, we added the following sections to configure key authentication for this API. + +- `components.securitySchemes` defines the authentication method (in this case, `apiKey` in the header). +- `security`: Applies the authentication globally to all endpoints. +- `x-tyk-api-gateway.server.authentication`: Tyk-specific extension to enable the authentication scheme. + +You can configure your API for any Tyk supported authentication method by following [Authentication with Tyk OAS]({{}}) documentation. + +Save your updated API definition in the same file, `oas-api-definition.json`. + +##### Update the ConfigMap with the new Tyk OAS API Definition + +Update the existing ConfigMap that contains your Tyk OAS API Definition with the following command: + +```sh +kubectl create configmap tyk-oas-api-config --from-file=oas-api-definition.json -n tyk --dry-run=client -o yaml | kubectl replace -f - +``` + +This command updates the existing ConfigMap named `tyk-oas-api-config` in the `tyk` namespace (replace `tyk` with your actual namespace if different) with the new Tyk OAS API Definition stored in `oas-api-definition.json`. + +Since a `TykOasApiDefinition` resource has been created with reference to this ConfigMap in the previous tutorial: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: petstore +spec: + tykOAS: + configmapRef: + name: tyk-oas-api-config # Metadata name of the ConfigMap resource that stores the OAS API Definition + namespace: tyk # Metadata namespace of the ConfigMap resource + keyName: oas-api-definition.json # Key for retrieving OAS API Definition from the ConfigMap +``` + +Any changes in the ConfigMap would be detected by Tyk Operator. Tyk Operator will then automatically reconcile the changes and update the API configuration at Tyk. + +##### Verify the changes + +Verify that the `TykOasApiDefinition` has been updated successfully: + +```sh +kubectl get tykoasapidefinition petstore -o yaml +``` + +Look for the `latestTransaction` field in `status`: + +```yaml +status: + latestTransaction: + status: Successful + time: "2024-09-16T11:48:20Z" +``` + +The **Successful** status shows that Tyk Operator has reconciled the API with Tyk successfully. The last update time is shown in the `time` field. + +##### Test the API Endpoint +Now, test your API endpoint to confirm that it requires an API key. + +For example, if your API endpoint is `/store/inventory"`, you can use `curl` or any API client to test it: + +```sh +curl -v "TYK_GATEWAY_URL/petstore/store/inventory" +``` + +Replace TYK_GATEWAY_URL with a URL of Tyk Gateway. + +Request should fail with a `401 Unauthorized` response now as an API key is required for access. Your API has been secured by Tyk Gateway. + +### Set Up Tyk Classic API + +#### Create a Tyk Classic API +First, specify the details of your API using the [ApiDefinition CRD]({{< ref "#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 the following pages: + +- [HTTP Proxy example]({{< ref "#set-up-manifest-for-http" >}}) +- [TCP Proxy example]({{< ref "#set-up-manifest-for-tcp" >}}) +- [GraphQL Proxy example]({{< ref "#set-up-manifest-for-graphql" >}}) +- [UDG example]({{< ref "#set-up-manifest-for-udg" >}}) + +##### 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 <}}) page to see all the latest API Definitions fields and features we support. + +##### Configure Kubernetes service as an upstream target + +Tyk Gateway deployed in your Kubernetes cluster can easily access other Kubernetes services as an upstream proxy target. +In the ApiDefinition manifest, set the `proxy.target_url` as a Kubernetes Service following [DNS for Services and Pods guideline](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/), so that the requests will be proxied to your service. +In general, Kubernetes Services have a `.`.svc.cluster.local DNS entry once they are created. +For example, if you have a service called `httpbin` in `default` namespace, you can contact `httpbin` service with `httpbin.default.svc` DNS record in the cluster, instead of IP addresses. +Please visit the official [Kubernetes documentation](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/) for more details. +Suppose you want to create a Deployment of [httpbin](https://hub.docker.com/r/kennethreitz/httpbin/) service using [ci/upstreams/httpbin.yaml](https://github.com/TykTechnologies/tyk-operator/blob/master/ci/upstreams/httpbin.yaml) file. You are going to expose the application through port `8000` as described under the Service [specification](https://github.com/TykTechnologies/tyk-operator/blob/master/ci/upstreams/httpbin.yaml#L10). +You can create Service and Deployment by either applying the manifest defined in our repository: + +```console +$ kubectl apply -f ci/upstreams/httpbin.yaml +``` + +Or, if you don’t have the manifest with you, you can run the following command: + +```yaml +cat <` namespace as follows: + +```console +$ kubectl get service -n +``` + +You can update your `httpbin` as follows: + +```yaml +cat <..svc:`). +Now, if you send your request to the `/httpbin` endpoint of the Tyk Gateway, the request will be proxied to the `httpbin Service`: + +```curl +curl -sS http://localhost:8080/httpbin/headers +{ + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip", + "Host": "httpbin.default.svc:8000", + "User-Agent": "curl/7.68.0" + } +} +``` + +As you can see from the response, the host that your request should be proxied to is `httpbin.default.svc:8000`. + +#### Secure your Classic API +##### Update your API to Require a Key + +You might already have realized that our `httpbin` API is keyless. If you check the APIDefinition's specification, the `use_keyless` field is set to `true`. +Tyk keyless access represents completely open access for your API and causes Tyk to bypass any session-based middleware (middleware that requires access to token-related metadata). Keyless access will enable all requests through. +You can disable keyless access by setting `use_keyless` to false. + +1. Update your `httpbin.yaml` file + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: false + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +2. Apply the changes + +```bash +kubectl apply -f httpbin.yaml +``` + +Or, if you don’t have the manifest with you, you can run the following command: + +```yaml +cat <}} + +**Note** + +Tyk Operator supported authentication types are listed in the [API Definition features]({{< ref "#apidefinition-crd" >}}) section. + +{{< /note >}} + +##### Create an API key + +You need to generate a key to access the `httpbin` API now. Follow [this guide](https://tyk.io/docs/getting-started/create-api-key/) to see how to create an API key for your installation. + +You can obtain the API name and API ID of our example `httpbin` API by following command: + +```yaml +kubectl describe tykapis httpbin +Name: httpbin +Namespace: default +Labels: +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" +} +``` +Since you have provided a valid key along with your request, you do not get a `HTTP 401 Unauthorized` response. + + +#### Set Up Tyk Classic API Authentication +Client to Gateway Authentication in Tyk ensures secure communication between clients and the Tyk Gateway. Tyk supports various authentication methods to authenticate and authorize clients before they can access your APIs. These methods include API keys, Static Bearer Tokens, JWT, mTLS, Basic Authentication, and more. This document provides example manifests for each authentication method supported by Tyk. + +##### Keyless (Open) + +This configuration allows [keyless (open)]({{}}) access to the API without any authentication. + +```yaml {hl_lines=["7-7"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-keyless +spec: + name: httpbin-keyless + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +##### Auth Token (Bearer Token) + +This setup requires a [bearer token]({{}}) for access. + +In the below example, the authentication token is set by default to the `Authorization` header of the request. You can customize this behavior by configuring the following fields: + +- `use_cookie`: Set to true to use a cookie value for the token. +- `cookie_name`: Specify the name of the cookie if use_cookie is enabled. +- `use_param`: Set to true to allow the token to be passed as a query parameter. +- `param_name`: Specify the parameter name if use_param is enabled. +- `use_certificate`: Enable client certificate. This allows you to create dynamic keys based on certificates. +- `validate_signature`: Enable [signature validation]({{}}). + +```yaml {hl_lines=["13-35"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-auth-token +spec: + name: httpbin-auth-token + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + use_standard_auth: true + auth_configs: + authToken: + # Auth Key Header Name + auth_header_name: Authorization + # Use cookie value + use_cookie: false + # Cookie name + cookie_name: "" + # Allow query parameter as well as header + use_param: false + # Parameter name + param_name: "" + # Enable client certificate + use_certificate: false + # Enable Signature validation + validate_signature: false + signature: + algorithm: "" + header: "" + secret: "" + allowed_clock_skew: 0 + error_code: 0 +``` + +##### JWT + +This configuration uses [JWT tokens]({{}}) for authentication. + +Users can configure JWT authentication by defining the following fields: + +- `jwt_signing_method`: Specify the method used to sign the JWT. Refer to [JWT Signing Method]({{}}) for supported methods. +- `jwt_source`: Specify the public key used for verifying the JWT. +- `jwt_identity_base_field`: Define the identity source, typically set to `sub` (subject), which uniquely identifies the user or entity. +- `jwt_policy_field_name`: Specify the claim within the JWT payload that indicates the policy ID to apply. +- `jwt_default_policies` (Optional): Define default policies to apply if no policy claim is found in the JWT payload. + +The following example configures an API to use JWT authentication. It specifies the ECDSA signing method and public key, sets the `sub` claim as the identity source, uses the `pol` claim for policy ID, and assigns a default policy (`jwt-policy` SecurityPolicy in `default` namespace) if no policy is specified in the token. + +```yaml {hl_lines=["13-22"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-jwt1 +spec: + name: httpbin-jwt1 + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin-jwt1 + strip_listen_path: true + enable_jwt: true + strip_auth_data: true + jwt_signing_method: ecdsa + # ecdsa pvt: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2V2WnpMMWdkQUZyODhoYjIKT0YvMk54QXBKQ3pHQ0VEZGZTcDZWUU8zMGh5aFJBTkNBQVFSV3oram42NUJ0T012ZHlIS2N2akJlQlNEWkgycgoxUlR3am1ZU2k5Ui96cEJudVE0RWlNbkNxZk1QV2lacUI0UWRiQWQwRTdvSDUwVnB1WjFQMDg3RwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t + # ecdsa pub: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVZzL281K3VRYlRqTDNjaHluTDR3WGdVZzJSOQpxOVVVOEk1bUVvdlVmODZRWjdrT0JJakp3cW56RDFvbWFnZUVIV3dIZEJPNkIrZEZhYm1kVDlQT3hnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t + jwt_source: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVZzL281K3VRYlRqTDNjaHluTDR3WGdVZzJSOQpxOVVVOEk1bUVvdlVmODZRWjdrT0JJakp3cW56RDFvbWFnZUVIV3dIZEJPNkIrZEZhYm1kVDlQT3hnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t + jwt_identity_base_field: sub + jwt_policy_field_name: pol + jwt_default_policies: + - default/jwt-policy +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: jwt-policy +spec: + access_rights_array: + - name: httpbin-jwt1 + namespace: default + versions: + - Default + active: true + name: jwt-policy + state: active +``` + +You can verify the API is properly authenticated with following command: + +1. JWT with default policy +```bash +curl http://localhost:8080/httpbin-jwt1/get -H 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaWF0IjoxNTE2MjM5MDIyfQ.rgPyrCJYs2im7zG6im5XUqsf_oAf_Kqk-F6IlLb3yzZCSZvrQObhBnkLKgfmVTbhQ5El7Q6KskXPal5-eZFuTQ' +{ + "args": {}, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip", + "Host": "httpbin.org", + "Traceparent": "00-d2b93d763ca27f29181c8e508b5ac0c9-a446afa3bd053617-01", + "User-Agent": "curl/8.6.0", + "X-Amzn-Trace-Id": "Root=1-6696f0bf-1d9e532c6a2eb3a709e7086b" + }, + "origin": "127.0.0.1, 178.128.43.98", + "url": "http://httpbin.org/get" +} +``` + +2. JWT with explicit policy +```bash +curl http://localhost:8080/httpbin-jwt1/get -H 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaWF0IjoxNTE2MjM5MDIyLCJwb2wiOiJaR1ZtWVhWc2RDOXFkM1F0Y0c5c2FXTjUifQ.7nY9TvYgsAZqIHLhJdUPqZtzqU_5T-dcNtCt4zt8YPyUj893Z_NopL6Q8PlF8TlMdxUq1Ff8rt4-p8gVboIqlA' +{ + "args": {}, + "headers": { + "Accept": "*/*", + "Accept-Encoding": "gzip", + "Host": "httpbin.org", + "Traceparent": "00-002adf6632ec20377cb7ccf6c3037e78-3c4cb97c70d790cb-01", + "User-Agent": "curl/8.6.0", + "X-Amzn-Trace-Id": "Root=1-6696f1dd-7f9de5f947c8c73279f7cca6" + }, + "origin": "127.0.0.1, 178.128.43.98", + "url": "http://httpbin.org/get" +} +``` + +##### Basic Authentication + +This configuration uses [Basic Authentication]({{}}), requiring a username and password for access. + +```yaml {hl_lines=["13-13"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-basic-auth +spec: + name: Httpbin Basic Authentication + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + use_basic_auth: true +``` + +##### Custom Plugin Auth (go) + +This configuration uses a [Golang plugin]({{}}) for custom authentication. The following example shows how to create an API definition with a Golang custom plugin for `httpbin-go-auth`. + +For an example of Golang authentication middleware, see [Performing custom authentication with a Golang plugin]({{}}). + +```yaml {hl_lines=["7-7", "14-21"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-go-auth +spec: + name: httpbin-go-auth + use_go_plugin_auth: true # Turn on GO auth + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + custom_middleware: + driver: goplugin + pre: + - name: "AddFooBarHeader" + path: "/mnt/tyk-gateway/example-go-plugin.so" + auth_check: + name: "MyPluginCustomAuthCheck" + path: "/mnt/tyk-gateway/example-go-plugin.so" +``` + +##### Custom Plugin Auth (gRPC) + +This configuration uses a [gRPC plugin]({{}}) for custom authentication. The following example shows how to create an API definition with a gRPC custom plugin for `httpbin-grpc-auth`. + +For a detailed walkthrough on setting up Tyk with gRPC authentication plugins, refer to [Extending Tyk with gRPC Authentication Plugins](https://tyk.io/blog/how-to-setup-custom-authentication-middleware-using-grpc-and-java/). + +```yaml {hl_lines=["9-9", "14-26"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-grpc-auth +spec: + name: httpbin-grpc-auth + protocol: http + active: true + enable_coprocess_auth: true + proxy: + target_url: http://httpbin.default.svc:8000 + listen_path: /httpbin-grpc-auth + strip_listen_path: true + custom_middleware: + driver: grpc + post_key_auth: + - name: "HelloFromPostKeyAuth" + path: "" + auth_check: + name: foo + path: "" + id_extractor: + extract_from: header + extract_with: value + extractor_config: + header_name: Authorization +``` + +##### Multiple (Chained) Auth + +This setup allows for [multiple authentication]({{}}) methods to be chained together, requiring clients to pass through each specified authentication provider. + +To enable multiple (chained) auth, you should set `base_identity_provided_by` field to one of the supported chained enums. Consult [Enable Multi (Chained) Authentication in your API Definition]({{}}) for the supported auths. + +In this example, we are creating an API definition with basic authentication and mTLS with basic authentication as base identity for `httpbin-multiple-authentications`. + +```yaml {hl_lines=["19-21"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin-multiple-authentications +spec: + name: Httpbin Multiple Authentications + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default + base_identity_provided_by: basic_auth_user + use_basic_auth: true + use_mutual_tls_auth: true +``` + +##### IP Allowlist + +To enable [IP Allowlist]({{}}), set the following fields: + +* `enable_ip_whitelisting`: Enables IPs allowlist. When set to `true`, only requests coming from the explicit list of IP addresses defined in (`allowed_ips`) are allowed through. +* `allowed_ips`: A list of strings that defines the IP addresses (in [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) notation) that are allowed access via Tyk. + +In this example, only requests coming from 127.0.0.2 is allowed. + +```yaml {hl_lines=["10-12"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + protocol: http + active: true + enable_ip_whitelisting: true + allowed_ips: + - 127.0.0.2 + proxy: + target_url: http://httpbin.default.svc:8000 + listen_path: /httpbin + strip_listen_path: true +``` + +##### IP Blocklist + +To enable [IP Blocklist]({{}}), set the following fields: + +* `enable_ip_blacklisting`: Enables IPs blocklist. If set to `true`, requests coming from the explicit list of IP addresses (blacklisted_ips) are not allowed through. +* `blacklisted_ips`: A list of strings that defines the IP addresses (in [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) notation) that are blocked access via Tyk. This list is explicit and wildcards are currently not supported. + +In this example, requests coming from 127.0.0.2 will be forbidden (`403`). + +```yaml {hl_lines=["10-12"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + protocol: http + active: true + enable_ip_blacklisting: true + blacklisted_ips: + - 127.0.0.2 + proxy: + target_url: http://httpbin.default.svc:8000 + listen_path: /httpbin + strip_listen_path: true +``` + + +#### Set Up Manifest for GraphQL +In the example below we can see that the configuration is contained within the `graphql` configuration object. A GraphQL schema is specified within the `schema` field and the execution mode is set to `proxyOnly`. The [GraphQL public playground]({{< ref "graphql/graphql-playground#enabling-public-graphql-playground" >}}) is enabled with the path set to `/playground`. + +```yaml {hl_lines=["15-17", "18-92"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: trevorblades +spec: + name: trevorblades + use_keyless: true + protocol: http + active: true + proxy: + target_url: https://countries.trevorblades.com + listen_path: /trevorblades + strip_listen_path: true + graphql: + enabled: true + version: "2" + execution_mode: proxyOnly + schema: | + directive @cacheControl(maxAge: Int, scope: CacheControlScope) on FIELD_DEFINITION | OBJECT | INTERFACE + + enum CacheControlScope { + PUBLIC + PRIVATE + } + + type Continent { + code: ID! + name: String! + countries: [Country!]! + } + + input ContinentFilterInput { + code: StringQueryOperatorInput + } + + type Country { + code: ID! + name: String! + native: String! + phone: String! + continent: Continent! + capital: String + currency: String + languages: [Language!]! + emoji: String! + emojiU: String! + states: [State!]! + } + + input CountryFilterInput { + code: StringQueryOperatorInput + currency: StringQueryOperatorInput + continent: StringQueryOperatorInput + } + + type Language { + code: ID! + name: String + native: String + rtl: Boolean! + } + + input LanguageFilterInput { + code: StringQueryOperatorInput + } + + type Query { + continents(filter: ContinentFilterInput): [Continent!]! + continent(code: ID!): Continent + countries(filter: CountryFilterInput): [Country!]! + country(code: ID!): Country + languages(filter: LanguageFilterInput): [Language!]! + language(code: ID!): Language + } + + type State { + code: String + name: String! + country: Country! + } + + input StringQueryOperatorInput { + eq: String + ne: String + in: [String] + nin: [String] + regex: String + glob: String + } + + """The `Upload` scalar type represents a file upload.""" + scalar Upload + playground: + enabled: true + path: /playground +``` + +#### Set Up Manifest for HTTP +##### HTTP Proxy + +This example creates a basic API definition that routes requests to listen path `/httpbin` to target URL `http://httpbin.org`. + +Traffic routing can be configured under `spec.proxy`: +- `target_url` defines the upstream address (or target URL) to which requests should be proxied. +- `listen_path` is the base path on Tyk to which requests for this API should be sent. Tyk listens out for any requests coming into the host at this path, on the port that Tyk is configured to run on and processes these accordingly. For example, `/api/` or `/` or `/httpbin/`. +- `strip_listen_path` removes the inbound listen path (as accessed by the client) when generating the outbound request for the upstream service. For example, consider the scenario where the Tyk base address is `http://acme.com/`, the listen path is `example/` and the upstream URL is `http://httpbin.org/`: If the client application sends a request to `http://acme.com/example/get` then the request will be proxied to `http://httpbin.org/example/get` + +```yaml {hl_lines=["10-13"],linenos=false} +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 +``` + +##### HTTP Host-based Proxy + +`spec.domain` is the domain to bind this API to. This enforces domain matching for client requests. + +In this example, requests to `httpbin.tyk.io` will be proxied to upstream URL `http://httpbin.org` + +```yaml {hl_lines=["10-10"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + protocol: http + active: true + domain: httpbin.tyk.io + proxy: + target_url: http://httpbin.org + listen_path: / + strip_listen_path: true +``` + +##### HTTPS Proxy + +This example creates a API definition that routes requests to a http://httpbin.org via port 8443. + +```yaml {hl_lines=["35-38"],linenos=false} +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: selfsigned-issuer +spec: + selfSigned: { } +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: my-test-cert +spec: + secretName: my-test-tls + dnsNames: + - foo.com + - bar.com + privateKey: + rotationPolicy: Always + issuerRef: + name: selfsigned-issuer + # We can reference ClusterIssuers by changing the kind here. + # The default value is Issuer (i.e. a locally namespaced Issuer) + kind: Issuer + # This is optional since cert-manager will default to this value however + # if you are using an external issuer, change this to that issuer group. + group: cert-manager.io +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + protocol: https + listen_port: 8443 + certificate_secret_names: + - my-test-tls + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +#### Set Up Manifest for TCP + +This example creates a API definition that proxies request from TCP port `6380` to `tcp://localhost:6379`. + +```yaml {hl_lines=["8-11"],linenos=false} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: redis-tcp +spec: + name: redis-tcp + active: true + protocol: tcp + listen_port: 6380 + proxy: + target_url: tcp://localhost:6379 +``` + +#### Set Up Manifest for UDG +##### UDG v2 (Tyk 3.2 and above) + +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 +``` + +### Add a Security Policy to your API +To further protect access to your APIs, you will want to add a security policy. +Below, we take you through how to define the security policy but you can also find [Security Policy Example]({{< ref "#security-policy-example" >}}) below. + +##### Define the Security Policy manifest + +To create a security policy, you must define a Kubernetes manifest using the `SecurityPolicy` CRD. The following example illustrates how to configure a default policy for trial users for a Tyk Classic API named `httpbin` and a Tyk OAS API named `petstore`. + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: trial-policy # Unique Kubernetes name +spec: + name: Default policy for trial users # Descriptive name for the policy + state: active + active: true + access_rights_array: + - name: httpbin # Kubernetes name of referenced API + namespace: default # Kubernetes namespace of referenced API + kind: ApiDefinition # `ApiDefinition` (Default) or `TykOasApiDefinition` + versions: + - Default # The default version of Tyk Classic API is "Default" + - name: petstore + namespace: default + kind: TykOasApiDefinition # Use `TykOasApiDefinition` if you are referencing Tyk OAS API + versions: + - "" # The default version of Tyk OAS API is "" + quota_max: 1000 + quota_renewal_rate: 3600 + rate: 120 + per: 60 + throttle_interval: -1 + throttle_retry_limit: -1 +``` + +Save the manifest locally in a file, e.g. `trial-policy.yaml` + +In this example, we have defined a security policy as described below: + +**Define Security Policy status and metadata** + + - **`name`**: A descriptive name for the security policy. + - **`active`**: Marks the policy as active (true or false). + - **`state`**: The current state of the policy. It can have one of three values: + - **`active`**: Keys connected to this policy are enabled and new keys can be created. + - **`draft`**: Keys connected to this policy are disabled; no new keys can be created. + - **`deny`**: Policy is not published to Gateway; no keys can be created. + - **`tags`**: A list of tags to categorize or label the security policy, e.g. + + ```yaml + tags: + - Hello + - World + ``` + + - **`meta_data`**: Key-value pairs for additional metadata related to the policy, e.g. + + ```yaml + meta_data: + key: value + hello: world + ``` + +**Define Access Lists for APIs** + + - **`access_rights_array`**: Defines the list of APIs that the security policy applies to and the versions of those APIs. + - **`name`**: The Kubernetes metadata name of the API resource to which the policy grants access. + - **`namespace`**: The Kubernetes namespace where the API resource is deployed. + - **`kind`**: Both Tyk OAS APIs (`TykOasApiDefinition`) and Tyk Classic APIs (`ApiDefinition`) can be referenced here. The API format can be specified by `kind` field. If omitted, `ApiDefinition` is assumed. + - **`versions`**: Specifies the API versions the policy will cover. If the API is not versioned, include the default version here. The default version of a Classic API is "Default". The default version of an OAS API is "". + +In this example, the security policy will apply to an `ApiDefinition` resource named `httpbin` in the `default` namespace and a `TykOasApiDefinition` resource named `petstore` in the `default` namespace. Note that with Tyk Operator, you do not need to specify API ID as in the raw [Policy definition]({{}}). Tyk Operator will automatically retrieve the API ID of referenced API Definition resources for you. + +**Define Rate Limits, Usage Quota, and Throttling** + +- **`rate`**: The maximum number of requests allowed per time period (Set to `-1` to disable). +- **`per`**: The time period (in seconds) for the rate limit (Set to `-1` to disable). +- **`throttle_interval`**: The interval (in seconds) between each request retry (Set to `-1` to disable). +- **`throttle_retry_limit`**: The maximum number of retry attempts allowed (Set to `-1` to disable). +- **`quota_max`**: The maximum number of requests allowed over a quota period (Set to `-1` to disable). +- **`quota_renewal_rate`**: The time, in seconds, after which the quota is renewed. + +In this example, trial users under this security policy can gain access to the `httpbin` API at a rate limit of maximum 120 times per 60 seconds (`"rate": 120, "per": 60`), with a usage quota of 1000 every hour (`"quota_max": 1000, "quota_renewal_rate": 3600`), without any request throttling (`throttle_interval: -1, throttle_retry_limit: -1`). + +##### Apply the Security Policy manifest +Once you have defined your security policy manifest, apply it to your Kubernetes cluster using the `kubectl apply` command: + +```bash +kubectl apply -f trial-policy.yaml +``` + +##### Verify the Security Policy + +After applying the manifest, you can verify that the security policy has been created successfully by running: + +```bash +kubectl describe securitypolicy trial-policy + +... +Status: + Latest CRD Spec Hash: 901732141095659136 + Latest Tyk Spec Hash: 5475428707334545086 + linked_apis: + Kind: ApiDefinition + Name: httpbin + Namespace: default + Kind: TykOasApiDefinition + Name: petstore + Namespace: default + pol_id: 66e9a27bfdd3040001af6246 +Events: +``` + +From the `status` field, you can see that this security policy has been linked to `httpbin` and `petstore` APIs. + + +##### Security Policy Example +###### Key-Level Per-API Rate Limits and Quota + +By configuring per-API limits, you can set specific rate limits, quotas, and throttling rules for each API in the access rights array. When these per-API settings are enabled, the API inherits the global limit settings unless specific limits and quotas are set in the `limit` field for that API. + +The following manifest defines a security policy with per-API rate limits and quotas for two APIs: `httpbin` and `petstore`. + +```yaml {hl_lines=["15-21", "27-33", "40-41"],linenos=true} +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: policy-per-api-limits +spec: + name: Policy with Per API Limits + state: active + active: true + access_rights_array: + - name: httpbin # Kubernetes name of referenced API + namespace: default # Kubernetes namespace of referenced API + kind: ApiDefinition # `ApiDefinition` (Default) or `TykOasApiDefinition` + versions: + - Default # The default version of Tyk Classic API is "Default" + limit: # APILimit stores quota and rate limit on ACL level + rate: 10 # Max 10 requests per 60 seconds + per: 60 # Time period for rate limit + quota_max: 100 # Max 100 requests allowed over the quota period + quota_renewal_rate: 3600 # Quota renewal period in seconds (1 hour) + throttle_interval: -1 # No throttling between retries + throttle_retry_limit: -1 # No limit on request retries + - name: petstore + namespace: default + kind: TykOasApiDefinition # Use `TykOasApiDefinition` for Tyk OAS API + versions: + - "" # The default version of Tyk OAS API is "" + limit: + rate: 5 # Max 5 requests per 60 seconds + per: 60 # Time period for rate limit + quota_max: 100 # Max 100 requests allowed over the quota period + quota_renewal_rate: 3600 # Quota renewal period in seconds (1 hour) + throttle_interval: -1 # No throttling between retries + throttle_retry_limit: -1 # No limit on request retries + rate: -1 # Disable global rate limit + per: -1 # Disable global rate limit period + throttle_interval: -1 # Disable global throttling + throttle_retry_limit: -1 # Disable global retry limit + quota_max: -1 # Disable global quota + quota_renewal_rate: 60 # Quota renewal rate in seconds (1 minute) +``` + +With this security policy applied: + +For the `httpbin` API: +- The rate limit allows a maximum of 10 requests per 60 seconds. +- The quota allows a maximum of 100 requests per hour (3600 seconds). +- There is no throttling or retry limit (throttle_interval and throttle_retry_limit are set to -1). + +For the `petstore` API: +- The rate limit allows a maximum of 5 requests per 60 seconds. +- The quota allows a maximum of 100 requests per hour (3600 seconds). +- There is no throttling or retry limit (throttle_interval and throttle_retry_limit are set to -1). + +Global Rate Limits and Quota: +- All global limits (rate, quota, and throttling) are disabled (-1), so they do not apply. + +By setting per-API rate limits and quotas, you gain granular control over how each API is accessed and used, allowing you to apply different limits for different APIs as needed. This configuration is particularly useful when you want to ensure that critical APIs have stricter controls while allowing more flexibility for others. Use this example as a guideline to tailor your security policies to your specific requirements. + +**Key-Level Per-Endpoint Rate Limits{#per-endpoint-rate-limit}** + +By configuring key-level per-endpoint limits, you can restrict the request rate for specific API clients to a specific endpoint of an API. + +The following manifest defines a security policy with per-endpoint rate limits for two APIs: `httpbin` and `petstore`. + +```yaml {hl_lines=["15-29", "35-49"],linenos=true} +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: policy-per-api-limits +spec: + name: Policy with Per API Limits + state: active + active: true + access_rights_array: + - name: httpbin # Kubernetes name of referenced API + namespace: default # Kubernetes namespace of referenced API + kind: ApiDefinition # `ApiDefinition` (Default) or `TykOasApiDefinition` + versions: + - Default # The default version of Tyk Classic API is "Default" + endpoints: # Per-endpoint rate limits + - path: /anything + methods: + - name: POST + limit: + rate: 5 + per: 60 + - name: PUT + limit: + rate: 5 + per: 60 + - name: GET + limit: + rate: 10 + per: 60 + - name: petstore + namespace: default + kind: TykOasApiDefinition # Use `TykOasApiDefinition` for Tyk OAS API + versions: + - "" # The default version of Tyk OAS API is "" + endpoints: # Per-endpoint rate limits + - path: /pet + methods: + - name: POST + limit: + rate: 5 + per: 60 + - name: PUT + limit: + rate: 5 + per: 60 + - name: GET + limit: + rate: 10 + per: 60 + rate: -1 # Disable global rate limit + per: -1 # Disable global rate limit period + throttle_interval: -1 # Disable global throttling + throttle_retry_limit: -1 # Disable global retry limit + quota_max: -1 # Disable global quota + quota_renewal_rate: 60 # Quota renewal rate in seconds (1 minute) +``` + +**Path based permissions{#path-based-permissions}** + +You can secure your APIs by specifying [allowed URLs]({{}}) (methods and paths) for each API within a security policy. This is done using the `allowed_urls` field under `access_rights_array`. + +The following manifest defines a security policy that allows access only to specific URLs and HTTP methods for two APIs: `httpbin`(a Tyk Classic API) and `petstore` (a Tyk OAS API). + +```yaml {hl_lines=["15-18", "24-28"],linenos=true} +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: policy-with-allowed-urls +spec: + name: Policy with allowed URLs + state: active + active: true + access_rights_array: + - name: httpbin # Kubernetes name of referenced API + namespace: default # Kubernetes namespace of referenced API + kind: ApiDefinition # `ApiDefinition` (Default) or `TykOasApiDefinition` + versions: + - Default # The default version of Tyk Classic API is "Default" + allowed_urls: # Define allowed paths and methods + - url: /get # Only allow access to the "/get" path + methods: + - GET # Only allow the GET method + - name: petstore + namespace: default + kind: TykOasApiDefinition # Use `TykOasApiDefinition` for Tyk OAS API + versions: + - "" # The default version of Tyk OAS API is "" + allowed_urls: # Define allowed paths and methods + - url: "/pet/(.*)" # Allow access to any path starting with "/pet/" + methods: + - GET # Allow GET method + - POST # Allow POST method +``` + +With this security policy applied: + +- Allowed access: + - `curl -H "Authorization: Bearer $KEY_AUTH" http://tyk-gw.org/petstore/pet/10` returns a `200 OK` response. + - `curl -H "Authorization: Bearer $KEY_AUTH" http://tyk-gw.org/httpbin/get` returns a `200 OK` response. + +- Restricted access: + - `curl -H "Authorization: Bearer $KEY_AUTH" http://tyk-gw.org/petstore/pet` returns a `403 Forbidden` response with the message: + + ```json + { "error": "Access to this resource has been disallowed" } + ``` + + - `curl -H "Authorization: Bearer $KEY_AUTH" http://tyk-gw.org/httpbin/anything` returns a `403 Forbidden` response with the message: + + ```json + { "error": "Access to this resource has been disallowed" } + ``` + +**Partitioned policies{#partitioned-policies}** + +[Partitioned policies]({{}}) allow you to selectively enforce different segments of a security policy, such as quota, rate limiting, access control lists (ACL), and GraphQL complexity rules. This provides flexibility in applying different security controls as needed. + +To configure a partitioned policy, set the segments you want to enable in the `partitions` field: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: partitioned-policy-example +spec: + name: Partitioned Policy Example + state: active + active: true + access_rights_array: + - name: httpbin # Kubernetes name of referenced API + namespace: default # Kubernetes namespace of referenced API + kind: ApiDefinition # `ApiDefinition` (Default) or `TykOasApiDefinition` + versions: + - Default # The default version of Tyk Classic API is "Default" + - name: petstore + namespace: default + kind: TykOasApiDefinition # Use `TykOasApiDefinition` if you are referencing Tyk OAS API + versions: + - "" # The default version of Tyk OAS API is "" + partitions: + quota: false # Do not enforce quota rules + rate_limit: false # Do not enforce rate limiting rules + acl: true # Enforce access control rules + complexity: false # Do not enforce GraphQL complexity rules +``` + +- **`quota`**: Set to true to enforce quota rules (limits the number of requests allowed over a period). +- **`rate_limit`**: Set to true to enforce rate limiting rules (limits the number of requests per second or minute). +- **`acl`**: Set to true to enforce access control rules (controls which APIs or paths can be accessed). +- **`complexity`**: Set to true to enforce GraphQL complexity rules (limits the complexity of GraphQL queries to prevent resource exhaustion). + + +### Migrate Existing APIs to Tyk Operator +If you have existing APIs and Policies running on your Tyk platform, and you want to start using Tyk Operator to manage them, you probably would not want to re-create the APIs and Policies on the platform using Operator CRDs. It is because you will lose keys, policies, and analytics linked to the APIs. You can instead link existing APIs and Policies to a CRD by specifying the API ID or Policy ID in the CRD spec. This way, Operator will update the existing API or Policy according to the CRD spec. Any keys, policies and analytics linked to the API will continue to operate the same. This is great for idempotency. + +#### Export existing configurations to CRDs + +Instead of creating the API and Policy CRDs from scratch, you can try exporting them from Dashboard using a snapshot tool. You can find the detail usage guide [here](https://github.com/TykTechnologies/tyk-operator/blob/master/pkg/snapshot/README.md). This is great if you want to have a quick start. However, this is still a PoC feature so we recommend you to double check the output files before applying them to your cluster. + +#### Migration of existing API + +If there are existing APIs that you want to link to a CRD, it's very easy to do so. You need to simply add the `api_id` from your API Definition to the YAML of your `ApiDefinition` type. Then, the Operator will take care of the rest. + +Example: + +1. From the existing API Definition, grab the following field: + +```json +"api_id": "5e0fac4845bb46c77543be28300fd9d7" +``` + +2. Simply add this value to your YAML, in the `spec.api_id`field: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: my-existing-api +spec: + api_id: 5e0fac4845bb46c77543be28300fd9d7 + name: existing API + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +3. Then apply your changes: + +```console +$ kubectl apply -f config/samples/httpbin_protected.yaml +apidefinition.tyk.tyk.io/my-existing-api created +``` + +{{< note success >}} +**Note** + +The source of truth for the API definition is now the CRD, meaning it will override any differences in your existing API definition. +{{< /note >}} + +#### Migration of existing Policy +If you have existing pre-Operator policies, you can easily link them to a CRD, which will allow you to modify them through the YAML moving forward. +Simply set the id field in the SecurityPolicy YAML to the _id field in the existing Policy's JSON. This will allow the Operator to make the link. +Note that the YAML becomes the source of truth and will overwrite any changes between it and the existing Policy. + +**Example**: +1. Find out your existing Policy ID, e.g. `5f8f3933f56e1a5ffe2cd58c` + +2. Stick the policy ID `5f8f3933f56e1a5ffe2cd58c` into the YAML's `spec.id` field like below + +```yaml +my-security-policy.yaml: +apiVersion: tyk.tyk.io/v1alpha1 +kind: SecurityPolicy +metadata: + name: new-httpbin-policy +spec: + id: 5f8f3933f56e1a5ffe2cd58c + name: My New HttpBin Policy + state: active + active: true + access_rights_array: + - name: new-httpbin-api # name of your ApiDefinition object. + namespace: default # namespace of your ApiDefinition object. + versions: + - Default +``` + +The `spec.access_rights_array` field of the YAML must refer to the ApiDefinition object that the policy identified by the id will affect. + +To find available ApiDefinition objects: + +```console +$ kubectl get tykapis -A +NAMESPACE NAME DOMAIN LISTENPATH PROXY.TARGETURL ENABLED +default new-httpbin-api /httpbin http://httpbin.org true +``` + +3. And then apply this file: + +```console +$ kubectl apply -f my-security-policy.yaml +securitypolicy.tyk.tyk.io/new-httpbin-policy created +``` + +Now the changes in the YAML were applied to the existing Policy. You can now manage this policy through the CRD moving forward. +Note, if this resource is unintentionally deleted, the Operator will recreate it with the same `id` field as above, allowing keys to continue to work as before the delete event. + +#### Idempotency + +Because of the ability to declaratively define the `api_id`, this gives us the ability to preserve Keys that are tied to APIs or policies which are tied to APIs. +Imagine any use case where you have keys tied to policies, and policies tied to APIs. +Now imagine that these resources are unintentionally destroyed. Our database goes down, or our cluster, or something else. +Well, using the Tyk Operator, we can easily re-generate all our resources in a non-destructive fashion. That's because the operator intelligently constructs the unique ID using the unique namespaced name of our CRD resources. For that reason. +Alternatively, if you don't explicitly state it, it will be hard-coded for you by Base64 encoding the namespaced name of the CRD. + +For example: + +1. we have keys tied to policies tied to APIs in production. +2. Our production DB gets destroyed, all our Policies and APIs are wiped +3. The Tyk Operator can resync all the changes from our CRDs into a new environment, by explicitly defining the Policy IDs and API IDs as before. +4. This allows keys to continue to work normally as Tyk resources are generated idempotently through the Operator. + + +### Publish Your API to Dev Portal +For Tyk Self Managed or Tyk Cloud, you can set up a Developer Portal to expose a facade of your APIs and then allow third-party developers to register and use your APIs. +You can make use of Tyk Operator CRDs to publish the APIs as part of your CI/CD workflow. If you have followed this Getting Started guide to create the httpbin example API, you can publish it to your Tyk Classic Developer Portal in a few steps. + +{{< note success >}} + +**Note** +Currently Operator only supports publishing Tyk Classic API to the Tyk Classic Portal. +{{< /note >}} + +#### Publish an API with Tyk Operator +1. **Creating a security policy** + +When you publish an API to the Portal, Tyk actually publishes a way for developers to enroll in a policy, not into the API directly. Therefore, you should first set up a security policy for the developers, before proceeding with the publishing. + +To do that, you can use the following command: + +```yml +cat < + Click to expand + +```yaml {hl_lines=["6-7", "10-48"],linenos=true} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: httpbin-ingress + annotations: + kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER +spec: + rules: + - host: httpbin.ahmet + http: + paths: + - path: / # host routing: http://httpbin.ahmet/ + pathType: Prefix + backend: + service: + name: httpbin1 + port: + number: 8000 + - path: /httpbin # host + path routing: http://httpbin.ahmet/httpbin + pathType: Prefix + backend: + service: + name: httpbin2 + port: + number: 8000 + - http: + paths: + - path: /pathonly # path only routing: http://IPADDRESS/pathonly + pathType: Prefix + backend: + service: + name: httpbin3 + port: + number: 8000 + - host: "*.foo.com" # wildcard + # curl http://bar.foo.com/httpbin/get === OK Matches based on shared suffix + # curl http://baz.bar.foo.com/httpbin/get === NOK No match, wildcard only covers a single DNS label + # curl http://foo.com/httpbin/get === NOK No match, wildcard only covers a single DNS label + http: + paths: + - path: /httpbin + pathType: Prefix + backend: + service: + name: httpbin4 + port: + number: 8000 +``` + +In this example, 4 APIs will be created by Tyk Operator. It illustrates how different Ingress rules: host based routing, path based routing, host + path based routing, and wildcard hosts are handled by Tyk Operator. + +| API Name | Custom Domain | Listen Path | Target URL | Example request that would be handled by this API | +|----------|---------------|-------------|------------|---------------------------------------------------| +| default-httpbin-ingress-a1863f096 | httpbin.ahmet | / | http://httpbin1.default.svc.cluster.local:8000 | http://httpbin.ahmet/ | +| default-httpbin-ingress-d33713b8b | httpbin.ahmet | /httpbin | http://httpbin2.default.svc.cluster.local:8000 | http://httpbin.ahmet/httpbin | +| default-httpbin-ingress-00254eeb0 | | /pathonly | http://httpbin3.default.svc.cluster.local:8000 | http://IPADDRESS/pathonly | +| default-httpbin-ingress-3af1fef04 | {?:[^.]+}.foo.com | /httpbin | http://httpbin4.default.svc:8000 | http://bar.foo.com/httpbin | + + + +##### HTTPS with cert-manager integration + +
+ Click to expand + +```yaml {hl_lines=["7-7", "13-13", "15-24", "58-58"],linenos=true} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: httpbin-ingress-tls + annotations: + kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER + cert-manager.io/cluster-issuer: "letsencrypt-staging" # this annotation indicates the issuer to use. + acme.cert-manager.io/http01-edit-in-place: "true" +spec: + tls: + - hosts: # < placing a host in the TLS config will determine what ends up in the cert's subjectAltNames + - myingress.do.poc.tyk.technology + secretName: httpbin-ingress-tls-secret # < cert-manager will store the created certificate in this secret. + rules: + - host: myingress.do.poc.tyk.technology + http: + paths: + - path: /httpbin + pathType: Prefix + backend: + service: + name: httpbin + port: + number: 8000 +--- +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: letsencrypt-staging +spec: + acme: + server: https://acme-staging-v02.api.letsencrypt.org/directory + email: ahmet@tyk.io + privateKeySecretRef: + name: letsencrypt-staging + solvers: + - http01: + ingress: + class: tyk +--- +apiVersion: v1 +kind: Service +metadata: + name: ingress-gateway + namespace: tyk +spec: + ports: + - name: http + targetPort: 8000 + port: 80 + protocol: TCP + - name: https + targetPort: 443 + port: 443 + protocol: TCP + selector: + app: gateway-tyk-stack-tyk-gateway + type: LoadBalancer + externalTrafficPolicy: Local +``` + +A common use-case for [cert-manager](https://cert-manager.io/docs/usage/ingress/) is requesting TLS signed certificates to secure your ingress resources. This can be done by simply adding [annotations](https://cert-manager.io/docs/usage/ingress/#supported-annotations), such as `cert-manager.io/cluster-issuer`, to your Ingress resources and cert-manager will facilitate creating the `Certificate` resource for you. + +In this example, cert-manager watches the ingress resource `httpbin-ingress-tls` and ensures a TLS secret named `httpbin-ingress-tls-secret` (provided by the `tls.secretName` field) in the same namespace will be created and configured as described on the Ingress. This example also exposes Tyk Gateway as a `LoadBalancer` service with the `ingress-gateway` resource. This is essential for completing the ACME challenge from [Let\'s Encrypt](https://letsencrypt.org). + +With this configuration, Tyk Gateway can serve HTTPS requests via port 443, with a TLS certificate provisioned by cert-manager. An API is created by Tyk Operator to serve the ingress traffic at https://myingress.do.poc.tyk.technology/httpbin, and forwards the request to http://httpbin.default.svc:8000 within the cluster. + +
+ +##### ApiDefinition Template + +
+ Click to expand + +```yaml{hl_lines=["5-6"],linenos=true} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: myapideftemplate + labels: + template: "true" # Instructs Tyk Operator to skip reconciliation for this resource +spec: + name: foo + protocol: http + use_keyless: true + proxy: + target_url: http://example.com +``` + +This example defines an `ApiDefinition` resource that can be used as configuration template for APIs created for Ingresses. It has a label `template: "true"` which let Tyk Operator knows that it is not a real resource, and hence does not require reconciliation. This will allow the ApiDefinition to be stored inside Kubernetes as a resource, but will not reconcile the ApiDefinition inside Tyk. All mandatory fields inside the ApiDefinition spec are still mandatory, but can be replaced with placeholders as they will be overwritten by the Ingress reconciler. + +```yaml{hl_lines=["7-8"],linenos=true} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: my-ingress + annotations: + kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER + tyk.io/template: myapideftemplate # The metadata name of the ApiDefinition or TykOasApiDefinition resource in the same namespace + tyk.io/template-kind: ApiDefinition # Can be "ApiDefinition" (Default) or "TykOasApiDefinition" +... +``` + +To make use of the ApiDefinition template, make sure to add annotations `tyk.io/template` and `tyk.io/template-kind` to your Ingress resource. Here, we specify that the template to be used is named "myapideftemplate", and the resource represents a Tyk Classic API "ApiDefinition". + +
+ +##### TykOasApiDefinition Template + +
+ Click to expand + +```yaml{hl_lines=["39-40"],linenos=true} +apiVersion: v1 +data: + test_oas.json: |- + { + "info": { + "title": "OAS Template", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "OAS Template", + "state": { + "active": true + } + }, + "upstream": { + "url": "http://example" + }, + "server": { + "listenPath": { + "value": "/example/", + "strip": true + } + } + } + } +kind: ConfigMap +metadata: + name: cm + namespace: default +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: oasapitemplate + labels: + tyk.io/ingress-template: "true" +spec: + tykOAS: + configmapRef: + name: cm + namespace: default + keyName: test_oas.json +``` + +Here provides a minimum template as `TykOasApiDefinition`. The `TykOasApiDefinition` must have a label `tyk.io/ingress-template: "true"` so that Tyk Operator will not reconcile it with Tyk. + +```yaml{hl_lines=["7-8"],linenos=true} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: my-ingress + annotations: + kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER + tyk.io/template: oasapitemplate # The metadata name of the ApiDefinition or TykOasApiDefinition resource in the same namespace + tyk.io/template-kind: TykOasApiDefinition # Can be "ApiDefinition" (Default) or "TykOasApiDefinition" +... +``` + +To make use of the TykOasApiDefinition template, make sure to add annotations `tyk.io/template` and `tyk.io/template-kind` to your Ingress resource. Here, we specify that the template to be used is named "oasapitemplate", and the resource represents a Tyk OAS API "TykOasApiDefinition". + +
+ +#### Ingress Class + +The value of the `kubernetes.io/ingress.class` annotation identifies the IngressClass that will process Ingress objects. + +Tyk Operator by default looks for the value `tyk` and will ignore all other ingress classes. If you wish to override this default behavior, + you may do so by setting the environment variable `WATCH_INGRESS_CLASS` in the operator manager deployment. [See Installing Tyk Operator]({{< ref "#install-and-configure-tyk-operator" >}}) for further information. + +#### API name + +Tyk Ingress Controller will create APIs in Tyk for each path defined for a specific rule in Ingress resource. Each API created inside Tyk will follow a special naming convention as follows: + +``` +-- +``` + +For example, the following ingress resource will create an ApiDefinition called `default-httpbin-ingress-78acd160d` inside Tyk's Gateway. +ApiDefinition's name comes from: + +- `default`: The namespace of this Ingress resource, +- `httpbin-ingress`: The name of this Ingress resource, +- `78acd160d`: Short hash (first 9 characters) of Host (`""`) and Path (`/httpbin`). The hash algorithm is SHA256. + +```yaml{hl_lines=["4-4"],linenos=true} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: httpbin-ingress + annotations: + kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER + tyk.io/template: myapideftemplate # <---------------- REFERENCE TO APIDEFINITION IN SAME NAMESPACE +spec: + rules: + - http: + paths: + - path: /httpbin + pathType: Prefix + backend: + service: + name: httpbin + port: + number: 8000 +``` + +#### Ingress Path Types + +Each path in an Ingress must have its own particular path type. Kubernetes offers three types of path types: `ImplementationSpecific`, `Exact`, and `Prefix`. Currently, not all path types are supported. The below table shows the unsupported path types for [Sample HTTP Ingress Resource]({{< ref "#set-up-manifest-for-http" >}}) based on the examples in the [Kubernetes Ingress documentation](https://kubernetes.io/docs/concepts/services-networking/ingress/#examples). + +| Kind | Path(s) | Request path(s) | Expected to match? | Works as Expected | +|--------|-----------|-----------------|----------------------------------|-----------------------------------------| +| Exact | /foo | /foo/ | No | No. | +| Prefix | /foo/ | /foo, /foo/ | Yes | No, /foo/ matches, /foo does not match. | +| Prefix | /aaa/bb | /aaa/bbb | No | No, the request forwarded to service. | +| Prefix | /aaa/bbb/ | /aaa/bbb | Yes, ignores trailing slash | No, /aaa/bbb does not match. | +| Prefix | /aaa/bbb | /aaa/bbbxyz | No, does not match string prefix | No, the request forwarded to service. | + +Please bear in mind that if `proxy.strip_listen_path` is set to true on API Definition, Tyk strips the listen-path (for example, the listen-path for the Ingress under [Sample HTTP Ingress Resource]({{< ref "#set-up-manifest-for-http" >}}) is /httpbin) with an empty string. + +The following table shows an example of path matching if the listen-path is set to `/httpbin` or `/httpbin/`. + +| Kind | Path(s) | Request path(s) | Matches? | +|------------------------|-----------|---------------------------|-------------------------------------------------------| +| Exact | /httpbin | /httpbin, /httpbin/ | Yes. The request forwarded as `/` to your service. | +| Prefix | /httpbin | /httpbin, /httpbin/ | Yes. The request forwarded as `/` to your service. | +| ImplementationSpecific | /httpbin | /httpbin, /httpbin/ | Yes. The request forwarded as `/` to your service. | +| Exact | /httpbin | /httpbinget, /httpbin/get | Yes. The request forwarded as `/get` to your service. | +| Prefix | /httpbin | /httpbinget, /httpbin/get | Yes. The request forwarded as `/get` to your service. | +| ImplementationSpecific | /httpbin | /httpbinget, /httpbin/get | Yes. The request forwarded as `/get` to your service. | +| Exact | /httpbin/ | /httpbin/, /httpbin/get | Yes. The request forwarded as `/get` to your service. | +| Prefix | /httpbin/ | /httpbin/, /httpbin/get | Yes. The request forwarded as `/get` to your service. | +| ImplementationSpecific | /httpbin/ | /httpbin/, /httpbin/get | Yes. The request forwarded as `/get` to your service. | +| Exact | /httpbin/ | /httpbin | No. Ingress cannot find referenced service. | +| Prefix | /httpbin/ | /httpbin | No. Ingress cannot find referenced service. | +| ImplementationSpecific | /httpbin/ | /httpbin | No. Ingress cannot find referenced service. | + +### Multi-Organization Management With Tyk Operator + +If you want to set up multi-tenant API management with Tyk, follow these steps to define an OperatorContext for connecting and authenticating with a Tyk Dashboard and reference it in your API definitions for specific configurations. + +#### Defining OperatorContext + +An [OperatorContext]({{< ref "#multi-tenancy-in-tyk" >}}) specifies the parameters for connecting and authenticating with a Tyk Dashboard. Below is an example of how to define an `OperatorContext`: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: team-alpha + namespace: default +spec: + env: + # The mode of the admin api + # ce - community edition (open source gateway) + # pro - dashboard (requires a license) + mode: pro + # Org ID to use + org: *YOUR_ORGANIZATION_ID* + # The authorization token this will be set in x-tyk-authorization header on the + # client while talking to the admin api + auth: *YOUR_API_ACCESS_KEY* + # The url to the Tyk Dashboard API + url: http://dashboard.tyk.svc.cluster.local:3000 + # Set this to true if you want to skip tls certificate and host name verification + # this should only be used in testing + insecureSkipVerify: true + # For ingress the operator creates and manages ApiDefinition resources, use this to configure + # which ports the ApiDefinition resources managed by the ingress controller binds to. + # Use this to override default ingress http and https port + ingress: + httpPort: 8000 + httpsPort: 8443 +``` + +For better security, you can also replace sensitive data with values contained within a referenced secret with `.spec.secretRef`. + +In this example, API access key `auth` and organization ID `org` are not specified in the manifest. They are provided through a Kubernetes secret named `tyk-operator-conf` in `alpha` namespace. The secret contains keys `TYK_AUTH` and `TYK_ORG` which correspond to the `auth` and `org` fields respectively. + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: team-alpha + namespace: default +spec: + secretRef: + name: tyk-operator-conf ## Secret containing keys TYK_AUTH and TYK_ORG + namespace: alpha + env: + mode: pro + url: http://tyk.tykce-control-plane.svc.cluster.local:8001 + insecureSkipVerify: true + ingress: + httpPort: 8000 + httpsPort: 8443 + user_owners: + - a1b2c3d4f5e6f7 + user_group_owners: + - 1a2b3c4d5f6e7f +``` + +You can provide the following fields through secret as referenced by `secretRef`. The table shows mappings between `.spec.env` properties and secret `.spec.data` keys. If a value is configured in both the secret and OperatorContext `spec.env` field, the value from secret will take precedence. + +| Secret key | .spec.env | +|------------|-----------| +| TYK_MODE | mode | +| TYK_URL | url | +| TYK_AUTH | auth | +| TYK_ORG | org | +| TYK_TLS_INSECURE_SKIP_VERIFY | insecureSkipVerify | +| TYK_USER_OWNERS (comma separated list) | user_owners | +| TYK_USER_GROUP_OWNERS (comma separated list) | user_group_owners | + +#### Using contextRef in API Definitions + +Once an `OperatorContext` is defined, you can reference it in your API Definition objects using `contextRef`. Below is an example: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin + namespace: alpha +spec: + contextRef: + name: team-alpha + namespace: default + name: httpbin + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +In this example, the `ApiDefinition` object references the `team-alpha` context, ensuring that the configuration is applied within the `alpha` organization. + +### Internal Looping With Tyk Operator + +The concept of [internal looping]({{< ref "advanced-configuration/transform-traffic/looping" >}}) allows you to use URL Rewriting to redirect your URL to *another API endpoint* or to *another API* in the Gateway. In Tyk, looping is generally targeted using the `tyk:///` scheme, which requires prior knowledge of the `API_ID`. Tyk Operator simplifies the management and transformation of API traffic within Kubernetes environments by abstracting APIs as objects, managing them and dynamically assigning `API_ID`s by its Kubernetes metedata name and namespace. + +--- + +#### Configuring looping to internal ApiDefinition resources + +Looping can be configured within Tyk Operator for [URL Rewrites]({{< ref "#url-rewrites" >}}), [URL Rewrite Triggers]({{< ref "#url-rewrite-triggers" >}}) and [Proxy to internal APIs]({{< ref "#proxy-to-internal-apis" >}}) by configuring the `rewrite_to_internal` in `url_rewrite`, `rewrite_to_internal` in `triggers`, and `proxy.target_internal` fields respectively with these properties: + +- **Path**: The `path` property specifies the endpoint on the target API where the request should be directed. This is the portion of the URL that follows the domain and is crucial for ensuring that the request reaches the correct resource. For example, setting a value of `"/myendpoint"` means that the request will be forwarded to the `/myendpoint` path on the target API. + +- **Query**: The `query` property allows you to append additional query parameters to the target URL. These parameters can be used to modify the behavior of the target API or to pass along specific request information. For instance, setting `query: "check_limits=true"` will include this query string in the redirected request, potentially triggering special handling by the target API. + +- **Target**: The `target` property identifies the API resource to which the request should be routed. It consists of two components: `name` and `namespace`. The `name` is the identifier of the target API, while the `namespace` specifies the Kubernetes namespace where the API resource resides. Together, these elements ensure that Tyk Operator accurately locates and routes the request to the intended API. For example, `name: "proxy-api"` and `namespace: "default"` direct the request to the `proxy-api` resource in the `default` namespace. + +Tyk Operator would dynamically update the API definition by generating internal looping URL in the form of `tyk:///`. This mechanism is essential for routing traffic within a microservices architecture or when managing APIs across different namespaces in Kubernetes. Using this object you can effectively manage and optimize API traffic within your Tyk Gateway. + +--- + +#### URL Rewrites + +[URL rewriting]({{< ref "transform-traffic/url-rewriting" >}}) in Tyk enables the alteration of incoming API request paths to align with the expected endpoint format of your backend services. + +Assume that we wish to redirect incoming `GET /basic/` requests to an API defined by an ApiDefinition object named `proxy-api` in the `default` namespace. We want the `/basic/` prefix to be stripped from the request path and the redirected path should be of the format `/proxy/$1`, where the context variable `$1` is substituted with the remainder of the path request. For example `GET /basic/456` should become `GET /proxy/456`. + +In this case we can use a `rewrite_to_internal` object to instruct Tyk Operator to automatically generate the API rewrite URL on our behalf for the API identified by name `proxy-api` in the `default` namespace: + +```yaml +url_rewrites: + - path: "/{id}" + match_pattern: "/basic/(.*)" + method: GET + rewrite_to_internal: + target: + name: proxy-api + namespace: default + path: proxy/$1 +``` + +In the above example an incoming request of `/basic/456` would be matched by the `match_pattern` rule `/basic/(.*)` for `GET` requests specified in the `method` field. The `456` part of the URL will be captured and replaces `{id}` in the `path` field. Tyk Operator will use the `rewrite_to_internal` configuration to generate the URL rewrite for the API named `proxy-api` in the `default` namespace, and update the `rewrite_to` field accordingly: + +```yaml +url_rewrites: +- match_pattern: /basic/(.*) + method: GET + path: /{id} + rewrite_to: tyk://ZGVmYXVsdC9wcm94eS1hcGk/proxy/$1 +``` + +Here we can see that the `rewrite_to` field has been generated with the value `tyk://ZGVmYXVsdC9wcm94eS1hcGk/proxy/$1` where `ZGVmYXVsdC9wcm94eS1hcGk` represents the API ID for the `proxy-api` API resource in the `default` namespace. Notice also that path `proxy/$1` is appended to the base URL `tyk://ZGVmYXVsdC9wcm94eS1hcGk` and contains the context variable `$1`. This will be substituted with the value of `{id}` in the `path` configuration parameter. + +#### URL Rewrite Triggers + +[Triggers]({{< ref "product-stack/tyk-gateway/middleware/url-rewrite-middleware#url-rewrite-triggers" >}}) are configurations that specify actions based on certain conditions present in HTTP headers, query parameters, path parameters etc. + +Triggers are essential for executing specific actions when particular criteria are met, such as rewriting URLs. They are useful for automating actions based on real-time data received in requests. For example, you might use triggers to: + +- Redirect users to different APIs in the Gateway based on their authentication status. +- Enforce business rules by redirecting requests to different APIs in the Gateway based on certain parameters. + +The process for configuring internal looping in triggers to is similar to that explained in section [URL Rewrites]({{< ref "#url-rewrites" >}}). + +Assume that we wish to instruct Tyk Operator to redirect all *Basic Authentication* requests to the API identified by `basic-auth-internal` within the `default` namespace. Subsequently, we can use a `rewrite_to_internal` object as follows: + +```yaml +triggers: + - "on": "all" + options: + header_matches: + "Authorization": + match_rx: "^Basic" + rewrite_to_internal: + target: + name: basic-auth-internal + namespace: default + path: "basic/$2" +``` + +Here we we can see that a trigger is configured for all requests that include an `Authorization` header containing `Basic` in the header value. + +A `rewrite_to_internal` configuration object is used to instruct Tyk Operator to generate a redirect to the API identified by the `basic-auth-internal` API resource in the `default` namespace. The redirect path will be prefixed with `basic`. For example, a basic authentication request to path `/` will be redirected to `/basic/`. + +Tyk Operator will automatically generate a URL Rewrite (`rewrite_to`) to redirect the request to the API identified by `basic-auth-internal` within the `default` namespace as follows: + +```yaml +triggers: +- "on": all + options: + header_matches: + Authorization: + match_rx: ^Basic + rewrite_to: tyk://ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs/basic/$2 +``` + +Here we can see that the `rewrite_to` field has been generated with the value `tyk://ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs/proxy/$1` where `ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs` represents the API ID for the `proxy-api` API resource in the `default` namespace. Notice also that path `basic/$2` is appended to the base URL `tyk://ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs` and contains the context variable `$2`. This will be substituted with the remainder of the request path. + +#### Proxy to Internal APIs + +Internal looping can also be used for [proxying to internal APIs]({{< ref "advanced-configuration/transform-traffic/looping" >}}). + +Assume that we wish to redirect all incoming requests on listen path `/users` to an API defined by an ApiDefinition object named `users-internal-api` in the `default` namespace. + +In this case we can use a `proxy.target_internal` field to instruct Tyk Operator to automatically generate the target URL on our behalf for the API identified by name `users-internal-api` in the `default` namespace: + +```yaml {linenos=true, linenostart=1, hl_lines=["12-15"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: users +spec: + name: Users API + protocol: http + active: true + use_keyless: true + proxy: + target_url: "" + target_internal: + target: + name: users-internal-api + namespace: default + listen_path: /users + strip_listen_path: true +``` + +The proxy object’s `target_internal` field references other API resources. This field shares the same properties as those described for `rewrite_to_internal`, ensuring consistent configuration. + +Tyk Operator will automatically generate the target URL to redirect the request to the API identified by `users-internal-api` within the `default` namespace as follows: + +```yaml + target_url: "tyk://ZGVmYXVsdC91c2Vycy1pbnRlcm5hbC1hcGk" +``` + +--- + +#### Example + +Assume a business has legacy customers who authenticate with a service using *Basic Authentication*. The business also wants to support API Keys, enabling both client types to access the same ingress. + +To facilitate this, Tyk must be configured for dynamic authentication, accommodating both *Basic Authentication* and *Auth Token* methods. + +This setup requires configuring four API Definitions within Tyk: + +1. Entry Point API +2. BasicAuth Internal API +3. AuthToken Internal API +4. Proxy Internal API + +When a request arrives at the ingress route, a URL rewrite can direct it to either the *BasicAuth Internal* or *AuthToken Internal* API, depending on the authentication method used. + +These internal APIs will authenticate the requests. Assuming successful authentication (the happy path), they will forward the requests to the *Proxy Internal API*, which handles the proxying to the underlying service. + +
+ +{{< note success >}} +**Note** + +There are no actual HTTP redirects in this scenario, meaning that there is no performance penalty in performing any of these *Internal Redirects*. + +{{< /note >}} + +##### Entry Point API + +The *Entry Point* API is the first point of entry for a client request. It inspects the header to determine if the incoming client request requires authentication using *Basic Authentication* or *Auth Token*. Consequently, it then redirects the request to the *BasicAuth Internal* or *AuthToken Internal* API depending upon the header included in the client request. + +The API definition resource for the *Entry Point* API is listed below. It is configured to listen for requests on the `/entry` path and forward requests upstream to `http://example.com` + +We can see that there is a URL Rewrite rule (`url_rewrites`) with two triggers configured to match Basic Authentication and Auth Token requests: + +- **Basic Authentication trigger**: Activated for incoming client requests that include an *Authorization* header containing a value starting with *Basic*. In this case a `rewrite_to_internal` configuration object is used to instruct Tyk Operator to redirect the request to the *BasicAuthInternal* API, identified by name `basic-auth-internal` in the `default` namespace. The request URL is rewritten, modifying the path to `/basic/`. +- **Auth Token trigger**: Activated for incoming client requests that include an *Authorization* header containing a value starting with *Bearer*. In this case a `rewrite_to_internal` configuration object is used to instruct Tyk Operator to redirect the request to the *AuthTokenInternal* API, identified by name `auth-token-internal` in the `default` namespace. The request URL is rewritten, modifying the path to `/token/`. + + ```yaml {linenos=true, linenostart=1, hl_lines=["21-45"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: entrypoint-api +spec: + name: Entrypoint API + protocol: http + active: true + proxy: + listen_path: /entry + target_url: http://example.com + use_keyless: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default + use_extended_paths: true + extended_paths: + url_rewrites: + - path: "/{id}" + match_pattern: "/(.*)/(.*)" + method: GET + triggers: + - "on": "all" + options: + header_matches: + "Authorization": + match_rx: "^Basic" + rewrite_to_internal: + target: + name: basic-auth-internal + namespace: default + path: "basic/$2" + - "on": "all" + options: + header_matches: + "Authorization": + match_rx: "^Bearer" + rewrite_to_internal: + target: + name: auth-token-internal + namespace: default + path: "token/$2" +``` + +##### BasicAuth Internal API + +The *BasicAuth Internal* API listens to requests on path `/basic` and forwards them upstream to `http://example.com`. + +The API is configured with a URL rewrite rule in `url_rewrites` to redirect incoming `GET /basic/` requests to the API in the Gateway represented by name `proxy-api` in the `default` namespace. The `/basic/` prefix will be stripped from the request URL and the URL will be rewritten with the format `/proxy/$1`. The context variable `$1` is substituted with the remainder of the path request. For example `GET /basic/456` will become `GET /proxy/456`. + +Furthermore, a header transform rule is configured within `transform_headers` to add the header `x-transform-api` with value `basic-auth`, to the request. + +```yaml {linenos=true, linenostart=1, hl_lines=["21-35"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: basic-auth-internal +spec: + name: BasicAuth Internal API + protocol: http + proxy: + listen_path: "/basic" + target_url: http://example.com + active: true + use_keyless: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default + use_extended_paths: true + extended_paths: + url_rewrites: + - path: "/{id}" + match_pattern: "/basic/(.*)" + method: GET + rewrite_to_internal: + target: + name: proxy-api + namespace: default + path: proxy/$1 + transform_headers: + - add_headers: + x-transform-api: "basic-auth" + method: GET + path: "/{id}" + delete_headers: [] +``` + +##### AuthToken Internal API + +The *AuthToken Internal* API listens to requests on path `/token` and forwards them upstream to `http://example.com`. + +The API is configured with a URL rewrite rule in `url_rewrites` to redirect incoming `GET /token/` requests to the API in the Gateway represented by name `proxy-api` in the `default` namespace. The `/token/` prefix will be stripped from the request URL and the URL will be rewritten to the format `/proxy/$1`. The context variable `$1` is substituted with the remainder of the path request. For example `GET /token/456` will become `GET /proxy/456`. + +Furthermore, a header transform rule is configured within `transform_headers` to add the header `x-transform-api` with value `token-auth`, to the request. + +```yaml {linenos=true, linenostart=1, hl_lines=["21-35"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: auth-token-internal +spec: + name: AuthToken Internal API + protocol: http + proxy: + listen_path: "/token" + target_url: http://example.com + active: true + use_keyless: true + version_data: + default_version: Default + not_versioned: true + versions: + Default: + name: Default + use_extended_paths: true + extended_paths: + url_rewrites: + - path: "/{id}" + match_pattern: "/token/(.*)" + method: GET + rewrite_to_internal: + target: + name: proxy-api + namespace: default + path: proxy/$1 + transform_headers: + - add_headers: + x-transform-api: "token-auth" + method: GET + path: "/{id}" + delete_headers: [] +``` + +##### Proxy Internal API + +The *Proxy Internal* API is keyless and responsible for listening to requests on path `/proxy` and forwarding upstream to `http://httpbin.org`. The listen path is stripped from the request before it is sent upstream. + +This API receives requests forwarded from the internal *AuthToken Internal* and *BasicAuth Internal APIs*. Requests will contain the header `x-transform-api` with value `token-auth` or `basic-auth`, depending upon which internal API the request originated from. + +```yaml {linenos=true, linenostart=1, hl_lines=["10-13"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: proxy-api +spec: + name: Proxy API + protocol: http + active: true + internal: true + proxy: + listen_path: "/proxy" + target_url: http://httpbin.org + strip_listen_path: true + use_keyless: true +``` + +### Manage API MetaData + + +#### API Name + +##### Tyk OAS API + +API name can be set through `x-tyk-api-gateway.info.name` field in [Tyk OAS API Definition]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc">}}) object. + +##### Tyk Classic API + +To set the name of an API in the `ApiDefinition`, use the `spec.name` string field. This name is displayed on the Tyk Dashboard and should concisely describe what the API represents. + +Example: + +```yaml {linenos=true, linenostart=1, hl_lines=["6-6"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: example-api # This is the metadata name of the Kubernetes resource +spec: + name: Example API # This is the "API NAME" in Tyk + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://example.com + listen_path: /example + strip_listen_path: true +``` + +#### API Status + +##### API Active Status + +An active API will be loaded to the Gateway, while an inactive API will not, resulting in a 404 response when called. + +##### Tyk OAS API + +API active state can be set through `x-tyk-api-gateway.info.state.active` field in [Tyk OAS API Definition]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc">}}) object. + +##### Tyk Classic API + +The active status of an API can be set by modifying the `spec.active` configuration parameter. When set to `true`, this enables the API so that Tyk will listen for and process requests made to the `listenPath`. + +```yaml {linenos=true, linenostart=1, hl_lines=["9-9"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: inactive-api +spec: + name: Inactive API + use_keyless: true + protocol: http + active: false + proxy: + target_url: http://inactive.example.com + listen_path: /inactive + strip_listen_path: true +``` + +#### API Accessibility + +An API can be configured as internal so that external requests are not processed. + +##### Tyk OAS API + +API accessibility can be set through `x-tyk-api-gateway.info.state.internal` field in [Tyk OAS API Definition]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc">}}) object. + +##### Tyk Classic API + +API accessibility can be set through the `spec.internal` configuration parameter as shown in the example below. + +```yaml {linenos=true, linenostart=1, hl_lines=["10-10"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: inactive-api +spec: + name: Inactive API + use_keyless: true + protocol: http + active: true + internal: true + proxy: + target_url: http://inactive.example.com + listen_path: /inactive + strip_listen_path: true +``` + +#### API ID + +##### Creating a new API + +If you're creating a new API using Tyk Operator, you don't need to specify the ID. The API ID will be generated in a deterministic way. + +##### Tyk OAS API + +The generated ID is stored in `status.id` field. Run the following command to inspect generated API ID of a Tyk OAS API. + +```bash +% kubectl get tykoasapidefinition [API_NAME] --namespace [NAMESPACE] -o jsonpath='{.status.id}' +ZGVmYXVsdC9wZXRzdG9yZQ +``` + +In this example, the generated API ID is `ZGVmYXVsdC9wZXRzdG9yZQ`. + +##### Tyk Classic API + +The generated ID is stored in `status.api_id` field. Run the following command to inspect generated API ID of a Tyk Classic API. + +```bash +% kubectl get apidefinition [API_NAME] --namespace [NAMESPACE] -o jsonpath='{.status.api_id}' +ZGVmYXVsdC90ZXN0 +``` + +In this example, the generated API ID is `ZGVmYXVsdC90ZXN0`. + +#### Updating an existing API + +##### Tyk OAS API + +If you already have API configurations created in the Tyk Dashboard and want to start using Tyk Operator to manage these APIs, you can include the existing API ID in the manifest under the `x-tyk-api-gateway.info.id` field in [Tyk OAS API Definition]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc">}}) object. + +##### Tyk Classic API + +If you already have API configurations created in the Tyk Dashboard and want to start using Tyk Operator to manage these APIs, you can include the existing API ID in the manifest under the `spec.api_id` field. This way, when you apply the manifest, Tyk Operator will not create a new API in the Dashboard. Instead, it will update the original API with the Kubernetes spec. + +Example + +```yaml {linenos=true, linenostart=1, hl_lines=["8-8"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: existing-api + namespace: default +spec: + name: Existing API + api_id: 12345 + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://existing.example.com + listen_path: /existing + strip_listen_path: true +``` + +In this example, the API with ID `12345` will be updated according to the provided spec instead of creating a new API. + + +#### API Categories +[API categories]({{< ref "product-stack/tyk-dashboard/advanced-configurations/api-categories">}}) are configured differently for Tyk OAS APIs and Tyk Classic APIs. Please see below for examples. + +##### Tyk OAS API + +API categories can be specified through `categories` field in `TykOasApiDefinition` CRD. + +Here's an example: + +```yaml {linenos=true, linenostart=1, hl_lines=["7-9"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: oas-api-with-categories + namespace: tyk +spec: + categories: + - category 1 + - category 2 + tykOAS: + configmapRef: + keyName: oas-api-definition.json + name: tyk-oas-api-config + namespace: tyk +``` + +##### Tyk Classic API + +For a Tyk Classic API, you can specify the category name using the `name` field with a `#` qualifier. This will categorize the API in the Tyk Dashboard. See [How API categories work]({{}}) to learn about limitations on API names. + +Example + +```yaml {linenos=true, linenostart=1, hl_lines=["6-6"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: categorized-api +spec: + name: "my-classic-api #global #staging" + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://categorized.example.com + listen_path: /categorized + strip_listen_path: true +``` + +#### API Versioning +[API versioning]({{}}) are configured differently for [Tyk OAS APIs]({{< ref "#tyk-oas-api" >}}) and [Tyk Classic APIs]({{< ref "#tyk-classic-api" >}}). Please see below for examples. + +##### Configuring API Version in Tyk OAS API Definition + +In the [Tyk OAS API Definition]({{}}), versioning can be configured via `x-tyk-api-gateway.versioning` object of the Base API, where the child API's IDs are specified. In the Kubernetes environment with Tyk Operator, where we reference API resources through its Kubernetes name and namespace, this is not desired. Therefore, we add support for versioning configurations through the field `versioning` in `TykOasApiDefinition` custom resource definition (CRD). + +Here's an example: + +```yaml{linenos=true, linenostart=1, hl_lines=["12-24"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: order-api + namespace: default +spec: + tykOAS: + configmapRef: + namespace: default + name: order-api + keyName: order-api-definition-v1.json + versioning: + enabled: true + location: header + key: x-api-version + name: v1 + default: v1 + fallbackToDefault: true + stripVersioningData: true + versions: + - name: v2 + tykOasApiDefinitionRef: + name: order-api-v2 + namespace: default +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: order-api-v2 + namespace: default +spec: + tykOAS: + configmapRef: + namespace: default + name: order-api-v2 + keyName: order-api-definition-v2.json +``` + +In this example, two different versions of an API are defined: `order-api` (v1) and `order-api-v2` (v2). + +`versioning` is configured at `order-api` (v1), the Base API, and it has similiar structure as [Tyk OAS API Definition]({{}}): + +- `versioning`: This object configures API versioning for the `order-api`. + - `enabled`: Set to true to enable versioning. + - `name`: an identifier for this version of the API (v1). + - `default`: Specifies the default version (v1), which will be used if no version is specified in the request. + - `location`: Specifies where the version key is expected (in this case, in the header). It can be set to `header` or `url-param`. + - `key`: Specifies the versioning identifier key (`x-api-version`) to identify the version. In this example, the version is determined by an HTTP header named `x-api-version`. + - `fallbackToDefault`: When set to true, if an unspecified or invalid version is requested, the default version (v1) will be used. + - `stripVersioningData`: When true, removes versioning identifier (like headers or query parameters) from the upstream request to avoid exposing internal versioning details. + - `urlVersioningPattern`: Specifies a regex that matches the format that you use for the versioning identifier (name) if you are using stripVersioningData and fallBackToDefault with location=url with Tyk 5.5.0 or later + - `versions`: Defines the list of API versions available: + - `name`: an identifier for this version of the API (v2). + - `tykOasApiDefinitionRef`: Refers to a separate TykOasApiDefinition resource that represent a new API version. + - `name`: Kubernetes metadata name of the resource (`order-api-v2`). + - `namespace`: Kubernetes metadata namespace of the resource (`default`). + +With Tyk Operator, you can easily associate different versions of your APIs using their Kubernetes names. This eliminates the need to include versioning information directly within the base API's definition (`x-tyk-api-gateway.versioning` object), which typically requires referencing specific API IDs. Instead, the Operator allows you to manage versioning declaratively in the `TykOasApiDefinition` CRD, using the `versioning` field to specify versions and their Kubernetes references (names and namespaces). + +When using the CRD for versioning configuration, you don't have to worry about knowing or managing the unique API IDs within Tyk. The Tyk Operator handles the actual API definition configuration behind the scenes, reducing the complexity of version management. + +In case if there is original versioning information in the base API Definition, the versioning information will be kept and be merged with what is specified in CRD. If there are conflicts between the OAS API Definition and CRD, we will make use of CRD values as the final configuration. + +Tyk Operator would also protect you from accidentally deleting a version of an API that is being referenced by another API, maintaining your API integrity. + +##### Configuring API Version in Tyk Classic API Definition + +For Tyk Classic API, versioning can be configured via `ApiDefinition` custom resource definition (CRD). See [Tyk Classic versioning]({{}}) for a comprehensive example of configuring API versioning for Tyk Classic API with Tyk Operator. + +#### API Ownership + +Please consult the [API Ownership]({{}}) documentation for the fundamental concepts of API Ownership in Tyk and [Operator Context]({{< ref "#multi-tenancy-in-tyk" >}}) documentation for an overview of the use of OperatorContext to manage resources for different teams effectively. + +The guide includes practical examples for managing API ownership via OperatorContext. Key topics include defining user owners and user group owners in OperatorContext for connecting and authenticating with a Tyk Dashboard, and using `contextRef` in `TykOasApiDefinition` or `ApiDefinition` objects to ensure configurations are applied within specific organizations. The provided YAML examples illustrate how to set up these configurations. + +##### How API Ownership works in Tyk Operator + +In Tyk Dashboard, API Ownership ensures that only designated 'users' who own an API can modify it. This security model is crucial for maintaining control over API configurations, especially in a multi-tenant environment where multiple teams or departments may have different responsibilities and permissions. + +Tyk Operator is designed to interact with Tyk Dashboard as a system user. For the Tyk Dashboard, Tyk Operator is just another user that must adhere to the same access controls and permissions as any other user. This means: + +- Tyk Operator needs the correct access rights to modify any APIs. +- It must be capable of managing APIs according to the ownership rules set in Tyk Dashboard. + +To facilitate API ownership and ensure secure operations, Tyk Operator must be able to 'impersonate' different users for API operations. This is where `OperatorContext` comes into play. Users can define different `OperatorContext` objects that act as different agents to connect to Tyk Dashboard. Each `OperatorContext` can specify different access parameters, including the user access key and organization it belongs to. Within `OperatorContext`, users can specify the IDs of owner users or owner user groups. All APIs managed through that `OperatorContext` will be owned by the specified users and user groups, ensuring compliance with Tyk Dashboard's API ownership model. + +{{< img src="/img/operator/tyk-api-ownership.svg" alt="Enabling API ownership with OperatorContext" width="600" >}} + +##### OperatorContext + +Here's how `OperatorContext` allows Tyk Operator to manage APIs under different ownerships: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: team-alpha + namespace: default +spec: + env: + # The mode of the admin api + # ce - community edition (open source gateway) + # pro - dashboard (requires a license) + mode: pro + # Org ID to use + org: *YOUR_ORGANIZATION_ID* + # The authorization token this will be set in x-tyk-authorization header on the + # client while talking to the admin api + auth: *YOUR_API_ACCESS_KEY* + # The url to the Tyk Dashboard API + url: http://dashboard.tyk.svc.cluster.local:3000 + # Set this to true if you want to skip tls certificate and host name verification + # this should only be used in testing + insecureSkipVerify: true + # For ingress the operator creates and manages ApiDefinition resources, use this to configure + # which ports the ApiDefinition resources managed by the ingress controller binds to. + # Use this to override default ingress http and https port + ingress: + httpPort: 8000 + httpsPort: 8443 + # Optional - The list of users who are authorized to update/delete the API. + # The user pointed by auth needs to be in this list, if not empty. + user_owners: + - a1b2c3d4e5f6 + # Optional - The list of groups of users who are authorized to update/delete the API. + # The user pointed by auth needs to be a member of one of the groups in this list, if not empty. + user_group_owners: + - 1a2b3c4d5e6f +``` + +##### Tyk OAS API + +Once an `OperatorContext` is defined, you can reference it in your Tyk OAS API Definition objects using `contextRef`. Below is an example: + +```yaml {hl_lines=["40-43"],linenos=true} +apiVersion: v1 +data: + test_oas.json: |- + { + "info": { + "title": "Petstore", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "Petstore", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://petstore.swagger.io/v2" + }, + "server": { + "listenPath": { + "value": "/petstore/", + "strip": true + } + } + } + } +kind: ConfigMap +metadata: + name: cm + namespace: default +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: petstore +spec: + contextRef: + name: team-alpha + namespace: default + tykOAS: + configmapRef: + name: cm + namespace: default + keyName: test_oas.json +``` + +In this example, the `TykOasApiDefinition` object references the `team-alpha` context, ensuring that it is managed under the ownership of the specified users and user groups. + +##### Tyk Classic API + +Similarly, if you are using Tyk Classic API, you can reference it in your API Definition objects using `contextRef`. Below is an example: + +```yaml +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin + namespace: alpha +spec: + contextRef: + name: team-alpha + namespace: default + name: httpbin + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +In this example, the `ApiDefinition` object references the `team-alpha` context, ensuring that it is managed under the ownership of the specified users and user groups. + + + +## Synchronize Tyk Environment With GitHub Repository + +Tyk Sync enables you to export and import Tyk configurations directly from Git, keeping environments aligned without manual configuration updates. This section covers the setup and use of Tyk Sync, providing steps to ensure consistent configurations across different environments. + + +### Tyk Sync Features +Tyk Sync works with *Tyk Dashboard* installation. With Tyk Dashboard, Tyk Sync supports managing Classic and OAS API definitions, security policies, and API templates. + +| Tyk Sync Feature | Tyk Dashboard (Licensed) | +| ---------------------------------------------------------------------------|--------------------------| +|

Backup objects from Tyk to a directory

If you want to backup your API definitions, policies and templates in Tyk, you can use the `dump` command. It allows you to save the objects in transportable files. You can use this command to backup important API configurations before upgrading Tyk, or to save API configurations from one Dashboard instance and then use `update`, `publish`, or `sync` commands to update the API configurations to another Dashboard instance. | ✅ | +|

Synchronise objects from Git (or any VCS) to Tyk

To implement GitOps for API management, store your API definitions, policies and templates in Git or any version control system. Use the `sync` command to synchronise those objects to Tyk. During this operation, Tyk Sync will delete any objects in the Dashboard that cannot be found in the VCS, and update those that can be found and create those that are missing. | ✅ | +|

Update objects

The `update` command will read from VCS or file system and will attempt to identify matching API definitions, policies and templates in the target Dashboard, and update them. Unmatched objects will not be created. | ✅ | +|

Publish objects

The `publish` command will read from VCS or file system and create API definitions, policies, and templates in target Dashboard. This will not update any existing objects. If it detects a collision, the command will stop. | ✅ | +|

Show and import Tyk examples

The `examples` command allow you to show and import [Tyk examples](https://github.com/TykTechnologies/tyk-examples). An easy way to load up your Tyk installation with some interesting examples!| ✅ | + +**Working with OAS APIs** + +Starting with Sync v1.5+ and Dashboard v5.3.2+, Tyk Sync supports both [Tyk OAS APIs]({{}}) and [Tyk Classic APIs]({{}}) when working with the Tyk Dashboard, without requiring special flags or configurations. + +For Sync versions v1.4.1 to v1.4.3, enabling Tyk Sync for Tyk OAS APIs requires the [allow-unsafe-oas]({{}}) configuration in the Dashboard, along with the `--allow-unsafe-oas` flag when invoking Tyk Sync. Note that Tyk Sync versions v1.4.1 to 1.4.3 do not support API Category for Tyk OAS APIs. + +**Working with Open Source Gateway** + +From Sync v2.0, compatibility with the Open Source Tyk Gateway has been removed, making Tyk Sync v2.0 compatible exclusively with licensed Tyk Dashboard. As a result, Tyk Sync is no longer usable with the Open Source (OSS) version of the Tyk Gateway. + + +### 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. + + +#### Specify 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. + +#### Specify Source API Configurations +For the `sync`, `update`, and `publish` commands, you need to specify where Tyk Sync can get the source API configurations to update the target Tyk installation. You can store the source files either in a Git repository or the local file system. + +##### Working with Git +For any Tyk Sync command that requires Git repository access, specify the Git repository as the first argument after the command. By default, Tyk Sync reads from the `master` branch. To specify a different branch, use the `--branch` or `-b` flag. If the Git repository requires connection using Secure Shell Protocol (SSH), you can specify SSH keys with `--key` or `-k` flag. + +```bash +tyk-sync [command] https://github.com/your-repo --branch develop +``` + +##### Working with the local file system +To update API configurations from the local file system, use the `--path` or `-p` flag to specify the source directory for your API configuration files. + +```bash +tyk-sync [command] --path /path/to/local/directory +``` + +##### Index File Requirement +A `.tyk.json` index file is required at the root of the source Git repository or the specified path. This `.tyk.json` file lists all the files that should be processed by Tyk Sync. + +Example `.tyk.json`: +```json +{ + "type": "apidef", + "files": [ + { + "file": "api1/api1.json" + }, + { + "file": "api2/api2.json" + }, + { + "file": "api3.json" + } + ], + "policies": [ + { + "file": "policy1.json" + } + ], + "assets": [ + { + "file": "template1.json" + } + ] +} +``` + + +### Automate API Configuration Management with Tyk Sync +By integrating GitHub Actions, teams can schedule backups to cloud storage, sync configurations from a Git repository, and update local API definitions directly to the Tyk Dashboard. These workflows ensure configurations are securely maintained, aligned across environments, and easily managed within the API lifecycle. + + +#### Backup API Configurations with Github Actions +API platform teams can automate configuration backups using GitHub Actions. By setting up a scheduled GitHub Action, API configurations can be periodically exported and stored in cloud storage, like AWS S3. This approach ensures backups remain up-to-date, offering a reliable way to safeguard data and simplify restoration if needed. + + +##### Create a GitHub Action workflow + +1. In your repository, create a new file `.github/workflows/tyk-backup.yml`. +2. Add the following content to the `tyk-backup.yml` file: + +```yaml +name: Tyk Backup + +on: + schedule: + - cron: '0 0 * * *' # Runs every day at midnight + +jobs: + backup: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Create Backup Directory + run: | + BACKUP_DIR="backup/$(date +%Y-%m-%d)" + mkdir -p $BACKUP_DIR + echo "BACKUP_DIR=$BACKUP_DIR" >> $GITHUB_ENV + + - name: Set Permissions for Backup Directory + run: | + sudo chown -R 1001:1001 ${{ github.workspace }}/backup + + - name: Dump API Configurations + run: | + docker run --user 1001:1001 -v ${{ github.workspace }}:/app/data tykio/tyk-sync:${TYK_SYNC_VERSION} dump --target /app/data/${{ env.BACKUP_DIR }} --dashboard ${TYK_DASHBOARD_URL} --secret ${TYK_DASHBOARD_SECRET} + env: + TYK_SYNC_VERSION: ${{ vars.TYK_SYNC_VERSION }} + TYK_DASHBOARD_URL: ${{ secrets.TYK_DASHBOARD_URL }} + TYK_DASHBOARD_SECRET: ${{ secrets.TYK_DASHBOARD_SECRET }} + + - name: Upload to S3 + uses: jakejarvis/s3-sync-action@v0.5.1 + with: + args: --acl private --follow-symlinks --delete + env: + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: 'us-east-1' # Change to your region + SOURCE_DIR: ${{ env.BACKUP_DIR }} +``` + +##### Set up secrets + +1. Go to your GitHub repository. +2. Navigate to Settings > Secrets and variables > Actions. +3. Add the following variable: + - `TYK_SYNC_VERSION`: The version of Tyk Sync you want to use. +4. Add the following secrets: + - `TYK_DASHBOARD_URL`: The URL of your Tyk Dashboard. + - `TYK_DASHBOARD_SECRET`: The secret key for your Tyk Dashboard. + - `AWS_S3_BUCKET`: The name of your AWS S3 bucket. + - `AWS_ACCESS_KEY_ID`: Your AWS access key ID. + - `AWS_SECRET_ACCESS_KEY`: Your AWS secret access key. + +##### Commit and push changes + +Commit the `tyk-backup.yml` file and push it to the main branch of your repository. + +##### Verify backups + +The GitHub Action will run every day at midnight, dumping API configurations into a backup directory and uploading them to your specified S3 bucket. + + +#### Synchronize API configurations with GitHub Actions +API platform teams can use GitHub Actions to sync API configurations, policies, and templates from a Git repository to Tyk. Triggered by repository changes, the action generates a .tyk.json file and applies updates with the sync command, keeping the Tyk setup aligned with the repository. + +##### Setup GitHub repository +Organize your repository with the following structure: + +- `/apis/` for API definition files. +- `/policies/` for security policy files. +- `/assets/` for API template files. + +##### Create a GitHub Action workflow + +1. In your repository, create a new file `.github/workflows/tyk-sync.yml`. +2. Add the following content to the `tyk-sync.yml` file: + +```yaml +name: Tyk Sync + +on: + push: + branches: + - main + +jobs: + sync: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Create .tyk.json + run: | + echo '{' > .tyk.json + echo ' "type": "apidef",' >> .tyk.json + echo ' "files": [' >> .tyk.json + find . -type f -name '*.json' -path './apis/*' -exec echo ' {"file": "{}"},' \; | sed '$ s/,$//' >> .tyk.json + echo ' ],' >> .tyk.json + echo ' "policies": [' >> .tyk.json + find . -type f -name '*.json' -path './policies/*' -exec echo ' {"file": "{}"},' \; | sed '$ s/,$//' >> .tyk.json + echo ' ],' >> .tyk.json + echo ' "assets": [' >> .tyk.json + find . -type f -name '*.json' -path './assets/*' -exec echo ' {"file": "{}"},' \; | sed '$ s/,$//' >> .tyk.json + echo ' ]' >> .tyk.json + echo '}' >> .tyk.json + cat .tyk.json + + - name: Sync with Tyk + run: | + docker run tykio/tyk-sync:${TYK_SYNC_VERSION} version + docker run -v ${{ github.workspace }}:/app/data tykio/tyk-sync:${TYK_SYNC_VERSION} sync --path /app/data --dashboard ${TYK_DASHBOARD_URL} --secret ${TYK_DASHBOARD_SECRET} + env: + TYK_SYNC_VERSION: ${{ vars.TYK_SYNC_VERSION }} + TYK_DASHBOARD_URL: ${{ secrets.TYK_DASHBOARD_URL }} + TYK_DASHBOARD_SECRET: ${{ secrets.TYK_DASHBOARD_SECRET }} +``` + +##### Set up secrets + +1. Go to your GitHub repository. +2. Navigate to Settings > Secrets and variables > Actions. +3. Add the following variable: + - `TYK_SYNC_VERSION`: The version of Tyk Sync you want to use (e.g., v2.0.0). +4. Add the following secrets: + - `TYK_DASHBOARD_URL`: The URL of your Tyk Dashboard. + - `TYK_DASHBOARD_SECRET`: The secret key for your Tyk Dashboard. + +##### Commit and push changes + +Commit the `tyk-sync.yml` file and push it to the main branch of your repository. + +##### Verify synchronisation + +Each time there is a change in the repository, the GitHub Action will be triggered. It will create the `.tyk.json` file including all JSON files in the repository and use the `sync` command to update the Tyk installation. + + +#### Update API Definitions locally +For API developers managing definitions locally, Tyk Sync's publish or update commands can upload local API definitions directly to the Tyk Dashboard, streamlining updates and keeping definitions in sync during development. Follow these steps to update your API definitions locally. + +##### Prepare your API Definition + +Create your API definition file and save it locally. For example, save it as *api1.json* in a directory structure of your choice. + +##### Create a .tyk.json index file + +In the root directory of your API definitions, create a `.tyk.json` file to list all API definition files that Tyk Sync should process. + +Example `.tyk.json`: +```json +{ + "type": "apidef", + "files": [ + { + "file": "api1.json" + } + ] +} +``` + +##### Install Tyk Sync via Docker + +If you haven't installed Tyk Sync, you can do so via Docker: + +```bash +docker pull tykio/tyk-sync:v2.0.0 +``` + +##### Publish API Definitions to Tyk + +Use the `publish` command to upload your local API definitions to Tyk. Use Docker bind mounts to access your local files. + +```bash +docker run -v /path/to/your/directory:/app/data tykio/tyk-sync:v2.0.0 publish \ + --path /app/data \ + --dashboard [DASHBOARD_URL] \ + --secret [SECRET] +``` + +##### Update API Definitions to Tyk + +Similarly, to update existing API definitions, use the update command. + +```bash +docker run -v /path/to/your/directory:/app/data tykio/tyk-sync:v2.0.0 update \ + --path /app/data \ + --dashboard [DASHBOARD_URL] \ + --secret [SECRET] +``` + +##### Verify the update + +Log in to your Tyk Dashboard to verify that the API definitions have been published or updated successfully. + + +### 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 ``` | + +## Troubleshooting and FAQ + +### What Features Are Supported By Tyk Operator? + +#### APIDefinition CRD +Tyk stores API configurations as JSON objects called API Definitions. If you are using Tyk Dashboard to manage Tyk, then these are stored in either Postgres or MongoDB, as specified in the database settings. On the other hand, if you are using Tyk OSS, these configurations are stored as files in the /apps directory of the Gateway which is located at the default path /opt/tyk-gateway. + +An API Definition has many settings and middlewares that influence the way incoming requests are processed. + +##### API Types +Tyk supports various API types, including HTTP, HTTPS, TCP, TLS, and GraphQL. It also includes Universal Data Graph versions for unified data access and federation, allowing seamless querying across multiple services. + +| 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 +Tyk offers flexible API management features such as setting active/inactive status, categorizing and naming APIs, versioning, and defining ownership within teams or organizations for streamlined administration. + +| 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 +Tyk enables traffic routing through path-based or host-based proxies and allows redirection to specific target URLs, providing control over how requests are directed to backend services. + +| 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 +Tyk provides multiple authentication options for client-to-gateway interactions, including keyless access, JWT, client mTLS, IP allow/block lists, and custom authentication plugins for enhanced security. + +| 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 +Tyk supports secure upstream connections through mutual TLS, certificate pinning, and public key verification to ensure data integrity between the gateway and backend services. + +| 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 +Tyk offers global features for APIs, such as detailed traffic logging, CORS management, rate limiting, header transformations, and analytics plugins, with support for tagging, load balancing, and dynamic variables. + +| 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 +For specific API endpoints, Tyk includes features like caching, circuit breaking, request validation, URL rewriting, and response transformations, allowing for precise control over request processing and response handling at an endpoint level. + +| 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. | + + +#### TykOasAPIDefinition CRD +The TykOasApiDefinition Custom Resource Definition (CRD) manages [Tyk OAS API Definition object]({{}}) within a Kubernetes environment. This CRD enables the integration and management of Tyk API definitions using Kubernetes-native tools, simplifying the process of deploying and managing OAS APIs on the Tyk Dashboard. + +##### TykOasApiDefinition Features + +`TykOasApiDefinition` can support all [features of the Tyk OAS API]({{}}). You just need to provide the Tyk OAS API definition via a ConfigMap. In addition to managing the CRUD (Create, Read, Update, Delete) of Tyk OAS API resources, the Tyk Operator helps you better manage resources through object linking to Ingress, Security Policies, and certificates stored as Kubernetes secrets. See below for a list of Operator features and examples: + +| Features | Support | Supported From | Comments | Example | +|----------|---------|-----------------|----------|--------| +| API Category | ✅ | v1.0 | - | [Manage API Categories]({{< ref "#api-categories" >}}) | +| API Version | ✅ | v1.0 | - | [Manage API versioning]({{< ref "#api-versioning" >}}) | +| API Ownership via OperatorContext | ✅ | v1.0 | - | [API Ownership]({{}}) | +| Client Certificates | ✅ | v1.0 | - | [Manage TLS certificate]({{< ref "#tls-certificates" >}}) | +| Custom Domain Certificates | ✅ | v1.0 | - | [Manage TLS certificate]({{< ref "#tls-certificates" >}}) | +| Public keys pinning | ✅ | v1.0 | - | [Manage TLS certificate]({{< ref "#tls-certificates" >}}) | +| Upstream mTLS | ✅ | v1.0 | - | [Manage TLS certificate]({{< ref "#tls-certificates" >}}) | +| Kubernetes Ingress | ✅ | v1.0 | - | [Kubernetes Ingress Controller]({{< ref "#control-kubernetes-ingress-resources" >}}) | +| Link with SecurityPolicy | ✅ | v1.0 | - | [Protect an API]({{< ref "#add-a-security-policy-to-your-api" >}}) | + + + +#### Version Compatability +Ensuring compatibility between different versions is crucial for maintaining stable and efficient operations. This document provides a comprehensive compatibility matrix for Tyk Operator with various versions of Tyk and Kubernetes. By understanding these compatibility details, you can make informed decisions about which versions to deploy in your environment, ensuring that you leverage the latest features and maintain backward compatibility where necessary. + +##### Compatibility with Tyk +Tyk Operator can work with all version of Tyk beyond Tyk 3.x+. Since Tyk is backward compatible, you can safely use the +latest version of Tyk Operator to work with any version of Tyk. +However, if you're using a feature that was not yet available on an earlier version of Tyk, e.g. Defining a Subgraph with Tyk 3.x, you'll see error in Tyk Operator controller manager logs. + +See [Release notes]({{}}) to check for each Tyk Operator release, +which version of Tyk it is tested against. + +| Tyk Version | 3.2 | 4.0 | 4.1 | 4.2 | 4.3 | 5.0 | 5.2 | 5.3 | 5.4 | 5.5 | 5.6 | +| -------------------- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Tyk Operator v0.13 | Y | | | | Y | | | | | | | +| Tyk Operator v0.14 | Y | Y | | | Y | Y | | | | | | +| Tyk Operator v0.14.1 | Y | Y | | | Y | Y | | | | | | +| Tyk Operator v0.15.0 | Y | Y | | | Y | Y | | | | | | +| Tyk Operator v0.15.1 | Y | Y | | | Y | Y | | | | | | +| Tyk Operator v0.16.0 | Y | Y | | | Y | Y | Y | | | | | +| Tyk Operator v0.17.0 | Y | Y | | | Y | Y | Y | Y | | | | +| Tyk Operator v0.17.1 | Y | Y | | | | Y | Y | Y | | | | +| Tyk Operator v0.18.0 | Y | Y | | | | Y | Y | Y | Y | | | +| Tyk Operator v1.0.0 | Y | Y | | | | Y | | Y | | Y | Y | + +##### Compatibility with Kubernetes Version + +See [Release notes](https://github.com/TykTechnologies/tyk-operator/releases) to check for each Tyk Operator release, +which version of Kubernetes it is tested against. + +| Kubernetes Version | 1.19 | 1.20 | 1.21 | 1.22 | 1.23 | 1.24 | 1.25 | 1.26 | 1.27 | 1.28 | 1.29 | 1.30 | +| -------------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | +| Tyk Operator v0.13 | Y | Y | Y | Y | Y | Y | Y | | | | | | +| Tyk Operator v0.14 | Y | Y | Y | Y | Y | Y | Y | | | | | | +| Tyk Operator v0.14.1 | | Y | Y | Y | Y | Y | Y | Y | | | | | +| Tyk Operator v0.15.0 | | Y | Y | Y | Y | Y | Y | Y | | | | | +| Tyk Operator v0.15.1 | | Y | Y | Y | Y | Y | Y | Y | | | | | +| Tyk Operator v0.16.0 | | Y | Y | Y | Y | Y | Y | Y | | | | | +| Tyk Operator v0.17.0 | | | | | | | Y | Y | Y | Y | Y | | +| Tyk Operator v0.17.1 | | | | | | | Y | Y | Y | Y | Y | | +| Tyk Operator v0.18.0 | | | | | | | Y | Y | Y | Y | Y | | +| Tyk Operator v1.0.0 | | | | | | | Y | Y | Y | Y | Y | Y | + + +#### Security Policy CRD +The SecurityPolicy custom resource defines configuration of [Tyk Security Policy object]({{}}). + +Here are the supported features: + +| Features | Support | Supported From | Example | +|--------------------------------|-----------|----------------|---------| +| API Access | ✅ | v0.1 | [API Access]({{< ref "#define-the-security-policy-manifest" >}}) | +| Rate Limit, Throttling, Quotas | ✅ | v0.1 | [Rate Limit, Throttling, Quotas]({{< ref "#define-the-security-policy-manifest" >}}) | +| Meta Data & Tags | ✅ | v0.1 | [Tags and Meta-data]({{< ref "#define-the-security-policy-manifest" >}}) | +| Path and Method based permissions | ✅ | v0.1 | [Path based permission]({{< ref "#security-policy-example" >}}) | +| Partitions | ✅ | v0.1 | [Partitioned policies]({{< ref "#security-policy-example" >}}) | +| Per API limit | ✅ | v1.0 | [Per API Limit]({{< ref "#security-policy-example" >}}) | +| Per-Endpoint limit | ✅ | v1.0 | [Per Endpoint Limit]({{< ref "#security-policy-example" >}}) | + + +### 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 +``` + +### Tyk Operator changes not applied + +From [Tyk Operator v0.15.0](https://github.com/TykTechnologies/tyk-operator/releases/tag/v0.15.0), we introduce a new status [subresource](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#subresources) in APIDefinition CRD, called _latestTransaction_ which holds information about reconciliation status. + +> The [Status subresource](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#status-subresource) in Kubernetes is a specialized endpoint that allows developers and operators to retrieve the real-time status of a specific Kubernetes resource. By querying this subresource, users can efficiently access essential information about a resource's current state, conditions, and other relevant details without fetching the entire resource, simplifying monitoring and aiding in prompt decision-making and issue resolution. + +The new status subresource _latestTransaction_ consists of a couple of fields that show the latest result of the reconciliation: +- `.status.latestTransaction.status`: shows the status of the latest reconciliation, either Successful or Failed; +- `.status.latestTransaction.time`: shows the time of the latest reconciliation; +- `.status.latestTransaction.error`: shows the message of an error if observed in the latest transaction. + +#### Example: Find out why an APIDefinition resource cannot be deleted +Consider the scenario when APIDefinition and SecurityPolicy are connected. Usually, APIDefinition cannot be deleted directly since it is protected by SecurityPolicy. The proper approach to remove an APIDefinition is to first remove the reference to the SecurityPolicy (either by deleting the SecurityPolicy CR or updating SecurityPolicy CR’s specification), and then remove the APIDefinition itself. However, if we directly delete this APIDefinition, Tyk Operator won’t delete the APIDefinition unless the link between SecurityPolicy and APIDefinition is removed. It is to protect the referential integrity between your resources. + +```console +$ kubectl delete tykapis httpbin +apidefinition.tyk.tyk.io "httpbin" deleted +^C% +``` + +After deleting APIDefinition, the operation hangs, and we suspect that something is wrong. +Users might still look through the logs to comprehend the issue, as they did in the past, but they can now examine their APIDefinition’s status subresource to make their initial, speedy issue diagnosis. + +```console +$ kubectl get tykapis httpbin +NAME DOMAIN LISTENPATH PROXY.TARGETURL ENABLED STATUS +httpbin /httpbin http://httpbin.org true Failed +``` +As seen in the STATUS column, something went wrong, and the STATUS is Failed. + +To get more information about the APIDefinition resource, we can use `kubectl describe` or `kubectl get`: +```console +$ kubectl describe tykapis httpbin +Name: httpbin +Namespace: default +API Version: tyk.tyk.io/v1alpha1 +Kind: ApiDefinition +Metadata: + ... +Spec: + ... +Status: + api_id: ZGVmYXVsdC9odHRwYmlu + Latest CRD Spec Hash: 9169537376206027578 + Latest Transaction: + Error: unable to delete api due to security policy dependency=default/httpbin + Status: Failed + Time: 2023-07-18T07:26:45Z + Latest Tyk Spec Hash: 14558493065514264307 + linked_by_policies: + Name: httpbin + Namespace: default +``` +or +```console +$ kubectl get tykapis httpbin -o json | jq .status.latestTransaction +{ + "error": "unable to delete api due to security policy dependency=default/httpbin", + "status": "Failed", + "time": "2023-07-18T07:26:45Z" +} +``` +Instead of digging into Tyk Operator's logs, we can now diagnose this issue simply by looking at the `.status.latestTransaction` field. As `.status.latestTransaction.error` implies, the error is related to *SecurityPolicy* dependency. + + + + +### 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-dashboard-staging + TYK_AUTH: prod-secret +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: OperatorContext +metadata: + name: staging-context +spec: + env: + TYK_MODE: pro + TYK_URL: http://tyk-dashboard-staging + 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 Tyk Operator to point to your external Tyk installation, e.g. via `tyk-operator-conf`, environment variable, or OperatorContext: +```yaml + TYK_MODE: pro + TYK_URL: http://external-tyk-dashboard + TYK_AUTH: api-access-key + TYK_ORG: org-id +``` + +This allows you to manage your external Tyk installation using Kubernetes resources. + + +## Conclusion + +With Tyk’s automation tools, you now have a set of options for streamlining API management, from handling deployments within Kubernetes to establishing consistency across multiple environments. By integrating these tools, you can simplify complex API workflows, maintain secure configurations, and save time through reduced manual intervention. + +To continue building on what you’ve set up here, explore the following topics: + +- **Advanced Tyk API Management**: Leverage more of Tyk’s API capabilities for custom integrations and further automation possibilities. You can learn more about Tyk's custom integrations [here]({{}}) +- **GraphQL Support**: You can learn more about how to support GraphQL resources via Tyk Operator [here]({{}}) \ No newline at end of file diff --git a/tyk-docs/content/api-management/manage-apis/deploy-apis/deploy-apis-overview.md b/tyk-docs/content/api-management/manage-apis/deploy-apis/deploy-apis-overview.md index 8a784d4806..8a8b4f78fd 100644 --- a/tyk-docs/content/api-management/manage-apis/deploy-apis/deploy-apis-overview.md +++ b/tyk-docs/content/api-management/manage-apis/deploy-apis/deploy-apis-overview.md @@ -37,12 +37,12 @@ Learn more: ## Tyk Sync -Tyk Sync enables declarative API management and GitOps. With Tyk Sync, you can manage APIs and Policies in a transportable format, which can be version controlled using Git. This approach allows you to achieve automation in the API deployment process and maintain a source of truth for API configurations. By setting up a CI/CD pipeline, changes made in Git trigger the reload of configurations in Tyk Dashboard or Gateway. +Tyk Sync enables declarative API management and GitOps. With Tyk Sync, you can manage API configurations in a transportable format, which can be version controlled using Git. This approach allows you to achieve automation in the API deployment process and maintain a source of truth for API configurations. By setting up a CI/CD pipeline, changes made in Git trigger the reload of configurations in Tyk Dashboard. Usage: Recommended for organizations looking to implement GitOps in API management and have portable API and Policy configurations. Learn more: -- [Tyk Sync]({{}}) +- [Tyk Sync]({{}}) ## Tyk Operator @@ -51,7 +51,7 @@ Building on the capabilities of Tyk Sync and GitOps, Tyk Operator provides a pow Usage: Recommended for organizations already running Kubernetes and seeking a Kubernetes-native, automated approach to API deployment and management. Learn more: -- [Tyk Operator]({{}}) +- [Tyk Operator]({{}}) - [Using Tyk Operator to enable GitOps with Tyk]({{}}) With these flexible deployment options, you can easily design, develop, and deploy APIs in Tyk according to your specific requirements and workflow. Choose the option that best aligns with your needs and integrates smoothly into your API development lifecycle. diff --git a/tyk-docs/content/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware.md b/tyk-docs/content/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware.md index 4c615a7000..a8ba7b46cc 100644 --- a/tyk-docs/content/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware.md +++ b/tyk-docs/content/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware.md @@ -254,7 +254,7 @@ Go to the `/apps` folder of your Tyk Gateway installation (by default in `/var/t ### mockResponse: invoke an automatic response from the Gateway without accessing upstream service -The OpenAPI Document that you used in the example [above]({{< ref "#validateRequest-check-that-the-API-request-payload-meets-a-defined-schema" >}}), we also defined a JSON schema that describes the response format for any request that hits the `GET /pet/{petId}` path. +The OpenAPI Document that you used in the example [above]({{< ref "#validaterequest-check-that-the-api-request-payload-meets-a-defined-schema" >}}), we also defined a JSON schema that describes the response format for any request that hits the `GET /pet/{petId}` path. Tyk Gateway can "understand" and use this schema to create a mock response for any incoming requests. This is achieved by adding the `mockResponse` query parameter to the `PATCH` request, when updating the Tyk OAS API Definition. diff --git a/tyk-docs/content/apim-best-practice/api-security-best-practice/authentication.md b/tyk-docs/content/apim-best-practice/api-security-best-practice/authentication.md index a1faac6751..e2c6e6d965 100644 --- a/tyk-docs/content/apim-best-practice/api-security-best-practice/authentication.md +++ b/tyk-docs/content/apim-best-practice/api-security-best-practice/authentication.md @@ -9,7 +9,7 @@ Authentication is the process of identifying API clients. It’s a broad topic, ### Implement Appropriate Authentication -Choose a suitable authentication approach based on the risk profile of the API. Is it publicly accessible or internal? Does it require user interaction or is it machine to machine? How sensitive is the data and functionality provided by the API? Simplistic approaches, such as [Bearer Tokens]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}}), can work for low risk, basic APIs, but for higher risk or more sophisticated APIs, it may be more appropriate to use a standards-based approach such as [OAuth 2.0]({{< ref "basic-config-and-security/security/authentication-authorization/oauth-2-0" >}}) or [OpenID Connect]({{< ref "basic-config-and-security/security/authentication-authorization/openid-connect" >}}). Furthermore, using an [external identity provider]({{< ref "basic-config-and-security/security/authentication-authorization/ext-oauth-middleware" >}}) can deliver additional benefits, such as [single sign-on]({{< ref "advanced-configuration/integrate/sso" >}}), as well as multi-factor authentication approaches such as [biometric verification](https://www.okta.com/identity-101/biometrics-secure-authentication). +Choose a suitable authentication approach based on the risk profile of the API. Is it publicly accessible or internal? Does it require user interaction or is it machine to machine? How sensitive is the data and functionality provided by the API? Simplistic approaches, such as [Bearer Tokens]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}}), can work for low risk, basic APIs, but for higher risk or more sophisticated APIs, it may be more appropriate to use a standards-based approach such as [OAuth 2.0]({{< ref "/api-management/authentication-authorization#set-up-oauth-20-authorization" >}}) or [OpenID Connect]({{< ref "/api-management/authentication-authorization#use-openid-connect" >}}). Furthermore, using an [external identity provider]({{< ref "/api-management/authentication-authorization#integrate-external-oauth-middleware" >}}) can deliver additional benefits, such as [single sign-on]({{< ref "advanced-configuration/integrate/sso" >}}), as well as multi-factor authentication approaches such as [biometric verification](https://www.okta.com/identity-101/biometrics-secure-authentication). ### Handle Data Securely diff --git a/tyk-docs/content/apim-best-practice/api-security-best-practice/authorisation.md b/tyk-docs/content/apim-best-practice/api-security-best-practice/authorisation.md index cbdaa55250..c884414be9 100644 --- a/tyk-docs/content/apim-best-practice/api-security-best-practice/authorisation.md +++ b/tyk-docs/content/apim-best-practice/api-security-best-practice/authorisation.md @@ -29,7 +29,7 @@ For GraphQL APIs, use the gateway to define [GraphQL schemas]({{< ref "graphql-p ### Function Level Authorization -Handle with the gateway. Use [security policies]({{< ref "basic-config-and-security/security/security-policies" >}}), [path-based permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}), [allow lists]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}) and [block lists]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#blocklist" >}}) to manage authorization of hosts and paths. +Handle with the gateway. Use [security policies]({{< ref "basic-config-and-security/security/security-policies" >}}), [path-based permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}), [allow lists]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas#configuring-the-allow-list-in-the-tyk-oas-api-definition" >}}) and [block lists]({{< ref "product-stack/tyk-gateway/middleware/block-list-tyk-oas#configuring-the-block-list-in-the-api-designer" >}}) to manage authorization of hosts and paths. ## Assign Least Privileges @@ -37,7 +37,7 @@ Design [security policies]({{< ref "getting-started/key-concepts/what-is-a-secur ### Deny by Default -Favor use of [allow lists]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}) to explicitly allow endpoints access, rather than [block lists]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#blocklist" >}}) to explicitly deny. This approach prevents new API endpoints from being accessible by default, as the presence of other, allowed endpoints means that access to them is implicitly denied. +Favor use of [allow lists]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas#configuring-the-allow-list-in-the-tyk-oas-api-definition" >}}) to explicitly allow endpoints access, rather than [block lists]({{< ref "product-stack/tyk-gateway/middleware/block-list-tyk-oas#configuring-the-block-list-in-the-api-designer" >}}) to explicitly deny. This approach prevents new API endpoints from being accessible by default, as the presence of other, allowed endpoints means that access to them is implicitly denied. ### Validate and Control All User Input diff --git a/tyk-docs/content/apim-best-practice/api-security-best-practice/configuration.md b/tyk-docs/content/apim-best-practice/api-security-best-practice/configuration.md index abb5f79b36..f7822c68f1 100644 --- a/tyk-docs/content/apim-best-practice/api-security-best-practice/configuration.md +++ b/tyk-docs/content/apim-best-practice/api-security-best-practice/configuration.md @@ -9,7 +9,7 @@ Modern APIs are often backed by large technology stacks composed of numerous com ### Secure Connections -Use [transport layer security]({{< ref "basic-config-and-security/security/tls-and-ssl" >}}) where possible. Most importantly, on inbound connections to the gateway and outbound connection from the gateway to the upstream API and other services. TLS can also be used as a form of authentication, using [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}). +Use [transport layer security]({{< ref "basic-config-and-security/security/tls-and-ssl" >}}) where possible. Most importantly, on inbound connections to the gateway and outbound connection from the gateway to the upstream API and other services. TLS can also be used as a form of authentication, using [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}). ### Limit Functionality diff --git a/tyk-docs/content/apim-best-practice/api-security-best-practice/governance.md b/tyk-docs/content/apim-best-practice/api-security-best-practice/governance.md index 0f5e495e53..f6ec0e6f30 100644 --- a/tyk-docs/content/apim-best-practice/api-security-best-practice/governance.md +++ b/tyk-docs/content/apim-best-practice/api-security-best-practice/governance.md @@ -9,7 +9,7 @@ APIs need to be managed and governed just like any other resource, otherwise org **Restrict Version Availability**: Enforce the expiry of [API versions]({{< ref "getting-started/key-concepts/versioning" >}}) that are planned for deprecation, by setting a sunset date, beyond which they will not be accessible. -**Enforce Key Expiry**: In many situations it’s best to issue API keys that have a short, finite lifetime, especially when serving anonymous, external consumers. Set [expiry dates]({{< ref "basic-config-and-security/control-limit-traffic/key-expiry" >}}) for API keys, or use ephemeral credentials with complementary authentication techniques that support key renewal, such as [OAuth 2.0 refresh tokens]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant" >}}) and [dynamic client registration]({{< ref "tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration" >}}). Then, should an API key fall into the wrong hands, there’s a chance that it has already expired. +**Enforce Key Expiry**: In many situations it’s best to issue API keys that have a short, finite lifetime, especially when serving anonymous, external consumers. Set [expiry dates]({{< ref "basic-config-and-security/control-limit-traffic/key-expiry" >}}) for API keys, or use ephemeral credentials with complementary authentication techniques that support key renewal, such as [OAuth 2.0 refresh tokens]({{< ref "/api-management/authentication-authorization#use-refresh-token-grant" >}}) and [dynamic client registration]({{< ref "tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration" >}}). Then, should an API key fall into the wrong hands, there’s a chance that it has already expired. **Use Standardized Specifications**: Use the [OpenAPI Specification](https://en.wikipedia.org/wiki/OpenAPI_Specification) standard to design APIs. These specification documents act as a source of truth that can generate [API configuration]({{< ref "getting-started/using-oas-definitions/import-an-oas-api" >}}) and [portal documentation]({{< ref "tyk-apis/tyk-portal-api/portal-documentation#create-documentation" >}}). diff --git a/tyk-docs/content/apim-best-practice/api-security-best-practice/resource-consumption.md b/tyk-docs/content/apim-best-practice/api-security-best-practice/resource-consumption.md index 7c22780728..d40daeae68 100644 --- a/tyk-docs/content/apim-best-practice/api-security-best-practice/resource-consumption.md +++ b/tyk-docs/content/apim-best-practice/api-security-best-practice/resource-consumption.md @@ -17,7 +17,7 @@ This issue can be caused by both legitimate consumers and malicious attackers, b **Limit Complex Long-Running Tasks**: Use [GraphQL complexity limiting]({{< ref "graphql/complexity-limiting" >}}) to prevent convoluted queries from being processed. Alternatively, [timeouts]({{< ref "planning-for-production/ensure-high-availability/enforced-timeouts" >}}) can be used to terminate long-running requests that exceed a given time limit. -**Protect Failing Services**: Defend struggling endpoints by using a [circuit breaker]({{< ref "planning-for-production/ensure-high-availability/circuit-breakers#overview" >}}). This feature protects endpoints by detecting error responses, then blocking requests for a short duration to allow them to recover. The same principle can be applied in a wider sense by using [uptime tests]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/uptime-tests" >}}), though this works on a host level instead, by removing failed hosts from the gateway load balancer. +**Protect Failing Services**: Defend struggling endpoints by using a [circuit breaker]({{< ref "planning-for-production/ensure-high-availability/circuit-breakers" >}}). This feature protects endpoints by detecting error responses, then blocking requests for a short duration to allow them to recover. The same principle can be applied in a wider sense by using [uptime tests]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/uptime-tests" >}}), though this works on a host level instead, by removing failed hosts from the gateway load balancer. **Enforce Network-Level Security**: Problematic clients can be prevented from accessing the API by [blocking their address]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting" >}}). Conversely, for APIs with a known set of clients, [allow lists]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting" >}}) can be used to create a list of allowed addresses, thereby implicitly blocking every other address from the API. diff --git a/tyk-docs/content/apim.md b/tyk-docs/content/apim.md index 2187b63488..1984bd4b8f 100644 --- a/tyk-docs/content/apim.md +++ b/tyk-docs/content/apim.md @@ -16,8 +16,8 @@ Choosing the right one for your organization depends on your specific requiremen | | [Open Source]({{< ref "apim/open-source" >}}) | [Self-Managed]({{< ref "tyk-on-premises" >}}) | [Cloud](https://account.cloud-ara.tyk.io/signup) |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|-------------------|--------- -| API Gateway Capabilities
  • Rate Limiting
  • Authentication
  • API Versioning
  • Granular Access Control
  • GraphQL
  • and [much more]({{< ref "apim/open-source#tyk-gateway" >}})
| ✅ |✅ |✅ -| [Version Control]({{< ref "/product-stack/tyk-sync/overview" >}}) Integration | ✅ |✅ |✅ +| API Gateway Capabilities
  • Rate Limiting
  • Authentication
  • API Versioning
  • Granular Access Control
  • GraphQL
  • and [much more]({{< ref "apim/open-source#tyk-open-source" >}})
| ✅ |✅ |✅ +| [Version Control]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}) Integration | - |✅ |✅ | [API Analytics Exporter]({{< ref "tyk-pump" >}}) | ✅ |✅ |✅ | [Tyk Dashboard]({{< ref "tyk-dashboard" >}}) | - |✅ |✅ | [Single Sign On (SSO)]({{< ref "advanced-configuration/integrate/sso" >}}) | - |✅ |✅ diff --git a/tyk-docs/content/basic-config-and-security/control-limit-traffic/rate-limiting.md b/tyk-docs/content/basic-config-and-security/control-limit-traffic/rate-limiting.md index 4334d7cfff..597483ec9d 100755 --- a/tyk-docs/content/basic-config-and-security/control-limit-traffic/rate-limiting.md +++ b/tyk-docs/content/basic-config-and-security/control-limit-traffic/rate-limiting.md @@ -42,7 +42,7 @@ If you want to restrict an API client to a certain rate of requests to your APIs {{< note success >}} **Note** - It is assumed that the APIs being protected with a rate limit are using our [Authentication token]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}}) Authentication mode and have policies already created + It is assumed that the APIs being protected with a rate limit are using our [Authentication token]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}}) Authentication mode and have policies already created {{< /note >}} You can configure this rate limit from the API Designer in Tyk Dashboard as follows: @@ -59,7 +59,7 @@ If you want to restrict API clients to a certain rate of requests for a specific {{< note success >}} **Note** - It is assumed that the APIs being protected with a rate limit are using our [Authentication token]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}}) Authentication mode and have policies already created + It is assumed that the APIs being protected with a rate limit are using our [Authentication token]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}}) Authentication mode and have policies already created {{< /note >}} You can configure this rate limit from the API Designer in Tyk Dashboard as follows: @@ -75,6 +75,29 @@ Check out the following video to see this being done. {{< youtube n7jbmuWgPsw >}} +## Setting up a key-level per-endpoint rate limit + +To restrict the request rate for specific API clients on particular endpoints, you can use the security policy to assign per-endpoint rate limits. These limits are set within the policy and will be #enforced for any requests made to that endpoint by clients using keys generated from that policy. + +Each key will have its own independent rate limit allowance. For example, if a policy grants access to an endpoint with a rate limit of 5 requests per 60 seconds, each client with a key from that policy can make 5 requests to the endpoint in any 60-second period. Once the limit is reached, the client will receive an HTTP `429 Too Many Requests` error. + +If no per-endpoint rate limit is defined, the endpoint will inherit the key-level per-API rate limit or the global rate limit, depending on what is configured. + +{{< note success >}} +**Note** +The following assumptions are made: + - The [ignore authentication]({{< ref "product-stack/tyk-gateway/middleware/ignore-middleware" >}}) middleware should not be enabled for the relevant endpoints. + - If [path-based permissions]({{< ref "getting-started/create-security-policy#path-based-permissions" >}}) are configured, they must grant access to these endpoints for keys generated from the policies. +{{< /note >}} + +You can configure per-endpoint rate limits from the API Designer in Tyk Dashboard as follows: + +1. Navigate to the Tyk policy for which you want to set the rate limit +2. Ensure that API that you want to apply rate limits to is selected +3. Under **API Access** -> **Set endpoint-level usage limits** click on **Add Rate Limit** to configure the rate limit. You will need to provide the rate limit and the endpoint path and method. +4. **Save/Update** the policy + + ## Setting Rate Limits in the Tyk Community Edition Gateway (CE) ### Configuring the rate limiter at the (Global) API-Level diff --git a/tyk-docs/content/basic-config-and-security/reduce-latency/caching.md b/tyk-docs/content/basic-config-and-security/reduce-latency/caching.md index 28c3974301..4c29d65a51 100755 --- a/tyk-docs/content/basic-config-and-security/reduce-latency/caching.md +++ b/tyk-docs/content/basic-config-and-security/reduce-latency/caching.md @@ -62,7 +62,7 @@ Safe request caching at the API level is enabled by setting the `cache_all_safe_ This mode of operation is referred to as Global Caching because it is applied globally within the scope of a single API. Picking this approach will override any per-endpoint (per-path) caching configuration, so it’s not suitable if granular control is required. -Tyk does support safe request caching at the more granular, per-endpoint level, as described [here]({{< ref "/basic-config-and-security/reduce-latency/caching/advanced-cache#selective-caching-by-endpoint-all-safe-requests">}}) - but `cache_all_safe_requests` must be set to `false` in that scenario. +Tyk does support safe request caching at the more granular, per-endpoint level, as described [here]({{< ref "/basic-config-and-security/reduce-latency/caching/advanced-cache#request-selective-cache-control">}}) - but `cache_all_safe_requests` must be set to `false` in that scenario. #### Cache Timeout The cache timeout (Time-To-Live or TTL) value can be configured per API and is the maximum age for which Tyk will consider a cache entry to be valid. You should use this to optimize the tradeoff between reducing calls to your upstream service and potential for changes to the upstream data. diff --git a/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events.md b/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events.md index 7f1ca8a388..d93ca58f84 100755 --- a/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events.md +++ b/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events.md @@ -16,12 +16,12 @@ Tyk has a flexible model for handling these API events. There are four different categories of events that can be fired by Tyk: - [API events](#api-events) - [Token lifecycle events](#token-lifecycle-events) -- [Advanced quota usage events](#quota-usage-monitoring) +- [Advanced quota usage events](#advanced-quota-usage-events) - [Custom events](#custom-events) ### API events -Tyk can generate (or *fire*) a variety of built-in API events due to activity triggered by an API request, such as exceeded rate limits, depleted quotas or attempts to access using expired keys. The full list of standard API events is available [here]({{< ref "basic-config-and-security/report-monitor-trigger-events/event-types#api-events" >}}). +Tyk can generate (or *fire*) a variety of built-in API events due to activity triggered by an API request, such as exceeded rate limits, depleted quotas or attempts to access using expired keys. The full list of standard API events is available [here]({{< ref "basic-config-and-security/report-monitor-trigger-events#api-events" >}}). ### Token lifecycle events diff --git a/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/event-types.md b/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/event-types.md index 4ced90a23e..7db85a35ac 100755 --- a/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/event-types.md +++ b/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/event-types.md @@ -10,14 +10,14 @@ The built-in events that Tyk Gateway will generate are: ### Rate limit events - `RatelimitExceeded`: the rate limit has been exceeded for a specific key -- `OrgRateLimitExceeded`: the rate limit has been exceeded for a specific organisation +- `OrgRateLimitExceeded`: the rate limit has been exceeded for a specific organization - `RateLimitSmoothingUp`: the [intermediate rate limit allowance]({{< ref "getting-started/key-concepts/rate-limiting#rate-limit-smoothing" >}}) has been increased for a specific key - `RateLimitSmoothingDown`: the [intermediate rate limit allowance]({{< ref "getting-started/key-concepts/rate-limiting#rate-limit-smoothing" >}}) has been decreased for a specific key ### Standard quota events - `QuotaExceeded`: the quota for a specific key has been exceeded -- `OrgQuotaExceeded`: the quota for a specific organisation has been exceeded +- `OrgQuotaExceeded`: the quota for a specific organization has been exceeded ### Authentication failure events diff --git a/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/monitors.md b/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/monitors.md index b17e7128ad..a78e8b59b5 100755 --- a/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/monitors.md +++ b/tyk-docs/content/basic-config-and-security/report-monitor-trigger-events/monitors.md @@ -5,7 +5,7 @@ tags: ["monitors", "quotas", "event handling", "threshold monitoring"] description: "Advanced quota threshold monitoring" --- -Tyk provides the ability to actively monitor both user and organisation quotas, using a dedicated webhook to notify your stakeholders, your system stack or the requesting API client when certain thresholds have been reached for a token. +Tyk provides the ability to actively monitor both user and organization quotas, using a dedicated webhook to notify your stakeholders, your system stack or the requesting API client when certain thresholds have been reached for a token. Unlike API event [webhooks]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks" >}}) the quota monitor is configured at the Gateway level. @@ -25,7 +25,7 @@ This has the following fields: - `configuration`: a [webhook configuration]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks" >}}) object - `global_trigger_limit`: this is a percentage of the quota that the key must consume for the webhook to be fired - `monitor_user_keys`: set to `true` to monitor individual tokens (this may result in a large number of triggers as it scales with the number of user tokens that are issued) -- `monitor_org_keys`: set to `true` to monitor Organisation quotas +- `monitor_org_keys`: set to `true` to monitor organization quotas For example: @@ -58,7 +58,7 @@ If you are using our [Classic Developer Portal]({{< ref "tyk-developer-portal/ty ### Setting advanced thresholds -The default quota consumption monitor will be triggered at the same level of quota usage for all users. Sometimes you might want to have a more granular approach with different triggering thresholds per user or organisation. Sometimes you might want to fire the event at multiple thresholds, for example when the user hits 50%, 75% and 90% of their allowed quota. +The default quota consumption monitor will be triggered at the same level of quota usage for all users. Sometimes you might want to have a more granular approach with different triggering thresholds per user or organization. Sometimes you might want to fire the event at multiple thresholds, for example when the user hits 50%, 75% and 90% of their allowed quota. You can set user specific trigger levels for a user by additionally adding a `monitor` section to the access key ([Session Object]({{< ref "getting-started/key-concepts/what-is-a-session-object" >}})). This has one field, which is an array of `trigger_limits` (thresholds) that must be in *descending* order and represent the percentage of the quota that must be reached in order for the trigger to be fired, for example: @@ -70,7 +70,7 @@ You can set user specific trigger levels for a user by additionally adding a `mo If this is included in the session object, then the quota threshold event will be fired and the monitor webhook triggered when the user hits 50%, then 75%, and then again at 90% consumption. -You can configure advanced thresholds for all users in an Organisation by adding the `monitor` section to the Organisation session object. +You can configure advanced thresholds for all users in an organization by adding the `monitor` section to the organization session object. ## Webhook payload @@ -87,10 +87,10 @@ When the quota consumption monitor is fired, the webhook request that is issued ``` - `trigger_limit` will indicate which threshold has been reached (as defined in the session object's `monitor` section). -- `org` will contain the OrgID for the user or organisation that triggered the event +- `org` will contain the OrgID for the user or organization that triggered the event - `key` will contain the *raw API key* used in the request only if the event was triggered by a user quota -*Note: if the webhook was triggered by an organisation threshold, `key` will be blank.* +*Note: if the webhook was triggered by an organization threshold, `key` will be blank.*
{{< warning success >}} diff --git a/tyk-docs/content/basic-config-and-security/security.md b/tyk-docs/content/basic-config-and-security/security.md index c057296ff7..95686850a2 100755 --- a/tyk-docs/content/basic-config-and-security/security.md +++ b/tyk-docs/content/basic-config-and-security/security.md @@ -31,7 +31,7 @@ Tyk supports TLS connections and Mutual TLS. All TLS connections also support HT ### Trusted Certificates -As part of using Mutual TLS, you can create a list of [trusted certificates]({{< ref "basic-config-and-security/security/mutual-tls/concepts#certificates" >}}). +As part of using Mutual TLS, you can create a list of [trusted certificates]({{< ref "/api-management/authentication-authorization#how-does-mutual-tls-work" >}}). ### Certificate Pinning @@ -48,7 +48,7 @@ Tyk supports various ways to secure your APIs, including: * OAuth 2.0 * OpenID Connect -See [Authentication and Authorization]({{< ref "basic-config-and-security/security/authentication-&-authorization" >}}) for more details. +See [Authentication and Authorization]({{< ref "/api-management/authentication-authorization" >}}) for more details. ### Security Policies 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/basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant.md b/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant.md deleted file mode 100644 index d004686603..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -date: 2017-03-23T16:06:42Z -title: Authorization Code Grant Type -tags: ["Grant Types", "Authorization"] -description: "Using an Authorization grant type with OAuth 2.0" -menu: - main: - parent: "OAuth 2.0" -weight: 1 -aliases: - - /basic-config-and-security/security/authentication-authorization/oauth2.0/auth-code-grant/ - - /basic-config-and-security/security/authentication-authorization/oauth2-0/auth-code-grant/ - - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant/ ---- - -This process requires three steps: - -- Redirect to a login page -- Request an authorization code -- Exchange code for a token - -## Redirect to a login page - -```.copyWrapper -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 | Value | -| ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| Method | `POST` | -| URL | Uses the special OAuth endpoint `/oauth/authorize` appended to the API URI e.g. `https:////oauth/authorize`. | - -| Header | Value | -| -------------- | ----------------------------------- | -| `Content-Type` | `application/x-www-form-urlencoded` | - -| Data | Value | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `response_type` | `code` | -| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | -| `redirect_uri` | The OAuth client redirect URI, in this case `http://example.com/client-redirect-uri` and must be URL encoded e.g. `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | - -#### Response - -Response generates a 307 Temporary Redirect to the Oauth client redirect URI. It is expected that this location will be capable of authenticating the user then using the data forwarded to it as part of the redirect to request an `authorization` code. - -## Request an authorization code - -This request should be made from the 3rd party authentication server. - -```.copWrapper -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' -``` - -{{< note success >}} -**Note** - -Because this example uses Tyk Cloud it uses the API id in the URL. For all other scenarios (e.g. On-Premises) you should use the API listen path instead e.g. https://api/apis/oauth//authorize-client/. For the API used in this example it would be https://admin.cloud.tyk.io/api/apis/oauth/oauth-api/authorize-client/. -{{< /note >}} - -{{< note success >}} -**Note** - -The Tyk Gateway also exposes an equivalent Gateway API `authorization` endpoint (`/tyk/oauth/authorize-client/`). In some scenarios, for example where access to the Dashboard API from the authentication server may be restricted, the Gateway API can be used instead. -{{< /note >}} - - -| Request | Value | -| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Method | `POST` | -| URL | Uses the Dashboard API client `authorization` endpoint `/authorize-client/`. | - -| Header | Value | -| --------------- | -------------------------------------------------------------------------------- | -| `Authorization` | The Dashboard user credentials, in this case `70c3d834d46a4d6076e1585b0ef2e93e`. | -| `Content-Type` | `application/x-www-form-urlencoded` | - -| Data | Value | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `response_type` | `code` | -| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | -| `redirect_uri` | The OAuth client redirect URI, in this case `http://example.com/client-redirect-uri` and must be URL encoded e.g. `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | - -#### Response - -Response provides the `authorization` code as `code` and the redirect URL as `redirect_to`. It is expected the 3rd party authentication server will redirect the user to the redirect URL. - -```{.copyWrapper} -{ - "code": "EaG1MK7LS8GbbwCAUwDo6Q", - "redirect_to": "http://example.com/client-redirect-uri?code=EaG1MK7LS8GbbwCAUwDo6Q" -} -``` - -## Exchange code for a token - -The client application uses this request to exchange the `authorization` code for an API token. Note that codes are single use only, so cannot be reused. - -```{.copyWrapper} -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 | Value | -| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Method | `POST` | -| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | - -| Header | Value | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | -| `Content-Type` | `application/x-www-form-urlencoded` | - -| Data | Value | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `grant_type` | `authorization_code` | -| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | -| `code` | The authorization code (`code`) provided in the response to the previous request, in this case `EaG1MK7LS8GbbwCAUwDo6Q`. | -| `redirect_uri` | The OAuth client redirect URI, in this case `http://example.com/client-redirect-uri` and must be URL encoded e.g. `http%3A%2F%2Fexample.com%2Fclient-redirect-uri`. | - -#### Response - -Response provides the token as `access_token` in the returned JSON which can then be used to access the API: - -```{.copyWrapper} -{ - "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`, which contains the `OAuth Notifications Shared Secret` as a header for verification purposes. - -```{.copyWrapper} -{ - "auth_code": "EaG1MK7LS8GbbwCAUwDo6Q", - "new_oauth_token": "580defdbe1d21e0001c67e5c2a0a6c98ba8b4a059dc5825388501573", - "refresh_token": "NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2", - "old_refresh_token": "", - "notification_type": "new" -} -``` - -### Sequence Diagram - -{{< img src="/img/diagrams/diagram_docs_authorization-code-grant-type@2x.png" alt="Authorization grant type flow" >}} diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant.md b/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant.md deleted file mode 100644 index 7b5c084fcc..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -date: 2017-03-23T16:06:42Z -title: Client Credentials Grant Type -tags: ["Grant Types", "Client Credentials"] -description: "Using a Client Credentials grant type with OAuth 2.0" -menu: - main: - parent: "OAuth 2.0" -weight: 5 -aliases: - - /basic-config-and-security/security/authentication-authorization/oauth2-0/client-credentials-grant/ - - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant ---- - -The Client Credentials grant type uses the OAuth client credentials to generate a token. - -### Token Request - -This request provides the client credentials in exchange for an API token. - -```shell -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&client_secret=MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1' -``` - -| Request | Value | -| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Method | `POST` | -| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | - -| Header | Value | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | -| `Content-Type` | `application/x-www-form-urlencoded` | - -| Data | Value | -| --------------- | ----------------------------------------------------------------------------------------- | -| `grant_type` | `client_credentials` | -| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | -| `client_secret` | The OAuth client secret, in this case `MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`. | - -#### Response - -Response provides the token as `access_token` in the returned JSON which can then be used to access the API: - -```json -{ - "access_token": "580defdbe1d21e0001c67e5c40e93eac3d23494697470b90d7c81593", - "expires_in": 3600, - "token_type": "bearer" -} -``` -{{< note success >}} -**Note** - -It does not provide a refresh token. -{{< /note >}} - - - -### Sequence Diagram - -{{< img src="/img/diagrams/diagram_docs_client-credentials-grant-type@2x.png" alt="Client credentials grant type flow" >}} diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant.md b/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant.md deleted file mode 100644 index 4121aead68..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -date: 2017-03-23T16:06:42Z -title: Refresh Token Grant Type -tags: ["Grant Types", "Refresh Token"] -description: "Using a Refresh Token grant type with OAuth 2.0" -menu: - main: - parent: "OAuth 2.0" -weight: 2 -aliases: - - /basic-config-and-security/security/authentication-authorization/oauth2-0/refresh-token-grant/ - - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant ---- - -The Refresh Token grant type uses the refresh token to generate a new token. - -{{< note success >}} -**Note** - -Refresh tokens are single use only so cannot be reused, and when they are used they also invalidate the token they are associated with. -{{< /note >}} - -### Request new token - -```shell -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&client_id=ed59158fa2344e94b3e6278e8ab85142&client_secret=MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1&refresh_token=YjdhOWFmZTAtNmExZi00ZTVlLWIwZTUtOGFhNmIwMWI3MzJj' -``` - -| Request | Value | -| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Method | `POST` | -| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | - -| Header | Value | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | -| `Content-Type` | `application/x-www-form-urlencoded` | - -| Data | Value | -| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `grant_type` | `refresh_token` | -| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | -| `client_secret` | The OAuth client secret, in this case `MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`. | -| `refresh_token` | The refresh token (`refresh_token`) provided in response to the original token request, in this case `YjdhOWFmZTAtNmExZi00ZTVlLWIwZTUtOGFhNmIwMWI3MzJj`. | - -### Response - -Response provides a new token as `access_token` and a new refresh token as `refresh_token` in the returned JSON: - -```json -{ - "access_token": "580defdbe1d21e0001c67e5c2a0a6c98ba8b4a059dc5825388501573", - "expires_in": 3600, - "refresh_token": "NWQzNGVhMTItMDE4Ny00MDFkLTljOWItNGE4NzI1ZGI1NGU2", - "token_type": "bearer" -} -``` - -### Sequence Diagram - -{{< img src="/img/diagrams/diagram_docs_refresh-token-grant-type@2x.png" alt="Refresh token grant type sequence" >}} diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant.md b/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant.md deleted file mode 100644 index 25569a7f2c..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -date: 2017-03-23T16:06:42Z -title: Username and Password Grant Type -tags: ["Grant Types", "Username and Password"] -description: "Using a Username and Password grant type with OAuth 2.0" -menu: - main: - parent: "OAuth 2.0" -weight: 4 -aliases: - - /basic-config-and-security/security/authentication-authorization/oauth2-0/username-password-grant/ - - /basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant ---- - -The Username and Password grant type uses a basic authentication key to generate a token. When you create the basic authentication key in the Dashboard, this stores the `username` and `password` used in the API token request. - -### Token Request - -This request provides the client id and basic user credentials in exchange for an API token. - -```shell -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&client_id=ed59158fa2344e94b3e6278e8ab85142&username=oauthapiusername&password=oauthapipassword' -``` - -| Request | Value | -| ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Method | `POST` | -| URL | Uses the special OAuth endpoint `/oauth/token` appended to the API URI e.g. `https:////oauth/token`. | - -| Header | Value | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Authorization` | `Basic` authorization, using the `client id` and `client secret` of the OAuth client base64 encoded with colon separator. E.g. `:`, in this case `ed59158fa2344e94b3e6278e8ab85142:MGQ3NzE2MGQtYTUyZC00ZTVlLWJjMTItMjE2MTM1MmE3N2M1`, which base64 encoded is `ZWQ1OTE1OGZhMjM0NGU5NGIzZTYyNzhlOGFiODUxNDI6TUdRM056RTJNR1F0WVRVeVpDMDBaVFZsTFdKak1USXRNakUyTVRNMU1tRTNOMk0x`. | -| `Content-Type` | `application/x-www-form-urlencoded` | - -| Data | Value | -| ------------ | --------------------------------------------------------------------- | -| `grant_type` | `password` | -| `client_id` | The OAuth client id, in this case `ed59158fa2344e94b3e6278e8ab85142`. | -| `username` | The basic username, in this case `oauthapiusername`. | -| `password` | The basic password, in this case `oauthapipassword`. | - -#### Response - -Response provides the token as `access_token` in the returned JSON which can then be used to access the API: - -```json -{ - "access_token": "580defdbe1d21e0001c67e5ce3ea17db02be4c62ba15089bbcfd1f80", - "expires_in": 3600, - "refresh_token": "YjdhOWFmZTAtNmExZi00ZTVlLWIwZTUtOGFhNmIwMWI3MzJj", - "token_type": "bearer" -} -``` - -### Sequence Diagram - -{{< img src="/img/diagrams/diagram_docs_username-_-password-grant-type@2x.png" alt="Username and password grant sequence" >}} diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/basic-auth.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/basic-auth.md deleted file mode 100755 index 2a3738060a..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/basic-auth.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -date: 2017-03-23T15:28:35Z -title: Basic Authentication -tags: ["Authentication", "Security", "Basic Authentication"] -description: "Using Basic Authentication to lock-down your APIs with Tyk" -menu: - main: - parent: "Authentication & Authorization" - identifier: security-basic-authentication -weight: 5 ---- - -## What is Basic Authentication? - -Basic Authentication is a standard authentication mechanism implemented by HTTP servers, clients and web browsers. This makes it an excellent access control method for smaller APIs. - - -### How does Basic Authentication work? - -An API request made using Basic Authentication will have an `Authorization` header that contains the API key. - -The value of the `Authorization` header will be in the form: - -``` -Basic base64Encode(username:password) -``` - -A real request could look something like: - -``` -GET /api/widgets/12345 HTTP/1.1 -Host: localhost:8080 -Authorization: Basic am9obkBzbWl0aC5jb206MTIzNDU2Nw== -Cache-Control: no-cache -``` - -In this example the username is `john@smith.com` and the password is `1234567` (see [base64encode.org](https://www.base64encode.org)) - -### The problem with Basic Authentication - -With Basic Authentication, the authentication credentials are transferred from client to server (in our case, the Tyk Gateway) as encoded plain text. This is not a particularly secure way to transfer the credentials as it is highly susceptible to intercept; as the security of user authentication is usually of critical importance to API owners, Tyk recommends that Basic Authentication should only ever be used in conjunction with a TLS such as SSL. - -## Protect your API with Basic Authentication - -Authentication type is configured within your API Definition; this can be done via the [Tyk Dashboard](#Enable-Basic-Authentication-using-the-Tyk-Dashboard) or directly within the [API Definition file](#Enable-Basic-Authentication-in-your-file-based-API-Definition"). - -### Enable Basic Authentication using the Tyk Dashboard - -1. Select your API from the **System Management > APIs** menu -2. Scroll to the **Authentication** options -3. Select **Basic Authentication** from the drop-down list -4. Select **Strip Authorization Data** to strip any authorization data from your API requests. -5. Tyk will by default assume you are using the `Authorization` header, but you can change this by setting the **Auth Key Header** name value -6. You can select whether to use a URL query string parameter as well as a header, and what parameter to use. If this is left blank, it will use the **Auth Key Header** name value. -7. You can select whether to use a **cookie value**. If this is left blank, it will use the Header name value. - -{{< img src="/img/2.10/basic_auth_settings.png" alt="Target Details: Basic Auth" >}} - -### Enable Basic Authentication in your file-based API Definition - -To enable Basic Authentication, the API Definition file needs to be set up to allow basic authentication rather than expecting a standard access token; this is achieved by setting `use_basic_auth` to true: - -```{.copyWrapper} -{ - "name": "Tyk Test API", - ... - "use_basic_auth": true, - ... -} -``` - -As you can see in the above example, enabling Basic Authentication is as simple as setting a flag for the feature in your API Definition object. Since Basic Authentication is a standard, Tyk will always look for the credentials as part of the `Authorization` header. - -### Enable basic authentication using Tyk Operator - -Please consult the Tyk Operator supporting documentation for an example of how to [enable basic authentication]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#basic-authentication" >}}) with Tyk Operator. - -## Create a Basic Authentication user - -When using Basic Authentication, the API key used to access the API is not generated by the Tyk system, instead you need to create at least one Basic Authentication user in the Tyk Gateway. Tyk will compare the Basic Authentication key provided in the request against the list of users you have created. - -### Using Tyk Dashboard - -You can use the Tyk Dashboard to register a Basic Authentication key that can then be used to access your API. - -When you select the API, you can see that Basic Authentication settings are automatically displayed in the Authentication tab: - -{{< img src="/img/2.10/add_key_basic_auth.png" alt="Basic Auth tab" >}} - -Then add a username & password and save! - -Now you can curl the API in two different ways: - -``` -$ curl http://localhost:8080/basicauth/get \ - --header "Authorization: Basic $(echo -n 'myusername:mypassword' | base64)" -<200 response> - -$ curl http://myusername:mypassword@localhost:8080/basicauth/get -<200 response from upstream> -``` -We have full tutorials to guide you to [create an API Key]({{< ref "getting-started/create-api-key" >}}) via the Dashboard. - -### Using the Tyk Gateway API - -This command creates a new basic authentication user in the Tyk Gateway with the user name `testuser` and password `mickey-mouse` by sending a `POST` command to the `/tyk/keys/` endpoint of Tyk Gateway API: - -```{.copyWrapper} -curl -X POST -H "x-tyk-authorization: 352d20fe67be67f6340b4c0605b044c3" \ - -s \ - -H "Content-Type: application/json" \ - -X POST \ - -d '{ - "allowance": 1000, - "rate": 1000, - "per": 1, - "expires": -1, - "quota_max": -1, - "org_id": "53ac07777cbb8c2d53000002", - "quota_renews": 1449051461, - "quota_remaining": -1, - "quota_renewal_rate": 60, - "access_rights": { - "{API-ID}": { - "api_id": "{API-ID}", - "api_name": "{API-NAME}", - "versions": ["Default"] - } - }, - "meta_data": {}, - "basic_auth_data": { - "password": "mickey-mouse" - } - }' http://{your-tyk-gateway-host}:{port}/tyk/keys/testuser | python -mjson.tool -``` - -{{< note success >}} -**Note** - -You use `POST` to create a new user and `PUT` to update an existing entry. - -Be careful to ensure that the `org_id` is set correctly and consistently so that the Basic Authentication user is created in the correct organization. -{{< /note >}} - -### Using the Tyk Dashboard API - -This command creates a new basic authentication user in the Tyk Gateway with the user name `testuser2` and password `minnie-mouse` by sending a `POST` command to the `/tyk/keys/` endpoint of Tyk Dashboard API: - -```{.copyWrapper} -curl -X POST -H "Authorization: 907aed9f88514f175f1dccf8a921f741" - -s - -H "Content-Type: application/json" - -X POST - -d '{ - "allowance": 1000, - "rate": 1000, - "per": 1, - "expires": -1, - "quota_max": -1, - "org_id": "53ac07777cbb8c2d53000002", - "quota_renews": 1449051461, - "quota_remaining": -1, - "quota_renewal_rate": 60, - "access_rights": { - "{API-ID}": { - "api_id": "{API-ID}", - "api_name": "{API-NAME}", - "versions": [ - "Default" - ] - } - }, - "meta_data": {}, - "basic_auth_data": { - "password": "minnie-mouse" - } - }' http://{your-tyk-dashboard-host}:{port}/api/apis/keys/basic/testuser2 | python -mjson.tool -``` - -[See Basic Authentication via the Dashboard API]({{< ref "tyk-apis/tyk-dashboard-api/basic-authentication" >}}) - -{{< note success >}} -**Note** - -You use `POST` to create a new user and `PUT` to update an existing entry. - -Be careful to ensure that the `org_id` is set correctly and consistently so that the Basic Authentication user is created in the correct organization. -{{< /note >}} - -## Extracting credentials from the request body - -In some cases, for example when dealing with SOAP, user credentials can be passed within the request body. To handle this situation, you can configure basic auth plugin to extract username and password from the body, by providing regexps like this: - -```{.copyWrapper} -"basic_auth": { - "extract_from_body": true, - "body_user_regexp": "(.*)", - "body_password_regexp": "(.*)" -} -``` - -Note that the regexp should contain only one match group, which points to the actual value. diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/bearer-tokens.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/bearer-tokens.md deleted file mode 100755 index 9185a5372a..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/bearer-tokens.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -date: 2017-03-23T15:41:34Z -title: Bearer Tokens -tags: ["Bearer tokens", "Security"] -description: "Using bearer tokens to lock-down your APIs with Tyk" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 -aliases: - - /security/your-apis/bearer-tokens/ ---- - -## What is a bearer token ? - -> Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. - -Tyk provides bearer token access as one of the most convenient building blocks for managing security to your API. In a Tyk setup, this is called "Access Tokens" and is the default mode of any API Definition created for Tyk. - -Bearer tokens are added to a request as a header or as a query parameter. If added as a header, they may be preceded by the word "Bearer" to indicate their type, though this is optional. - -Traditionally these tokens are used as part of the `Authorization` header. - -## Enable bearer tokens in your API Definition with the Dashboard - -To enable the use of a bearer token in your API: - -1. Select your API from the **System Management > APIs** menu -2. Scroll to the **Authentication** options -3. Select **Authentication Token** from the drop-down list -4. Select **Strip Authorization Data** to strip any authorization data from your API requests -5. Tyk will by default assume you are using the `Authorization` header, but you can change this by setting the **Auth Key Header** name value -6. You can select whether to use a URL query string parameter as well as a header, and what parameter to use. If this is left blank, it will use the **Auth Key Header** name value. -7. You can select whether to use a **cookie value**. If this is left blank, it will use the Header name value. -8. You can select to use a **client certificate**. This allows you to create dynamic keys based on certificates. - -{{< img src="/img/2.10/auth_token_api_settings.png" alt="Target Details: Auth Token" >}} - -## Enable bearer tokens in your API Definition with file-based - -Tyk will by default use the bearer token method to protect your API unless it is told otherwise. - -These tokens can be set as a *header, url parameter, or cookie name of a request*. A request for a resource at the API endpoint of `/api/widgets/12345` that uses access tokens will require the addition of a header field, traditionally this is the `Authorization` header. - -The name of the key can be defined as part of the API definition under the `auth` section of an API Definition file: - -```{.copyWrapper} -"auth": { - "auth_header_name": "authorization", - "use_param": false, - "param_name": "", - "use_cookie": false, - "cookie_name": "" -}, -``` - -To use URL query parameters instead of a header, set the `auth.use_param` setting in your API definition to `true`. - -{{< note success >}} -**Note** - -Unlike headers, URL query parameters are *case sensitive*. -{{< /note >}} - - -To use a cookie name instead of a header or request parameter, set the `use_cookie` parameter to `true`. Cookie names are also case sensitive. - -### Signature validation - -If you are migrating from platforms like Mashery, which use request signing, you can enable signature validation like this: - -```{.copyWrapper} -... -"auth": { - "validate_signature": true, - "signature": { - "algorithm": "MasherySHA256", - "header": "X-Signature", - "secret": "secret", - "allowed_clock_skew": 2 - } -} -... -``` -`validate_signature`: boolean value to tell Tyk whether to enable signature validation or not - -`signature.algorithm`: the algorithm you wish to validate the signature against. Currently supported - - `MasherySHA256` - - `MasheryMD5` - - `signature.header`: header key of attempted signature - - `signature.secret`: the shared secret which was used to sign the request - - Can hold a dynamic value, by referencing `$tyk_meta` or `$tyk_context` variables. - - Example: `"secret": "$tyk_meta.individual_secret"`. Which effectively means that you have created/imported the api key into Tyk, and have stored the shared secret in the field `individual_secret` of the session token's meta-data. - -`signature.allowed_clock_skew`: allowed deviation in seconds between UNIX timestamp of Tyk & UNIX timestamp used to generate the signed request - -### Custom tokens - -It is possible to provide Tyk with your own custom tokens, this can be achieved using the Tyk Gateway REST API. This is very useful if you have your own identity provider and don't want Tyk to create and manage tokens for you, and instead just mirror those tokens within Tyk to off-load access control, quotas and rate limiting from your own application. - -## Enabling bearer tokens with Tyk Operator - -Please consult the Tyk Operator supporting documentation for an example of how to [enable a bearer tokens]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#auth-token-bearer-token" >}}) with Tyk Operator. \ No newline at end of file diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware.md index 8669dcd72c..f432d04d21 100644 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware.md +++ b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware.md @@ -8,6 +8,23 @@ menu: parent: "OAuth 2.0" weight: 7 --- +{{< note success >}} +**Note** + +Tyk's dedicated External OAuth middleware will be deprecated from Tyk 5.7.0. Tyk's [JSON Web Token (JWT)]({{< ref "api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) authentication method also allows you to integrate with a third party OAuth provider, so the dedicated middleware will be deprecated to reduce duplication and potential for misconfiguration. +{{< /note >}} + +{{< note success >}} +**Note** + +We've deprecated the External OAuth middleware in Tyk 5.7.0 to simplify configurations and avoid redundancy. For third-party OAuth integration, please switch to Tyk’s [JSON Web Tokens (JWT)]({{< ref "api-management/authentication-authorization#use-json-web-tokens-jwt" >}}), which offers the same functionality with a more streamlined setup and reduced risk of misconfiguration. +{{< /note >}} + +{{< note success >}} +**Note** + +We've deprecated the External OAuth middleware in Tyk 5.7.0 to simplify configurations and avoid redundancy. For third-party OAuth integration, please switch to Tyk’s [JSON Web Tokens (JWT)](https://tyk.io/docs/basic-config-and-security/security/authentication-authorization/json-web-tokens/#about-jwts), which offers the same functionality with a more streamlined setup and reduced risk of misconfiguration. +{{< /note >}} ## Introduction @@ -95,7 +112,7 @@ There could be cases when you don’t need to introspect a JWT access token from - a base64 encoded static secret - a valid JWK url in plain text - a valid JWK url in base64 encoded format -- `issuedAtValidationSkew` , `notBeforeValidationSkew`, `expiresAtValidationSkew` can be used to [configure clock skew]({{< ref "/content/basic-config-and-security/security/authentication-authorization/json-web-tokens.md#jwt-clock-skew-configuration" >}}) for json web token validation. +- `issuedAtValidationSkew` , `notBeforeValidationSkew`, `expiresAtValidationSkew` can be used to [configure clock skew]({{< ref "api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) for json web token validation. - `identityBaseField` - the identity key name for claims. If empty it will default to `sub`. ### Example: Tyk OAS API definition with JWT validation enabled diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/go-plugin-authentication.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/go-plugin-authentication.md deleted file mode 100644 index 804936e036..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/go-plugin-authentication.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -date: 2017-03-23T16:15:37Z -title: Go Plugin Authentication -tags: ["Security", "Plugins", "Go"] -description: "Using Go plugins for authentication for your APIs" -menu: - main: - parent: "Authentication & Authorization" -weight: 6 ---- - -From version 2.9, you can now use Go plugins for authentication. See [Authentication with Go Plugins]({{< ref "plugins/supported-languages/golang#authentication-with-a-golang-plugin" >}}) for a detailed example of using a custom Go plugin to authenticate your traffic. diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/hmac-signatures.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/hmac-signatures.md deleted file mode 100755 index eb610b6dbf..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/hmac-signatures.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -date: 2017-03-23T15:47:26Z -title: HMAC Signatures -tags: ["HMAC", "Security"] -description: "Using HMAC signatures" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 ---- -{{< note success >}} Note - -Tyk can interact with HMAC Signing in two ways. Firstly, as a client, we can validate the signature of incoming requests and map this to API access. You can also use Tyk to generate a header containing the signature of the request for use in upstream message integrity checks. For the upstream HMAC case please see [here]({{< ref "#upstream-hmac-request-signing" >}}) {{< /note >}} - - -HMAC Signing is an access token method that adds another level of security by forcing the requesting client to also send along a signature that identifies the request temporally to ensure that the request is from the requesting user, using a secret key that is never broadcast over the wire. - -Tyk currently implements the latest draft of the [HMAC Request Signing standard](http://tools.ietf.org/html/draft-cavage-http-signatures-05). - -An HMAC signature is essentially some additional data sent along with a request to identify the end-user using a hashed value, in our case we encode the 'date' header of a request, the algorithm would look like: - -``` -Base64Encode(HMAC-SHA1("date: Mon, 02 Jan 2006 15:04:05 MST", secret_key)) -``` - -The full request header for an HMAC request uses the standard `Authorization` header, and uses set, stripped comma-delimited fields to identify the user, from the draft proposal: - -``` -Authorization: Signature keyId="hmac-key-1",algorithm="hmac-sha1",signature="Base64Encode(HMAC-SHA1(signing string))" -``` - -Tyk supports the following HMAC algorithms: "hmac-sha1", "hmac-sha256", "hmac-sha384", "hmac-sha512”, and reads value from algorithm header. You can limit allowed algorithms by setting `hmac_allowed_algorithms` field in API definition, like this: `"hmac_allowed_algorithms": ["hmac-sha256", "hmac-sha512"]`. - -The date format for an encoded string is: - -``` -Mon, 02 Jan 2006 15:04:05 MST -``` - -This is the standard for most browsers, but it is worth noting that requests will fail if they do not use the above format. - -When an HMAC-signed request comes into Tyk, the key is extracted from the `Authorization` header, and retrieved from Redis. If the key exists then Tyk will generate its own signature based on the requests "date" header, if this generated signature matches the signature in the `Authorization` header the request is passed. - -### Supported headers - -Tyk API Gateway supports full header signing through the use of the `headers` HMAC signature field. This includes the request method and path using the`(request-target)` value. For body signature verification, HTTP Digest headers should be included in the request and in the header field value. - -{{< note success >}} -**Note** - -All headers should be in lowercase. -{{< /note >}} - - -### A sample signature generation snippet - -```{.copyWrapper} -... - -refDate := "Mon, 02 Jan 2006 15:04:05 MST" - -// Prepare the request headers: -tim := time.Now().Format(refDate) -req.Header.Add("Date", tim) -req.Header.Add("X-Test-1", "hello") -req.Header.Add("X-Test-2", "world") - -// Prepare the signature to include those headers: -signatureString := "(request-target): " + "get /your/path/goes/here" -signatureString += "date: " + tim + "\n" -signatureString += "x-test-1: " + "hello" + "\n" -signatureString += "x-test-2: " + "world" - -// SHA1 Encode the signature -HmacSecret := "secret-key" -key := []byte(HmacSecret) -h := hmac.New(sha1.New, key) -h.Write([]byte(signatureString)) - -// Base64 and URL Encode the string -sigString := base64.StdEncoding.EncodeToString(h.Sum(nil)) -encodedString := url.QueryEscape(sigString) - -// Add the header -req.Header.Add("Authorization", - fmt.Sprintf("Signature keyId="9876",algorithm="hmac-sha1",headers="(request-target) date x-test-1 x-test-2",signature="%s"", encodedString)) - -... -``` - -### Date header not allowed for legacy .Net - -Older versions of some programming frameworks do not allow the Date header to be set, which can causes problems with implementing HMAC, therefore, if Tyk detects a `x-aux-date` header, it will use this to replace the Date header. - -### Clock Skew - -Tyk also implements the recommended clock-skew from the specification to prevent against replay attacks, a minimum lag of 300ms is allowed on either side of the date stamp, any more or less and the request will be rejected. This means that requesting machines need to be synchronised with NTP if possible. - -You can edit the length of the clock skew in the API Definition by setting the `hmac_allowed_clock_skew` value in your API definition. This value will default to 0, which deactivates clock skew checks. - -### Additional notes - -HMAC Signing is a good way to secure an API if message reliability is paramount, it goes without saying that all requests should go via TLS/SSL to ensure that MITM attacks can be minimized. There are many ways of managing HMAC, and because of the additional encryption processing overhead requests will be marginally slower than more standard access methods. - -## Setting up HMAC using the Dashboard - -To enable the use of HMAC Signing in your API from the Dashboard: - -1. Select your API from the **System Management > APIs** menu -2. Scroll to the **Authentication** options -3. Select **HMAC (Signed Authetication Key)** from the drop-down list -4. Configure your **HMAC Request Signing** settings. -5. Select **Strip Authorization Data** to strip any authorization data from your API requests. -6. Tyk will by default assume you are using the `Authorization` header, but you can change this by setting the **Auth Key Header** name value -7. You can select whether to use a URL query string parameter as well as a header, and what parameter to use. If this is left blank, it will use the **Auth Key Header** name value. -8. You can select whether to use a **cookie value**. If this is left blank, it will use the Header name value. - - -{{< img src="/img/2.10/hmac_auth_settings.png" alt="Target Details: HMAC" >}} - - -#### Setting up HMAC using an API Definition - -To enable HMAC on your API, first you will need to set the API definition up to use the method, this is done in the API Definition file/object: - -```{.copyWrapper} -{ - "name": "Tyk Test API", - ... - "enable_signature_checking": true, - "use_basic_auth": false, - "use_keyless": false, - "use_oauth2": false, - "auth": { - "auth_header_name": "" - }, - ... -} -``` - -Ensure that the other methods are set to false. - -### Setting up an HMAC Session Object - -When creating a user session object, the settings should be modified to reflect that an HMAC secret needs to be generated alongside the key: - -```{.copyWrapper} -{ - ... - "hmac_enabled": true, - "hmac_string": "", - ... -} -``` - -Creating HMAC keys is the same as creating regular access tokens - by using the [Tyk Gateway API]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/authentication" >}}). Setting the `hmac_enabled` flag to `true`, Tyk will generate a secret key for the key owner (which should not be modified), but will be returned by the API so you can store and report it to your end-user. - - -### Upstream HMAC request signing - -You can sign a request with HMAC, before sending to the upsteam target. - -This feature is implemented using [Draft 10](https://tools.ietf.org/html/draft-cavage-http-signatures-10) RFC. - -`(request-target)` and all the headers of the request will be used for generating signature string. -If the request doesn't contain a `Date` header, middleware will add one as it is required according to above draft. - -A config option `request_signing` can be added in an API Definition to enable/disable the request signing. It has following format: - -```{.json} -"request_signing": { - "is_enabled": true, - "secret": "xxxx", - "key_id": "1", - "algorithm": "hmac-sha256" -} -``` - -The following algorithms are supported: - -1. `hmac-sha1` -2. `hmac-sha256` -3. `hmac-sha384` -4. `hmac-sha512` diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens.md deleted file mode 100755 index af56986920..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens.md +++ /dev/null @@ -1,243 +0,0 @@ ---- -date: 2017-03-23T15:50:24Z -title: JSON Web Tokens -tags: ["JWT", "JSON Web Token", "Security"] -description: "How to protect your APIs with JSON Web Tokens" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 -aliases: - - /security/your-apis/json-web-tokens/ - - /tyk-apis/tyk-gateway-api/api-definition-objects/jwt/docs/basic-config-and-security/security/authentication-authorization/json-web-tokens/ ---- - - - -### Protecting an API with JWT - -This assumes you've already [setup an API]({{< ref "getting-started/create-api" >}}) and are ready to protect it with JWT. - -Getting JWT support set up in the Dashboard only requires a few fields to be set up in the Core settings tab: - -#### Step 1: 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" >}} - -#### Step 2: 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" >}} - -#### Step 3: 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) - -#### Step 4: 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" -``` - -You should receive response from your Upstream API. - ---- - -## About JWTs -A [JSON Web Token](https://jwt.io/introduction/) (JWT) is a JSON-based open standard (RFC 7519) for passing claims between parties in a web application environment. The tokens are designed to be compact, URL-safe and usable especially in web browser single sign-on (SSO) context. - -One of the best things about a JWT is that it is cryptographically signed, and can be signed in a number of ways such as using HMAC shared secret and RSA public/private key pairs. - -What is useful is when a token is issued by a third-party (e.g. an OAuth provider, or an SSO interface), that third party can use a private key to sign the claims of the token, and then any third-party can verify that the claims were issued by a safe third-party by validating the signature using a public key. - ---- - -### JWT Signing Method - -Tyk allows you to select which cryptographic method to verify the JWT signature with with from: - -- RSA public key -- HMAC shared secret -- ECDSA -- [Public JWKS Url](#dynamic-public-key-rotation-using-public-jwks-url) - -For example, if you are using a third-party identity provider (IdP) that can issue JWTs, you can embed their public key in your API Definition, and Tyk will use this public key to validate the claims on the inbound token. - -{{< note success >}} -**Note** - -If you want this to be configured at the key level, leave this field blank. -{{< /note >}} - -HMAC JWT secrets can be any string, but the secret is shared and therefore less secure since the same key is used for signing and validation. - -RSA secrets must be a PEM encoded PKCS1 or PKCS8 RSA private key, these can be generated on a Linux box using: - -```{.copyWrapper} -openssl genrsa -out key.rsa -openssl rsa -in key.rsa -pubout > key.rsa.pub -``` - ---- - -### Individual JWT secrets -Tyk supports validating an inbound token against a stored key. Tyk will not issue JWTs, but can issue a token ID that is bound to a JWT key so that inbound tokens that bear this id (key) can be validated. - -Then set your tokens up with these new fields when you create them: - -```{.copyWrapper} -"jwt_data": { - "secret": "Secret" -} -``` - -Using this approach, when a JWT is passed to Tyk for validation, it *must* use the `kid` header field, as this is the internal access token (when creating a key) that is used to track the rate limits, policies and quotas for the token owner. - -If Tyk cannot find a `kid` header, it will try to find an ID in the `sub` field of the claims section. This is not recommended, but is supported as many JWT libraries do not necessarily set the `kid` header claim (especially publicly available test generators). - -The benefit here is that if RSA is used, then all that is stored in a Tyk installation that uses hashed keys is the hashed ID of the end user and their public key, so it is very secure. - ---- - -### Identity Source and Policy Field Name - -* **The Identity Source**: This is the identity that will be affected by the underlying policy (e.g. if you set this to use the `sub` claim, and this is traditionally a user ID of some sort, then Tyk will begin a rate limiter and quota counter for this specific identity). If you wanted to instead limit a client, e.g. all the users of a specific application, then you can use a different identity claim that identifies the group (i.e. one that is shared by all JWTs issued). - -* **The Policy Field Name**: This is a required input, but your JWT doesn't need to include it. Tyk will check this claim in the JWT for a [policy ID]({{< ref "getting-started/key-concepts/what-is-a-security-policy" >}}) (e.g `72ab02b3be743101c6132342`) to apply to this session. - ---- - -### Dynamic public key rotation using public JWKs URL - -Instead of specifying static public key in API definition, it is possible to specify URL pointing to JSON Web Key Set (JWKs). At the most basic level, the JWKs is a set of keys containing the public keys that should be used to verify any JWT issued by the authorization server. You can read more about JWKs here: https://auth0.com/docs/jwks - -Using JWKs you can maintan dynamic list of currently active public keys, and safely rotate them, since both old and new JWT tokens will work, until you remove expired JWK. Generated JWT keys should have `kid` a claim, which should match with the `kid` field of JWK, used for validating the token. - -So, instead of using a static public key, we would use the REST URL for the JWKS well known endpoint: - -{{< img src="/img/2.10/jwt_rsa_public_key.png" alt="JWKS Public Key Rotation" >}} - -cURLing the URL in the "Public Key" field in the screenshot above returns the following payload: - -```{.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. - ---- - -### JWT Clock Skew Configuration - -Due to the nature of distributed systems it is expected that despite best efforts you can end up in a situation with clock skew between the issuing party (An OpenID/OAuth provider) and the validating party (Tyk). - -This means that in certain circumstances Tyk would reject requests to an API endpoint secured with JWT with the `Token is not valid yet` error . This occurs due to the clock on the Tyk server being behind the clock on the Identity Provider server even with all servers ntp sync'd from the same ntp server. - -You can now configure JWT clock skew using the following variables. All values are in seconds. The default is `0` (i.e. no skew). - -```{.json} -"jwt_issued_at_validation_skew": 0, -"jwt_expires_at_validation_skew": 0, -"jwt_not_before_validation_skew": 0 -``` - ---- - -### JWT scope to policy mapping support - -{{< note success >}} -**Note** - -This feature is available starting from v2.9 -{{< /note >}} - -You can map JWT scopes to security policies to be applied to a key. To enable this feature you will need to specify the following fields in your API spec: - -```{.copyWrapper} - "jwt_scope_to_policy_mapping": { - "admin": "59672779fa4387000129507d", - "developer": "53222349fa4387004324324e" - }, - "jwt_scope_claim_name": "our_scope" -} -``` - -Here we have set: - -- `"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"` - -{{< 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 >}} - - ---- - -### JWT Diagram in Tyk API Gateway -{{< img src="/img/diagrams/diagram_docs_JSON-web-tokens@2x.png" alt="JSON Web Tokens Flow" >}} - -### JWT authentication with Tyk Operator - -Please consult the Tyk Operator supporting documentation for an example of how to [configure JWT authentication]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#jwt" >}}) with Tyk Operator. diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0.md deleted file mode 100644 index 1fbca81363..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -date: 2021-01-12T19:50:24Z -title: JWT and Auth0 with Tyk -tags: ["JWT", "JSON Web Token", "Security", "Auth0"] -description: "How to secure your APIs with JWT with Auth0" -menu: - main: - parent: "JSON Web Tokens" -weight: 2 ---- - -## Overview -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](https://auth0.com/) -* 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" width="800px" height="400" >}} - -1. Click **Create API** and enter a name and identifier for your API. - -{{< img src="/img/auth0/api-details.png" alt="Auth0 API details" width="400px" height="400" >}} - -1. 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" width="800px" height="400" >}} - - - - - From the cURL tab copy the token request command. - -```.curl -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"}' -``` - -1. Paste the command in a terminal window to generate your token. Save this token locally. - -```.curl -{ - "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" width="800px" height="400" >}} - -1. 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" width="400px" height="400" >}} - -## 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" width="400px" height="400" >}} - -1. From the Authentication section, select **JSON Web Token (JWT)** as your authentication mode. -2. Select RSA public Key as the JWT signing method. -3. Enter your Auth0 Application Domain from Step 8 above to complete the `jwks_uri` end point `https://<>/.well-known/jwks.json` -4. Copy your `jwks_uri` in to the **Public Key** field. - -{{< img src="/img/auth0/tyk-api-auth.png" alt="Tyk API Authentication" width="800px" height="400" >}} - -1. Add an **Identity Source** and **Policy Field Name**. The defaults of `sub` and `pol` are fine. -2. Save your API. -3. From the System Management section, select Policies -4. Click Add Policy -5. Select your Auth0 API - -{{< img src="/img/auth0/policy-access-rights.png" alt="Tyk Policy access rights" width="800px" height="400" >}} - -1. You can keep the rest of the access rights at the defaults. -2. Click the **Configurations** tab and enter a **Policy Name** and a **Keys Expiry after** period. - -{{< img src="/img/auth0/policy-configuration.png" alt="Tyk Policy Configuration" width="400px" height="400" >}} - -1. Click **Create Policy**. -2. 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" width="600px" height="300" >}} - -1. From the top of the API copy the API URL -2. From a terminal window using the API URL and the Auth0 generated token. - -```.curl -curl -X GET {API URL} -H "Accept: application/json" -H "Authorization: Bearer {token}" -``` -18. If using the [httpbin upstream URL](https://httpbin.org/) as in the example Tyk API, you should see the HTML returned for the httpbin service in your terminal. -19. If there is an error with the request, you will see the following error message. - -```.bash -{ - "error": "Key not authorized:Unexpected signing method." -} -``` \ No newline at end of file diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak.md deleted file mode 100644 index fe18f64bd1..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -date: 2023-05-15 -title: JWT and Keycloak with Tyk -tags: ["JWT", "JSON Web Token", "Security", "Keycloak"] -description: "How to secure your APIs with JWT and Keycloak" -menu: - main: - parent: "JSON Web Tokens" -weight: 2 ---- - -## Overview -This guide will walk you through securing your APIs with JWTs via Keycloak. - -## Prerequisites - -A [Keycloak](https://www.keycloak.org/) 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" width="800px" height="400" >}} - -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" width="800px" height="400" >}} - -4. Create a Keycloak client. - -{{< img src="/img/keycloak-jwt/create-client.png" alt="Create Client" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-client-zoomed.png" alt="Create Client" width="800px" height="400" >}} - - - Enter the necessary client details. - -{{< img src="/img/keycloak-jwt/create-client-step-1.png" alt="Add client details" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-client-step-1-zoomed.png" alt="Add client details" width="800px" height="400" >}} - - - Enable client authentication and Service account roles under Authentication flow - -{{< img src="/img/keycloak-jwt/create-client-step-2.png" alt="Update client permissions" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-client-step-2-zoomed.png" alt="Update client permissions" width="800px" height="400" >}} - - - Set the redirection URL rules. - -{{< img src="/img/keycloak-jwt/create-client-step-3.png" alt="Add redirection URL rules" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-client-step-3-zoomed.png" alt="Add redirection URL rules" width="800px" height="400" >}} - - - Save. - -{{< img src="/img/keycloak-jwt/client.png" alt="Example client" width="800px" height="400" >}} - -5. Retrieve client secret from the Credentials tab under the client you just created. - -{{< img src="/img/keycloak-jwt/client-secret.png" alt="Retrieve client secret" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/client-secret-zoomed.png" alt="Retrieve client secret" width="800px" height="400" >}} - -6. Generate your JWT using curl. This is the token will use to access your services through the Tyk Gateway. You can choose to generate your JWT by using either of the following methods. Make sure to replace the `KEYCLOAK` prefixed parameters with the appropriate values. - - - Password Grant Type - ```.curl - 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 - - ```.curl - 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 the following: - - ```.json - { - "access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ6MXp6bWw0SmNFd3FBdnBWdEFmV1dGS01hMWppYjR1MlFEM3lzaU81VVJrIn0.eyJleHAiOjE2ODQxNzIxNTUsImlhdCI6MTY4NDE3MTg1NSwianRpIjoiNTkzYzQ4NDUtNDZkZC00MDczLWIxYjktM2Y4NjkxNWE5MmFiIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NzAwMS9yZWFsbXMvand0Iiwic3ViIjoiOTcxNWQ5NzQtMTE1Yi00OWRmLWEyMzUtYzA5MjM2OTVhNDcyIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoia2V5Y2xvYWstand0Iiwic2Vzc2lvbl9zdGF0ZSI6IjRhYWM5M2ZlLTZmNWItNDMyNS05MjlhLTE5MDM5NjY3ZjQ3YiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiLyoiXSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNpZCI6IjRhYWM5M2ZlLTZmNWItNDMyNS05MjlhLTE5MDM5NjY3ZjQ3YiIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiSm9obiBEb2UiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZWZhdWx0QGV4YW1wbGUuY29tIiwiZ2l2ZW5fbmFtZSI6IkpvaG4iLCJmYW1pbHlfbmFtZSI6IkRvZSIsImVtYWlsIjoiZGVmYXVsdEBleGFtcGxlLmNvbSJ9.bLEmcjNwU50wQkCiwmU66mCigifn6Qi_9siiTVnNTY9Ju2UiilAFH5c_uZsiQNKkdZ3eOFKjMxP1eeRmPooWIXZa9jMEVra6Aja_2nAm8zzxQhRXtu21bfwMGwkFIjey7i2oQg__CKzNnCby0XarkAlyFZoAxGxIvKyKUvi2geSUDly7tjl0-B5Pc6OChcDYG1bOw963bX3p516xH9DTj8YXh6rvbCqSbIrWi5zuQTXpKlaJnp4Ub5c-VrKQuU2xnqV0BmPwd80i83U0qolXxy8y8uBVlaH69cXgZs_Ak050P0SdLqC-GfWm9c0JCKhj_qw0rSfHDiZA1S2UgrwVYg","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwNTIxMmU4My1jODE3LTQxZmUtYWIxNi0zMTMyMGEyZDY4ODcifQ.eyJleHAiOjE2ODQxNzM2NTUsImlhdCI6MTY4NDE3MTg1NSwianRpIjoiYWY4NTNjZWQtZTExYy00YzlhLWEwMWUtNDliODRhYzFkYWUwIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NzAwMS9yZWFsbXMvand0IiwiYXVkIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NzAwMS9yZWFsbXMvand0Iiwic3ViIjoiOTcxNWQ5NzQtMTE1Yi00OWRmLWEyMzUtYzA5MjM2OTVhNDcyIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6ImtleWNsb2FrLWp3dCIsInNlc3Npb25fc3RhdGUiOiI0YWFjOTNmZS02ZjViLTQzMjUtOTI5YS0xOTAzOTY2N2Y0N2IiLCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIiwic2lkIjoiNGFhYzkzZmUtNmY1Yi00MzI1LTkyOWEtMTkwMzk2NjdmNDdiIn0.xxpghrnDPG6cXZdc1dDd7jFCoNABuXMqshY6PVkA_io","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ6MXp6bWw0SmNFd3FBdnBWdEFmV1dGS01hMWppYjR1MlFEM3lzaU81VVJrIn0.eyJleHAiOjE2ODQxNzIxNTUsImlhdCI6MTY4NDE3MTg1NSwiYXV0aF90aW1lIjowLCJqdGkiOiIzNGI4NGM2ZS0yZWZmLTRjOWEtOTJkYi02YTkyZDY4YWJlNGEiLCJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo3MDAxL3JlYWxtcy9qd3QiLCJhdWQiOiJrZXljbG9hay1qd3QiLCJzdWIiOiI5NzE1ZDk3NC0xMTViLTQ5ZGYtYTIzNS1jMDkyMzY5NWE0NzIiLCJ0eXAiOiJJRCIsImF6cCI6ImtleWNsb2FrLWp3dCIsInNlc3Npb25fc3RhdGUiOiI0YWFjOTNmZS02ZjViLTQzMjUtOTI5YS0xOTAzOTY2N2Y0N2IiLCJhdF9oYXNoIjoibUVRMGFfMFNkdklkNDNJejI2NGlsdyIsImFjciI6IjEiLCJzaWQiOiI0YWFjOTNmZS02ZjViLTQzMjUtOTI5YS0xOTAzOTY2N2Y0N2IiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IkpvaG4gRG9lIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiZGVmYXVsdEBleGFtcGxlLmNvbSIsImdpdmVuX25hbWUiOiJKb2huIiwiZmFtaWx5X25hbWUiOiJEb2UiLCJlbWFpbCI6ImRlZmF1bHRAZXhhbXBsZS5jb20ifQ.kPb0NADSHVXei34wQkxnxEapbVwGrFyK_fvLdnVoXCwXx54BzDDXkClneoKXfQBXeamEDA2JoMZxmEEQN9qRyBws6GuCI4zEUYGwTgwr71WPp0BundZpOAoGnyFmEc3-tPkKq--lk9lAV8AVj9ukDXRpaV4wN3N0yu6FQtx2je0pAbQN17WDT8Nkl9woGYVUCiZtD2nYUdVzxFuMFpFjefh5JmQj0KayfX-Q4fEx_hR31_t-tjsN_827OPROnzsBZDN8-mbgMoGg-iwy2r7KD3TVa0auJ2D9CjWjzfNTeMDsomgPxYs9GSGkWpI0o_-xGGaakk4or4PGXJBK2FWzwA", - "not-before-policy": 0, - "session_state": "4aac93fe-6f5b-4325-929a-19039667f47b", - "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" width="800px" height="400" >}} - -- Scroll to the Authentication mode section and select JWT from the list. -- Select RSA public Key as JWT Signing method. -- 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`. -- Add an Identity Source and Policy Field Name. The defaults of `sub` and `pol` are fine. -- Click on the update button to save API - -{{< img src="/img/keycloak-jwt/create-api-step-2.png" alt="Create API" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-api-step-2-zoomed.png" alt="Create API" width="800px" height="400" >}} - -3. Create a policy to manage access to your API. - - - Navigate to the Policies section on the left-hand side menu. - - Click on Add Policy on the top +right-hand side of your screen. - - 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" width="800px" height="400" >}} - - - 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" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-policy-step-3.png" alt="API Security Policy Result" width="800px" height="400" >}} - -4. Add default policy to API - -{{< img src="/img/keycloak-jwt/create-api-step-3.png" alt="Add default policy to API" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-api-step-3-zoomed.png" alt="Add default policy to API" width="800px" height="400" >}} - -5. Test access to API using curl - - - Retrieve API URL - -{{< img src="/img/keycloak-jwt/create-api-step-4.png" alt="Add default Policy to API" width="800px" height="400" >}} -{{< img src="/img/keycloak-jwt/create-api-step-4-zoomed.png" alt="Add default Policy to API" width="800px" height="400" >}} - - - Test with curl. Make sure to replace TOKEN with the JWT you recieved from the curl earlier. - - ```.curl - curl 'http://tyk.gateway.local/keycloak-jwt/get' \ - -H "Authorization: Bearer TOKEN" - ``` - -### Running in k8s -If you are looking to POC this functionality in k8s 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" >}}). diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/split-token.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/split-token.md deleted file mode 100644 index 9d411393c4..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/json-web-tokens/split-token.md +++ /dev/null @@ -1,315 +0,0 @@ ---- -date: 2021-01-12T19:50:24Z -title: Split Token -tags: ["JWT", "JSON Web Token", "Security", "oAuth2.0", "oAuth", "API security", "API Access control", "API ACL"] -description: "How to split the token doc" -menu: - main: - parent: "JSON Web Tokens" -weight: 1 ---- -OAuth2, OIDC, and their foundation, named JWT, have been a standard industry for many years, without slowing down. However, the OAuth RFC continues to be iteratively improved, aligning with FHIR and Open Banking principles. We expect the OAuth flow to continue to reign supreme. - -There are two types of access token in the OAuth flow, opaque and JWT (JWS more precisely). The problem with the JWT is the inherent leakiness. There is a massive debate amongst the community where some consider JWT for auth as insecure as it leaks information (by b64 decoding the body). Others argue that you shouldn't put sensitive information in there at all. - -JWT Access Tokens can contain a lot of sensitive information. That means that if they get in the wrong hands, everything contained inside the JWT is visible to the user with the key. There is a solution to fix this problem. - -The solution is to use the Split Token Flow. This flow suggests to use just the signature of the JWT access token on the client side, and store the header and then claim the JWT server side. Thus, the split token flow satisfies both camps. Firstly, we get the flexibility of JWTs by being able to store session information in JWT claims, and secondly we get the security of an Opaque access token because we don't actually expose the entire token, only the signature. - -### How can this be achieved with Tyk? - -First, let’s take an example of client credentials flow, where we exchange a client id and secret for a JWT access token that we can use to access our APIs: - -``` -$ 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 - -{ - "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbWFpbCI6ImhlbGxvQHdvcmxkLmNvbSJ9.EwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0", - "expires_in": 300, - "token_type": "bearer", - "not-before-policy": 0, - "scope": "email profile" -} -``` -So here you get a JWT access token back: - -``` -eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbWFpbCI6ImhlbGxvQHdvcmxkLmNvbSJ9.EwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0 -``` - -Header - -``` -eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 -``` -Body - -``` -eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJlbWFpbCI6ImhlbGxvQHdvcmxkLmNvbSJ9 -``` -Signature - -``` -EwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0 -``` - -You can plug the whole thing into jwt.io and see the decoded payload as follows: - -{{< img src="/img/2.10/split_token2.png" alt="Split Token" >}} - -So back to Tyk, the API Gateway is perfectly positioned to act as a broker between the client and the authorization server. It can accept requests for new access tokens, given a client id and secret, and exchange that for an access token with the authorization server. Then, it will break apart the JWT and return only the signature portion back to the client. It then stores the rest of the JWT internally. - -This means that the client can then simply use the signature as an access token and Tyk can validate the token as if it was a normal API Key. Then it will pull the JWT out of cache and inject claims into the request or even rebuild the access token, which is safe. - - -**Let’s get started IdP** - -Inside Tyk, create a virtual endpoint or API, listening to the path `/token`. This virtual endpoint is responsible for receiving the auth request from the client, and acting as an identity broker with the authorization server. - -Let’s take a look at some sample code for the Virtual Endpoint: - -``` -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) -} - -function createKeyInsideTyk(customKey, meta) { - // TODO: this needs to be a bit more dynamic. e.g. work out the policy id & API ID etc... based on the metadata - var accessRights = { - "c399587af48441d17bc5700339aa34fa": { - "api_name": "Test API", - "api_id": "c399587af48441d17bc5700339aa34fa", - "versions": [ - "Default" - ] - } - } - - log("meta: " + JSON.stringify(meta)); - - var keyRequestBody = keyRequestTemplate; - keyRequestBody.access_rights = accessRights; - - var newRequest = { - "Headers": {"Content-Type": "application/json", "Authorization": "Bearer a4fcbde85a3c477d424922990eb16e01"}, - "Method": "POST", - "Body": JSON.stringify(keyRequestBody), - "Domain": "http://localhost:3000", - "resource": "/api/keys/" + customKey, - }; - - var response = TykMakeHttpRequest(JSON.stringify(newRequest)); - log("createkeyintykres: " + response); -} - -var keyRequestTemplate = { - "apply_policies": [], - "org_id" : "5d67b96d767e02015ea84a6f", - "expires": 0, - "allowance": 0, - "per": 0, - "quota_max": 0, - "rate": 0, - "access_rights": {} -} -``` - -The code does the following: - -- The Virtual Endpoint receives a request containing a client ID + Secret. -- It makes a call to the authorization server to receive the access JWT token. -- It splits the access token to create an opaque key in Tyk which is the signature of the JWT access token. -- It adds the Header and the Body of the access token as metadata to the opaque key so that we can look it up on subsequent requests. -- It returns the opaque key (signature) to the client where they can use it to access APIs. - -From the client perspective, when logging in at the token endpoint, you can see as follows: - -``` -$ curl http://tyk-gw:8080/auth/token -X POST \ --H 'Content-Type: application/x-www-form-urlencoded' \ --d client_id=efd952c8-df3a-4cf5-98e6-868133839433 \ --d client_secret=0ede3532-f042-4120-bece-225e55a4a2d6 \ --d grant_type=client_credentials - -{"access_token":"MEwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0","expires_in":300,"not-before-policy":0,"scope":"email profile","session_state":"fb8754d1-d518-40e8-a84f-85347a0639c8","token_type":"bearer"} -``` -Notice that the returned response is considerably smaller than before, as it is just the signature of the `access_token` field. The client can then simply use that access token as a bearer token for subsequent REST API calls via the Tyk Gateway. - -If you are on Tyk Self-Managed, you can even look up the key in the Dashboard: - -{{< img src="/img/2.10/split_token3.png" alt="Split Token" >}} - -And also the key’s metadata: - -{{< img src="/img/2.10/split_token1.png" alt="Split Token" >}} - -Let’s test your API key (signature) against the API we added to the access rights in the Create Key payload: - -``` -$ curl localhost:8080/basic-protected-api/get -H "Authorization: MEw….GJ0" -{ - "args": {}, - "headers": { - "Accept": "*/*", - "Accept-Encoding": "gzip", - "Authorization": "MEwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0", - "Host": "httpbin", - "User-Agent": "curl/7.64.1" - }, - "origin": "192.168.80.1", - "url": "http://httpbin/get" -} -``` - -Tyk validates the opaque token and allows access to the API. So how do you pass the original access token to the underlying services? You need to reconstruct the full JWT. - -In the previous step, we stored the full JWT in the session token’s metadata inside Tyk. We can extract the JWT from the request’s session metadata and then inject it into the requests headers. - -Let’s configure the API to inject a global header as follows: - -{{< img src="/img/2.10/split_token4.png" alt="Split Token" >}} - -This will instruct Tyk to combine the JWT Header and Body from the session metadata, with the opaque token that the client is using to make an API request, and inject the new value as an Authorization header. - -Let’s try the API call again: -``` -$ curl localhost:8080/basic-protected-api/get -H "Authorization: MEw….GJ0" -{ - "args": {}, - "headers": { - "Accept": "*/*", - "Accept-Encoding": "gzip", - "Authorization": "Bearer eyJh...1X3GJ0", - "Host": "httpbin", - "User-Agent": "curl/7.64.1" - }, - "origin": "192.168.80.1", - "url": "http://httpbin/get" -} -``` -As you can see, even though you only sent an opaque token in the request, Tyk injected the rest of the JWT where our upstream can now use it to perform business logic. - -The quick instruction to use Split Token Flow by using OSS Gateway is as follows: - -1. Launch Tyk Gateway and Redis using Docker: -``` -docker-compose up -``` -2. Add your IdP details to modify the `login.js` script that Tyk will execute. Fill in the details with your IdP to recreate the above API call. -3. Reload the file In order to load the changes we did in step 2, execute the following API call: -``` -$ curl localhost:8080/tyk/reload -H "x-tyk-authorization:foo" - {"status":"ok","message":""} -``` -4. Make the same API call, through Tyk now: - -``` -$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ -http://localhost:8080/auth/token \ --d grant_type=client_credentials \ --d client_id=myclientid \ --d client_secret=5e7c5b4a-6a1c-4010-8219-897a0b45d08b - -{ - "access_token": "EwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0", - "expires_in": 300, - "not-before-policy": 0, - "scope": "profile email", - "session_state": "ab844564-265c-4bcd-8a73-5f46e92600bc", - "token_type": "bearer" -} -``` -You will receive a much smaller response this time, because the `access token` contained just the signature of the JWT access token that the Idp created. - -When you call the `auth/token` endpoint, you call the `auth_api.json` reverse proxy configuration. On the `token` endpoint on that `auth` API, you set up a Virtual Endpoint. You see that in `auth_api.json`. - -``` -"extended_paths": { - "virtual": [ - { - "response_function_name": "login", - "function_source_type": "file", - "function_source_uri": "./middleware/login.js", - "path": "token", - "method": "POST", - "use_session": false, - "proxy_on_error": false - } - ] -} -``` -This is a Tyk built-in plugin that enables you to execute Javascript code on an endpoint. This invokes your `login.js` script which you loaded into Tyk. -5. Make API call using the opaque token returned in step 4 - -```$ curl localhost:8080/basic-protected-api/get -H "Authorization:EwIaRgq4go4R2M2z7AADywZ2ToxG4gDMoG4SQ1X3GJ0" - -{ - "args": {}, - "headers": { - "Accept": "*/*", - "Accept-Encoding": "gzip", - "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxUU5fTG5NaHk3emltSlNKRm9wVXYtWW0weEhMdlQ4eVRNSExQTGlYTk5FIn0.eyJleHAiOjE2MDcxNzgwNTgsImlhdCI6MTYwNzE3Nzc1OCwianRpIjoiOTJkN2M5NDEtZWE2YS00N2Y5LThlYTgtMTY1NWQ0YjIzOTgzIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay5kby5wb2MudHlrLnRlY2hub2xvZ3kvYXV0aC9yZWFsbXMvdHlrIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjA0Mzc1YTE2LWMxMmItNDAwNi04MzBkLWExNTAzZTJjMWYxMCIsInR5cCI6IkJlYXJlciIsImF6cCI6Im15Y2xpZW50aWQiLCJzZXNzaW9uX3N0YXRlIjoiYWI4NDQ1NjQtMjY1Yy00YmNkLThhNzMtNWY0NmU5MjYwMGJjIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJwcm9maWxlIGVtYWlsIiwiY2xpZW50SWQiOiJteWNsaWVudGlkIiwiY2xpZW50SG9zdCI6IjE3Mi4xOC4wLjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1teWNsaWVudGlkIiwiY2xpZW50QWRkcmVzcyI6IjE3Mi4xOC4wLjEifQ.EHLdSwmE4jg-GmELBT5C0FCvEZNMYIJ-OhdXXm97QsO9sQF51A-mH_Ebf__HJRnHgJ9BKYzuIdI1XO77iqflK-JYba1_BivnholKOO4YFsdLS9lTFaKJtq5MP-BQy7QQlN2x0pqj1s3MBaw2D9j8miHdLYqS3dWEv1kr5WkGsbukFA14sJVfMRVdFgQ-8U5X5_yDcOjKgR2bLRTgPYG6RWWRu3uJ6LQ-UbAMSaoykTKTmYCTWVHpkp_Bx_vXqEfjZQsT9c6hwwGM63q4uZhsFCM6oL51azKba0RiFFY-vbk1uCXybrrrlhYXgTKHd5aLTVyktTXsL9Tlnrenf5YIMQ", - "Host": "httpbin.org", - "User-Agent": "curl/7.64.1", - "X-Amzn-Trace-Id": "Root=1-5fcb96a7-0299119443a2e1a019f21fff" - }, - "origin": "192.168.144.1, 99.242.139.220", - "url": "http://httpbin.org/get" -} -``` -All this is possible on the OSS version of Tyk. - -If you have any questions or want to start a conversation, I encourage you to email community forums with any questions. diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/multiple-auth.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/multiple-auth.md deleted file mode 100755 index 9adee15ef0..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/multiple-auth.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -date: 2017-03-23T15:58:42Z -title: Multiple Auth -tags: ["Authentication", "Multiple"] -description: "How to combine multiple authentication methods to lock-down your APIs" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 ---- - -## Multiple (Chained) Authentication - -As of Tyk v2.3 it is possible to have multiple authentication middleware chained together, so for example, it would be possible to use an Access Token in combination with Basic Auth, or with a JSON Web Token. We have put together a short video that demonstrates this functionality: - -{{< youtube vYGYYXcJ6Wc >}} - -## Enable Multi (Chained) Authentication with the Dashboard - -To enable multi chained auth in your GUI, first browse to the Endpoint Designer and view the "Core Settings" tab. - -#### 1\. Browse to the "Authentication" Section. - -In this section you can chose the various authentication methods, each selection provides a different settings window, in this case, we will want to configure many auth providers, so it works slightly differently. - -#### 2\. Select the Multiple Auth Mechanisms Option - -Select the **Use Multiple Auth Mechanisms** from the drop-down list. This will open up a window that provides check-boxes for each supported auth type to be chained. - -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 Select the Base Identity Provider - -The baseline provider will be the one that provides the current request context with the session object to use that defines 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 have been set up, you will see the traditional configuration screens for each one of the auth methods that were selected in the check boxes. Configure them as you would regular authentication modes. - -## Enable Multi (Chained) Authentication in your API Definition - -To enable this mode you must 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 auth token if none are specified. You can explicitly set auth token support by setting `use_standard_auth` to true. - -## Enable Multi (Chained) Authentication with Tyk Operator - -Please consult the Tyk Operator supporting documentation for an example of how to enable [multi chained authentication]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#multiple-chained-auth" >}}) with Tyk Operator. \ No newline at end of file diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/oauth-2-0.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/oauth-2-0.md deleted file mode 100755 index 94a43d6874..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/oauth-2-0.md +++ /dev/null @@ -1,241 +0,0 @@ ---- -date: 2017-03-23T16:06:42Z -title: OAuth 2.0 -tags: ["OAuth 2.0", "Security"] -description: "Using OAuth 2.0 to secure your APIs with Tyk" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 -aliases: - - /security/your-apis/oauth-2-0/ ---- - -Inserting an API gateway into an OAuth 2.0 flow is quite tricky, as OAuth assumes that the resource owner issuing the tokens is also the identity holder for authentication purposes. - -Tyk has two methods you can use to enable OAuth 2.0 - -## Option 1 - use standard auth tokens - -The first is to integrate a standard OAuth 2.0 flow into your application using one of the many OAuth libraries that exist for popular frameworks and languages. And then when your API issues a token, use the Tyk Gateway REST API to create a key session for your own generated key. - -Set up your API to use Auth Token as the Authentication Mode and set the Authorization header to be `Authorization`, Tyk will now treat the `auth_token` as any other, respecting it's expiry date and any access control mechanisms that may be in place. It may be the case that you will need to put the OAuth `/access` and `/authorize` endpoints into the `ignored_paths` list of your API version to ensure that those requests reach your API. - -## Option 2 - use the Tyk OAuth flow - -Tyk can act as a full blown OAuth 2.0 provider for Authorization and access tokens, and all your application would need to integrate with is Tyk's API and notification endpoints. - -{{< youtube C4CUDTIHynk >}} - -Tyk supports the following grant types: - - -- [Authorization Code]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant" >}}) -- [Refresh Token]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant" >}}) -- [Username and Password]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant" >}}) -- [Client Credentials]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant" >}}) - - -The Tyk OAuth flow is described in the following sections. - -### Authorization token flow (e.g. server-side web apps) - -1. Resource owner registers a new Client ID with Tyk. -2. Client makes a request on behalf of an end user to `/oauth/authorize/` on your Tyk instance `listen_path`. -3. Tyk will check the OAuth authorize request for validity (i.e. Does the Client ID exist and is the request properly formed to the OAuth 2.0 standard). -4. If the request is valid and the Client ID has not expired, then the request will be passed through to your applications authorization page - this page will essentially enable your user to log in and authenticate themselves and then give permission to this client ID to access their details (as one would expect from an OAuth integration). -5. If the user accepts the Client access and has authenticated successfully, your app calls the Tyk Dashboard OAuth API Authorization endpoint (`/authorize-client/`) with the POST parameters that the requesting client sent. - -{{< note success >}} -**Note** - -The Tyk Gateway also exposes an equivalent Gateway API authorization endpoint (`/tyk/oauth/authorize-client/`). In some scenarios, for example where access to the Dashboard API from the authentication server may be restricted, the Gateway API can be used instead. -{{< /note >}} - -6. Tyk will generate an authorization code and redirect URL to your application -7. Your application redirects the user to the URL -8. The API Client uses the auth code to request an access token from Tyk (`/oauth/token`) -9. If the access token is valid, Tyk will generate an access token an notify your webapp via webhook that a new access token has been granted and also any other keys that are related (e.g. the auth-code mentioned earlier) -10. Your app should store these details in order to tie the access token to your users identity - - - -This seems like a complicated process and very verbose - however in actuality, the integration piece is very small. As an API owner, the only steps that require active integration are: - -- Step (1) Creating OAuth Client ID's (This would need to be done anyway) -- Step (4) Creating a page to receive the OAuth POST request, log the user in, authorize the client ID and redirect them back to the client app -- Step (9) Create a webhook endpoint that accepts a POST request in order to store and update OAuth key data - -### Access token flow (e.g. mobile apps, single-page web apps) - -1. Resource owner registers a new Client ID with Tyk -2. Client makes a request on behalf of an end user to `/oauth/authorize/` on your Tyk instance `listen_path` -3. Tyk will check the OAuth authorize request for validity (i.e. Does the Client ID exist and is the request properly formed to the OAuth 2.0 standard -4. If the request is valid and the Client ID has not expired, then the request will be passed through to your applications authorization page - this page will essentially enable your user to log in and authenticate themselves and then give permission to this client ID to access their details (as one would expect from an OAuth integration). -5. If the user accepts the Client access and has authenticated successfully, your app calls the Tyk Gateway API OAuth Authorization endpoint (`/tyk/oauth/authorize-client/`) with the POST parameters that the requesting client sent -6. Tyk will generate an access code and redirect URL for your application -7. Your application redirects the user to the URL - -If this mode is used, only steps (1) and (4) are required, however the client cannot use refresh tokens to update access to the API. - -## Enabling OAuth via the Dashboard - -### Prerequisites - -We assume that you have an API added and now want to protect it with OAuth. - -### 1. Set the Authentication mode - -From the API Core Settings tab, select OAuth 2.0 as the Authentication mode: - -{{< img src="/img/dashboard/system-management/oauth-auth-mode.png" alt="Authentication mode" >}} - -### 2. Set Allowed Access Types and Allowed Authorize Types - -Allowed Access Types and Allowed Authorize Types depends on the particular grant type you are supporting. For example, to support the [Authorization Code grant type]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant" >}}) you should select Authorization Code for both Allowed Access Types and and Allowed Authorize Types. For other grant types select the appropriate option, e.g. for both [Client Credentials]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant" >}}) and [Username and Password]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant" >}}) grant types you should select Token for Allowed Authorize Types. - -### 3. Set Redirect Fields - -The remaining fields are only required for grant types which include a redirect, i.e. Authorization Code. - -**OAuth Login Redirect**: This is the page that Tyk will redirect the user agent to if the authorize request is valid (as in, it has a valid client ID and the request meets the spec for OAuth). - -**OAuth Notifications URL**: Will be notified every time a token is generated by this client, this is to enable any upstream server to maintain a clear idea of what tokens have been generated. - -**OAuth notifications Shared Secret**: Is to ensure that the notification came from the Tyk Gateway - -### 4. Create a Policy - -Next, [create a policy]({{< ref "getting-started/create-security-policy" >}}) which includes this API on it’s Access rights. - -### 5. Create an OAuth Client - -In order for any of these requests to work, you will need a valid OAuth client. To create an OAuth client, browse back to your API list and for the API you have created, select **OAuth Clients** under the **Actions** Dropdown list. - -{{< img src="/img/dashboard/system-management/oauth-api-oauth-clients.png" alt="OAuth Clients" >}} - -### 6. Add a New Client - -{{< img src="/img/dashboard/system-management/oauth-add-new-client.png" alt="Add new OAuth Client" >}} - -You need to set a redirect URI, which can be any URI for Client Credentials and Password grant types. For the [Authorization Code grant type]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant" >}}) this is the pre-registered redirect URL that the authorization server will redirect the client to. During the OAuth flow, the value set in the inbound request must match what is set here. - -Select the policy you created earlier. This policy will be applied to each token that gets generated by this client ID. - -### 7. View Client ID and Secret - -Once the client is created, you can view it’s ID and secret in the detail view. - -{{< img src="/img/dashboard/system-management/oauth-client-secret-details.png" alt="View Client ID and Secret" >}} -## Enabling OAuth via an API - -To get OAuth set up in your API configuration, you will need to set up your API Definition like so: - -```{.copyWrapper} - { - name: "OAuth Test API", - ... - use_oauth2: true, - oauth_meta: { - allowed_access_types: [ - "authorization_code", - "refresh_token" - ], - allowed_authorize_types: [ - "code", - "token" - ], - auth_login_redirect: "http://lonelycode.com/login" - }, - notifications: { - shared_secret: "9878767657654343123434556564444", - oauth_on_keychange_url: "http://posttestserver.com/post.php?dir=oauth_notifications" - }, - ... - } -``` - -As can be seen - a lot more configuration is required than with other methods. See [API Definition Objects]({{< ref "tyk-gateway-api/api-definition-objects" >}}) for more details. - -The key elements to take into account here are the enabling of the `use_oauth2` flag and the `notifications` section. - -#### Setting quotas and limits - -(See also [bound policies](#using-bound-policies-with-oauth-client-ids)) - -Once your application authorizes a client to access data on a users behalf (Step 5 -> Step 6), your app will send a request to the Tyk REST API endpoint `/tyk/oauth/authorize-client/` with the POST data from the initial client request. It will also need to add one field to the POST data: `key_rules`. - -`key_rules` is a form-encoded string representing a standard session object: - -```{.copyWrapper} -{ - "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": "" -} -``` - -You'll notice the inclusion of the `oauth_client_id` field, this is for analytics usage as it will be fed into any hit data this key generates for later analysis. - -What Tyk does with this data is as follows: - -- If the request is an auth-code request, then when an access token is requested, the `key_rules` is decoded and used to generate the new key. -- If the request is by your app and is for a token, then the key is generated directly from this data. - -#### Using bound policies with OAuth Client IDs - -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. - -#### Notifications - -The `notifications` section is only required if you intend to use Authorization tokens or Refresh tokens (See the access token flow). If these are used, Tyk will attempt to send a notification to the `oauth_on_keychange_url`. It will attempt to send this notification 3 times until it receives a 200 OK response. - -The notification that is sent to the webhook you specify is a POST request with an authentication header: - -``` -X-Tyk-Shared-Secret: your-shared-secret -``` - -And the POST body will have the following fields, they will be populated depending on the type of request that is being reacted to: - -```{.copyWrapper} -{ - "auth_code": "", - "new_oauth_token": "", - "refresh_token": "", - "old_refresh_token": "", - "notification_type": "" -} -``` - -The fields will be populated depending on the type of notification is being sent - the two types being `refresh` and `new`, a `new` request will have an `auth_code` (this will be the auth code that requested access), `new_oauth_token` (the key to store against your user ID, based on the `auth_code`) and `refresh_token` (if enabled - this is the refresh token that _can_ be used to generate a new access token without your API knowing). - -A `refresh` type will send a new `refresh_token`, the `old_refresh_token` (to identify the key being changed) and the`new_oauth_token` to update the identity record. - -#### Notes on the Tyk OAuth 2.0 Flow - -- Once a token has been generated, it uses the same machinery as standard access tokens, so quotas, limits and expiry can all be set as part of the key. -- Access tokens will use the Tyk access controls (versioning and named API ID's) to grant and deny access to APIs, not the Client ID. -- OAuth access data is stored in Analytics records so that data can be grouped by Client ID. - -#### Accessing multiple APIs with the same API token - -OAuth 2.0 by design has a single authentication point. However you can configure Tyk to issue tokens which will have access to multiple APIs. In order to do that, create a policy which includes **one** OAuth 2.0 API which is used for authentication (e.g. issuing tokens), and the rest of the APIs inside the policy should use the standard Auth Token method. diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/open-keyless.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/open-keyless.md deleted file mode 100755 index 9722239494..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/open-keyless.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -date: 2017-03-23T16:11:54Z -title: Open (Keyless) -tags: ["Keyless", "Security"] -description: "When to use keyless (open access) security with your APIs" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 ---- - -Tyk keyless access represents completely open access for your API and causes Tyk to bypass any session-based middleware (middleware that requires access to token-related metadata). Most middleware will work with keyless access (header transformation, mocks, virtual endpoints, etc.). - -## Use Case - -Open access is very useful for situations where analytics is the key reason for tracking usage, using the Tyk node as a reverse logging proxy, since it adds extremely low latency to proxied requests. It can offer a great way to monitor how an API is being used by existing users without having to use a key store. - -Keyless access will allow all requests through. All access control, versioning, quotas and rate limiting will not be possible as individual sessions are not identified. - -## Example - -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 >}} - -## Tyk Operator Example - -Please consult the Tyk Operator supporting documentation for an example of how to configure an API within Tyk Operator for [Open Access]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#keyless-open" >}}). diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/openid-connect.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/openid-connect.md deleted file mode 100755 index a2073f02c0..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/openid-connect.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -date: 2017-03-23T16:13:12Z -title: OpenID Connect -tags: ["OpenID", "OIDC", "Security"] -description: "Using OpenID Identity Tokens with Tyk" -menu: - main: - parent: "Authentication & Authorization" -weight: 5 -aliases: - - /security/your-apis/openid-connect/ - - /advanced-configuration/integrate/api-auth-mode/oidc-auth0-example/ - - /advanced-configuration/integrate/api-auth-mode/open-id-connect - - /advanced-configuration/integrate/api-auth-mode/json-web-tokens ---- - -[OpenID Connect](https://openid.net/developers/how-connect-works) (OIDC) builds on top of OAuth 2.0, adding authentication. You can secure your APIs on Tyk by integrating with any standards compliant OIDC provider using [JSON Web Tokens]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens" >}}) (JWTs). -JWTs offer a simple way to use the third-party Identity Provider (IdP) without needing any direct integration between the Tyk and 3rd-party systems. - -To integrate a 3rd party OAuth2/OIDC IdP with Tyk, all you will need to do is ensure that your IdP can issue OAuth2 JWT access tokens as opposed to opaque tokens. - -The client application authenticates with the IdP which then provides an access token that is accepted by Tyk. Tyk will take care of the rest, ensuring that the rate limits and quotas of the underlying identity of the bearer are maintained across JWT token re-issues, so long as the "sub" (or whichever identity claim you chose to use) is available and consistent throughout and the policy that underpins the security clearance of the token exists too. diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/physical-key-expiry.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/physical-key-expiry.md deleted file mode 100755 index 1dfdb73e0d..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/physical-key-expiry.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -date: 2017-03-23T16:15:37Z -title: Key Expiry and Deletion -tags: ["Keys", "Expiry", "Deletion", "Lifetime", "Session"] -description: "How to expire keys in Tyk" -menu: - main: - parent: "Authentication & Authorization" -weight: 8 -aliases: - - /basic-config-and-security/security/authentication-authorization/physical-token-expiry/ ---- - -Tyk makes a clear distinction between an API authorization key expiring and being deleted from the Redis storage. - -- When a key expires, it remains in the Redis storage but is no longer valid. Consequently, it is no longer authorized to access any APIs. If a key in Redis has expired and is passed in an API request, Tyk will return `HTTP 401 Key has expired, please renew`. - - When a key is deleted from Redis, Tyk no longer knows about it, so if it is passed in an API request, Tyk will return `HTTP 400 Access to this API has been disallowed`. - -Tyk provides separate control for the expiration and deletion of keys. - -Note that where we talk about keys here, we are referring to [Session Objects]({{< ref "getting-started/key-concepts/what-is-a-session-object" >}}), also sometimes referred to as Session Tokens - -## Key expiry - -Tyk's API keys ([token session objects]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}})) have an `expires` field. This is a UNIX timestamp and, when this date/time is reached, the key will automatically expire; any subsequent API request made using the key will be rejected. - -## Key lifetime - -Tyk does not automatically delete keys when they expire. You may prefer to leave expired keys in Redis storage, so that they can be renewed (for example if a user has - inadvisedly - hard coded the key into their application). Alternatively, you may wish to delete keys to avoid cluttering up Redis storage with obsolete keys. - -You have two options for configuring the lifetime of keys when using Tyk: - -1. At the API level -2. At the Gateway level - -### API-level key lifetime control - -You can configure Tyk to delete keys after a configurable period (lifetime) after they have been created. Simply set the `session_lifetime` field in your API Definition and keys created for that API will automatically be deleted when that period (in seconds) has passed. - -The default value for `session_lifetime` is 0, this is interpreted as an infinite lifetime which means that keys will not be deleted from Redis. - -For example, to have keys live in Redis for only 24 hours (and be deleted 24 hours after their creation) set: - -```{.json} -"session_lifetime": 86400 -``` - -{{< note success >}} -**Note** - -There is a risk, when configuring API-level lifetime, that a key will be deleted before it has expired, as `session_lifetime` is applied regardless of whether the key is active or expired. To protect against this, you can configure the [session_lifetime_respects_key_expiration]({{< ref "tyk-oss-gateway/configuration#session_lifetime_respects_key_expiration" >}}) parameter in your `tyk.conf`, so that keys that have exceeded their lifetime will not be deleted from Redis until they have expired. -{{< /note >}} - -This feature works nicely with [JWT]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens" >}}) or [OIDC]({{< ref "basic-config-and-security/security/authentication-authorization/openid-connect">}}) authentication methods, as the keys are created in Redis the first time they are in use so you know when they will be removed. Be extra careful in the case of keys created by Tyk (Auth token or JWT with individual secrets) and set a long `session_lifetime`, otherwise the user might try to use the key **after** it has already been removed from Redis. - -### Gateway-level key lifetime control - -You can set a global lifetime for all keys created in the Redis by setting [global_session_lifetime]({{< ref "tyk-oss-gateway/configuration#global_session_lifetime" >}}) in the `tyk.conf` file; this parameter is an integer value in seconds. - -To enable this global lifetime, you must also set the [force_global_session_lifetime]({{< ref "tyk-oss-gateway/configuration#force_global_session_lifetime" >}}) parameter in the `tyk.conf` file. - -### Summary of key lifetime precedence - -The table below shows the key lifetime assigned for the different permutations of `force_global_session_lifetime` and `session_lifetime_respects_key_expiration` configuration parameters. -| `force_global_session_lifetime` | `session_lifetime_respects_key_expiration` | Assigned lifetime | -|---------------------------------|--------------------------------------------|-------------------------------------------| -| `true` | `true` | `global_session_lifetime` | -| `true` | `false` | `global_session_lifetime` | -| `false` | `true` | larger of `session_lifetime` or `expires` | -| `false` | `false` | `session_lifetime` | - -{{< note success >}} -**Note** - -It is important to remember that a value of `0` in `session_lifetime` or `global_session_lifetime` is interpreted as infinity (i.e. key will not be deleted if that control is in use) - and if a field is not set, this is treated as `0`. -
-If you want the key to be deleted when it expires (i.e. to use the expiry configured in `expires` within the key to control deletion) then you must set a non-zero value in `session_lifetime` and configure both `session_lifetime_respects_key_expiration:true` and `force_global_session_lifetime:false`. -{{< /note >}} diff --git a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/python-etc-plugin-authentication.md b/tyk-docs/content/basic-config-and-security/security/authentication-authorization/python-etc-plugin-authentication.md deleted file mode 100644 index 355bd9c200..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/authentication-authorization/python-etc-plugin-authentication.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -date: 2017-03-23T16:15:37Z -title: Python CoProcess and JSVM Plugin Authentication -tags: ["Keys", "Expiry"] -description: "How to expire keys in Tyk" -menu: - main: - parent: "Authentication & Authorization" -weight: 7 ---- - -You can use Python, CoProcess and JSVM plugins for authentication. - -* 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. - diff --git a/tyk-docs/content/basic-config-and-security/security/dashboard/user-roles.md b/tyk-docs/content/basic-config-and-security/security/dashboard/user-roles.md index 5dbae7a067..f4dfe4001b 100644 --- a/tyk-docs/content/basic-config-and-security/security/dashboard/user-roles.md +++ b/tyk-docs/content/basic-config-and-security/security/dashboard/user-roles.md @@ -29,7 +29,8 @@ The permissions object, which is provided to the Dashboard API has this structur "portal": "write", "system": "write", "users": "write", - "user_groups": "write" + "user_groups": "write", + "audit_logs": "read" } ``` diff --git a/tyk-docs/content/basic-config-and-security/security/mutual-tls.md b/tyk-docs/content/basic-config-and-security/security/mutual-tls.md deleted file mode 100644 index 1135785e8f..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/mutual-tls.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Mutual TLS -tags: ["mTLS"] -description: "How Tyk supports mutual TLS" -menu: - main: - parent: "Security" -weight: 2 -aliases: - - /basic-config-and-security/security/tls-and-ssl/mutual-tls/ - - /security/tls-and-ssl/mutual-tls/ ---- - -The main requirement to make it work is that SSL traffic should be terminated by Tyk itself. If you are using a load balancer, you should configure it to work in TCP mode. - -## How Tyk Supports mutual TLS - -Tyk has support for mutual TLS in the following areas: - -* [Client mTLS](./client-mtls) -* [Upstream mTLS](./upstream-mtls) - -### mTLS for cloud users: -- Cloud users can secure their upstream services with mTLS but mTLS between the client (caller of the API) and Tyk's gateway cannot be done for the time being. -- Multi cloud users - since you own and manage the gateways, you can use mTLS for gateway <--> upstream as well as client <--> gateway connections. - -Before going into details about each of these areas, let's [describe the basic building blocks](./concepts) used to make it work. \ No newline at end of file diff --git a/tyk-docs/content/basic-config-and-security/security/mutual-tls/client-mtls.md b/tyk-docs/content/basic-config-and-security/security/mutual-tls/client-mtls.md deleted file mode 100644 index 231cb1979b..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/mutual-tls/client-mtls.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Client mTLS -tags: ["mTLS", "Static", "Dynamic"] -description: "How to set up client mTLS" -menu: - main: - parent: "Mutual TLS" -weight: 1 ---- - -There are two ways to set up client mTLS in Tyk, **static** and **dynamic**. They vary on your use case. - -| 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 -Tyk can be configured to guess a user authentication key based on the provided client certificate. In other words, a user does not need to provide any key, except the certificate, and Tyk will be able to identify the user, apply policies, and do the monitoring - the same as with regular Keys. - -The basic idea here is that you can create a key based on a provided certificate. You can then use this key **or** the cert for one or more users. - -#### Quickstart - -1. To setup, first protect the API by setting the Authentication Type in the **API Designer**, select Auth Token from the Target Details > Authentication mode. Then select **Enable Client Certificate** as below: - -{{< img src="/img/2.10/client_cert.png" alt="enable_cert" >}} - -2. Let's generate a self-signed key pair to use in the following. Skip this step if you already have your own certs. - -``` -openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -``` - -3. Add a key through the Dashboard, and select the API from step #1 in the Access Rights - -{{< note success >}} -**Note** - -The certificate you upload for this key **must only be the public certificate**. -{{< /note >}} - -{{< img src="/img/2.10/client_mtls_add_cert.png" alt="keys_cert" >}} - - -4. And now we can make a cURL to this API using the cert + private key. - -``` -$ curl -k \ - --cert cert.pem \ - --key key.pem \ - https://localhost:8080/mtls-api/my-endpoint - -<200 response> - -``` - -#### Developer Portal - Self Serve Cert Trust - -Instead of manually creating keys, we can expose the Above API via the Developer Portal, where developers can add their own certs to use to access APIs. - -1. Create a policy for the API we set up above -2. Create a catalog entry for this policy -3. As a developer on the Portal, request a key for this API. This will take us to this screen: - -{{< img src="/img/dashboard/system-management/portal_cert_request.png" alt="portal_cert_request" >}} - -Add your public cert (cert.pem from above) into here and hit "Request Key". - -Now we can make an API request just using the pub + private key: - -``` -$ curl -k \ - --cert cert.pem \ - --key key.pem \ - https://localhost:8080/mtls-api/my-endpoint - -<200 response> - -``` - -## Static mTLS - -Static mTLS simply means to allow client certs at the API level. - -To set it up, in the API authentication settings, choose mTLS and one other authentication type. If you don't want to use additional authentication type, i.e. only client cert alone, then select "keyless" as the other. - -The base Identity can be anything as the client cert is the only thing configured. - -Here's what it should look like: -{{< img src="/img/2.10/client_mtls_multiple_auth.png" alt="enable_cert" >}} - -Please consult the Tyk Operator supporting documentation for an example of how to [configure static mTLS]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#client-mtls" >}}) with Tyk Operator. - -## FAQ - -#### Why am I getting "Unauthorized! Header Not Found" Error? - -From a technical point of view, this is an extension of Auth token authentication mode. To enable this feature, set the API definition `auth.use_certificate.` boolean variable to `true`. - -#### Can I use both public and private key concatenated when uploading into the Dashboard? - -You can do this ONLY through the manual "Create A Key" flow as an Admin Dashboard user. Through the Portal, you must ONLY paste the contents of the public key, or cert as it is typically called. - -#### Can I register a root Certificate Authority (CA) certificate with Tyk so that Tyk will validate requests with certificates signed by this CA? - -Yes, you can upload a root CA certificate as a client certificate for static mTLS authentication. This configuration will allow clients presenting certificates signed by that CA to be validated. - -Key points: -1. The root CA certificate can be used as a client certificate, simply upload it to Tyk as you would a client certificate. -2. Clients with certificates signed by this CA will be accepted. -3. During verification, Tyk gateway traverses the certificate chain for validation. - -{{< note success >}} -**Note** - -Root CA certificates work only with [static mTLS]({{}}) and are not compatible with dynamic [dynamic mTLS]({{}}). -{{< /note >}} diff --git a/tyk-docs/content/basic-config-and-security/security/mutual-tls/concepts.md b/tyk-docs/content/basic-config-and-security/security/mutual-tls/concepts.md deleted file mode 100644 index 389bb81318..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/mutual-tls/concepts.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Concepts -tags: ["mTLS",] -description: "What is mTLS and how to use it in Tyk" -menu: - main: - parent: "Mutual TLS" -weight: 3 ---- - -## What is Mutual TLS? - -{{< note success >}} -**Note** - -Mutual TLS is supported from Tyk Gateway 2.4, Tyk Dashboard 1.4 and MDCB 1.4 -{{< /note >}} - - -Mutual TLS is a common security practice that uses client TLS certificates to provide an additional layer of protection, allowing to cryptographically verify the client information. - -In most cases when you try to access a secured HTTPS/TLS endpoint, you experience only the client-side check of the server certificate. The purpose of this check is to ensure that no fraud is involved and the data transfer between the client and server is encrypted. In fact, the TLS standard allows specifying the client certificate as well, so the server can accept connections only for clients with certificates registered with the server certificate authority, or provide additional security checks based on the information stored in the client certificate. This is what we call "Mutual TLS" - when both sides of the connection verify certificates. See the video below that gives you an introduction to mutual TLS and how it can be used to secure your APIs. - -{{< youtube UzEzjon3IAo >}} - -## Certificates -If you have had to configure an SSL server or SSH access, the following information below should be familiar to you. - -Let's start with certificate definition. Here is what [Wikipedia](https://en.wikipedia.org/wiki/Public_key_certificate) says: - -> In cryptography, a public key certificate, also known as a digital certificate or identity certificate, is an electronic document used to prove the ownership of a public key. The certificate includes information about the key, information about the identity of its owner (called the subject), and the digital signature of an entity that has verified the certificate's contents (called the issuer). If the signature is valid, and the software examining the certificate trusts the issuer, then it can use that key to communicate securely with the certificate's subject. - -When it comes to authorization, it is enough for the server that has a public client certificate in its trusted certificate storage to trust it. However, if you need to send a request to the server protected by mutual TLS, or need to configure the TLS server itself, you also need to have a private key, used while generating the certificate, to sign the request. - -Using Tyk, you have two main certificate use cases: - -1. Certificates without public keys used for authorization and authentication -2. Certificates with private keys used for upstream access, and server certificates (in other words when we need to sign and encrypt the request or -response). - -Before a certificate can be used by Tyk, it needs to be encoded into PEM format. If you are using an `openssl` command to generate certificates, it should use PEM by default. A nice bonus of the PEM format is that it allows having multiple entries inside the same file. So in cases where a certificate also requires a private key, you can just concatenate the two files together. - -## Certificate Management -Tyk provides two options to manage certificates: plain files or certificate storage with a separate API. - -All configuration options, which require specifying certificates, support both plain file paths or certificate IDs. You are able to mix them up, and Tyk will automatically distinguish file names from certificate IDs. - -The Tyk Gateway and Dashboard Admin APIs provide endpoints to create, remove, list, and see information about certificates. For the Gateway, the endpoints are: - -* Create: `POST /tyk/certs` with PEM body. Returns `{"id": "", ... }` -* Delete: `DELETE /tyk/certs/` -* Get info: `GET /tyk/certs/`. Returns meta info about the certificate, something similar to: -```json -{ - "id": "", - "fingerprint": , - "has_private_key": false, - "issuer": , - "subject": "", ... -} -``` -* Get info about multiple certificates: `GET /tyk/certs/,,`. -Returns array of meta info objects, similar to above. -* List all certificate IDs: `GET /tyk/certs`. Returns something similar to: - -```json -{ "certs": "", "", ... } -``` - -The Dashboard Admin API is very similar, except for a few minor differences: - -* Endpoints start with `/api` instead of `/tyk`, e.g. `/api/certs`, `/api/certs/`, etc. -* All certificates are managed in the context of the organization. In other words, certificates are not shared between organizations. - -Certificate storage uses a hex encoded certificate SHA256 fingerprint as its ID. When used with the Dashboard API, Tyk additionally appends the organization id to the certificate fingerprint. It means that certificate IDs are predictable, and you can check certificates by their IDs by manually -generating certificate SHA256 fingerprint using the following command: - -```{.copyWrapper} -openssl x509 -noout -fingerprint -sha256 -inform pem -in . -``` - -You may notice that you can't get the raw certificate back, only its meta information. This is to ensure security. Certificates with private keys have special treatment and are encoded before storing. If a private key is found it will be encrypted with AES256 algorithm 3 using the `security.private_certificate_encoding_secret` secret, defined in `tyk.conf` file. Otherwise, the certificate will use the [secret](https://tyk.io/docs/configure/tyk-gateway-configuration-options/#a-name-secret-a-secret) value in `tyk.conf`. - -### MDCB -Mutual TLS configuration in an MDCB environment has specific requirements. An MDCB environment consists of a Control Plane and multiple Data Planes that, using MDCB, sync configuration. -The Control Plane and Data Plane deployments usually do not share any secrets; thus a certificate with private keys encoded with secret in the Control Plane will not be accessible to Data Plane gateways. - -To solve this issue, you need to set `security.private_certificate_encoding_secret` in the MDCB configuration file to the same value as specified in your management Gateway configuration file. By knowing the original secret, MDCB will be able to decode private keys, and -send them to client without password. Using a secure connection between Data Plane Gateways and MDCB is required in this case. See MDCB setup page for use_ssl usage. - -## Authorization -At the TLS level, authorization means allowing only clients who provide client certificates that are verified and trusted by the server. - -Tyk allows you to define a list of trusted certificates at the API level or Gateway (global) level. If you are updating API definition programmatically or via files, you need to set following the keys in your API -definition: -`use_mutual_tls_auth` to `true`, and `client_certificates` as an array of strings - certificate IDs. - -From the Tyk Dashboard, to do the same from the **API Designer Core settings** section you need to select **Mutual TLS** authentication mode from the **Authentication** section, and allow the certificates using the built-in widget, as below: - -{{< img src="/img/2.10/mtls_auth_cert.png" alt="mutual_tls_auth" >}} - -If all your APIs have a common set of certificates, you can define them in your Gateway configuration file via the `security.certificates.apis` key - string array of certificate IDs or paths. - -Select **Strip Authorization Data** to strip any authorization data from your API requests. - -Be aware that mutual TLS authorization has special treatment because it is not "authentication" and does not provide any identifying functionality, like keys, so you need to mix it with another authentication modes options like **Auth Key** or **Keyless**. On the dashboard, you need to choose **Use multiple auth mechanism** in the **Authentication mode** drop-down, where you should select **Mutual TLS** and another option which suits your use-case. - -### Fallback to HTTP Authorization -The TLS protocol has no access to the HTTP payload and works on the lower level; thus the only information we have at the TLS handshake level is the domain. In fact, even a domain is not included into a TLS handshake by default, but there is TLS extension called SNI (Server Name Indication) -which allows the client to send the domain name to the TLS handshake level. - -With this in mind, the only way to make API authorization work fully at the TLS level, each API protected by Mutual TLS should be deployed on its own domain. - -However, Tyk will gracefully fallback to a client certificate authorization at the HTTP level in cases when you want to have multiple mutual TLS protected APIs on the same domain, or you have clients that do not support the SNI extension. No additional configuration is needed. In case of such fallback, -instead of getting TLS error, a client will receive 403 HTTP error. - -## Authentication -Tyk can be configured to guess a user authentication key based on the provided client certificate. In other words, a user does not need to provide any key, except the certificate, and Tyk will be able to identify the user, apply policies, and do the monitoring - the same as with regular Keys. - -[Go here for more details](../client-mtls) - - -### Using with Authorization -Mutual TLS authentication does not require mutual TLS authorization to be turned on, and can be used separately. For example, you may allow some of the users to be authenticated by using a token in the header or similar, and some of the users via client certificates. - -If you want to use them both, just configure them separately. No additional knowledge is required. - -## Upstream Access -If your upstream API is protected with mutual TLS you can configure Tyk to send requests with the specified client certificate. You can specify one certificate per host and define a default certificate. -Upstream certificates can be defined on API definition level or global level in your Gateway configuration file. Specified client certificates will be used not only for internal Tyk calls but also for HTTP calls inside your JSVM middleware. - -Inside your API definition you should set the `upstream_certificates` field to the following format: -`{"example.com": ""}`. Defining on a global level looks the same, but should be specified via the `security.certificates.upstream` field in your Gateway configuration file. - -#### HTTP/HTTPS Protocol - -{{< warning success >}} -**Note** - -Do NOT include the protocol or Tyk will not match your certificates to the correct domain. -{{< /warning >}} - - For example: - - - **BAD** `https://api.production.myupstream.com` - - **GOOD** `api.production.myupstream.com`. - - However, you need to include the port if the request is made via a non-standard HTTP port. - -##### Wild Cards -To set a default client certificate, use `*` instead of domain name: `{"*": ""}` - -You may use wild cards in combination with text to match the domain, but it only works one level deep. - -Meaning, if your domain is `api.production.myupstream.com` - -the only wildcard value accepted would be `*.production.myupstream.com`. The value `*.myupstream.com` will NOT work. - -#### Setting through the Dashboard - - -To do the same via the Tyk Dashboard, go to the **API Designer** > **Advanced Options** panel > **Upstream certificates** section. - -{{< img src="/img/2.10/attach_upstream_cert.png" alt="upstream_cert" >}} - -{{< img src="/img/2.10/add_upstream_cert.png" alt="add_upstream_cert" >}} - - -## Tips and Tricks -You can create self-signed client and server certificates with this command: -```{.copyWrapper} -openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -``` - -For the server in `common name` specify a domain, or just pass `-subj "/CN=localhost"` to OpenSSL command. Then follow our [TLS and SSL Guide]({{< ref "basic-config-and-security/security/tls-and-ssl" >}}). - -To get certificate SHA256 fingerprint use the following command: -```{.copyWrapper} -openssl x509 -noout -fingerprint -sha256 -inform pem -in -``` -If you are testing using cURL, your command will look like: - -```{.copyWrapper} -curl --cert client_cert.pem --key client_key.pem https://localhost:8181 -``` diff --git a/tyk-docs/content/basic-config-and-security/security/mutual-tls/upstream-mtls.md b/tyk-docs/content/basic-config-and-security/security/mutual-tls/upstream-mtls.md deleted file mode 100644 index e33da95722..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/mutual-tls/upstream-mtls.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Upstream mTLS -tags: ["mTLS"] -description: "How to send upstream requests with a mTLS protected API" -menu: - main: - parent: "Mutual TLS" -weight: 2 ---- - -If your upstream API is protected with mutual TLS you can configure Tyk to send requests with the specified client certificate. - -- You can specify one certificate per host and define a default certificate. -- Upstream certificates can be defined on API definition level or globally (via Gateway configuration file). -- 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 - -### Via API Definition - -Inside your API definition you should set the `upstream_certificates` field to the following format: -`{"example.com": ""}`. Defining on a global level looks the same, but should be specified via the `security.certificates.upstream` field in your Gateway configuration file. - - -### Via Dashboard - -To do the same via the Tyk Dashboard, go to the **API Designer** > **Advanced Options** panel > **Upstream certificates** section. - -{{< img src="/img/2.10/attach_upstream_cert.png" alt="upstream_cert" >}} - -### Via Tyk Operator - -Tyk Operator supports configuring upstream mTLS using one of the following fields within the ApiDefinition object: - -- **upstream_certificate_refs**: Configure using certificates stored within Kubernetes secret objects. -- **upstream_certificates**: Configure using certificates stored within Tyk Dashboard's certificate store. - -#### upstream_certificate_refs - -The `upstream_certificate_refs` field can be used to configure certificates for different domains. References can be held to multiple secrets which are used for the domain mentioned in the key. Currently "*" is used as a wildcard for all the domains - -The example listed below shows that the certificate in the secret, *my-test-tls*, is used for all domains. - -```yaml -# First apply this manifest using the command -# "kubectl apply -f config/samples/httpbin_upstream_cert.yaml" -# -# The operator will try to create the ApiDefinition and will succeed but will log an error that a certificate is missing -# in the cluster for an upstream -# -# Generate your public-private key pair , for test you can use the following command to obtain one fast: -# "openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out tls.crt -keyout tls.key" -# -# Run the following command to obtain the values that must be put inside the yaml that contians the secret resource: -# "kubectl create secret tls my-test-tls --key="tls.key" --cert="tls.crt" -n default -o yaml --dry-run=client" -# -# Apply your TLS certificate using the following command: (we already have an example one in our repo) -# "kubectl apply -f config/sample/simple_tls_secret.yaml" -# -# NOTE: the upstream_certificate_refs can hold references to multiple secrets which are used for the domain -# mentioned in the key (currently "*" is used as a wildcard for all the domains) -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: true - upstream_certificate_refs: - "*": my-test-tls - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default -``` - -A secret can be created and output in yaml format using the following command: - -```bash -kubectl create secret tls my-test-tls --key="keyfile.key" --cert="certfile.crt" -n default -o yaml --dry-run=client -kubectl apply -f path/to/your/tls_secret.yaml -``` - -#### upstream_certificates - -The `upstream_certificates` field allows certificates uploaded to the certificate store in Tyk Dashboard to be referenced in the Api Definition: - -```yaml -# Skip the concatenation and .pem file creation if you already have a certificate in the correct format - -# First generate your public-private key pair , for test use you can use the following command to obtain one fast: -# "openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out tls.crt -keyout tls.key" - -# Concatenate the above files to obtain a .pem file which we will upload using the dashboard UI -# "cat tls.crt tls.key > cert.pem" - -# Upload it to the tyk certificate store using the dashboard - -# Fill in the manifest with the certificate id (the long hash) that you see is given to it in the dashboard -# (in place of "INSERT UPLOADED CERTIFICATE NAME FROM DASHBOARD HERE") -# Optional: Change the domain from "*" to something more specific if you need to use different -# upstream certificates for different domains - -# Then apply this manifest using the command -# "kubectl apply -f config/samples/httpbin_upstream_cert_manual.yaml" - -# The operator will try create the ApiDefinition and will succeed and it will have the requested domain upstream certificate -# in the cluster for an upstream - -# NOTE: the upstream_certificate can hold multiple domain-certificateName pairs -# (currently "*" is used as a wildcard for all the domains) - -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: true - upstream_certificates: - "*": #INSERT UPLOADED CERTIFICATE NAME FROM DASHBOARD HERE# - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default -``` - -## Domain - -Do **NOT** include the protocol or Tyk will not match your certificates to the correct domain. - - For example: - - ❌ `https://api.production.myupstream.com` - - ✅ `api.production.myupstream.com` - - You need to include the port if the request is made via a non-standard HTTP port. - - ✅ `api.production.myupstream.com:8443` - - -## Wild Cards - -You may use wild cards in combination with text to match the domain, but it only works one level deep. - -Example, if your domain is `api.production.myupstream.com` - - ✅ `*.production.myupstream.com` - - ❌ `*.myupstream.com` - -#### Default Upstream Cert - -To set a default client certificate, use `*` instead of domain name: `{"*": ""}` diff --git a/tyk-docs/content/basic-config-and-security/security/owasp-top-ten.md b/tyk-docs/content/basic-config-and-security/security/owasp-top-ten.md index dc1780b678..a4b57bf8b3 100644 --- a/tyk-docs/content/basic-config-and-security/security/owasp-top-ten.md +++ b/tyk-docs/content/basic-config-and-security/security/owasp-top-ten.md @@ -22,8 +22,8 @@ It is the responsibility of the API to handle this form of attack since it can a Authentication is a vital aspect of API security. Failure to do so, as noted by OWASP, leads to *Broken Authentication* posing a significant risk to both API providers and data. Tyk provides the following features and authentication mechanisms: -- Prioritize secure methods, like [mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}), over [basic authentication]({{< ref "basic-config-and-security/security/authentication-authorization/basic-auth#what-is-basic-authentication" >}}) wherever feasible. -- API owners can integrate external Identity Providers (IdPs) supporting methods like [OpenID Connect]({{< ref "basic-config-and-security/security/authentication-authorization/openid-connect" >}}), [OAuth 2.0]({{< ref "basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant#exchange-code-for-a-token" >}}) or [JSON Web Tokens]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens" >}}). +- Prioritize secure methods, like [mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}), over [basic authentication]({{< ref "/api-management/authentication-authorization#use-basic-authentication" >}}) wherever feasible. +- API owners can integrate external Identity Providers (IdPs) supporting methods like [OpenID Connect]({{< ref "/api-management/authentication-authorization#use-openid-connect" >}}), [OAuth 2.0]({{< ref "/api-management/authentication-authorization#use-authorization-code-grant" >}}) or [JSON Web Tokens]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}). - [Single Sign-On]({{< ref "advanced-configuration/integrate/sso" >}}) can be used for a centralized and trusted authentication source. API operators can choose from common authentication methods such as OAuth 2.0, LDAP, and SAML. - [Dynamic Client Registration]({{< ref "tyk-developer-portal/tyk-portal-classic/dynamic-client-registration#oauth-20-dynamic-client-registration-protocol-dcr" >}}), enables third-party authorization servers to issue client credentials via the Tyk Developer Portal. This streamlines Identity Management, eliminating the need to manage credentials across multiple systems. - Tyk's default authentication setup disallows credentials in URLs, reducing the risk of inadvertent exposure through backend logs. @@ -46,12 +46,12 @@ APIs can become overwhelmed if the resources upon which they rely are fully cons As an APIM product, Tyk Gateway can be configured to use the following out-of-the-box functionality when handling API traffic for legitimate users: -- [Circuit breaker]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#circuit-breaker" >}}) -- [Payload size limiter]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#request-size-limit" >}}) +- [Circuit breaker]({{< ref "planning-for-production/ensure-high-availability/circuit-breakers" >}}) +- [Payload size limiter]({{< ref "basic-config-and-security/control-limit-traffic/request-size-limits" >}}) - [Rate limiter / throttling]({{< ref "getting-started/key-concepts/rate-limiting" >}}) - [Caching]({{< ref "basic-config-and-security/reduce-latency/caching" >}}) - [Enforced timeout]({{< ref "planning-for-production/ensure-high-availability/enforced-timeouts" >}}) -- [IP restriction]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting#ip-blacklisting-middleware" >}}) +- [IP restriction]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting#ip-blocklist-middleware" >}}) - [GraphQL query complexity limiting]({{< ref "graphql/complexity-limiting" >}}) For Denial of Service (DoS) attacks it is recommended to use specialist 3rd party services to prevent DoS attacks from reaching your infrastructure. @@ -63,7 +63,7 @@ To prevent Broken Functional Level Authorization (BFLA), requests to REST API en Tyk offers several measures to assist with protection from BFLA threats: - *Establish path-based access rights*: [Policies]({{< ref "getting-started/key-concepts/what-is-a-security-policy" >}}) are predefined sets of rules which grant access to particular APIs. These can include [path-based permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}), which restrict access to particular paths and methods within an API. Clients can be assigned one or more policies which the Gateway will validate when it receives a request. -- *Access Control*: Tyk has plugins that control access to API endpoints. They are known as [allowlist]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}) and [blocklist]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#blocklist" >}}) and can be configured via the Endpoint Designer of an API Definition. Both plugins grant and deny access to API paths and methods, but do so in different ways, which makes them mutually exclusive. When the allowlist plugin is used, only the marked paths and methods are allowed, all other paths and methods are blocked. This can be perceived as *deny by default* since it provides the least privileges. The reverse is true for the blocklist plugin, only the paths and methods marked as blocklist are blocked, all other paths and methods are allowed. It is recommended to use the *allowlist* approach, since it is the most restrictive, only allowing marked endpoint paths and paths. +- *Access Control*: Tyk has plugins that control access to API endpoints. They are known as [allowlist]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas#configuring-the-allow-list-in-the-tyk-oas-api-definition" >}}) and [blocklist]({{< ref "product-stack/tyk-gateway/middleware/block-list-tyk-oas#configuring-the-block-list-in-the-api-designer" >}}) and can be configured via the Endpoint Designer of an API Definition. Both plugins grant and deny access to API paths and methods, but do so in different ways, which makes them mutually exclusive. When the allowlist plugin is used, only the marked paths and methods are allowed, all other paths and methods are blocked. This can be perceived as *deny by default* since it provides the least privileges. The reverse is true for the blocklist plugin, only the paths and methods marked as blocklist are blocked, all other paths and methods are allowed. It is recommended to use the *allowlist* approach, since it is the most restrictive, only allowing marked endpoint paths and paths. - *CORS*: This [functionality]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/cors" >}}) allows the Tyk Gateway to limit API access to particular browser-based consumers. ## 6 - Unrestricted Access To Sensitive Business Flows @@ -89,10 +89,10 @@ Tyk offers several mechanisms to help protect an API from Security Misconfigurat - Use [response header manipulation]({{< ref "advanced-configuration/transform-traffic/response-headers" >}}) to remove or modify API sensitive information. - Use [response body manipulation]({{< ref "advanced-configuration/transform-traffic/response-body" >}}) to remove or modify parts containing sensitive information. - [TLS]({{< ref "basic-config-and-security/security/tls-and-ssl" >}}) to ensure that clients use the right service and encrypt traffic. -- [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}) with both the clients and API to ensure that callers with explicitly allowed client certificates can connect to the endpoints. +- [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) with both the clients and API to ensure that callers with explicitly allowed client certificates can connect to the endpoints. - [Error Templates]({{< ref "advanced-configuration/error-templates" >}}) can be used to return a response body based on status code and content type. This can help minimize the implementation details returned to the client. - [CORS functionality]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/cors" >}}) allows the Tyk Gateway to limit API access to particular browser-based consumers. -- [Policy Path-Based Permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}) and the [allowlist]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}) plugin can be used to prevent clients from accessing API endpoints using non-authorized HTTP methods. For example, blocking the use of the DELETE method on an endpoint which should only accept GET requests. +- [Policy Path-Based Permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}) and the [allowlist]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas#configuring-the-allow-list-in-the-tyk-oas-api-definition" >}}) plugin can be used to prevent clients from accessing API endpoints using non-authorized HTTP methods. For example, blocking the use of the DELETE method on an endpoint which should only accept GET requests. - [Environment variables]({{< ref "tyk-environment-variables" >}}) can help standardize configuration across containerised deployments. - For GraphQL APIs: - [Schema Introspection]({{< ref "graphql/introspection" >}}) ensures that the Tyk Dashboard automatically uses the schema of the upstream GraphQL API and can keep it synchronised if it changes. @@ -107,7 +107,7 @@ The Ops team should also take reponsibility for monitoring the APIs for errors a Tyk offers the following features to support improper inventory management: - [Versioning]({{< ref "getting-started/key-concepts/versioning" >}}) allows newer versions of APIs to coexist with the older versions, facilitating deprecation and sunsetting. -- [Sunsetting]({{< ref "getting-started/key-concepts/versioning#sunsetting-api-versions" >}}) allows versions to be configured with an Expiry Time, ensuring that a version is not accessible after the expiry date. +- [Sunsetting]({{< ref "product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning#sunsetting-api-versions" >}}) allows versions to be configured with an Expiry Time, ensuring that a version is not accessible after the expiry date. - [Key expiry]({{< ref "basic-config-and-security/control-limit-traffic/key-expiry" >}}) ensures that access to an API is short lived, with a per key configurable Time to Live (TTL) for which a token remains valid before it expires. The implementation of key expiry, with a configurable Time To Live (TTL), mitigates the impact of compromised tokens by narrowing the window of vulnerability. Setting a TTL reduces the time frame during which a compromised token could be exploited, enhancing overall security. - Tyk Developer Portal catalogs APIs and facilitates granting access to them. Integrated with a CMDB it can help keep documentation updated. - [Tyk Analytics]({{< ref "tyk-dashboard-analytics" >}}) can help identify the stagnant APIs and used stale APIs. diff --git a/tyk-docs/content/basic-config-and-security/security/tls-and-ssl.md b/tyk-docs/content/basic-config-and-security/security/tls-and-ssl.md index d35948140e..fbe082fd28 100755 --- a/tyk-docs/content/basic-config-and-security/security/tls-and-ssl.md +++ b/tyk-docs/content/basic-config-and-security/security/tls-and-ssl.md @@ -279,6 +279,91 @@ You can set `proxy.transport.ssl_insecure_skip_verify` in an API definition to a If you include certificateID or certificate path to an API definition `certificates` field, Gateway will dynamically load this ceritficate for your custom domain, so you will not need to restart the process. You can do it from the Dashboard UI too, in the custom domain section. +#### Setup in Tyk Operator using Tyk Classic API Definition {#tyk-operator-classic} + +Let say the domain certificate is stored in secret named `my-test-tls` in the same namespace as this ApiDefinition resource `httpbin`. You can provide the domain certificate in `certificate_secret_names` field. Tyk Operator will help you retrieve the certificate from secret and upload it to Tyk. + +```yaml{linenos=true, linenostart=1, hl_lines=["10-11"]} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: httpbin +spec: + name: httpbin + use_keyless: true + protocol: https + listen_port: 8443 + certificate_secret_names: + - my-test-tls + active: true + proxy: + target_url: http://httpbin.org + listen_path: /httpbin + strip_listen_path: true +``` + +#### Define via Tyk Operator using Tyk OAS API Definition{#tyk-operator-oas} + +You can also manage custom domain certificates using Kubernetes secrets in Tyk OAS. + +Example of Defining Custom Domain Certificates + +```yaml{linenos=true, linenostart=1, hl_lines=["50-51"]} +# Secret is not created in this manifest. +# Please store custom domain certificate in a kubernetes TLS secret `custom-domain-secret`. +apiVersion: v1 +data: + test_oas.json: |- + { + "info": { + "title": "Petstore with custom domain", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "Petstore with custom domain", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://petstore.swagger.io/v2" + }, + "server": { + "listenPath": { + "value": "/petstore/", + "strip": true + } + } + } + } +kind: ConfigMap +metadata: + name: cm + namespace: default +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: petstore-with-customdomain +spec: + tykOAS: + configmapRef: + name: cm + namespace: default + keyName: test_oas.json + customDomain: + enabled: true + name: "buraksekili.dev" + certificatesRef: + - custom-domain-secret +``` + +This example shows how to enable a custom domain (`buraksekili.dev`) with a TLS certificate stored in a Kubernetes secret (`custom-domain-secret`). + ### Validate Hostname against Common Name From v2.9.3 you can force the validation of the hostname against the common name, both at the Gateway level via your `tyk.conf` and at the API level. diff --git a/tyk-docs/content/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens.md b/tyk-docs/content/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens.md deleted file mode 100644 index 40e18b64bb..0000000000 --- a/tyk-docs/content/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Revoke OAuth Tokens" -tags: ["Revoke", "Oauth"] -description: "How to revoke OAuth tokens in Tyk" -date: 2020-03-17 -menu: - main: - parent: "OAuth 2.0" -weight: 6 -aliases: - - basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens - - basic-config-and-security/security/your-apis/oauth2.0/revoke-oauth-tokens ---- - -This feature gives you (both developers and Dashboard users) the ability to revoke OAuth tokens. You can revoke specific tokens by providing the token and token hint (`access_token` or `refresh_token`) or you can revoke all OAuth Client tokens. - -You can revoke OAuth tokens via the following methods: - -* From a Gateway API endpoint (in compliance with https://tools.ietf.org/html/rfc7009). See the OAuth section of our [Swagger doc]({{< ref "tyk-gateway-api" >}}) for the Gateway REST API for details. -* Via a Dashboard API calls - [Revoke a token]({{< ref "tyk-apis/tyk-dashboard-api/oauth-key-management#revoke-a-single-oauth-client-token" >}}) and [revoke all tokens]({{< ref "tyk-apis/tyk-dashboard-api/oauth-key-management#revoke-all-oauth-client-tokens" >}}) -* Via a Portal Developer API calls - [Revoke a token]({{< ref "tyk-apis/tyk-portal-api/portal-developers#revoke-a-single-oauth-client-token" >}}) and [revoke all tokens]({{< ref "tyk-apis/tyk-portal-api/portal-developers#revoke-all-oauth-client-tokens" >}}) -* Via the Developer menu from the Tyk Dashboard - diff --git a/tyk-docs/content/configure/outbound-email-configuration.md b/tyk-docs/content/configure/outbound-email-configuration.md index 22f169623a..9a60f453bb 100755 --- a/tyk-docs/content/configure/outbound-email-configuration.md +++ b/tyk-docs/content/configure/outbound-email-configuration.md @@ -152,4 +152,4 @@ In an Self-Managed installation you have full access to the HTML template, allow {{< img src="/img/2.10/portal_manager_email_config.png" alt="Portal-Manager-Email" >}} 1. Select **Settings** from your **Dashboard** > **Portal Management** -2. From the **Portal manager email address** section, enter the email address of the person responsible for approving your developer API subscription requests. See [Portal Key Requests]({{< ref "tyk-developer-portal/tyk-portal-classic/portal-concepts#a-name-key-requests-a-key-requests" >}}) for more details. +2. From the **Portal manager email address** section, enter the email address of the person responsible for approving your developer API subscription requests. See [Portal Key Requests]({{< ref "tyk-developer-portal/tyk-portal-classic/portal-concepts#key-requests" >}}) for more details. diff --git a/tyk-docs/content/dashboard-admin-api/organisations.md b/tyk-docs/content/dashboard-admin-api/organisations.md index 3add58b795..89ac2a745c 100644 --- a/tyk-docs/content/dashboard-admin-api/organisations.md +++ b/tyk-docs/content/dashboard-admin-api/organisations.md @@ -13,10 +13,11 @@ aliases: **Important Note on Spelling:** -While our documentation now uses American English, the product itself, including UI, configuration fields, environment -variables, and APIs endpoints, retain British English spellings. When interacting with the product, please continue -using the British English spellings as they appear in the interface and API. (This means that for existing users nothing -has changed). +While our documentation now uses American English ((en-us)[https://www.andiamo.co.uk/resources/iso-language-codes/]), the product itself, including all user interfaces, configuration +fields, environment variables, and APIs, continues to use British English spellings. When interacting with the product, +please continue using the British English (en-gb) spellings as appear in the interface and API. This change does not affect +how you use the product; all functionality remains the same. +
**Example:** The API endpoint `/organisation` as shown throughout this page uses British spelling (with an 's' not 'z'). In all other instances, such as when describing or referring to this object in the documentation, we will use the @@ -269,4 +270,4 @@ admin-auth: 12345 "Message":"Org deleted", "Meta":"" } -``` \ No newline at end of file +``` diff --git a/tyk-docs/content/deployment-and-operations/tyk-cloud-platform/quick-start.md b/tyk-docs/content/deployment-and-operations/tyk-cloud-platform/quick-start.md index 3cb3a4b3a2..dd0849e7a0 100644 --- a/tyk-docs/content/deployment-and-operations/tyk-cloud-platform/quick-start.md +++ b/tyk-docs/content/deployment-and-operations/tyk-cloud-platform/quick-start.md @@ -9,95 +9,110 @@ menu: parent: "Tyk Cloud" --- -Welcome to the Tyk Cloud Platform! -This guide will lead you through the following steps: -1. Signing up with Tyk Cloud. -2. Establishing dedicated infrastructure within Tyk Cloud. -3. Creating and securing your first API using the Tyk Dashboard. +{{< note trial >}} +**Note** + +The Tyk Cloud trial is limited to 48 hours. After this period, your data will be deleted. +The Tyk Cloud trial does not include access to [Hybrid deployments]({{< ref "tyk-cloud/environments-deployments/hybrid-gateways" >}}) or the [Developer Portal]({{< ref "tyk-developer-portal/tyk-enterprise-developer-portal" >}}). +To try out these capabilities, please get in touch for a [guided evaluation](https://tyk.io/guided-evaluation/) with our team. +{{< /note >}} + +Welcome to the [Tyk Cloud Platform]({{< ref "tyk-cloud" >}})! +This guide will lead you through the following steps: +1. Signing up with [Tyk Cloud ]({{< ref "tyk-cloud" >}}). +2. Creating your first [API]({{< ref "getting-started/key-concepts/what-is-an-api-definition" >}}) using the [Tyk Dashboard]({{< ref "tyk-dashboard" >}}). +3. Setting up a [Policy]({{< ref "getting-started/key-concepts/what-is-a-security-policy" >}}) and Key to secure your APIs. + No installation required! ## Step 1: Sign Up for Tyk Cloud To begin your Tyk Cloud journey, follow these simple steps to sign up for an account: -* Navigate to the [Tyk Cloud sign up form](https://tyk.io/sign-up/#cloud). +* Navigate to the [Tyk Cloud sign up form](https://tyk.io/sign-up/). * Fill in the required information and click on "Next step: Create your password". -* Provide your email address and choose a robust password for your account. -* Select your home region, where your data will be securely stored. -* Opt for the "Set up API platform automatically" option (you can still personalize your setup later). +* Choose a robust password for your account. +* Select your home region, where your data will be securely stored and click on "Create Account". * Wait a couple of minutes and congratulations, your API platform was deployed! -By default, a cloud data plane will be deployed for you. You can also deploy hybrid data planes on your own infrastructure. +All the necessary infrastructure has been reserved for you for the next 48 hours, and you can now access the Tyk Dashboard to start creating your first API. ## Step 2: Get started with your first API with Tyk Dashboard +* Click on "Add API" to access the Tyk Dashboard directly. If you closed your window in the meantime, simply log in to your Tyk Cloud account and you will be redirected to the Tyk Dashboard. +{{< img src="/img/cloud/tyk-cloud-tyk-trial-dashboard.png" alt="Accessing Tyk Dashboard from Tyk Cloud" >}} +* Click the "Design from scratch" button to start the API definition creation process. -* Click on "Manage my APIs" to access the Tyk Dashboard directly. If you closed your window in the meantime, follow these steps to reach the Tyk Dashboard in Tyk Cloud: - * Go to the "Deployments" section under "OPERATIONS" on the left-hand side. - * Select the control plane that was deployed for you. - * Click on the "Manage APIs" button under "API MANAGER DASHBOARD" in the "Tyk component links" section to access the Tyk Dashboard. - -{{< img src="/img/cloud/tyk-cloud-tyk-onboarding-dashboard.png" alt="Accessing Tyk Dashboard from Tyk Cloud" width="500px" >}} - -* Click the "Design new API" button to start the API definition creation process. - -{{< img src="/img/cloud/tyk-cloud-create-api.png" alt="Accessing Creating an API" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-create-api.png" alt="Accessing Creating an API" >}} * Give your API a name - We’ll use “httpbin” for the rest of this quick start. * In the "Type" section, please select "HTTP". +* In the "API Type" section, please select "OpenAPI". * Keep https://httpbin.org/ as the upstream URL. -* Finally, click on the button "CONFIGURE API". -{{< img src="/img/cloud/create-api-tyk-cloud.png" alt="Accessing Creating an API" width="500px" >}} +* Finally, click on the button "CONFIGURE API". +{{< img src="/img/cloud/create-api-tyk-cloud.png" alt="Designing an API" >}} * Select to which gateway you want to deploy this API, select the "edge" tags to deploy to the cloud data plane. -{{< img src="/img/cloud/tyk-cloud-select-cloud-gateway.png" alt="Accessing Creating an API" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-select-cloud-gateway.png" alt="Selecting Cloud Data Planes for an API" width="500px" >}} +* Select "Active" in the "Gateway Status" section. +* Select "External" in the "Access" section. + +{{< img src="/img/cloud/tyk-cloud-save-api.png" alt="Saving an API" >}} + +* Enable "Authentication" and select "Auth Token" in the dropdown. +* Tick the "Use header value" checkbox and add "Authorization" as the header name. * Customize your API settings, including authentication, rate limits, and caching, as per your requirements. + +{{< img src="/img/cloud/tyk-cloud-api-auth.png" alt="Authenticating an API" >}} + * Click "Save" to create your API. Congratulations! You've just set up your first API. + + ## Step 3: Set up a Policy and Key In this step, we will guide you through the process of creating a policy and key system to secure your APIs. #### Create a Policy: -* Click on "Policies" under the "System Management" section on the left-hand side. +* Click on "Policies" under the "API Security" section on the left-hand side. * Click on the button "ADD POLICY". -{{< img src="/img/cloud/tyk-cloud-add-policy.png" alt="Policy section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-add-policy.png" alt="Policy section" >}} * In the "Access Rights" section, please select "httpbin". -{{< img src="/img/cloud/tyk-cloud-policy-access-rights.png" alt="Policy section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-policy-access-rights.png" alt="Add policy access rights" >}} * Go to the "Configurations" section and add a Policy Name (e.g., 'Default Policy httpbin'). * Under the "Settings" section, add an expiry date (e.g., '2 weeks'). * Click on the button "Create Policy". -{{< img src="/img/cloud/tyk-cloud-policy-configurations.png" alt="Policy section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-policy-configurations.png" alt="Policy configuration" >}} #### Create a Key: -* Click on "Keys" under the "System Management" section on the left-hand side. +* Click on "Keys" under the "API Security" section on the left-hand side. * Click on the button "ADD KEY". -{{< img src="/img/cloud/tyk-cloud-add-key.png" alt="Key section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-add-key.png" alt="Key section" >}} * In the "Access Rights" section, please select the previously created Policy (e.g., 'Default Policy httpbin'). -{{< img src="/img/cloud/tyk-cloud-key-access-rights.png" alt="Key section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-key-access-rights.png" alt="Add key access rights" >}} * Go to the "Configurations" section and give your key an alias (e.g., 'platform_team'). * Click on the button "Create Key". -{{< img src="/img/cloud/tyk-cloud-key-configurations.png" alt="Key section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-key-configurations.png" alt="Key configuration" >}} Congratulations! Your key has now been created! -{{< img src="/img/cloud/tyk-cloud-copy-key-url.png" alt="Key section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-copy-key-url.png" alt="Copy Key ID" width="500px" >}} Note: Please copy the "Key ID" as it will be necessary when testing the API. @@ -109,31 +124,31 @@ Now that your API is created, you can explore and manage it through the Tyk Dash After creating a Policy and a Key, proceed to "Postman" to test and interact with the API you've just created. -* Click on "APIs" under the "System Management" section on the left-hand side. +* Click on "APIs" under the "API Management" section on the left-hand side. * Select the previously created API (e.g., 'httpbin'). * Copy the API URL. -{{< img src="/img/cloud/tyk-cloud-copy-api-url.png" alt="API section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-save-api.png" alt="API section" >}} * In Postman, choose "Send an API request". -{{< img src="/img/cloud/tyk-cloud-postman-send-api-request.png" alt="Postman section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-postman-send-api-request.png" alt="Postman section" >}} * Enter the copied URL and add "https://" at the beginning. -{{< img src="/img/cloud/tyk-cloud-postman-enter-url.png" alt="Postman section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-postman-enter-url.png" alt="Postman section" >}} * In the Tyk Gateway Dashboard, navigate to "Keys" under the "System Management" section on the left-hand side. * Copy the previously created "Key ID". -{{< img src="/img/cloud/tyk-cloud-copy-key-url.png" alt="Key section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-copy-key-url.png" alt="Copy key ID" width="500px" >}} * On Postman, navigate to the "Authorization" tab. * Change the authentication type from "Inherit auth from parent" to "API Key". * Paste the "Key ID" into the "Value" field. * Click the "Send" button to submit the request. -{{< img src="/img/cloud/tyk-cloud-postman-authorization.png" alt="Key section" width="500px" >}} +{{< img src="/img/cloud/tyk-cloud-postman-authorization.png" alt="Key section" >}} #### Curl @@ -143,18 +158,17 @@ To test and interact with the API, you can also use the curl command: curl -X GET "${API URL}" -H "Authorization: ${KEY ID}" ``` -**Example:** +**Example:** ``` 'curl -X GET "https://corporate-bakery-gw.aws-euw2.cloud-ara.tyk.io/httpbin/" -H "Authorization: eyJvcmciOiI2NWIxMmYxMWJkZjg0YTAwMDEzY2UzZDkiLCJpZCI6IjRmYzM2OTc4NDg1MzQ3NzRiMDhhZ mEyNTVkNzIxM2NkIiwiaCI6Im11cm11cjEyOCJ9"' ``` -{{< img src="/img/cloud/tyk-cloud-cmd-example.png" alt="Key section" width="800px" >}} +{{< img src="/img/cloud/tyk-cloud-cmd-example.png" alt="Key section" >}} ## Next Steps This quick start guide has covered the essentials to get you up and running with Tyk Cloud. As you explore further, you might want to learn more about [creating APIs]({{< ref "../../getting-started/create-api" >}}) and [importing APIs definition]({{< ref "../../getting-started/import-apis" >}}) in Tyk Dashboard or [managing the infrastructure and environments]({{< ref "../../tyk-cloud/environments-&-deployments/managing-organisations" >}}) in Tyk Cloud. - - +Contact us for a [guided tour of Tyk Cloud](https://tyk.io/guided-evaluation/) or to discuss your specific requirements. We're here to help you get the most out of Tyk Cloud. diff --git a/tyk-docs/content/developer-support/backups/backup-apis-and-policies.md b/tyk-docs/content/developer-support/backups/backup-apis-and-policies.md index ee03bce141..db871c557b 100644 --- a/tyk-docs/content/developer-support/backups/backup-apis-and-policies.md +++ b/tyk-docs/content/developer-support/backups/backup-apis-and-policies.md @@ -6,7 +6,7 @@ description: "How to backup APIs and Policies with Tyk Dashboard" --- Backing up Tyk APIs and Policies is crucial for ensuring business continuity and data integrity. It safeguards against accidental data loss, system failures or corruption. This provides the opportunity to rollback to a stable state during upgrades or migrations, allowing you to restore configurations to a previous state to prevent disruptions with your API infrastructure. -If you are using Self Managed deployment then we recommend that you use [Tyk Sync]({{< ref "/product-stack/tyk-sync/overview" >}}) to backup your Tyk APIs and policies. +If you are using Self Managed deployment then we recommend that you use [Tyk Sync]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}) to backup your Tyk APIs and policies. ## Export And Restore APIs and Policies diff --git a/tyk-docs/content/developer-support/documentation-projects/inclusive-naming.md b/tyk-docs/content/developer-support/documentation-projects/inclusive-naming.md index 8f9f301cdd..68b35d99ee 100644 --- a/tyk-docs/content/developer-support/documentation-projects/inclusive-naming.md +++ b/tyk-docs/content/developer-support/documentation-projects/inclusive-naming.md @@ -69,7 +69,7 @@ For your records, the following sections highlight the existing *INI tier 1 word #### Tyk Gateway ##### Config parameters -- [allow_master_keys]({{< ref "tyk-dashboard/configuration#allow_master_keys" >}}) +- [allow_master_keys]({{< ref "tyk-oss-gateway/configuration#allow_master_keys" >}}) - [analytics_storage.master_name]({{< ref "tyk-oss-gateway/configuration#analytics_storagemaster_name" >}}) - [cache_storage.master_name]({{< ref "tyk-oss-gateway/configuration#cache_storagemaster_name" >}}) - [storage.master_name]({{< ref "tyk-oss-gateway/configuration#storagemaster_name" >}}) @@ -83,7 +83,7 @@ For your records, the following sections highlight the existing *INI tier 1 word The [Tyk Gateway OpenAPI Document](https://github.com/TykTechnologies/tyk-docs/blob/master/tyk-docs/assets/others/gateway-swagger.yml) (Tyk Gateway swagger), includes references to the following Tyk Classic API Definition parameters: -- [version_data.versions.{version-name}.extended_paths.black_list]({{< ref "product-stack/tyk-gateway/middleware/block-list-tyk-classic#configuring-the-block-list-in-the-tyk-classic-api-definition" >}}). There is also a parameter with equivalent functionality under the `paths` object (`version_data.versions.{version_name}.paths.black_list`). +- [version_data.versions.{version-name}.extended_paths.black_list]({{< ref "product-stack/tyk-gateway/middleware/block-list-tyk-classic#tyk-classic" >}}). There is also a parameter with equivalent functionality under the `paths` object (`version_data.versions.{version_name}.paths.black_list`). - [version_data.versions.{version-name}.extended_paths.white_list]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-classic#configuring-the-allow-list-in-the-tyk-classic-api-definition" >}}). There is also a parameter with equivalent functionality under the `paths` object (`version_data.versions.{version_name}.paths.while_list`). diff --git a/tyk-docs/content/developer-support/release-notes/cloud.md b/tyk-docs/content/developer-support/release-notes/cloud.md new file mode 100644 index 0000000000..2842615ed0 --- /dev/null +++ b/tyk-docs/content/developer-support/release-notes/cloud.md @@ -0,0 +1,199 @@ +--- +title: Tyk Cloud Release Notes +date: xx +description: "Release notes documenting updates, enhancements, and changes for Tyk Cloud" +tags: ["Tyk Cloud", "Release notes", "v1.23", "1.23.0", "changelog"] +--- + +## 1.23.0 Release Notes + +### Release Date 14 of November 2024 + +### Release Highlights + +This Tyk Cloud update introduces features that improve both flexibility in plugin management and user onboarding. Now, [Mserv]({{< ref "tyk-cloud/configuration-options/using-plugins/uploading-bundle" >}}), supports **multiple plugin bundles**, allowing greater customization and easier deployment of plugin configurations. Additionally, we added an **embedded product tour** to enhance the deployment experience, offering a guided walkthrough of Tyk Dashboard’s features, ideal for users familiarizing themselves with the platform during onboarding. + +For a comprehensive list of improvements and fixes, please check the detailed [changelog]({{< ref "#Changelog-v1.23.0">}}) below. + +### Breaking Changes + + +There are no breaking changes in this release + +### Downloads + +- [latest version of Mserv](https://github.com/TykTechnologies/mserv/releases/latest) + +### Deprecations + +There are no deprecations in this release + +### Changelog {#Changelog-v1.23.0} + + +#### Added + + +
    +
  • +
    + + Contact form for POC requests on trial expiration + + A HubSpot contact form has been added in both Tyk Cloud and Dashboard to facilitate contacting Tyk for a Proof of Concept (PoC) when a trial expires. This new form makes it easier to connect with our team and explore further options once + the trial period ends. +
    +
  • + +
  • +
    + + Support for bundles with multiple plugins + + Tyk Cloud now supports multiple plugins in a bundle, allowing users to manage and deploy various binaries for the same plugin bundle. This enhancement provides greater flexibility in plugin configuration and deployment using `mservctl`. + within MServ. +
    +
  • + +
  • +
    + + Embedded product tour during deployment wait time + + An embedded interactive product tour has been added within the deployment screen to guide users through the Tyk Dashboard while they wait for their free trial on-boarding to complete. This tour provides an overview of key features, helping users explore what they can do on Tyk Cloud during their trial. +
    +
  • + + + +
+ +#### Changed + + +
    +
  • +
    + + UX Improvement: Redirect to activity by API section from the monitoring page + + Users are now redirected to the "Activity by API" section in the Tyk Dashboard upon clicking on the Control Plane (CP) name within the Cloud Monitoring page. This update provides a more seamless + transition for users needing detailed activity insights directly from the monitoring interface. +
    +
  • + +
+ +#### Fixed + + +
    +
  • +
    + + "Add Portal Deployment" widget hidden for team members + + The "Add Portal Deployment" widget on the Environment page is now hidden for team members, providing a cleaner and more tailored UI experience by limiting portal management options to authorized roles + only. +
    +
  • + +
  • +
    + + "Delete User" button hidden for org admin on Org+Billing admin profiles + + The "Delete User" button for Org Admins has been hidden when viewing Org+Billing Admin profiles on the Teams page. Previously, Org Admins could see this button but would encounter an error message, "operation on this class is not permitted," when attempting deletion. +
    +
  • + +
  • +
    + + Standardized behavior for "Upgrade" and "Account & Billing" buttons + + The behavior for accessing the billing app through the 'Upgrade' and 'Account & Billing' buttons has been standardized. Previously, clicking the 'Upgrade' button opened the billing app in a new tab, while 'Account & Billing' opened it in the same tab. Now, both buttons open the billing app consistently in the same tab. +
    +
  • + + +
  • +
    + + Direct access to "/password-reset" page now accessible without redirect + +Fixed an issue where accessing the /password-reset page directly redirected users to the login page. Now, users can navigate directly to the /password-reset page without being redirected, providing a consistent experience for password-reset requests regardless of how the page is accessed. +
    +
  • + +
  • +
    + + Billing sidebar display corrected when no subscriptions are present + +We have resolved a display issue in the billing sidebar that occurred when no subscriptions were active. Now, the sidebar menu displays correctly regardless of subscription status, providing a consistent and clear UI for all users. +
    +
  • + +
  • +
    + + Fix for hybrid codes visibility logic to manage node data retention + +This update addresses a critical bug in the Hybrid nodes visibility logic, which previously retained all connected node data for the Hybrid Data Planes indefinitely. The fix ensures that we only contains records from the last 7 days. This enhancement improves system performance at all stages within the Tyk Cloud UI for organizations with Hybrid Data Planes, especially those with multiple connected gateways. + +
    +
  • + +
  • +
    + + Improve stability for paid customers + +We have enhanced separation between free-trial and paid deployments to improve resilience and stability. +
    +
  • + + +
+ +#### Security Fixes + +
    +
  • +
    + + Bumped dependencies in Tyk Cloud components + +Dependencies across all Tyk Cloud components have been updated to address reported security issues. This update ensures compliance with security standards, aligning the project with best practices for secure dependency management. +
    +
  • +
+ + +### FAQ +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. diff --git a/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas.md b/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas.md index 36efa6caf3..8cbc2e18aa 100644 --- a/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas.md +++ b/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas.md @@ -39,12 +39,12 @@ Follow our guide for deploying your [Go plugins on Tyk Cloud]({{< ref "/develope ##### Gateway Versions < 4.1.0. 1. Proceed with [upgrading your Tyk Data Plane (Gateway)](#upgrading-cloud-data-planes) -2. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles#per-api--local-parameters" >}}) field in the API Definitions of all APIs that use your plugin. The field should be updated to use the new bundle file containing your upgrade plugin. +2. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles" >}}) field in the API Definitions of all APIs that use your plugin. The field should be updated to use the new bundle file containing your upgrade plugin. 3. Validate that your plugin is working per your expectations. ##### Gateway Versions >= 4.1.0 -1. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles#per-api--local-parameters" >}}) field in the API Definitions of all APIs that use your plugin. The field should be updated to use the new bundle file containing your upgraded plugin. +1. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles" >}}) field in the API Definitions of all APIs that use your plugin. The field should be updated to use the new bundle file containing your upgraded plugin. 2. Validate that your plugin is working per your expectations as at this stage, your Gateway will be running the plugin for your current version still. diff --git a/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin.md b/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin.md index a453b507cb..b30e689f90 100644 --- a/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin.md +++ b/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin.md @@ -12,8 +12,8 @@ This guide explains how to deploy your custom Go plugins on Tyk Cloud: | Path | Current Version | Target Version | | --- | --- | --- | -| [Path 1](#path1) | < 4.1.0 | < 4.1.0 | -| [Path 2](#path2) | >= 4.1.0 | >= 4.2.0 | +| [Path 1](#path-1) | < 4.1.0 | < 4.1.0 | +| [Path 2](#path-2) | >= 4.1.0 | >= 4.2.0 | ## Path 1 - Current Version < 4.1.0 and Target Version < 4.1.0 {#path-1} diff --git a/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid.md b/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid.md index ff5376e820..b6b2210244 100644 --- a/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid.md +++ b/tyk-docs/content/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid.md @@ -45,14 +45,14 @@ Follow our guide for [upgrading your Go plugins on Tyk Cloud]({{< ref "/develope ### Gateway Versions < 4.1.0 1. Proceed with upgrading your [Tyk Data Plane Hybrid Gateways](#upgrading-data-plane-hybrid-gateways). -2. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles#per-api--local-parameters" >}}) +2. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles" >}}) field in the API Definitions of all APIs that use your plugin. The field should be updated to use the new bundle file containing your upgrade plugin. 3. Validate that your plugin is working per your expectations. ### Gateway Versions >= 4.1.0 -1. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles#per-api--local-parameters" >}}) +1. Update the [custom_middleware_bundle]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles" >}}) field in the API Definitions of all APIs that use your plugin. The field should be updated to use the new bundle file containing your upgraded plugin. 2. Validate that your plugin is working per your expectations as at this stage, your Gateway will be running the plugin diff --git a/tyk-docs/content/developer-support/upgrading-tyk/preparations/upgrade-guidelines.md b/tyk-docs/content/developer-support/upgrading-tyk/preparations/upgrade-guidelines.md index 934b6f6137..a5fbe12dca 100644 --- a/tyk-docs/content/developer-support/upgrading-tyk/preparations/upgrade-guidelines.md +++ b/tyk-docs/content/developer-support/upgrading-tyk/preparations/upgrade-guidelines.md @@ -11,7 +11,7 @@ When considering upgrading your current configuration to a new Tyk release, we r Which strategy do you intend to use? - - If following the [Blue-Green upgrade]({{< ref "developer-support/upgrading-tyk/preparations/upgrade-strategies#blue-green" >}}) strategy, has the green environment been configured and verified as production-ready? + - If following the [Blue-Green upgrade]({{< ref "developer-support/upgrading-tyk/preparations/upgrade-strategies#blue-green-upgrade" >}}) strategy, has the green environment been configured and verified as production-ready? - If pursuing the [Rolling upgrade]({{< ref "developer-support/upgrading-tyk/preparations/upgrade-strategies#rolling-upgrade" >}}) strategy, do all Tyk components have a second instance? - If you'll have downtime, estimate the expected duration of the upgrade process and plan for potential downtime. diff --git a/tyk-docs/content/frequently-asked-questions/capping-analytics-data-storage.md b/tyk-docs/content/frequently-asked-questions/capping-analytics-data-storage.md index 68f1d1a94a..ad10332638 100755 --- a/tyk-docs/content/frequently-asked-questions/capping-analytics-data-storage.md +++ b/tyk-docs/content/frequently-asked-questions/capping-analytics-data-storage.md @@ -11,9 +11,9 @@ weight: 0 What methods are available to enable me to manage my MongoDB analytics storage? -[Time Based Caps]({{< ref "tyk-stack/tyk-manager/analytics/capping-analytics-data-storage.md#a-name-time-based-cap-a-time-based-cap" >}}) +[Time Based Caps]({{< ref "tyk-stack/tyk-manager/analytics/capping-analytics-data-storage.md#time-based-cap-in-single-tenant-environments" >}}) -[Size Based Caps]({{< ref "tyk-stack/tyk-manager/analytics/capping-analytics-data-storage.md#a-name-size-based-cap-a-size-based-cap" >}}) +[Size Based Caps]({{< ref "tyk-stack/tyk-manager/analytics/capping-analytics-data-storage.md#size-based-cap" >}}) {{< note success >}} **Note** diff --git a/tyk-docs/content/frequently-asked-questions/how-to-backup-tyk-cloud-deployment.md b/tyk-docs/content/frequently-asked-questions/how-to-backup-tyk-cloud-deployment.md index 875560611a..f72444c4dd 100644 --- a/tyk-docs/content/frequently-asked-questions/how-to-backup-tyk-cloud-deployment.md +++ b/tyk-docs/content/frequently-asked-questions/how-to-backup-tyk-cloud-deployment.md @@ -13,4 +13,4 @@ To track changes in Dashboard configurations, please submit a [support ticket](h #### If there's a configuration error or an unwanted change, can I easily revert to a previous API or Policy configuration? What are the options or best practices for effective rollbacks? -You can configure [Tyk-Sync]({{< ref "/product-stack/tyk-sync/overview" >}}) to synchronise APIs and Policies with any version control system, like GitHub or GitLab and use it to perform roll back. Keys are not synchronised with Tyk Sync. +You can configure [Tyk-Sync]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}) to synchronise APIs and Policies with any version control system, like GitHub or GitLab and use it to perform roll back. Keys are not synchronised with Tyk Sync. diff --git a/tyk-docs/content/frequently-asked-questions/how-to-connect-to-documentdb.md b/tyk-docs/content/frequently-asked-questions/how-to-connect-to-documentdb.md index a87653d8c7..28798fd3d2 100644 --- a/tyk-docs/content/frequently-asked-questions/how-to-connect-to-documentdb.md +++ b/tyk-docs/content/frequently-asked-questions/how-to-connect-to-documentdb.md @@ -9,7 +9,7 @@ weight: 0 As AWS DocumentDB runs with TLS enabled, we require a way to run it without disabling the TLS verification. DocumentDB uses self-signed certs for verification, and provides a bundle with root certificates for this purpose, so we need a way to load this bundle. -Additionally DocumentDB can't be exposed to the local machine outside of the Amazon Virtual Private Cloud (VPC), which means that even if verification is turned on, it will always fail since if we use a SSH tunnel or a similar method, the domain will differ from the original. Also, it can have [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}) enabled. +Additionally DocumentDB can't be exposed to the local machine outside of the Amazon Virtual Private Cloud (VPC), which means that even if verification is turned on, it will always fail since if we use a SSH tunnel or a similar method, the domain will differ from the original. Also, it can have [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) enabled. So, in order to support it, we provide the following variables for both our [Tyk Analytics Dashboard]({{< ref "tyk-dashboard/configuration" >}}) and [Tyk Pump]({{< ref "tyk-pump/configuration" >}}): diff --git a/tyk-docs/content/getting-started/configure-first-api.md b/tyk-docs/content/getting-started/configure-first-api.md new file mode 100644 index 0000000000..4d7dca0d30 --- /dev/null +++ b/tyk-docs/content/getting-started/configure-first-api.md @@ -0,0 +1,177 @@ +--- +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 Dashboard. +- **Create API keys**: Generate API keys and assign them to your APIs for secure access. +- **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](/getting-started/create-account). +- Admin access to the Tyk Dashboard. +- (optional) A backend service that your API will proxy (e.g., a RESTful API) - or you can use the httpbin service. + + +## Set Up Your API + +Start by creating a new API in Tyk Cloud: + +1. **Log in to the Tyk Dashboard**. +2. **Navigate to APIs** and click **Add New API** or **Design From Scratch** button. + + {{< img src="/img/getting-started/create-account-design-from-scratch.png" alt="Create New API" >}} + +3. **Configure API Details**: + - **API Name**: Name your API (e.g., `My First API`). + - **API Type**: Choose from HTTP, TCP, GraphQL, UDG, or Federation, depending on your use case. + - **API Style**: Select OpenAPI for standardized HTTP APIs or Classic for flexible configurations and non-HTTP APIs. + - **Target URL**: Provide the URL of your backend service (e.g., `http://httpbin.org`). + + {{< img src="/img/getting-started/create-new-api.png" alt="Create New API" >}} + +4. **Connect to Your Desired Gateway**: + + You will be prompted to choose between a Gateway and an Edge Gateway, which are already created for you. + - `Edge Gateways` generally provide low-latency, regionally distributed API processing, ideal for a global user base. + - `Regular Gateways` centralize API management, offering comprehensive API processing without additional edge optimizations. + + {{< img src="/img/getting-started/apis-connect-gateways.png" alt="Connect Gateways" >}} + +5. **Configure your API Settings**: + + - **Expiration Date**: An optional config that allows you to set an expiry date for this API, where access will expire after this date. This can be edited at any time. + - **Gateway Status**: Setting this to `Active` will publish your API and make it public. When in the `Disabled` state, your API will stay in a draft state until you are ready to publish it. This is a required field, for this guide we will set it to `Active`. + - **Access**: Your API can be set to either `Internal` or `External`, determining whether you want to keep your API accessible only through Tyk or to external services, respectively. This is a required field, for this guide we will set it to `External`. + +{{< img src="/img/getting-started/apis-configure-settings-1.png" alt="Configure Settings" >}} + +Scrolling down, In the **Upstream** section you can configure settings to control the behaviour of your upstream APIs. +{{< note success >}} + **Note** + + These are not necessary to add now but they are good to explore. + {{< /note >}} + + - **API Rate Limiting**: Set limits on the number of requests (e.g., 100 requests per minute) to control usage and prevent abuse. + - **Service Discovery**: Enable dynamic backend discovery with tools like Consul or Kubernetes, ensuring traffic is directed to healthy instances. + - **Upstream Client Certificates**: Use client certificates for secure backend connections via mutual TLS (mTLS), adding an extra layer of security. + - **Certificate Public Key Pinning**: Pin specific public keys to validate certificate authenticity and prevent unauthorized access. + + {{< img src="/img/getting-started/apis-configure-settings-2.png" alt="Configure Settings cont" >}} + +6. **Configuring the Server section**: + + In the section you can configure Tyk Gateway related settings. Below are some important configurations. + - **Listen Path**: This is the `path` Tyk API will use to proxy your API requests. So a request made to this URL `https:///` will be proxied to the upstream URL configured above. + - **Authentication**: Choose the desired authentication method (e.g., **API Key**). + + {{< img src="/img/getting-started/create-api-select-authentication.png" alt="Add Authentication" >}} + +Save your API configuration once complete. + +7. **Copy the API URL** + - When you save the API configuration, Tyk generates a unique Gateway URL that can be used to access your API. Copy this URL, we will use it later during testing. + + {{< img src="/img/getting-started/api-url-provided-by-tyk.png" alt="Tyk API Gateway URL" >}} + +## 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 **API Security** section and **Click "Add Key"** to generate a new key. + + {{< img src="/img/getting-started/create-api-security-key.png" alt="Create API Key" >}} + +2. **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 the `My First API` which we created in the previous step. You can: + - Scroll through your **API Name list**, + - Use the **Search field** or **Group by Authentication Type** to filter APIs. + - Leave all other options at their default settings. + + {{< img src="/img/getting-started/configure-api-key.png" alt="Configure API Key" >}} + +4. Click on the **Configuration Tab** and add the below 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 ID** to your clipboard and save it for future reference as it will not be shown again. And that should result in a successfully generated key! + + {{< img src="/img/getting-started/apis-keys-success.png" alt="Key Success" >}} + + + {{< note success >}} + **Note** + + When creating a key in Tyk, you should copy the key ID. This is the identifier you’ll need for referencing the key in your API requests or configurations. The hash is generally used internally by Tyk and is not required for most user-facing tasks. + + {{< /note >}} + + +## Test Your API + +After configuring and deploying your API, it’s essential to test it to ensure it performs as expected. Follow these steps to verify your API setup: + +1. **Retrieve Your API Key**: + - Copy the **API Key ID** from the previous step as you'll need it to authenticate requests to your API. + +2. **Make a Test Request**: + - Use a tool like [Postman](https://www.postman.com/) or `curl` to send a request to your API endpoint. + - Example request using `curl`: + ```bash + curl -H "Authorization: {YOUR_API_KEY_ID}" https://{YOUR_TYK_GATEWAY_URL}/my-first-api/ + ``` + - Replace `{YOUR_API_KEY_ID}` with the actual key ID and `{YOUR_TYK_GATEWAY_URL}` with your gateway's URL. + - Send the request and you should get HTML output with `200` status code. + + +## Monitor Traffic and Analyze API Performance + +With your API live, monitor its traffic and analyze performance: + +### View Traffic Analytics + +1. **Navigate to the Monitoring Section** in the dashboard. And click on **Activity Overview**. +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. + +{{< img src="/img/getting-started/apis-analytics.png" alt="APIs Analytics" >}} + + +### View Log Data + +1. **Go to the Activity 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. + +{{< img src="/img/getting-started/api-activity-logs.png" alt="APIs Logs" >}} + + +## Next Steps + +Congratulations! You've successfully created, secured, and deployed your first API in Tyk Cloud. Next, explore more advanced features like [rate-limiting]({{< ref "getting-started/key-concepts/rate-limiting" >}}) or [OAuth2]({{< ref "api-management/authentication-authorization#set-up-oauth-20-authorization" >}}). + +Explore more features in your [dashboard]({{< ref "getting-started/using-tyk-dashboard" >}}) to optimize and scale your API offerings. \ No newline at end of file diff --git a/tyk-docs/content/getting-started/create-account.md b/tyk-docs/content/getting-started/create-account.md new file mode 100644 index 0000000000..18b45ee5b8 --- /dev/null +++ b/tyk-docs/content/getting-started/create-account.md @@ -0,0 +1,138 @@ +--- +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 +aliases: + - /tyk-cloud/initial-portal-config +--- + + +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 48 hour 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. + +{{< img src="/img/getting-started/create-account-start-trial.png" alt="Start Trial" >}} + + +### 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 + + +{{< img src="/img/getting-started/create-account-free-trial-info.png" alt="Create Account Free Trial" >}} + + +### Step 4: Check Your Email +Check your email inbox for a verification message from Tyk. Click the verification link to confirm your email address. + +{{< img src="/img/getting-started/create-account-resend-email.png" alt="Create Account Resend Email" >}} + + +In your inbox, you should find this email (press "Log in"): + +{{< img src="/img/getting-started/create-account-view-email.png" alt="Create Account View Email" >}} + + + +### Step 5: Create Password +After finding the email and logging in, set your password, organization name (any name which you want to represent your environment), and control plane region (select the control plane which is closest to your location). + +{{< img src="/img/getting-started/create-account-set-password.png" alt="Create Account Set Password" >}} + + + +### Step 6: Deploy and Take Tutorial +Once your password, organization, and control plane are setup, continue to the next page where your environment will be deployed. This may take 2-5 minutes, you can peruse the tutorial to learn how to use the dashboard while you wait. + +{{< img src="/img/getting-started/create-account-deploy-tutorial.png" alt="Create Account Deploy Tutorial" >}} + + +After a few minutes, the "Add API" button should appear. Select it and you will be taken to the dashboard. + +{{< img src="/img/getting-started/create-account-add-api.png" alt="Create Account Add API" >}} + + +### Step 7: Start Creating APIs +Finally, you will be taken to the Tyk Dashboard. Select "Design From Scratch" and continue on to [our tutorial](/getting-started/configure-first-api) to learn how to setup and secure your APIs. + +{{< img src="/img/getting-started/create-account-design-from-scratch.png" alt="Create Account Design From Scratch" >}} + +## What Happens Next? + +Once you've created your account, Tyk will automatically: + +- **Assigns Billing Admin Role**: You are designated as the Billing Admin for your organization, granting you full access to manage billing details and subscription plans. + +- **Activates 48-Hour Free Trial**: Your account is enrolled in a 48-hour free trial of Tyk Cloud, allowing you to explore its features and capabilities without immediate commitment. + +- **Creates Initial Organization**: An organization is automatically established, serving as the primary entity for managing your environments, APIs, and users. + +- **Establishes Default Team**: A default team is set up within your organization, providing a collaborative space for managing APIs and related resources. + +- **Deploys Control Plane**: A control plane is deployed in your selected home region, centralizing the management of your APIs, policies, and configurations. + +- **Deploys Gateway**: A Tyk Gateway is deployed to manage and route incoming API traffic, handling authentication, rate limiting, and analytics to ensure secure, reliable access. + +For certain Tyk Cloud configurations, you may also get an Edge Gateway deployment option, allowing gateways to be positioned closer to users for lower latency and optimized routing. This is ideal for multi-region or global API setups but may require additional configuration or regional deployment options through Tyk’s Multi Data Centre Bridge (MDCB) if set up manually. + + + +{{< note success >}} +**Note** + +After the 48-hour free trial of Tyk Cloud ends, your infrastructure (control plane, gateway, and organization settings) will be deactivated unless you upgrade to a paid plan. Here’s what happens: + +- Limited Access: Control plane access and API traffic routing through the gateway will be suspended. +- Data Retention: Your configurations (APIs, policies, user settings) are temporarily retained, allowing you to pick up where you left off if you upgrade within a grace period. +- Billing Admin Role: You’ll still be able to manage billing and subscription options. + +Upgrading restores full functionality, letting you continue from where you paused. To avoid disruption, consider exploring paid plans before your trial ends. + +{{< /note >}} + +## Next Steps + +Now that you have your Tyk account set up, here are some recommended next steps: + +- **Create Your First API**: Follow our guide on [setting up and securing your first API]({{< ref "getting-started/configure-first-api" >}}). +- **Explore the Dashboard**: Familiarize yourself with the [Tyk Cloud interface]({{< ref "tyk-dashboard" >}}). + +## 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/getting-started/create-api.md b/tyk-docs/content/getting-started/create-api.md index e71c3f17e3..d74bc5234f 100644 --- a/tyk-docs/content/getting-started/create-api.md +++ b/tyk-docs/content/getting-started/create-api.md @@ -69,7 +69,7 @@ Want to learn more from one of our team of engineers? In Tyk v4.1 we introduced support for APIs defined according to the [OpenAPI Specification v3.0.3](https://spec.openapis.org/oas/v3.0.3) (OAS). This introduces a standard way to describe the vendor-agnostic elements of an API (the OpenAPI Definition, stored as an OpenAPI Document); we take this and add Tyk-specific configuration options to create the *Tyk OAS API Definition*. You can import your own OpenAPI document and Tyk will use this to generate the Tyk OAS API Definition. -For a detailed tutorial on using OAS with Tyk Gateway, check out our guide to [creating a Tyk OAS API Definition]({{< ref "getting-started/using-oas-definitions/create-an-oas-api#tutorial-create-an-oas-api-with-the-tyk-gateway-api" >}}). +For a detailed tutorial on using OAS with Tyk Gateway, check out our guide to [creating a Tyk OAS API Definition]({{< ref "getting-started/using-oas-definitions/create-an-oas-api#tutorial-1-create-a-tyk-oas-api-using-the-tyk-gateway-api" >}}). {{< /note >}} diff --git a/tyk-docs/content/getting-started/key-concepts/authentication.md b/tyk-docs/content/getting-started/key-concepts/authentication.md index 3571d95bc3..f6912e53c5 100644 --- a/tyk-docs/content/getting-started/key-concepts/authentication.md +++ b/tyk-docs/content/getting-started/key-concepts/authentication.md @@ -142,7 +142,7 @@ The basic idea here is that you can create a key based on a provided certificate ### Basic Authentication -Having the `http` type as the `securityScheme` defined in OAS API Definition, with the schema field set to basic, means that the *Tyk Gateway* uses basic authentication as the protection mechanism. It expects an access key in the same way as any other access method. For more information see the [Basic Authentication documentation]({{< ref "basic-config-and-security/security/authentication-authorization/basic-auth" >}}). +Having the `http` type as the `securityScheme` defined in OAS API Definition, with the schema field set to basic, means that the *Tyk Gateway* uses basic authentication as the protection mechanism. It expects an access key in the same way as any other access method. For more information see the [Basic Authentication documentation]({{< ref "/api-management/authentication-authorization#use-basic-authentication" >}}). Example: @@ -215,7 +215,7 @@ securitySchemes: { All you need to do in the Tyk configuration is to enable the authentication and specify the header details. -For more configuration options check the [JWT documentation]({{< ref "/content/basic-config-and-security/security/authentication-authorization/json-web-tokens.md" >}}). +For more configuration options check the [JWT documentation]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}). ### OAuth @@ -272,7 +272,7 @@ Example: } ``` -All you need to do in the Tyk configuration is to enable OAuth and specify the header details. See [OAuth documentation]({{< ref "/content/basic-config-and-security/security/authentication-authorization/oauth-2-0.md" >}}) for more details. +All you need to do in the Tyk configuration is to enable OAuth and specify the header details. See [OAuth documentation]({{< ref "/api-management/authentication-authorization#set-up-oauth-20-authorization" >}}) for more details. ### Multiple Authentication mechanisms @@ -339,7 +339,7 @@ For the above OAS configuration, Tyk looks at only the first `security` object: } } ``` -Please observe the presence of the `baseIdentityProvider` field, as this is required when enabling multiple authentication mechanisms at the same time. See [Multiple Auth documentation]({{< ref "/content/basic-config-and-security/security/authentication-authorization/multiple-auth.md" >}}) for more details. +Please observe the presence of the `baseIdentityProvider` field, as this is required when enabling multiple authentication mechanisms at the same time. See [Multiple Auth documentation]({{< ref "/api-management/authentication-authorization#multiple-chained-authentication" >}}) for more details. ### Other Authentication mechanisms @@ -349,7 +349,7 @@ For now, the only authentication mechanisms enabled with OAS API Definition conf - JSON Web Token (JWT) - Oauth. -If you’re interested in protecting your APIs using a different mechanism such as HMAC or OpenID Connect, see [Authentication and Authorization]({{< ref "/content/basic-config-and-security/security/authentication-&-authorization.md" >}}) for more details. +If you’re interested in protecting your APIs using a different mechanism such as HMAC or OpenID Connect, see [Authentication and Authorization]({{< ref "/api-management/authentication-authorization" >}}) for more details. ### Automatically protecting OAS API Definition APIs diff --git a/tyk-docs/content/getting-started/key-concepts/oas-versioning.md b/tyk-docs/content/getting-started/key-concepts/oas-versioning.md index 44dcb17ce1..7bf1b9fce8 100644 --- a/tyk-docs/content/getting-started/key-concepts/oas-versioning.md +++ b/tyk-docs/content/getting-started/key-concepts/oas-versioning.md @@ -15,7 +15,7 @@ If you're using the legacy Tyk Classic APIs, then check out the [Tyk Classic]({{ ### Controlling access to Tyk OAS API versions -You can explicitly grant access to specific version(s) of an API by specifying the individual API definitions for each version in the [key]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}}) (also known as an *authorization token*, *bearer token*, *access token*, *API token* or *token session object* - see [here]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}})). +You can explicitly grant access to specific version(s) of an API by specifying the individual API definitions for each version in the [key]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}}) (also known as an *authorization token*, *bearer token*, *access token*, *API token* or *token session object* - see [here]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}})). When using Tyk OAS APIs there are some subtleties to the propagation of access control between versions of an API: - each version of an API is treated individually by Tyk Gateway, so access must be explicity granted for each version diff --git a/tyk-docs/content/getting-started/key-concepts/rate-limiting.md b/tyk-docs/content/getting-started/key-concepts/rate-limiting.md index 10ccf93a4d..4a2cb781d5 100644 --- a/tyk-docs/content/getting-started/key-concepts/rate-limiting.md +++ b/tyk-docs/content/getting-started/key-concepts/rate-limiting.md @@ -51,6 +51,7 @@ Key-level rate limiting is more focused on controlling traffic from individual s - **key-level global limit** limiting the rate of calls the user of a key can make to all APIs authorized by that key - **key-level per-API limit** limiting the rate of calls the user of a key can make to specific individual APIs +- **key-level per-endpoint limit** limiting the rate of calls the user of a key can make to specific individual endpoints of an API These guides include explanation of how to configure key-level rate limits when using [API Keys]({{< ref "getting-started/create-api-key" >}}) and [Security Policies]({{< ref "getting-started/create-security-policy" >}}). @@ -59,16 +60,20 @@ These guides include explanation of how to configure key-level rate limits when The simplest way to figure out which level of rate limiting you’d like to apply can be determined by asking a few questions: - do you want to protect your service against denial of service attacks or overwhelming amounts of traffic from **all users** of the API? **You’ll want to use an API-level rate limit!** +- do you have a health endpoint that consumes very little resource on your service and can handle significantly more requests than your other endpoints? **You'll want to use an API-level per-endpoint rate limit!** - do you want to limit the number of requests a specific user can make to **all APIs** they have access to? **You’ll want to use a key-level global rate limit!** - do you want to limit the number of requests a specific user can make to **specific APIs** they have access to? **You’ll want to use a key-level per-API rate limit.** +- do you want to limit the number of requests a specific user can make to a **specific endpoint of an API** they have access to? **You’ll want to use a key-level per-endpoint rate limit.** ### Applying multiple rate limits When multiple rate limits are configured, they are assessed in this order (if applied): -1. API-level global rate limit -2. Key-level global rate limit -3. Key-level per-API rate limit +1. API-level per-endpoint rate limit (configured in API definition) +2. API-level rate limit (configured in API definition) +3. Key-level per-endpoint rate limit (configured in access key) +4. Key-level per-API rate limit (configured in access key) +5. Key-level global rate limit (configured in access key) ### Combining multiple policies configuring rate limits diff --git a/tyk-docs/content/getting-started/key-concepts/versioning.md b/tyk-docs/content/getting-started/key-concepts/versioning.md index 94255918c3..0290202a16 100644 --- a/tyk-docs/content/getting-started/key-concepts/versioning.md +++ b/tyk-docs/content/getting-started/key-concepts/versioning.md @@ -19,7 +19,7 @@ If you're using Tyk Operator then check out the [configuring API versioning in T ### Controlling access to Tyk Classic API versions -You can explicitly grant access to specific version(s) of an API by specifying only those version(s) in the [key]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}}) (also known as an *authorization token*, *bearer token*, *access token*, *API token* or *token session object* - see [here]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}})). +You can explicitly grant access to specific version(s) of an API by specifying only those version(s) in the [key]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}}) (also known as an *authorization token*, *bearer token*, *access token*, *API token* or *token session object* - see [here]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}})). ## Configuring API versioning in the Tyk Classic API Definition diff --git a/tyk-docs/content/getting-started/using-oas-definitions/create-an-oas-api.md b/tyk-docs/content/getting-started/using-oas-definitions/create-an-oas-api.md index 931e2f156b..fc7b84f1f6 100644 --- a/tyk-docs/content/getting-started/using-oas-definitions/create-an-oas-api.md +++ b/tyk-docs/content/getting-started/using-oas-definitions/create-an-oas-api.md @@ -328,3 +328,8 @@ Note that the Gateway will respond with the following error message: +### Tutorial 4: Create a Tyk OAS API using Tyk Operator + +You can make use of Tyk Operator custom resources to configure [Tyk OAS API]({{}}) in a Kubernetes environment. + +In this [tutorial]({{}}) we guide you through the steps to create a new Tyk OAS API using Tyk Operator. \ No newline at end of file diff --git a/tyk-docs/content/getting-started/using-oas-definitions/import-an-oas-api.md b/tyk-docs/content/getting-started/using-oas-definitions/import-an-oas-api.md index ac7dff9684..8134f17d84 100644 --- a/tyk-docs/content/getting-started/using-oas-definitions/import-an-oas-api.md +++ b/tyk-docs/content/getting-started/using-oas-definitions/import-an-oas-api.md @@ -895,7 +895,7 @@ Tyk supports the following options when importing an API: - From an existing Tyk API definition (Classic or OAS) - From a SOAP WSDL definition -The process for importing from an existing Tyk API definition or SOAP WSDL definition is explained [here]({{< ref "/getting-started/import-apis#import-apis-via-the-dashboard" >}}). The import function will now accept an existing Tyk OAS API definition, the process is the same as for a Tyk Classic API definition. +The process for importing from an existing Tyk API definition or SOAP WSDL definition is explained [here]({{< ref "/getting-started/import-apis#import-apis-via-the-dashboard-api" >}}). The import function will now accept an existing Tyk OAS API definition, the process is the same as for a Tyk Classic API definition. #### Importing an OpenAPI Document diff --git a/tyk-docs/content/getting-started/using-oas-definitions/versioning-an-oas-api.md b/tyk-docs/content/getting-started/using-oas-definitions/versioning-an-oas-api.md index cccd15a490..c79fb779df 100644 --- a/tyk-docs/content/getting-started/using-oas-definitions/versioning-an-oas-api.md +++ b/tyk-docs/content/getting-started/using-oas-definitions/versioning-an-oas-api.md @@ -47,7 +47,7 @@ You will also need to have ‘admin’ or ‘api’ rights if [RBAC]({{< ref "/t #### Step 1: Create your base API -You need to create a new API that will be the [Base API]({{< ref "/getting-started/key-concepts/oas-versioning#key-concepts" >}}) for the future versions. You do this by sending a Tyk OAS API Definition to the Tyk Gateway API's `apis/oas` endpoint. Note that there is no special command required to create this new API as a Base API - i.e. any Tyk OAS API can be used as a Base API. +You need to create a new API that will be the [Base API]({{< ref "/getting-started/key-concepts/oas-versioning" >}}) for the future versions. You do this by sending a Tyk OAS API Definition to the Tyk Gateway API's `apis/oas` endpoint. Note that there is no special command required to create this new API as a Base API - i.e. any Tyk OAS API can be used as a Base API. | Property | Description | |--------------|------------------------| diff --git a/tyk-docs/content/getting-started/using-tyk-dashboard.md b/tyk-docs/content/getting-started/using-tyk-dashboard.md new file mode 100644 index 0000000000..db120c9ce0 --- /dev/null +++ b/tyk-docs/content/getting-started/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. + +## Dashboard Organization +{{< img src="/img/getting-started/apis-front-page.png" alt="Front Page" >}} + + +Welcome to the Tyk Dashboard! Let's zoom into the side bar and take a look at the features that are made available to you. + +### Side Bar +Tyk is organized into a few key categories: +* **API Management**: In API Management, you can access and edit all your APIs, create data graphs, and add webhooks. +* **API Security**: In API Security, you can manage keys, policies, and certificates to customize your security settings. +* **User Management**: In User Management, you can control permissions and access for users and user groups. You can also create profiles that help you manage third party identity providers for specific Tyk actions like signing into the portal or logging into the dashboard. +* **Monitoring**: In Monitoring, you can view activity reports, logs, and analytics related to your APIs. +* **System Management**: In System Management, you can affect OPA rules that define fine-grained access control for managing and enforcing permissions on various actions and resources in Tyk’s API management system. +* **Classic Portal**: In Classic Portal, you can affect permissions and configurations related to your developer portal. The Tyk Developer Portal is a platform that enables you to publish, manage, and promote your APIs to external developers. + + +#### Overview +{{< img src="/img/getting-started/overview-options.png" alt="Overview options" >}} + +From the overview options, you can start adding APIs immediately. +If you are new here, we suggest that you start with an example API and see how our pre-configured APIs are setup- we have examples for GraphQL, Tyk OAS, and UDG (Universal Data Graph) APIs. If you have a specific API that you that you have already setup, you can import it using an OpenAPI document, a Tyk API document, or through a WSDL/XML file. +Otherwise, you can design an API from scratch or a template if you have configured a Tyk template previously. + + + +#### API Management +{{< img src="/img/getting-started/tabs-api-management.png" alt="API Management Side Bar" >}} + +* **APIs**: The APIs setup allows you to create and access your APIs. If this is your first time setting up an API, we suggest you use an example to learn more or you can go to [Configure your First API](/getting-started/configure-first-api) to learn more. +{{< img src="/img/getting-started/api-management-apis.png" alt="API Management APIs" >}} + +* **API Templates**: API Templates allow you to create APIs with preconfigured settings quickly. You can set these up manually or save them from an API which you've already created. You can learn more about API Templates [here](/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/). + +* **Examples**: In Examples, you will find a few sample projects we put together to help you in your journey. We suggest you start with the Tyk OAS APIs and move on to GraphQL and UDG APIs to supplement learning how to setup your API. + +* **Data Graphs**: Universal Data Graphs (UDGs) are a way for you to combine APIs into one usable interface. Using GraphQL, you can access multiple APIs in a single query. In this tab, you can configure your UDGs. You can learn more about Data Graph concepts and how to use them in Tyk, [here](/universal-data-graph/). + +* **Webhooks**: Webhooks allow you to define redirects to handle specific events. For instance, you can configure a webhook to handle a RateLimitExceeded event to send a notification to your admin. Webhooks are very powerful tools to allow you to customize event handling, to learn more, find more information [here](/basic-config-and-security/report-monitor-trigger-events/webhooks). + +#### API Security +{{< img src="/img/getting-started/tabs-api-security.png" alt="API Security Side Bar" >}} + +* **Keys**: [Keys](/basic-config-and-security/security/key-level-security) are central to securing your APIs through Tyk. In this tab, you can handle the permissions, rate and throttling limits, and quotas associated with a given key. +* **Policies**: [Policies](/basic-config-and-security/security/security-policies) expand on key level security, allowing you to configure granular control over API access. Using policies, you govern which users or applications can access particular endpoints and what they're allowed to do. +* **TLS/SSL Certificates**: [TLS and SSL](/basic-config-and-security/security/tls-and-ssl) is supported in Tyk. You can upload your certificates via `.pem` file to verify the identity of whoever presents the certificate during a secure connection. + + +#### User Management +{{< img src="/img/getting-started/tabs-user-management.png" alt="User Management Side Bar" >}} + +* **Users**: Here, you can add, revoke, delete, or edit the details of users that need admin access to your Tyk dashboard. 'Revoking' a user will suspend their access without deleting their account. You can learn more about users [here](/tyk-dashboard-api/users). +* **User Groups**: Similar as a **policy** is to a **key**, a **user group** is to a **user**. By defining user groups, you aggregate the permissions and access controls for multiple users. When you setup a user with a user group, they inherit the user groups' permissions. You can learn more about user groups [here](/tyk-apis/tyk-dashboard-api/user-groups). +* **User Settings**: In User Settings, you can setup [TIB profiles](/tyk-stack/tyk-identity-broker/about-profiles/). This allows your users to access Tyk-managed APIs using their existing credentials. + +#### Monitoring +{{< img src="/img/getting-started/tabs-monitoring.png" alt="Monitoring Side Bar" >}} + +* **Activity Overview**: In the Activity Overview Tab, you will get a high-level view of requests sent to your APIs, the error breakdown, and your most popular endpoints. You can filter this to view per API statistics and to see the breakdown per hour, day, or month. +* **Activity logs**: Here, you can view all the activity logs from your APIs, giving you details on user activity or error logs. +* **Activity by X**: There are several tabs that allow you to view your activity reports per API, Key, Endpoint, Graph, and Errors. We provide these tools for you so that you can quickly visit the analytics you're interested in and gain insights on your APIs. +* **Service Uptime**: Here, you can view the service uptime statistics, getting a detailed view of your uptime per version of your API. You can also view the errors associated with your API and if you are hitting your uptime targets. +* **Uptime Targets**: You can view uptime by target endpoint here, this is particularly useful if you have configured [uptime tests](/planning-for-production/ensure-high-availability/uptime-tests/) to gain visibility into the uptime of your underlying services. + + + +#### System Management +{{< img src="/img/getting-started/tabs-system-management.png" alt="System Management Side Bar" >}} + +* **OPA Rules**: You can use this tab to edit your [OPA Rules](/tyk-dashboard/open-policy-agent/)- you can use these custom rules to control the behavior of all of your dashboard APIs. For example, you can restrict regular users to GET requests only, while allowing POST requests for admin roles. + + +#### Classic Portal +{{< img src="/img/getting-started/tabs-classic-portal.png" alt="Classic Portal Side Bar" >}} + +* **Open Portal**: By clicking this, you will be redirected to the Developer Portal, where developers can access your APIs. This acts as a self-service gateway where developers can discover, request access to, and manage their API Keys, view documentation, and monitor usage reports. You can learn more about the developer portal and how to customize it [here](/tyk-developer-portal/customise/). + +* **Settings**: Tyk allows you to customize your portal however you like. The first level of customization occurs through configuring your settings. Here, you can setup your portal domain name, establish an admin to be notified whenever you get an API subscription, affect access and permissions to your portal, and enable email notifications to be sent to the developers using your portal. You can learn more about customizing your settings [here](/tyk-developer-portal/customise/customize-api-visibility/). +* **Catalogue**: Your catalogue is the full list of APIs made available in your portal. You can add APIs to your catalogue in this tab. You can learn more about how to affect your catalogues [here](/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/). +* **Key Requests**: For the APIs listed in your catalogue, you developers will submit key requests to gain access to them. This page allows you to view the full list of key requests, you can use it to see what APIs are gaining popularity, you can also approve or decline key requests here. You can learn more about key requests [here](/tyk-developer-portal/tyk-portal-classic/key-requests/). +* **Developers**: Developers are the people consuming your APIs. You can [add developers](/tyk-developer-portal/tyk-portal-classic/developer-profiles/) to your portal in this tab. +* **Pages**: As mentioned earlier, your portal is completely customizable. This tab makes it easy to add or edit the pages available in your portal. You can make this as simple or complicated as you want, you just have to add a title and URL for each page. You can learn more about adding pages to your portal [here](/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/). +* **Menus**: Next, if you want to configure the navigation of your site, you can [customize your menus](/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/). +* **CSS**: In this tab, you can customize your site using CSS. Just write a custom CSS script and press the "update" button in the top right corner to publish your custom styling. For inspiration, take a look at this [tutorial](/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/). + diff --git a/tyk-docs/content/graphql/creating-gql-api.md b/tyk-docs/content/graphql/creating-gql-api.md index fdd5bb9894..736071ecbc 100644 --- a/tyk-docs/content/graphql/creating-gql-api.md +++ b/tyk-docs/content/graphql/creating-gql-api.md @@ -48,12 +48,12 @@ From the **Authentication** section: You have the following options: -- **Authentication mode**: This is the security method to use with your API. First, you can set it to `Open(Keyless)`, but that option is not advised for production APIs. See [Authentication and Authorization]({{< ref "basic-config-and-security/security/authentication-&-authorization" >}}) for more details on securing your API. +- **Authentication mode**: This is the security method to use with your API. First, you can set it to `Open(Keyless)`, but that option is not advised for production APIs. See [Authentication and Authorization]({{< ref "/api-management/authentication-authorization" >}}) for more details on securing your API. - **Strip Authorization Data**: Select this option to strip any authorization data from your API requests. - **Auth Key Header Name**: The header name that will hold the token on inbound requests. The default for this is `Authorization`. - **Allow Query Parameter As Well As Header**: Set this option to enable checking the query parameter as well as the header for an auth token. **This is a setting that might be important if your GQL includes subscription operations**. - **Use Cookie Value**: It is possible to use a cookie value as well as the other two token locations. -- **Enable client certificate**: Select this to use Mutual TLS. See [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}) for details on implementing mutual TLS. +- **Enable client certificate**: Select this to use Mutual TLS. See [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) for details on implementing mutual TLS. ### Step 5: Save the API @@ -204,7 +204,7 @@ In order to complete the next steps, you need to have the [Tyk OSS]({{< ref "tyk {{< button_left href="https://tyk.io/sign-up/" color="green" content="Try it out" >}} ## Creation Methods -With Tyk OSS, it is possible to create GQL APIs using Tyk's Gateway API or to generate a file with the same object and store it in the `/apps` folder of the Tyk Gateway installation folder. This is demonstrated [here](#with-file-based-mode). +With Tyk OSS, it is possible to create GQL APIs using Tyk's Gateway API or to generate a file with the same object and store it in the `/apps` folder of the Tyk Gateway installation folder. This is demonstrated [here]({{}}). ## Tutorial: Create a GQL API with the Tyk Gateway API diff --git a/tyk-docs/content/key-concepts/grpc-proxy.md b/tyk-docs/content/key-concepts/grpc-proxy.md index ca3ae0f765..09311a0e29 100644 --- a/tyk-docs/content/key-concepts/grpc-proxy.md +++ b/tyk-docs/content/key-concepts/grpc-proxy.md @@ -13,7 +13,7 @@ Tyk supports gRPC passthrough proxying when using HTTP/2 as a transport (the mos The gRPC over HTTP2 specification defines the rules on how the gRPC protocol maps to a HTTP request, for more information [see](https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md). In the context of the API Gateway, we are interested in the following: -- You can target specific methods of the gRPC service using the format: `/{Service-Name}/{method name}`, for example: `/google.pubsub.v2.PublisherService/CreateTopic`. You can use this feature to apply standard ACL rules via Keys and Policies, or use URL rewrite plugins in our [Endpoint Desiger]({{< ref "transform-traffic/url-rewriting#a-name-url-rewrite-with-endpoint-designer-a-rewrite-a-url-with-the-endpoint-designer" >}}). +- You can target specific methods of the gRPC service using the format: `/{Service-Name}/{method name}`, for example: `/google.pubsub.v2.PublisherService/CreateTopic`. You can use this feature to apply standard ACL rules via Keys and Policies, or use URL rewrite plugins in our [Endpoint Desiger]({{< ref "transform-traffic/url-rewriting" >}}). - HTTP method is always `POST`. gRPC custom request metadata is added as HTTP headers, where metadata key is directly mapped to the HTTP header with the same name. @@ -34,17 +34,17 @@ For scenarios where you want to connect two services calling each other or just Tyk supports all kinds of gRPC streaming (client streaming, server streaming and bidirectional streaming). It requires you to set a low value for `flush_interval`, this is required in order to forward data to the downstream target as soon as the upstream target replies. A high flush interval will delay this communication. We recommend the lowest possible value: 1 (1 millisecond). You set this value in your `tyk.conf` file in the `http_server_options.flush_interval` option. ### Mutual Authentication -Tyk supports Mutual Authentication in gRPC. See [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}) to configure Mutual Authentication in Tyk. +Tyk supports Mutual Authentication in gRPC. See [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) to configure Mutual Authentication in Tyk. ### Basic Authentication -Tyk supports Basic Authentication in gRPC. See [Basic Authentication]({{< ref "basic-config-and-security/security/authentication-authorization/basic-auth" >}}) to configure Basic Authentication in Tyk. +Tyk supports Basic Authentication in gRPC. See [Basic Authentication]({{< ref "/api-management/authentication-authorization#use-basic-authentication" >}}) to configure Basic Authentication in Tyk. After setting your Tyk configuration, all you need to do is to send credentials with the correct base64 format in an `Authorization` header from your gRPC client. `Basic base64Encode(username:password)` ### Token Based Authentication -Tyk supports Token Based Authentication in gRPC. See [Bearer Tokens]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}}) to configure Token Based Authentication in Tyk. +Tyk supports Token Based Authentication in gRPC. See [Bearer Tokens]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}}) to configure Token Based Authentication in Tyk. After setting your Tyk configuration, all you need to do is to send a token in an `Authorization` header from your gRPC client. diff --git a/tyk-docs/content/log-data.md b/tyk-docs/content/log-data.md index cbb6c957c7..342cedd992 100755 --- a/tyk-docs/content/log-data.md +++ b/tyk-docs/content/log-data.md @@ -1,7 +1,7 @@ --- date: 2017-03-24T12:53:50Z title: Logging system and API events -tags: ["logging", "observability", "system events", "logs"] +tags: ["logging", "observability", "system events", "logs", "log format"] aliases: - "/advanced-configuration/log-data" --- @@ -54,6 +54,24 @@ Sometimes you will want to have more detailed logging for the Tyk Gateway than f If unset or left empty, it will default to `info`. +### Setting log format (only available for the Gateway) + +As of Tyk Gateway `v5.6.0`, you can control log format using the `TYK_LOGFORMAT` environment variable. By default, logs are in `default` format, but setting `TYK_LOGFORMAT` to `json` will output logs in JSON format. + +##### Default logging format +``` +time="Sep 05 09:04:12" level=info msg="Tyk API Gateway v5.6.0" prefix=main +``` + +##### JSON logging format +```json +{"level":"info","msg":"Tyk API Gateway v5.6.0","prefix":"main","time":"2024-09-05T09:01:23-04:00"} +``` +{{< note >}} +**Note** +As a general performance tip, the `json` output format incurs less memory allocation overhead than the default logger. For optimal performance, it's recommended to configure logging in the JSON format. +{{< /note >}} + ## Integration with 3rd party aggregated log and error tools Tyk can be configured to send log data from multiple Tyk processes to a 3rd party server for aggregation and analysis. diff --git a/tyk-docs/content/planning-for-production.md b/tyk-docs/content/planning-for-production.md index b45eeac74e..9331173a7a 100755 --- a/tyk-docs/content/planning-for-production.md +++ b/tyk-docs/content/planning-for-production.md @@ -139,11 +139,11 @@ If the latency between Tyk and your Upstream is around 50ms, then a single conne ### Protect Redis from overgrowing -Please read carefully through this [doc]({{< ref "basic-config-and-security/security/authentication-authorization/physical-key-expiry" >}}) to make an *aware decision* about the expiration of your keys in Redis, after which they will be removed from Redis. If you don't set the lifetime, a zero default means that keys will stay in Redis until you manually delete them, which is no issue if you have a process outside Tyk Gateway to handle it. If you don't - and especially in scenarios that your flow creates many keys or access tokens for every user or even per call - your Redis can quickly get cluttered with obsolete tokens and eventually affect the performance of the Tyk Gateway. +Please read carefully through this [doc]({{< ref "/api-management/authentication-authorization#set-physical-key-expiry-and-deletion" >}}) to make an *aware decision* about the expiration of your keys in Redis, after which they will be removed from Redis. If you don't set the lifetime, a zero default means that keys will stay in Redis until you manually delete them, which is no issue if you have a process outside Tyk Gateway to handle it. If you don't - and especially in scenarios that your flow creates many keys or access tokens for every user or even per call - your Redis can quickly get cluttered with obsolete tokens and eventually affect the performance of the Tyk Gateway. ### Analytics Optimizations -If using a [Redis cluster](https://redis.io/docs/management/scaling/) under high load it is recommended that analytics are distributed among the Redis shards. This can be configured by setting the [analytics_config.enable_multiple_analytics_keys]({{< ref "tyk-oss-gateway/configuration#analytics_configenable_multiple_analytics_keys" >}}) parameter to true. Furthermore, analytics can also be disabled for an API using the [do_not_track]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/other-root-objects" >}}) configuration parameter. Alternatively, tracking for analytics can be disabled for selected endpoints using the [do not track endpoint plugin]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#do-not-track-endpoint" >}}). +If using a [Redis cluster](https://redis.io/docs/management/scaling/) under high load it is recommended that analytics are distributed among the Redis shards. This can be configured by setting the [analytics_config.enable_multiple_analytics_keys]({{< ref "tyk-oss-gateway/configuration#analytics_configenable_multiple_analytics_keys" >}}) parameter to true. Furthermore, analytics can also be disabled for an API using the [do_not_track]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/other-root-objects" >}}) configuration parameter. Alternatively, tracking for analytics can be disabled for selected endpoints using the [do not track endpoint plugin]({{< ref "product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/" >}}). #### Protobuf Serialisation diff --git a/tyk-docs/content/planning-for-production/ensure-high-availability/uptime-tests.md b/tyk-docs/content/planning-for-production/ensure-high-availability/uptime-tests.md index e6f8bf0778..75760bf2fd 100755 --- a/tyk-docs/content/planning-for-production/ensure-high-availability/uptime-tests.md +++ b/tyk-docs/content/planning-for-production/ensure-high-availability/uptime-tests.md @@ -95,17 +95,13 @@ Or a long form, which allows for a full request to be checked or mocked: "this": "that", "more": "beans" }, - "body": "VEhJUyBJUyBBIEJPRFkgT0JKRUNUIFRFWFQNCg0KTW9yZSBzdHVmZiBoZXJl" + "body": "VEhJUyBJUyBBIEJPRFkgT0JKRUNUIFRFWFQNCg0KTW9yZSBzdHVmZiBoZXJl", + "timeout": 1000 } ``` -The `body` is Base64 encoded. - -{{< note success >}} -**Note** - -Using the quick form will not enforce a timeout, while the long form will fail with a 500ms timeout. -{{< /note >}} +* `body`: The `body` is Base64 encoded. +* `timeout`: The `timeout` in milli seconds. ## Configure with the Dashboard diff --git a/tyk-docs/content/plugins.md b/tyk-docs/content/plugins.md index 85e8e3b5a5..a3c7835600 100755 --- a/tyk-docs/content/plugins.md +++ b/tyk-docs/content/plugins.md @@ -9,7 +9,7 @@ aliases: Plugins can be used to customize and enhance the capabilities of your APIs through integration with external services and databases to perform operations such as data transformation, custom authentication, logging and monitoring etc. -When Tyk receives an API request, it works through a [chain]({{< ref "middleware-execution-order" >}}) of processing *middleware* that is configured using the API definition. There are a large number of built-in middleware in the processing chain that are dedicated to performing [client authentication]({{< ref "basic-config-and-security/security/authentication-&-authorization" >}}), [request transformation]({{< ref "advanced-configuration/transform-traffic" >}}), [caching]({{< ref "basic-config-and-security/reduce-latency/caching" >}}) and many other processes before proxying the request to the upstream. +When Tyk receives an API request, it works through a [chain]({{< ref "middleware-execution-order" >}}) of processing *middleware* that is configured using the API definition. There are a large number of built-in middleware in the processing chain that are dedicated to performing [client authentication]({{< ref "/api-management/authentication-authorization" >}}), [request transformation]({{< ref "advanced-configuration/transform-traffic" >}}), [caching]({{< ref "basic-config-and-security/reduce-latency/caching" >}}) and many other processes before proxying the request to the upstream. Tyk's custom plugin facility provides a powerful and flexible way to extend the middleware chain. It allows API developers to write custom middleware, in various programming languages, that can perform additional processing of requests and responses. diff --git a/tyk-docs/content/plugins/get-started-selfmanaged/deploy-plugins.md b/tyk-docs/content/plugins/get-started-selfmanaged/deploy-plugins.md index d94e39722d..b745ad4f3f 100644 --- a/tyk-docs/content/plugins/get-started-selfmanaged/deploy-plugins.md +++ b/tyk-docs/content/plugins/get-started-selfmanaged/deploy-plugins.md @@ -53,7 +53,7 @@ This command generates a "bundle" from the sample Go plugin in the repo. {{< note success >}} **Note** -For added security, please consider signing your [bundles]({{< ref "plugins/how-to-serve-plugins.md#global-parameters" >}}), especially if the connection between the Gateways and the Bundler server traverses the internet. +For added security, please consider signing your [bundles]({{< ref "plugins/how-to-serve-plugins.md" >}}), especially if the connection between the Gateways and the Bundler server traverses the internet. {{< /note >}} @@ -93,7 +93,7 @@ This step uploads the Bundle to both GitHub and an AWS S3 bucket. Obviously, yo {{< note success >}} **Note** -For seamless deployments, take a look at multi-version [plugin support]({{< ref "plugins/supported-languages/golang.md#upgrading-tyk" >}}) to enable zero downtime deployments of your Tyk Gateway installs +For seamless deployments, take a look at multi-version [plugin support]({{< ref "plugins/supported-languages/golang.mdd#upgrading-your-tyk-gateway" >}}) to enable zero downtime deployments of your Tyk Gateway installs {{< /note >}} diff --git a/tyk-docs/content/plugins/plugin-types/auth-plugins/auth-plugins.md b/tyk-docs/content/plugins/plugin-types/auth-plugins/auth-plugins.md index c3d82d8431..b29f85f23a 100755 --- a/tyk-docs/content/plugins/plugin-types/auth-plugins/auth-plugins.md +++ b/tyk-docs/content/plugins/plugin-types/auth-plugins/auth-plugins.md @@ -66,6 +66,6 @@ See the [supported languages]({{< ref "plugins/supported-languages" >}}) section Please consult the Tyk Operator supporting documentation for examples of how to configure a Tyk Operator API to use: -- [Go custom authentication plugin]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#custom-plugin-auth-go" >}}) -- [gRPC custom authentication plugin]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#custom-plugin-auth-grpc" >}}) +- [Go custom authentication plugin]({{< ref "/api-management/automations#custom-plugin-auth-go" >}}) +- [gRPC custom authentication plugin]({{< ref "/api-management/automations#custom-plugin-auth-grpc" >}}) diff --git a/tyk-docs/content/plugins/plugin-types/request-plugins.md b/tyk-docs/content/plugins/plugin-types/request-plugins.md index 6a972128db..856d489b89 100755 --- a/tyk-docs/content/plugins/plugin-types/request-plugins.md +++ b/tyk-docs/content/plugins/plugin-types/request-plugins.md @@ -30,7 +30,7 @@ There are 4 different phases in the [request lifecycle]({{< ref "concepts/middle ### Return Overrides / ReturnOverrides You can have your plugin finish the request lifecycle and return a response with custom payload & headers to the requestor. -[Read more here]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-data-structures#returnoverrides-coprocess_return_overridesproto" >}}) +[Read more here]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-data-structures#returnoverrides" >}}) ##### Python Example diff --git a/tyk-docs/content/plugins/plugin-types/response-plugins.md b/tyk-docs/content/plugins/plugin-types/response-plugins.md index 1d713a3b38..b079ee7b00 100755 --- a/tyk-docs/content/plugins/plugin-types/response-plugins.md +++ b/tyk-docs/content/plugins/plugin-types/response-plugins.md @@ -91,4 +91,4 @@ Please note, while the `headers` field will continue to be available and maintai ### Supported Response Plugin Languages -See [Supported Plugins]({{< ref "plugins/supported-languages#plugin-support" >}}) for details on which languages the response plugin is supported in. +See [Supported Plugins]({{< ref "plugins/supported-languages" >}}) for details on which languages the response plugin is supported in. diff --git a/tyk-docs/content/plugins/supported-languages.md b/tyk-docs/content/plugins/supported-languages.md index 952561c0ba..46208d93f8 100755 --- a/tyk-docs/content/plugins/supported-languages.md +++ b/tyk-docs/content/plugins/supported-languages.md @@ -21,7 +21,7 @@ Rich plugins give ultimate flexibility in the language of implementation, howeve * Make Layer 4 (TCP) or Layer 7 (HTTP/REST/SOAP) calls * Open Persistent Connections * Modify the request in-flight -* Used to stop the request and return a [custom response]({{< ref "plugins/plugin-types/request-plugins#return-overrides-returnoverrides" >}}) +* Used to stop the request and return a [custom response]({{< ref "plugins/plugin-types/request-plugins#return-overrides--returnoverrides" >}}) * Be served using [Bundles]({{< ref "plugins/how-to-serve-plugins" >}}) or by files on the file system, except gRPC of course which by definition is served by some webserver in the language of your choosing diff --git a/tyk-docs/content/plugins/supported-languages/javascript-middleware.md b/tyk-docs/content/plugins/supported-languages/javascript-middleware.md index 4de6b3d663..5fdfd19391 100755 --- a/tyk-docs/content/plugins/supported-languages/javascript-middleware.md +++ b/tyk-docs/content/plugins/supported-languages/javascript-middleware.md @@ -27,7 +27,7 @@ There are three middleware components that can be scripted with Tyk: 1. **Custom JavaScript plugins**: These execute either *pre* or *post* validation. A *pre* middleware component will execute before any session validation or token validation has taken place, while a *post* middleware component will execute after the request has been passed through all checks and is ready to be proxied upstream. -2. **Dynamic event handlers**: These components fire on certain API events (see the event handlers section), these are fired Async and do not have a cooldown timer. These are documented [here]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#setup-with-api" >}}). +2. **Dynamic event handlers**: These components fire on certain API events (see the event handlers section), these are fired Async and do not have a cooldown timer. These are documented [here]({{< ref "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas#set-up-a-webhook-event-handler-in-the-tyk-oas-api-definition" >}}). 3. **Virtual endpoints**: These are powerful programmable middleware invoked towards the end of the request processing chain. Unlike the custom JavaScript plugins, the virtual endpoint terminates the request. These are documented [here]({{< ref "advanced-configuration/compose-apis/virtual-endpoints" >}}). diff --git a/tyk-docs/content/plugins/supported-languages/javascript-middleware/middleware-scripting-guide.md b/tyk-docs/content/plugins/supported-languages/javascript-middleware/middleware-scripting-guide.md index 1941b924a7..436d4e2942 100755 --- a/tyk-docs/content/plugins/supported-languages/javascript-middleware/middleware-scripting-guide.md +++ b/tyk-docs/content/plugins/supported-languages/javascript-middleware/middleware-scripting-guide.md @@ -34,7 +34,7 @@ JS functions can be given access to external data objects relating to the API re {{< note success >}} **Note** -There are other ways of accessing and editing a session object using the [Tyk JavaScript API functions]({{< ref "plugins/supported-languages/javascript-middleware/javascript-api#Working-with-the-key-session-object" >}}). +There are other ways of accessing and editing a session object using the [Tyk JavaScript API functions]({{< ref "plugins/supported-languages/javascript-middleware/javascript-api#working-with-the-key-session-object" >}}). {{< /note >}} ### Creating a middleware component diff --git a/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net.md b/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net.md index 6112a5fa47..772668d02e 100644 --- a/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net.md +++ b/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net.md @@ -265,7 +265,7 @@ We need to create a manifest file within the `tyk-plugin` directory. This file c } ``` -- The `custom_middleware` block contains the middleware settings like the plugin driver we want to use (`driver`) and the hooks that our plugin will expose. We use the `auth_check` hook for this tutorial. For other hooks see [here]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#coprocess-dispatcher-hooks" >}}). +- The `custom_middleware` block contains the middleware settings like the plugin driver we want to use (`driver`) and the hooks that our plugin will expose. We use the `auth_check` hook for this tutorial. For other hooks see [here]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#coprocess-dispatcher---hooks" >}}). - The `name` field references the name of the function that we implement in our plugin code - `MyAuthMiddleware`. This will be handled by our dispatcher gRPC method (implemented in `Server.cs`). - The `path` field is the path to the middleware component. - The `raw_body_only` field @@ -285,7 +285,7 @@ From Tyk v2.8 upwards you can use: A plugin bundle is a packaged version of the plugin. It may also contain a cryptographic signature of its contents. The `-y` flag tells the Tyk CLI tool to skip the signing process in order to simplify the flow of this tutorial. -For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles#using-the-bundler-tool" >}}). +For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles" >}}). You should now have a `bundle.zip` file in the `tyk-plugin` directory. diff --git a/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs.md b/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs.md index 147552b036..b88aaf042b 100644 --- a/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs.md +++ b/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs.md @@ -183,7 +183,7 @@ For Tyk 2.8 use: A plugin bundle is a packaged version of the plugin. It may also contain a cryptographic signature of its contents. The `-y` flag tells the Tyk CLI tool to skip the signing process in order to simplify the flow of this tutorial. -For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles#using-the-bundler-tool" >}}). +For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles" >}}). You should now have a `bundle.zip` file in the `tyk-plugin` directory. diff --git a/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/request-transformation-java.md b/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/request-transformation-java.md index 457cf0675b..934295a042 100644 --- a/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/request-transformation-java.md +++ b/tyk-docs/content/plugins/supported-languages/rich-plugins/grpc/request-transformation-java.md @@ -230,7 +230,7 @@ We need to create a manifest file within the `tyk-plugin` directory. This file c } ``` -- The `custom_middleware` block contains the middleware settings like the plugin driver we want to use (`driver`) and the hooks that our plugin will expose. We use the `pre` hook for this tutorial. For other hooks see [here]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#coprocess-dispatcher-hooks" >}}). +- The `custom_middleware` block contains the middleware settings like the plugin driver we want to use (`driver`) and the hooks that our plugin will expose. We use the `pre` hook for this tutorial. For other hooks see [here]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#coprocess-dispatcher---hooks" >}}). - The `name` field references the name of the function that we implemented in our plugin code - `MyPreMiddleware`. This will be handled by our dispatcher gRPC method in `PluginServer.java`. To bundle our plugin run the following command in the `tyk-plugin` directory. Check your tyk-cli install path first: @@ -246,7 +246,7 @@ For Tyk 2.8 use: A plugin bundle is a packaged version of the plugin. It may also contain a cryptographic signature of its contents. The `-y` flag tells the Tyk CLI tool to skip the signing process in order to simplify the flow of this tutorial. -For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles#using-the-bundler-tool" >}}). +For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles" >}}). You should now have a `bundle.zip` file in the `tyk-plugin` directory. diff --git a/tyk-docs/content/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial.md b/tyk-docs/content/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial.md index 61ced55986..0fd97609b9 100644 --- a/tyk-docs/content/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial.md +++ b/tyk-docs/content/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial.md @@ -91,7 +91,7 @@ You can modify the `manifest.json` to add as many files as you want. Files that ## Building the Plugin -A plugin bundle is a packaged version of the plugin, it may also contain a cryptographic signature of its contents. The `-y` flag tells the Tyk CLI tool to skip the signing process in order to simplify the flow of this tutorial. For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles#bundler-tool" >}}). +A plugin bundle is a packaged version of the plugin, it may also contain a cryptographic signature of its contents. The `-y` flag tells the Tyk CLI tool to skip the signing process in order to simplify the flow of this tutorial. For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles" >}}). You will use the Dockerised version of the Tyk CLI tool to bundle our package. diff --git a/tyk-docs/content/plugins/supported-languages/rich-plugins/rich-plugins-data-structures.md b/tyk-docs/content/plugins/supported-languages/rich-plugins/rich-plugins-data-structures.md index 33c819ed0a..34a03699cc 100644 --- a/tyk-docs/content/plugins/supported-languages/rich-plugins/rich-plugins-data-structures.md +++ b/tyk-docs/content/plugins/supported-languages/rich-plugins/rich-plugins-data-structures.md @@ -66,7 +66,7 @@ Contains the metadata. This is a dynamic field. Contains information about API definition, including `APIID`, `OrgID` and `config_data`. `response` -Contains information populated from the upstream HTTP response data, for response hooks. See [ResponseObject](#responseobject-coprocess_response_objectproto) for more details. All the field contents can be modified. +Contains information populated from the upstream HTTP response data, for response hooks. See [ResponseObject](#responseobject) for more details. All the field contents can be modified. --- @@ -138,7 +138,7 @@ Contains the URL scheme, e.g. `http`, `https`. ## ResponseObject -The `ResponseObject` exists within an [object](#object-coprocess_objectproto) for response hooks. The fields are populated with the upstream HTTP response data. All the field contents can be modified. +The `ResponseObject` exists within an [object](#object) for response hooks. The fields are populated with the upstream HTTP response data. All the field contents can be modified. ```protobuf syntax = "proto3"; @@ -264,13 +264,13 @@ This is set by Tyk if the token is generated by an OAuth client during an OAuth `basic_auth_data` This section contains a hashed representation of the basic auth password and the hashing method used. -For further details see [BasicAuthData](#basicauthdata-coprocess_session_stateproto). +For further details see [BasicAuthData](#basicauthdata). `jwt_data` -Added to sessions where a Tyk key (embedding a shared secret) is used as the public key for signing the JWT. The JWT token's KID header value references the ID of a Tyk key. See [JWTData](#jwtdata-session_stateproto) for an example. +Added to sessions where a Tyk key (embedding a shared secret) is used as the public key for signing the JWT. The JWT token's KID header value references the ID of a Tyk key. See [JWTData](#jwtdata) for an example. `hmac_enabled` -When set to `true` this indicates generation of a [HMAC signature]({{< ref "basic-config-and-security/security/authentication-authorization/hmac-signatures#a-sample-signature-generation-snippet" >}}) using the secret provided in `hmac_secret`. If the generated signature matches the signature provided in the *Authorization* header then authentication of the request has passed. +When set to `true` this indicates generation of a [HMAC signature]({{< ref "/api-management/authentication-authorization#sign-requests-with-hmac" >}}) using the secret provided in `hmac_secret`. If the generated signature matches the signature provided in the *Authorization* header then authentication of the request has passed. `hmac_secret` The value of the HMAC shared secret. @@ -284,7 +284,7 @@ The policy ID that is bound to this token. {{< note success >}} **Note** -Although `apply_policy_id` is still supported, it is now deprecated. `apply_policies` is now used to list your policy IDs as an array. This supports the **[Multiple Policy]({{< ref "basic-config-and-security/security/security-policies/partitioned-policies#a-name-multiple-a-multiple-policies" >}})** feature introduced in the **v2.4 - 1.4** release. +Although `apply_policy_id` is still supported, it is now deprecated. `apply_policies` is now used to list your policy IDs as an array. This supports the **[Multiple Policy]({{< ref "basic-config-and-security/security/security-policies/partitioned-policies#partitioned-policy-functionality" >}})** feature introduced in the **v2.4 - 1.4** release. {{< /note >}} `data_expires` @@ -312,7 +312,7 @@ A UNIX timestamp that represents the time the session was last updated. Applicab This is a UNIX timestamp that signifies when a cached key or ID will expire. This relates to custom authentication, where authenticated keys can be cached to save repeated requests to the gRPC server. See [id_extractor]({{< ref "plugins/plugin-types/auth-plugins/id-extractor" >}}) and [Auth Plugins]({{< ref "plugins/plugin-types/auth-plugins/auth-plugins" >}}) for additional information. `session_lifetime` -UNIX timestamp that denotes when the key will automatically expire. Any·subsequent API request made using the key will be rejected. Overrides the global session lifetime. See [Key Expiry and Deletion]({{< ref "basic-config-and-security/security/authentication-authorization/physical-key-expiry" >}}) for more information. +UNIX timestamp that denotes when the key will automatically expire. Any·subsequent API request made using the key will be rejected. Overrides the global session lifetime. See [Key Expiry and Deletion]({{< ref "/api-management/authentication-authorization#set-physical-key-expiry-and-deletion" >}}) for more information. --- @@ -388,7 +388,7 @@ Name of the [hashing algorithm]({{< ref "basic-config-and-security/security/key- ## JWTData -Added to [sessions](#sessionstate-session_stateproto) where a Tyk key (embedding a shared secret) is used as the public key for signing the JWT. This message contains the shared secret. +Added to [sessions](#session-state) where a Tyk key (embedding a shared secret) is used as the public key for signing the JWT. This message contains the shared secret. ```yaml "jwtData": { diff --git a/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.4.md b/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.4.md index 4d414cb44c..aab381f05e 100644 --- a/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.4.md +++ b/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.4.md @@ -150,7 +150,7 @@ Each change log item should be expandable. The first line summarises the changel
OSS: Simplify Tyk Operator setup with Kubernetes Secret creation -When you set `operatorSecret.enabled` to `true` in the `tyk-oss` chart, a Kubernetes Secret named `tyk-operator-conf` will be automatically created in the same namespace. This secret is essential for connecting Tyk Operator to the Gateway, enabling seamless management of Tyk API resources. To learn more about setting up Tyk Operator, check out [Tyk Operator installation]({{}}). +When you set `operatorSecret.enabled` to `true` in the `tyk-oss` chart, a Kubernetes Secret named `tyk-operator-conf` will be automatically created in the same namespace. This secret is essential for connecting Tyk Operator to the Gateway, enabling seamless management of Tyk API resources. To learn more about setting up Tyk Operator, check out [Tyk Operator installation]({{}}).
diff --git a/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.5.md b/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.5.md index f02f8b969a..cf6c4048bc 100644 --- a/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.5.md +++ b/tyk-docs/content/product-stack/tyk-charts/release-notes/version-1.5.md @@ -271,14 +271,14 @@ mdcb: `global.components.operator` added to determine whether the Tyk Operator component should be installed. -This feature adds a dependency on the Tyk Operator to the umbrella charts, facilitating the installation of the Tyk Operator component. Users can now easily install the Tyk Operator component by setting the `global.components.operator` parameter. Note that the Tyk Operator requires `cert-manager` to be installed beforehand. It also expects secret `tyk-operator-conf` is present in the installation namespace. You can enable bootstrapping at `global.components.bootstrap` if you are working on a new installation to have this secret created for you. Refer to the Tyk Operator [installation guide]({{}}) for detailed information on pre-requisites. +This feature adds a dependency on the Tyk Operator to the umbrella charts, facilitating the installation of the Tyk Operator component. Users can now easily install the Tyk Operator component by setting the `global.components.operator` parameter. Note that the Tyk Operator requires `cert-manager` to be installed beforehand. It also expects secret `tyk-operator-conf` is present in the installation namespace. You can enable bootstrapping at `global.components.bootstrap` if you are working on a new installation to have this secret created for you. Refer to the Tyk Operator [installation guide]({{}}) for detailed information on pre-requisites. ```yaml global: components: # operator determines whether Tyk Operator component should be installed or not. # Tyk Operator needs cert-manager to be installed beforehand. Make sure that cert-manager is installed. - # For further details, please refer to https://tyk.io/docs/tyk-stack/tyk-operator/installing-tyk-operator/ + # For further details, please refer to https://tyk.io/docs//api-management/automations#install-and-configure-tyk-operator/ operator: false ``` diff --git a/tyk-docs/content/product-stack/tyk-charts/release-notes/version-2.1.md b/tyk-docs/content/product-stack/tyk-charts/release-notes/version-2.1.md new file mode 100644 index 0000000000..796f323347 --- /dev/null +++ b/tyk-docs/content/product-stack/tyk-charts/release-notes/version-2.1.md @@ -0,0 +1,206 @@ +--- +title: Tyk Charts 2.1 Release Notes +description: "Release notes documenting updates, enhancements and changes for Tyk Charts versions within the 2.1 series." +tags: ["Tyk Charts", "Release notes", "changelog", "v2.1" ] +--- + +****Open Source** ([Mozilla Public License](https://github.com/TykTechnologies/tyk/blob/master/LICENSE.md))** + + +**This page contains all release notes for version 2.1.X displayed in a reverse chronological order** + +## Support Lifetime + +Our minor releases are supported until our next minor comes out. + +--- + +## 2.1.0 Release Notes + +### Release Date 10 Oct 2024 + +### Release Highlights + + +Added the ability to specify a static IP for Kubernetes LoadBalancer services, giving users more control over network configurations for the Tyk Gateway and Dashboard. Added an option to configure the Dashboard container port, addressing issues with restricted port permissions. Updated the default versions of Tyk components. + +For a comprehensive list of changes, please refer to the detailed [changelog](#Changelog-v2.1.0) below. + +### Breaking Changes + +This release has no breaking changes. + +However, if you are upgrading to [Tyk Operator v1.0]({{}}) using the Helm Chart, please read the [license requirement]({{}}) and Tyk Operator [installation and upgrade instructions]({{}}) carefully. + + + + + + + + + + +### Dependencies {#dependencies-2.1} + +#### 3rd Party Dependencies & Tools + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [Kubernetes](https://kubernetes.io) | 1.26.x, 1.27.x, 1.28.x, 1.29.x, 1.30.x | 1.19+ | | +| [Helm](https://helm.sh) | 3.14.x | 3.x | | +| [Redis](https://redis.io) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway and Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard, Pump, and MDCB | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x | 12.x - 16.x | Used by Tyk Dashboard, Pump, and MDCB | + +Given the time difference between your upgrade and the release of this version, we recommend customers verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + +There are no deprecation in this release. + + + +### Upgrade instructions + +For users currently on v2.0.x, we strongly recommend promptly upgrading to the latest release. +
+ +You can use helm upgrade to upgrade your release + +```bash +helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ +helm repo update + +helm upgrade [RELEASE_NAME] tyk-helm/[CHART_NAME] +``` + +### Downloads +- [Source code](https://github.com/TykTechnologies/tyk-charts/archive/refs/tags/v2.1.0.tar.gz) +- [ArtifactHub - tyk-stack](https://artifacthub.io/packages/helm/tyk-helm/tyk-stack/2.1.0) +- [ArtifactHub - tyk-control-plane](https://artifacthub.io/packages/helm/tyk-helm/tyk-control-plane/2.1.0) +- [ArtifactHub - tyk-data-plane](https://artifacthub.io/packages/helm/tyk-helm/tyk-data-plane/2.1.0) +- [ArtifactHub - tyk-oss](https://artifacthub.io/packages/helm/tyk-helm/tyk-oss/2.1.0) + +### Changelog {#Changelog-v2.1.0} + +#### Added + +
    + +
  • +
    +Ability to specify static IP for Kubernetes LoadBalancer service + +Added an optional `loadBalancerIP` parameter in the chart that allows users to set a static IP for Tyk Gateway and Dashboard services when using the `LoadBalancer` service type. This update provides enhanced control over IP configuration, useful for network stability in environments with multiple load balancers. + +Tyk gateway service configuration: +- `tyk-gateway.gateway.service.loadBalancerIP` (default to "") + +Tyk Dashboard service configuration: +- `tyk-dashboard.dashboard.service.loadBalancerIP` (default to "") + +
    +
  • + +
  • +
    +Ability to configure Dashboard container port + +Enables specifying an alternate port for the container while using standard ports in the service. This option resolves permission issues associated with restricted ports, such as port 443, within containers. + +
    +
  • + +
  • +
    +From v1.0 Tyk Operator Requires License Key + +Starting from Tyk Operator v1.0, a license key is required to use the Tyk Operator. You can provide it while installing Tyk Stack, Tyk Control Plane, or Tyk OSS helm chart by setting `global.license.operator` field. You can also set license key via a Kubernetes secret using `global.secrets.useSecretName` field. The secret should contain a key called `OperatorLicense`. + +
    +
  • + +
+ +#### Changed + +
    + +
  • +
    +Updated default versions of Tyk components +Tyk Charts 2.1 will install the following Tyk component versions by default. +- Tyk Gateway v5.3.6 +- Tyk Dashboard v5.3.6 +- Tyk Pump v1.11.0 +- Tyk MDCB v2.7.1 +- Tyk Developer Portal v1.10.0 +- Tyk Operator v1.0.0 +
    +
  • + +
+ + + + +--- + + + + +## Further Information + +### Upgrading Tyk +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance on the upgrade strategy. + +### FAQ +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. diff --git a/tyk-docs/content/product-stack/tyk-charts/tyk-control-plane-chart.md b/tyk-docs/content/product-stack/tyk-charts/tyk-control-plane-chart.md index 4e246438ea..ddd7876573 100644 --- a/tyk-docs/content/product-stack/tyk-charts/tyk-control-plane-chart.md +++ b/tyk-docs/content/product-stack/tyk-charts/tyk-control-plane-chart.md @@ -59,7 +59,7 @@ For further documentation relating to *helm* command usage, please refer to the At a minimum, modify `values.yaml` for the following settings: 1. [Set Redis connection details](#set-redis-connection-details-required) -2. [Set Mongo or PostgreSQL connection details](#set-mongo-or-postgressql-connection-details-required) +2. [Set Mongo or PostgreSQL connection details](#set-mongo-or-postgresql-connection-details-required) 3. [Tyk Dashboard License](#tyk-dashboard-license-required) 4. [Tyk MDCB License](#tyk-mdcb-license-required) 5. If you would like to use Developer Portal, an additional license is required: [Tyk Developer Portal License](#tyk-developer-portal-license-required) @@ -464,6 +464,10 @@ global: keyName: "postgreConnectionURLkey" ``` +**_Tyk Operator License_** + +It can be configured via `global.license.operator` as a plain text or Kubernetes secret which includes `OperatorLicense` key in it. Then, this secret must be referenced via `global.secrets.useSecretName`. + ### Gateway Configurations {{< note success >}} @@ -603,13 +607,13 @@ This will create a _PodMonitor_ resource for your Pump instance. ``` #### Mongo pump -To enable Mongo pump, add `mongo` to `tyk-pump.pump.backend` and add connection details for mongo under `global.mongo`. See [Mongo Installation](#set-mongo-or-postgressql-connection-details-required) section above. +To enable Mongo pump, add `mongo` to `tyk-pump.pump.backend` and add connection details for mongo under `global.mongo`. See [Mongo Installation](#set-mongo-or-postgresql-connection-details-required) section above. By default, it will enable Mongo Aggregate, Mongo Graph Pump and Mongo Selective Pump. #### SQL Pump -To enable SQL pump, add `postgres` to `tyk-pump.pump.backend` and add connection details for postgres under `global.postgres`. See [PostgresSQL Installation](#set-mongo-or-postgressql-connection-details-required) section above. +To enable SQL pump, add `postgres` to `tyk-pump.pump.backend` and add connection details for postgres under `global.postgres`. See [PostgresSQL Installation](#set-mongo-or-postgresql-connection-details-required) section above. By default, it will enable Postgres Aggregate, Postgres Graph Aggregate, SQL Pump and SQL graph pump. @@ -767,6 +771,12 @@ tyk-dev-portal: #### Tyk Developer Portal Database +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + By default, Tyk Developer Portal use `sqlite3` to store portal metadata. If you want to use a different SQL Database, please modify the section below. ```yaml @@ -854,10 +864,16 @@ tyk-dev-portal: ### Tyk Operator Configurations +Tyk Operator is a licensed component that requires a valid key for operation. +Please refer to the [Tyk Operator Installation Guide]({{}}) +for detailed information on the installation and upgrade processes. + +Prior to installing Tyk Operator, ensure that a valid license key is provided by setting `global.license.operator` field in values.yaml file. You can set license key via a Kubernetes secret using `global.secrets.useSecretName` field. The secret should contain a key called `OperatorLicense`. + In order to enable installing Tyk Operator along-side Tyk Control Plane installation, please set `global.components.operator` to `true`. All other configurations related to Tyk Operator are available under `tyk-operator` section of `values.yaml` file. > Tyk Operator needs a cert-manager to be installed. Ensure that cert-manager is installed as described in the -> official documentation: [Installing Tyk Operator]({{}}). +> official documentation: [Installing Tyk Operator]({{}}). diff --git a/tyk-docs/content/product-stack/tyk-charts/tyk-oss-chart.md b/tyk-docs/content/product-stack/tyk-charts/tyk-oss-chart.md index f6c1eee591..c73dd86e1a 100644 --- a/tyk-docs/content/product-stack/tyk-charts/tyk-oss-chart.md +++ b/tyk-docs/content/product-stack/tyk-charts/tyk-oss-chart.md @@ -213,6 +213,10 @@ global: keyName: "redisPassKey" ``` +**_Tyk Operator License_** + +It can be configured via `global.license.operator` as a plain text or Kubernetes secret which includes `OperatorLicense` key in it. Then, this secret must be referenced via `global.secrets.useSecretName`. + ### Create a Kubernetes Secret for Tyk Operator When `operatorSecret.enabled` is set to `true`, `tyk-oss` chart will create a Kubernetes Secret named `tyk-operator-conf` in the same namespace. It can be used by Tyk Operator to connect to Gateway to manage Tyk API resources. @@ -303,6 +307,8 @@ Default service port of gateway is 8080. You can change this at `global.serviceP An Ingress resource is created if `tyk-gateway.gateway.ingress.enabled` is set to true. ```yaml +tyk-gateway: + gateway: ingress: # if enabled, creates an ingress resource for the gateway enabled: true @@ -489,8 +495,14 @@ To setup other backends for pump, refer to this [document](https://github.com/Ty ### Tyk Operator Configurations +Tyk Operator is a licensed component that requires a valid key for operation. +Please refer to the [Tyk Operator Installation Guide]({{}}) +for detailed information on the installation and upgrade processes. + +Prior to installing Tyk Operator, ensure that a valid license key is provided by setting `global.license.operator` field in values.yaml file. You can set license key via a Kubernetes secret using `global.secrets.useSecretName` field. The secret should contain a key called `OperatorLicense`. + In order to enable installing Tyk Operator along-side Tyk OSS installation, please set `global.components.operator` to `true`. All other configurations related to Tyk Operator are available under `tyk-operator` section of `values.yaml` file. -> Tyk Operator needs a cert-manager to be installed. Ensure that cert-manager is installed as described in the official documentation: [Installing Tyk Operator]({{}}). +> Tyk Operator needs a cert-manager to be installed. Ensure that cert-manager is installed as described in the official documentation: [Installing Tyk Operator]({{}}). diff --git a/tyk-docs/content/product-stack/tyk-charts/tyk-stack-chart.md b/tyk-docs/content/product-stack/tyk-charts/tyk-stack-chart.md index 447cd78448..a4bde27983 100644 --- a/tyk-docs/content/product-stack/tyk-charts/tyk-stack-chart.md +++ b/tyk-docs/content/product-stack/tyk-charts/tyk-stack-chart.md @@ -453,6 +453,10 @@ global: keyName: "postgreConnectionURLkey" ``` +***Tyk Operator License*** + +It can be configured via `global.license.operator` as a plain text or Kubernetes secret which includes `OperatorLicense` key in it. Then, this secret must be referenced via `global.secrets.useSecretName`. + ### Gateway Configurations This section explains how to configure the `tyk-gateway` section for updating the Gateway version, enabling TLS, enabling autoscaling etc. @@ -790,6 +794,12 @@ tyk-dev-portal: #### Tyk Developer Portal Database +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + By default, Tyk Developer Portal use `sqlite3` to store portal metadata. If you want to use other SQL Database, please modify the section below. ```yaml @@ -877,9 +887,16 @@ tyk-dev-portal: ### Tyk Operator Configurations -In order to enable installing Tyk Operator along-side Tyk Stack installation, please set `global.components.operator` to `true`. +Tyk Operator is a licensed component that requires a valid key for operation. +Please refer to the [Tyk Operator Installation Guide]({{}}) +for detailed information on the installation and upgrade processes. + +Prior to installing Tyk Operator, ensure that a valid license key is provided by setting `global.license.operator` field in values.yaml file. You can set license key via a Kubernetes secret using `global.secrets.useSecretName` field. The secret should contain a key called `OperatorLicense`. + +In order to enable installing Tyk Operator along-side Tyk Stack installation, please set `global.components.operator` +to `true`. All other configurations related to Tyk Operator are available under `tyk-operator` section of `values.yaml` file. > Tyk Operator needs a cert-manager to be installed. Ensure that cert-manager is installed as described in the -> official documentation: [Installing Tyk Operator]({{}}). +> official documentation: [Installing Tyk Operator]({{}}). diff --git a/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log.md b/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log.md index b8059cee8f..2998c33582 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log.md @@ -4,7 +4,7 @@ description: Audit log configuration tags: ["audit", "audit records", "audit log"] --- -The audit log contains audit records for all requests made to all endpoints under the `/api` route. Audit logs are written to file in JSON or text format. +The audit log system captures detailed records of all requests made to endpoints under the `/api` route. These audit logs can be stored either in files (in JSON or text format) or in the database, providing flexible options for log management and retrieval. Subsequently, if hosting Tyk Dashboard within a Kubernetes cluster, please ensure that the configured log file path is valid and writeable. @@ -23,12 +23,13 @@ The Tyk Dashboard config section contains an audit section for configuring audit ## Configuration Parameters -| Parameter | Description | Default | -| ---- | ---- | ---- | -| enabled | Enable audit logging. Setting `security.audit_log_path` also enables audit logging | true | -| format | Specifies audit log file format. Valid values are `json` and `text` | `text` | -| path | Path to the audit log. Overwrites `security.audit_log_path` if it was set | | +| Parameter | Description | Default | +| ---- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------| +| enabled | Enable audit logging. Setting `security.audit_log_path` also enables audit logging | true | +| format | Specifies audit log file format. Valid values are `json` and `text` | `text` | +| path | Path to the audit log. Overwrites `security.audit_log_path` if it was set | | | detailed_recording | Enable detailed records in the audit log. If set to `true` then audit log records will contain the http-request (without body) and full http-response including the body | `false` | +| store_type | Specifies the storage in which audit logs will be written, valid values are `file` and `db`. | `file` | Please consult [Tyk Dashboard Configuration Options]({{< ref "tyk-dashboard/configuration#audit" >}}) for equivalent configuration with environment variables. @@ -55,3 +56,24 @@ Audit records the following fields for `json` format: ### Text File Format The `text` format outputs all fields as plain text separated with a new line and provided in the same order as `json` format. + +### Database Storage Support + +In addition to file storage, audit logs can be stored in the main database (MongoDB or Postgres), this feature has been available since Tyk 5.7.0. To enable database storage set `audit.store_type` to `db`: + +```yaml +... + "audit": { + "enabled": true, + "store_type": "db", + "detailed_recording": false + } +... +``` + +When `store_type` is set to `db`, audit logs will be stored in the main database storage instead of a file. + +### Retrieving Audit Logs via API + +Since Tyk 5.7.0 a new API endpoint has been added to allow authorized users to retrieve audit logs from the database storage. To know more about the API specifications, check out the swagger [documentation]({{}}). +To access the audit logs through the API ensure that your user account or group has been granted the "Audit Logs" RBAC group. If you do not have the necessary permissions, please contact your system administrator. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/api-categories.md b/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/api-categories.md index e39ea6ae4c..fe4c5229b2 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/api-categories.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/api-categories.md @@ -46,7 +46,7 @@ The use of the `#` qualifier to identify a category prevents the use of `#` in y {{< /note >}} ## Using API categories -API categories can be added and removed from APIs within the [API Designer]({{< ref "product-stack/tyk-dashboard/advanced-configurations/api-categories#api-designer" >}}) or via the [Tyk Dashboard API]({{< ref "product-stack/tyk-dashboard/advanced-configurations/api-categories#tyk-dashboard-api" >}}). +API categories can be added and removed from APIs within the [API Designer]({{< ref "product-stack/tyk-dashboard/advanced-configurations/api-categories#api-designer" >}}), via the [Tyk Dashboard API]({{< ref "product-stack/tyk-dashboard/advanced-configurations/api-categories#tyk-dashboard-api" >}}), or via [Tyk Operator]({{< ref "/api-management/automations#what-is-tyk-operator" >}}). ### API Designer The API Designer in the Tyk Dashboard UI provides a simple method for assigning APIs to categories, removing categories and filtering the API list by category. @@ -93,3 +93,6 @@ These endpoints will return information for categories across all APIs in the sy | `GET` | `/api/apis/categories` | Retrieve a list of all categories defined in the system and the number of APIs in each | | `GET` | `/api/apis?category={category_name}` | Retrieve a list of all APIs assigned to the specified category | +### Tyk Operator + +You can manage categories using Tyk Operator custom resources. Please refer to [Tyk Operator]({{}}) documentation to see how to manage API categories for Tyk OAS APIs and Tyk Classic APIs. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration.md b/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration.md index 7fe52a0985..6a143e9690 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration.md @@ -88,7 +88,7 @@ TYK_PMP_UPTIMEPUMPCONFIG_TYPE=postgres TYK_PMP_UPTIMEPUMPCONFIG_CONNECTIONSTRING=user=postgres password=topsecretpassword host=tyk-postgres port=5432 database=tyk_analytics ``` -Further details for configuring an uptime SQL database are available [here]({{< ref "tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables#sql-uptime-pump" >}}) +Further details for configuring an uptime SQL database are available [here]({{< ref "tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables#uptime_pump_configuptime_type" >}}) #### How To Configure Tyk Pump To Write Uptime Data To A Mongo Database? @@ -104,7 +104,7 @@ TYK_PMP_UPTIMEPUMPCONFIG_MONGOURL=mongodb://db_host_name:27017/tyk_uptime_db TYK_PMP_UPTIMEPUMPCONFIG_COLLECTIONNAME=umptime_analytics ``` -Further details for configuring a Tyk Mongo Pump are available [here]({{< ref "tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables#mongo-uptime-pump" >}}>) +Further details for configuring a Tyk Mongo Pump are available [here]({{< ref "tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables#uptime_pump_config" >}}) ### How to Configure Tyk Pump To Write Logs? @@ -164,6 +164,12 @@ Aggregated analytics corresponds to data that is used for the display of charts #### How To Configure Tyk Pump To Write Aggregated Analytics To A SQL Database? +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + Storage of aggregated analytics data has been tested with PostgreSQL and SqlLite databases. The following environment variables can be used to manage this configuration: - *TYK_PMP_PUMPS_SQLAGGREGATE_TYPE*: Set to *sql_aggregate* to configure Pump to store aggregated analytics data for charts and graphs in dashboard to a SQL based database. diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4.md index 242fbc38b0..f33901c511 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4.md @@ -15,7 +15,7 @@ Here are the packages and their versions we are releasing today: Tyk Gateway v2. ### Mutual TLS -A major feature of this release is the implementation of Mutual TLS. Now you can protect your APIs by allow listing certificates, idenitfy users based on them, and increase security between Tyk and upstream API. For details, see [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}). +A major feature of this release is the implementation of Mutual TLS. Now you can protect your APIs by allow listing certificates, idenitfy users based on them, and increase security between Tyk and upstream API. For details, see [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}). ### Extended use of Multiple Policies @@ -78,7 +78,7 @@ This release is packed with way more more cool stuff. Here are detailed release ### Tyk Gateway v2.4.0 #### Mutual TLS support -[Docs]({{< ref "basic-config-and-security/security/mutual-tls" >}}) +[Docs]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) #### Global API rate limits [Docs]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting" >}}) @@ -121,7 +121,7 @@ We have added a new `log_level` configuration variable to `tyk.conf` to control Possible values are: `debug`, `info`, `warn`, `error` -[Docs]({{< ref "tyk-oss-gateway/configuration#a-name-log-level-a-log-level" >}}) +[Docs]({{< ref "tyk-oss-gateway/configuration#log_level" >}}) #### Added jsonMarshal to body transform templates @@ -163,7 +163,7 @@ This was very resource consuming and unstable feature. We recommend using load b ### Tyk Dashboard v1.4.0 #### Mutual TLS support -[Docs]({{< ref "basic-config-and-security/security/mutual-tls" >}}) +[Docs]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) #### Global API rate limits [Docs]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting" >}}) @@ -267,7 +267,7 @@ This is a UI only fix, it is still allowable via the API (which is OK). See https://tyk.io/docs/configure/tyk-pump-configuration/ for a sample pump.conf file. ### MDCB v1.4.0 -Added support for Mutual TLS, mentioned by Gateway and Dashboard above. See [Docs]({{< ref "basic-config-and-security/security/mutual-tls#a-name-mdcb-a-mdcb" >}}) +Added support for Mutual TLS, mentioned by Gateway and Dashboard above. See [Docs]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) Also fixed bug when Mongo connections became growing though the roof if client with wrong credentials tries to connect. @@ -282,7 +282,7 @@ Tyk Identity Broker now fully support LDAP search with complex filters! [Docs]({ Cloud users will be automatically upgraded to the new release. -Hybrid users should follow the upgrade instructions [here]({{< ref "upgrading-tyk#tyk-multi-cloud-gateway" >}}). +Hybrid users should follow the upgrade instructions [here]({{< ref "upgrading-tyk#upgrade-guides-toc" >}}). Self-Managed users can download the new release packages from their usual repositories. diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5.md index 598e2d31ae..2372b8e9ef 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5.md @@ -65,13 +65,13 @@ You can disable URL encoding using a new boolean `http_server_options` setting: `skip_target_path_escaping` -[Docs]({{< ref "tyk-oss-gateway/configuration#a-name-http-server-options-a-http-server-options" >}}) +[Docs]({{< ref "tyk-oss-gateway/configuration#http_server_options" >}}) #### Enable Key Logging By default all key ids in logs are hidden. You can now turn it on if you want to see them for debugging reasons using the `enable_key_logging` option. -[Docs]({{< ref "tyk-oss-gateway/configuration#a-name-enable-key-logging-a-enable-key-logging" >}}) +[Docs]({{< ref "tyk-oss-gateway/configuration#enable_key_logging" >}}) #### Specify TLS Cipher Suites diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9.md index ddd3528e2c..42696ab3b7 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9.md @@ -38,7 +38,7 @@ Other changes: Now you can set granular permissions on per user basis, by injecting permissions to the "scope" claim of a JSON Web Token. To make it work you need to provide mapping between the scope and policy ID, and thanks to enchanced policy merging capabilities mentioned above, Tyk will read the scope value from the JWT and will generate dynamic access rules. Your JWT scopes can look like `"users:read companies:write"` or similar, it is up to your imagination. OpenID supports it as well, but at the moment only if your OIDC provider can generate ID tokens in JWT format (which is very common this days). -See our [JWT Scope docs]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens#jwt-scope-to-policy-mapping-support" >}}) for more details. +See our [JWT Scope docs]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) for more details. ### Go plugins diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/overview.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/overview.md index 8380b7d275..c4fe94d83c 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/overview.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/overview.md @@ -8,6 +8,7 @@ This page provides access to release notes for Tyk Dashboard. Links to archived ### Release 5 +- [v5.6]({{< ref "product-stack/tyk-dashboard/release-notes/version-5.6.md" >}}) - [v5.5]({{< ref "product-stack/tyk-dashboard/release-notes/version-5.5.md" >}}) - [v5.4]({{< ref "product-stack/tyk-dashboard/release-notes/version-5.4.md" >}}) - [v5.3]({{< ref "product-stack/tyk-dashboard/release-notes/version-5.3.md" >}}) - LTS diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-3.0.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-3.0.md index 5237a17b95..b9873f1332 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-3.0.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-3.0.md @@ -63,7 +63,7 @@ Want to reference secrets from a KV store in your API definitions? We now have n We added a new middleware hook allowing middleware to modify the response from the upstream. Using response middleware you can transform, inspect or obfuscate parts of the response body or response headers, or fire an event or webhook based on information received by the upstream service. -At the moment the Response hook is supported for [Python and gRPC plugins]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#overriding-response" >}}). +At the moment the Response hook is supported for [Python and gRPC plugins]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#coprocess-dispatcher---hooks" >}}). #### Enhanced Gateway health check API @@ -78,7 +78,7 @@ Detailed logging is used in a lot of the cases for debugging issues. Now as well New detailed logging changes are available only to our Self-Managed customers currently. -[Read More]({{< ref "tyk-stack/tyk-pump/useful-debug-modes#enabling-detailed-logging" >}}) +[Read More]({{< ref "tyk-stack/tyk-pump/useful-debug-modes" >}}) #### Better Redis failover diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-4.3.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-4.3.md index 07f7a2561d..049a725d29 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-4.3.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-4.3.md @@ -24,7 +24,7 @@ Importing OpenAPI v3 documents in order to generate Tyk OAS API definition is no - authentication mechanism - validation request rules and limit access only to the defined paths. -[Importing OAS v3 via the Dashboard]({{< ref "/content/getting-started/using-oas-definitions/import-an-oas-api.md#tutorial-using-the-tyk-dashboard" >}}) +[Importing OAS v3 via the Dashboard]({{< ref "/content/getting-started/using-oas-definitions/import-an-oas-api.md#tutorial-7-using-the-tyk-dashboard-ui" >}}) #### Updated the Tyk Dashboard version of Golang, to 1.16. diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.0.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.0.md index 2981a5b85b..bebe1b2742 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.0.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.0.md @@ -8,6 +8,29 @@ weight: 2 **This page contains all release notes for version 5.0.X displayed in reverse chronological order** +--- + +## 5.0.15 Release Notes + +### Release Date 24 October 2024 + +### Release Highlights + +This is a version bump to align with Gateway v5.0.15, no changes have been implemented in this release. + +### Breaking Changes + +There are no breaking changes in this release. + +### Upgrade instructions {#upgrade-5.0.15} + +If you are upgrading to 5.0.15, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Changelog {#Changelog-v5.0.15} + +No changes in this release. + + --- ## 5.0.14 Release Notes {#rn-v5.0.14} @@ -251,4 +274,4 @@ Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for furthe - [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/collection/27225007-374cc3d0-f16d-4620-a435-68c53553ca40) ### FAQ -Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.1.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.1.md index 40037a5013..501a4fa27b 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.1.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.1.md @@ -18,10 +18,10 @@ Minor releases are supported until our next minor comes out in Q3. **Attention warning*: Please read carefully this section. We have two topics to report: ##### Golang Version upgrade -Our Dashboard is using [Golang 1.19](https://tip.golang.org/doc/go1.19) programming language starting with the 5.1 release. This brings improvements to the code base and allows us to benefit from the latest features and security enhancements in Go. Don’t forget that, if you’re using GoPlugins, you'll need to [recompile]({{< ref "plugins/supported-languages/golang#initialise-plugin-for-gateway-51" >}}) these to maintain compatibility with the latest Gateway. +Our Dashboard is using [Golang 1.19](https://tip.golang.org/doc/go1.19) programming language starting with the 5.1 release. This brings improvements to the code base and allows us to benefit from the latest features and security enhancements in Go. Don’t forget that, if you’re using GoPlugins, you'll need to [recompile]({{< ref "plugins/supported-languages/golang#upgrading-your-tyk-gateway" >}}) these to maintain compatibility with the latest Gateway. ##### Tyk OAS APIs -To provide a superior experience with OAS APIs, we have made some changes which include various security fixes, improved validation etc. Upgrading to v5.1 from v4.x.x may be irreversible, rollback to v4.x.x could break your OAS API definitions. For this reason, we recommend making a database backup so you can always restore from the backup (of v4.X.X) in case you encounter a problem during the upgrade. Please refer to our guides for detailed information on [upgrading Tyk]({{}}) and [how to back up tyk]({{}}) +To provide a superior experience with OAS APIs, we have made some changes which include various security fixes, improved validation etc. Upgrading to v5.1 from v4.x.x may be irreversible, rollback to v4.x.x could break your OAS API definitions. For this reason, we recommend making a database backup so you can always restore from the backup (of v4.X.X) in case you encounter a problem during the upgrade. Please refer to our guides for detailed information on [upgrading Tyk]({{}}) and [how to back up tyk]({{}}) #### Deprecation There are no deprecations in this release. @@ -47,7 +47,7 @@ documentation for a full description of this new [user role]({{< ref "basic-conf ##### Import API examples from within the Dashboard In 5.0 we introduced the possibility to import API examples manually or via -[_Tyk Sync_]({{< ref "/product-stack/tyk-sync/overview" >}}). We have now extended this feature and it is now possible to do this without +[_Tyk Sync_]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}). We have now extended this feature and it is now possible to do this without leaving the Dashboard. When having an empty “Data Graphs” section you will be presented with 3 icon buttons with one of them offering you to import an Example API. @@ -94,7 +94,7 @@ size using [slave_options.rpc_pool_size]({{< ref "tyk-oss-gateway/configuration# - Added a way to display UDG examples from the [tyk-examples](https://github.com/TykTechnologies/tyk-examples) repository in the Dashboard UI - Added screens in Dashboard New Graph flow, that allows users to choose between creating a graph from scratch or importing one of our example graphs - Added a screen to display details of a UDG example API -- Added a feature to display a full [_Tyk Sync_]({{}}) command that will allow a user to import an example UDG into their Dashboard +- Added a feature to display a full [_Tyk Sync_]({{}}) command that will allow a user to import an example UDG into their Dashboard - Added `/examples` endpoint to Dashboard API that returns a list of available API examples that can later be imported into the Dashboard `GET /api/examples` - Added `/data-graphs/data-sources/import` endpoint to Dashboard API that transforms an OpenAPI document into UDG config and publishes it in Dashboard `POST /api/data-graphs/data-sources/import` - Added query param `apidef=true` to example detail endpoint in Dashboard API to retrieve the API definition of an example diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.2.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.2.md index bdf75a6723..1c48a6a103 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.2.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.2.md @@ -193,7 +193,7 @@ Fixed an issue in the Tyk Classic API Designer where if you changed the protocol
Unable to configure external OAuth flow using Raw API editor -Fixed an issue in the Classic API Designer where the 'use_standard_auth' value was constantly reverting to 'true' when editing an API with an [external OAuth flow]({{< ref "basic-config-and-security/security/authentication-authorization/ext-oauth-middleware" >}}). This fix ensures the 'use_standard_auth' value remains consistent, enabling the use of external OAuth via the Raw API editor. +Fixed an issue in the Classic API Designer where the 'use_standard_auth' value was constantly reverting to 'true' when editing an API with an [external OAuth flow]({{< ref "/api-management/authentication-authorization#integrate-external-oauth-middleware" >}}). This fix ensures the 'use_standard_auth' value remains consistent, enabling the use of external OAuth via the Raw API editor.
  • @@ -415,7 +415,7 @@ We're thrilled to bring you some exciting enhancements and crucial fixes to impr Configure Caching Timeouts Per API Endpoint and Enable Advanced Caching Options From Within Dashboard -We’ve added the ability to [configure]({{< ref "/basic-config-and-security/reduce-latency/caching/advanced-cache#advanced-caching-by-endpoint" >}}) per-endpoint timeouts for Tyk’s response cache, giving you increased flexibility to tailor your APIs to your upstream services. While doing this, we’ve also fixed a longstanding issue within the *Tyk Dashboard* so that you can configure more of the [advanced caching]({{< ref "/basic-config-and-security/reduce-latency/caching/advanced-cache#configuring-endpoint-caching-in-the-dashboard" >}}) options from within the UI. +We’ve added the ability to [configure]({{< ref "product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas#configuring-the-middleware-in-the-tyk-oas-api-definition" >}}) per-endpoint timeouts for Tyk’s response cache, giving you increased flexibility to tailor your APIs to your upstream services. While doing this, we’ve also fixed a longstanding issue within the *Tyk Dashboard* so that you can configure more of the [advanced caching]({{< ref "product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas#configuring-the-middleware-in-the-api-designer" >}}) options from within the UI. #### Added Body Transform Middleware to Tyk OAS API Definition diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.3.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.3.md index 7328aa2309..303599ebfb 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.3.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.3.md @@ -2,7 +2,7 @@ title: Tyk Dashboard 5.3 LTS Release Notes date: 2023-09-27T15:49:11Z description: "Release notes documenting updates enhancements, and changes for Tyk Dashboard versions within the 5.3.X series." -tags: ["Tyk Dashboard", "Release notes", "changelog", "v5.3", "5.3.0", "5.3.1", "5.3.2", "5.3.3", "5.3.4", "5.3.5"] +tags: ["Tyk Dashboard", "Release notes", "changelog", "v5.3", "5.3.0", "5.3.1", "5.3.2", "5.3.3", "5.3.4", "5.3.5", "5.3.6", "5.3.7", "5.3.8" ] --- +| Dashboard Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.3.8 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + + +#### 3rd Party Dependencies & Tools {#3rdPartyTools-v5.3.8} + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by Tyk Dashboard | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}})| + +Given the time difference between your upgrade and the release of this version, we recommend customers verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + +This is an advanced notice that the dedicated External OAuth, OpenID Connect (OIDC) authentication options, and SQLite support will be deprecated starting in version 5.7.0. We recommend that users of the [External OAuth]({{< ref "/api-management/authentication-authorization#integrate-external-oauth-middleware" >}}) and [OpenID Connect]({{< ref "/api-management/authentication-authorization#use-openid-connect" >}}) methods migrate to Tyk's dedicated [JWT Auth]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) method. Please review your API configurations, as the Gateway logs will provide notifications for any APIs utilizing these methods. + +### Upgrade Instructions +If you are upgrading to 5.3.8, please follow the detailed [upgrade instructions](#upgrading-tyk). + + +### Downloads +- [Docker Image to pull](https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=&page_size=&ordering=&name=v5.3.8) + - ```bash + docker pull tykio/tyk-dashboard:v5.3.8 + ``` +- Helm charts + - [tyk-charts v2.0.0]({{< ref "product-stack/tyk-charts/release-notes/version-2.0.md" >}}) + +### Changelog {#Changelog-v5.3.8} + +#### Added + +
      +
    • +
      +Advanced notice of deprecation of dedicated External OAuth and OpenID Connect auth options + +The UI now displays a deprecation notice for the dedicated [External OAuth]({{< ref "/api-management/authentication-authorization#integrate-external-oauth-middleware" >}}) and [OpenID Connect (OIDC)]({{< ref "/api-management/authentication-authorization#use-openid-connect" >}}) authentication mechanisms. This provides advanced notification that these authentication options will be deprecated in version 5.7.0. Users are advised to migrate to the [JWT Auth]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) method, which supports integration with both OAuth and OIDC providers, in preparation for future upgrade. +
      +
    • +
    + +#### Fixed + +
      +
    • +
      +User Group dropdown limitations in Dashboard + +Fixed an issue with the user group dropdown in the Dashboard UI, ensuring that all available user groups are displayed when creating a new user. +
      +
    • +
    • +
      +Rate Limiting settings not saved when Upstream Certificates enabled for Tyk OAS API + +Fixed an issue in the Tyk OAS API Designer where Rate Limiting settings were not saved when Upstream Certificates were enabled. This fix ensures that both Rate Limits and Upstream Certificates configurations can now be saved together +
      +
    • +
    + +--- +## 5.3.7 Release Notes + +### Release Date 22 October 2024 + +### Release Highlights + +This is a version bump to align with Gateway v5.3.7, no changes have been implemented in this release. + +### Breaking Changes + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.3.7} + +#### Compatibility Matrix For Tyk Components + +| Dashboard Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.3.7 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + + +#### 3rd Party Dependencies & Tools {#3rdPartyTools-v5.3.7} + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by Tyk Dashboard | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}})| + +### Deprecations + +There are no deprecations in this release. + +### Upgrade instructions {#upgrade-5.3.7} + +If you are upgrading to 5.3.7, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads +- [Docker Image to pull](https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=&page_size=&ordering=&name=v5.3.7) +- ```bash + docker pull tykio/tyk-dashboard:v5.3.7 + ``` +- Helm charts + - [Tyk Charts v2.0.0]({{}}) + +### Changelog {#Changelog-v5.3.7} + +No changes in this release. + +--- + +## 5.3.6 Release Notes + +### Release Date 04 October 2024 + +### Release Highlights + +This release primarily focuses on bug fixes. For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.3.6">}}) below. + +### Breaking Changes +**Attention**: Please read this section carefully. +Docker images are now based on [distroless](https://github.com/GoogleContainerTools/distroless). No shell is shipped in the image. + +If moving from a version of Tyk older than 5.3.0 please read the explanation provided with [5.3.0 release]({{< ref "#TykOAS-v5.3.0">}}). + +### Deprecations +There are no deprecations in this release. + +### Upgrade Instructions +When upgrading to 5.3.6, please follow the [detailed upgrade instructions](#upgrading-tyk). + +### Dependencies {#dependencies-5.3.6} + + +With MongoDB 4.4 reaching [EOL](https://www.mongodb.com/legal/support-policy/lifecycles) in February 2024, we can no longer guarantee full compatibility with this version of the database. If you are [using MongoDB]({{< ref "planning-for-production/database-settings/mongodb" >}}) we recommend that you upgrade to a version that we have tested with, as indicated [below](#3rdPartyTools-v5.3.6). + + +With PostgreSQL v11 reaching [EOL](https://www.postgresql.org/support/versioning/) in November 2023, we can no longer guarantee full compatibility with this version of the database. If you are [using PostgreSQL]({{< ref "planning-for-production/database-settings/postgresql" >}}) we recommend that you upgrade to a version that we have tested with, as indicated [below](#3rdPartyTools-v5.3.6). + + +#### Compatibility Matrix For Tyk Components + +| Dashboard Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.3.6 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + + +#### 3rd Party Dependencies & Tools {#3rdPartyTools-v5.3.6} + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by Tyk Dashboard | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}})| + +### Downloads +- [Docker Image to pull](https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=&page_size=&ordering=&name=v5.3.6) + - ```bash + docker pull tykio/tyk-dashboard:v5.3.6 + ``` +- Helm charts + - [tyk-charts v2.0]({{< ref "product-stack/tyk-charts/release-notes/version-2.0.md" >}}) + +### Changelog {#Changelog-v5.3.6} + + +#### Changed + +
      +
    • +
      +Upgrade to Go 1.22 for Tyk Dashboard +The Tyk Dashboard has been upgraded from Golang 1.21 to Golang 1.22, bringing enhanced performance, strengthened security, and access to the latest features available in the new Golang release. +
      +
    • +
    • +
      + Introducing Distroless Containers for Tyk Dashboard (2024 LTS) + + In this release, we've enhanced the security of the Tyk Dashboard image by changing the build process to support [distroless](https://github.com/GoogleContainerTools/distroless) containers. This significant update addresses critical CVEs associated with Debian, ensuring a more secure and minimal runtime environment. Distroless containers reduce the attack surface by eliminating unnecessary packages, which bolsters the security of your deployments. +
      +
    • +
    + +#### Fixed + +
      +
    • +
      +Gateway secret could be exposed in debug logs + + +Resolved an issue where the Gateway secret was inadvertently included in the log generated by the Dashboard for a call to the `/api/keys` endpoint when in debug mode. This issue has been fixed to prevent sensitive information from appearing in system logs. +
      +
    • + +
    • +
      +Dashboard didn't display correctly if more than 10 policies assigned to a key + + +We have resolved an issue where the Keys page would display a blank screen if a key was associated with more than 10 policies. The UI has been fixed to display the page properly, regardless of the number of policies attached to a key. +
      +
    • + +
    • +
      +Dashboard UI did not prevent multiple versions of a Tyk Classic API from being assigned to a policy + +When working with Tyk Classic APIs, you cannot permit access to multiple versions of the same API from a single policy. We have fixed an issue in the Dashboard UI where users were able to attach multiple versions to a policy leading to an unusable policy. The UI now correctly prevents the addition of multiple versions of an API to a single policy. +
      +
    • + +
    • +
      +Dashboard didn't correctly record scope to policy mappings for JWTs + + +We have fixed an issue in the Dashboard UI when assigning multiple claim to policy mappings while configuring JWT auth for an API. The scope name was incorrectly recorded instead of the policy ID for the second and subsequent JWT scope mappings. The UI now correctly associates the defined claim with the appropriate policy, ensuring accurate JWT scope to policy mappings. +
      +
    • + +
    + +#### Security Fixes + +
      +
    • +
      +High priority CVEs fixed + +Fixed the following high-priority CVEs identified in the Tyk Dashboard, providing increased protection against security vulnerabilities: +- [CVE-2024-6104](https://nvd.nist.gov/vuln/detail/CVE-2024-6104) +
      +
    • + +
    + +--- + ## 5.3.5 Release Notes @@ -43,7 +372,7 @@ There are no deprecations in this release. ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.5, please follow the [detailed upgrade instructions](#upgrading-tyk). ### Dependencies {#dependencies-5.3.5} @@ -114,7 +443,8 @@ There are no breaking changes in this release, however, if moving from a version There are no deprecations in this release. ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.4 please follow the [detailed upgrade instructions](#upgrading-tyk). + ### Release Highlights For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.3.4">}}) below. @@ -227,7 +557,7 @@ There are no breaking changes in this release, however, if moving from a version There are no deprecations in this release. ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.3 please follow the [detailed upgrade instructions](#upgrading-tyk). ### Release Highlights @@ -357,7 +687,7 @@ There are no deprecations in this release. ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.2 please follow the [detailed upgrade instructions](#upgrading-tyk). ### Release Highlights @@ -501,7 +831,8 @@ There are no breaking changes in this release, however if moving from a version There are no deprecations in this release. ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.1, please follow the [detailed upgrade instructions](#upgrading-tyk). + ### Release Highlights This release primarily focuses on bug fixes. @@ -746,10 +1077,10 @@ There are no deprecations in this release. **The following steps are essential to follow before upgrading** -1. For Self Managed deployments - Backup Your environment using the [usual guidance]({{}}) documented with every release (this includes backup config file and database). +1. For Self Managed deployments - Backup Your environment using the [usual guidance]({{}}) documented with every release (this includes backup config file and database). 2. For all deployments - Backup all your API definitions (Tyk OAS API and Classic Definitions): - For Tyk Cloud deployments - To perform the backup please use our guide for [exporting APIs and policies]({{}}). - - For Self-Managed deployments - To perform the backup please use [Tyk Sync]({{}}). + - For Self-Managed deployments - To perform the backup please use [Tyk Sync]({{}}). 4. Performing the upgrade - For all deployments, follow the instructions in the [upgrade guide](#upgrading-tyk) when upgrading Tyk. ### Release Highlights diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.5.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.5.md index c94240c75d..de8eb61c97 100644 --- a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.5.md +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.5.md @@ -2,7 +2,7 @@ title: Tyk Dashboard 5.5 Release Notes date: 2024-03-27T15:51:11Z description: "Release notes documenting updates, enhancements, and changes for Tyk Dashboard versions within the 5.5.X series." -tags: ["Tyk Dashboard", "Release notes", "changelog", "v5.5", "5.5", "5.5.0", "5.5.1"] +tags: ["Tyk Dashboard", "Release notes", "changelog", "v5.5", "5.5", "5.5.0", "5.5.1", "5.5.2"] --- **This page contains all release notes for version 5.5.X displayed in a reverse chronological order** @@ -13,6 +13,64 @@ Our minor releases are supported until our next minor comes out. --- +## 5.5.2 Release Notes + +### Release Date 03 October 2024 + +### Release Highlights + +This release replaces Tyk Dashboard 5.5.1 which was accidentally released as a non-distroless image. + +### Breaking Changes + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.5.2} + +#### Compatibility Matrix For Tyk Components + +| Dashboard Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.5.2 | MDCB v2.7 | MDCB v2.5.1 | +| | Operator v0.18 | Operator v0.17 | +| | Sync v1.5 | Sync v1.4.3 | +| | Helm Chart v2.0.0 | Helm all versions | +| | EDP v1.10 | EDP all versions | +| | Pump v1.11 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools {#3rdPartyTools-v5.5.2} + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.21 | 1.21 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by Tyk Dashboard | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}})| + +### Deprecations + +There are no deprecations in this release. + +### Upgrade instructions {#upgrade-5.5.2} + +If you are upgrading to 5.5.2, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads +- [Docker Image to pull](https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=&page_size=&ordering=&name=v5.5.2) +- ```bash + docker pull tykio/tyk-dashboard:v5.5.2 + ``` +- Helm charts + - [Tyk Charts v2.0.0]({{}}) + +### Changelog {#Changelog-v5.5.2} + +No changes in this release. + +--- + ## 5.5.1 Release Notes ### Release Date 26 September 2024 diff --git a/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.6.md b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.6.md new file mode 100644 index 0000000000..a2cfd9ff13 --- /dev/null +++ b/tyk-docs/content/product-stack/tyk-dashboard/release-notes/version-5.6.md @@ -0,0 +1,330 @@ +--- +title: Tyk Dashboard 5.6 Release Notes +date: 2024-10-08T15:51:11Z +description: "Release notes documenting updates, enhancements, and changes for Tyk Dashboard versions within the 5.6.X series." +tags: ["Tyk Dashboard", "Release notes", "v5.6", "5.6.0", "5.6", "changelog"] +--- + + +**This page contains all release notes for version 5.6.X displayed in a reverse chronological order** + +## Support Lifetime + +Our minor releases are supported until our next minor comes out. + +--- + +## 5.6.1 Release Notes + +### Release Date 18 October 2024 + +### Release Highlights + +This is a version bump to align with Gateway v5.6.1, no changes have been implemented in this release. + +### Breaking Changes + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.6.1} + +#### Compatibility Matrix For Tyk Components + +| Dashboard Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.6.1 | MDCB v2.7.1 | MDCB v2.5.1 | +| | Operator v1.0.0 | Operator v0.17 | +| | Sync v2.0 | Sync v1.4.3 | +| | Helm Chart v2.1 | Helm all versions | +| | EDP v1.11 | EDP all versions | +| | Pump v1.11 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools {#3rdPartyTools-v5.6.1} + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by Tyk Dashboard | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}})| + +### Deprecations + +There are no deprecations in this release. + +### Upgrade instructions {#upgrade-5.6.1} + +If you are upgrading to 5.6.1, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads +- [Docker Image to pull](https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=&page_size=&ordering=&name=v5.6.1) +- ```bash + docker pull tykio/tyk-dashboard:v5.6.1 + ``` +- Helm charts + - [Tyk Charts v2.0.0]({{}}) + +### Changelog {#Changelog-v5.6.1} + +No changes in this release. + + +--- +## 5.6.0 Release Notes + +### Release Date 10 October 2024 + +### Release Highlights + +We are thrilled to announce new updates and improvements in Tyk 5.6.0, bringing more control, flexibility, and performance. For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.6.0">}}) below. + +#### Per endpoint Rate Limiting for clients + +Now you can configure rate limits at the [endpoint level per client]({{< ref "getting-started/key-concepts/rate-limiting#key-level-rate-limiting" >}}), using new configuration options in the access key. Use Tyk's powerful [security policies]({{< ref "getting-started/key-concepts/what-is-a-security-policy" >}}) to create templates to set appropriate rate limits for your different categories of user. + +#### Go upgrade to 1.22 + +We’ve upgraded the Tyk Dashboard to Golang 1.22, bringing improved performance, better security, and enhanced stability to the core system. + +#### Strengthened Role-Based Access Controls (RBAC) to combat privilege escalation risks + +We’ve tightened up the rules that govern a user's ability to create admin users and to reset other users' passwords when using Tyk's RBAC function. Now, only super-admins can create new admins, admin roles can't be assigned to user groups, and only admin users can reset another user's password (and only within their Tyk organization). + +### Breaking Changes + + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.6.0} + +#### Compatibility Matrix For Tyk Components + +| Dashboard Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.6.0 | MDCB v2.7.1 | MDCB v2.5.1 | +| | Operator v1.0.0 | Operator v0.17 | +| | Sync v2.0 | Sync v1.4.3 | +| | Helm Chart v2.1 | Helm all versions | +| | EDP v1.11 | EDP all versions | +| | Pump v1.11 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools {#3rdPartyTools-v5.6.0} + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [GoLang](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Dashboard | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 5.0.x, 6.0.x, 7.0.x | Used by Tyk Dashboard | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by Tyk Dashboard | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}})| + +### Deprecations + + +We are deprecating support for SQLite, External OAuth Middleware, and OpenID Connect (OIDC) Middleware in Tyk Dashboard to simplify the platform and enhance overall performance. These changes will take effect from 5.7.0. + +### Why the Change? + +### SQLite + +While useful for testing, SQLite is not designed for production environments. By focusing on PostgreSQL and MongoDB, we can provide users with more scalable and reliable options. + +### External OAuth Middleware + +This feature serves a similar purpose to our JWT Authentication and may lead to confusion. We recommend transitioning to JWT Authentication for a more streamlined experience. + +### OpenID Connect (OIDC) Middleware + +The low adoption of this option, along with its functional overlap with other supported authentication methods, prompts us to deprecate OIDC middleware to reduce complexity within the platform. We recommend users transition to JWT Authentication. + + +We encourage users to switch to the recommended alternatives. For more detailed information, please refer to the [Documentation](https://tyk.io/docs//api-management/authentication-authorization#use-openid-connect/) + + + + +### Upgrade instructions {#upgrade-5.6.0} +If you are upgrading to 5.6.0, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads +- [Docker Image to pull](https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=&page_size=&ordering=&name=v5.6.0) +- ```bash + docker pull tykio/tyk-dashboard:v5.6.0 + ``` +- Helm charts + - [tyk-charts v2.1.0]({{}}) + +### Changelog {#Changelog-v5.6.0} + +#### Added + +
      +
    • +
      +Per endpoint client rate limiting + +Building on the [per-endpoint upstream rate limits]({{< ref "getting-started/key-concepts/rate-limiting#api-level-rate-limiting" >}}) introduced in Tyk 5.5.0 we have now added [per-endpoint client rate limits]({{< ref "getting-started/key-concepts/rate-limiting#key-level-rate-limiting" >}}). This new feature allows for more granular control over client consumption of API resources by associating the rate limit with the access key, enabling you to manage and optimize API usage more effectively. +
      +
    • +
    + +#### Changed + + +
      +
    • +
      +Upgrade to Go 1.22 for Tyk Dashboard + +The Tyk Dashboard has been upgraded from Golang 1.21 to Golang 1.22, bringing enhanced performance, strengthened security, and access to the latest features available in the new Golang release. +
      +
    • +
    • +
      +Improved documentation and schema for Tyk Dashboard API + +We have updated the swagger.yml schema for Tyk Dashboard API to reflect the latest changes in product endpoints, payloads, and responses. This update includes new fields and endpoints, improved examples, documentation adjustments, and fixes for schema issues. These enhancements aim to improve usability and ensure that the documentation accurately represents the current code state. +
      +
    • + +
    • +
      +Renamed GraphQL "Playground" tab to "Playgrounds" + +The "Playground" tab in the GraphQL API Designer has been renamed to "Playgrounds." This change consolidates access to both internal and external playgrounds within a single section, offering a more streamlined and intuitive experience for API design and testing. +
      +
    • +
    + +#### Fixed + +
      +
    • +
      +Addressed some display issues in Dashboard Analytics and Classic Portal when using PostgreSQL storage + +- Resolved an issue where HTTP 429 status codes were not being displayed on the Activity Overview page. +- Fixed portal graphs by adding a default "day" grouping resolution to the query. +- Corrected issues with the Error Breakdown related to date parameters, ensuring accurate date handling and display. + +
      +
    • + +
    • +
      +Dashboard didn't display correctly if more than 10 policies assigned to a key + +We have resolved an issue where the Keys page would display a blank screen if a key was associated with more than 10 policies. The UI has been fixed to display the page properly, regardless of the number of policies attached to a key. + +
      +
    • + +
    • +
      +Dashboard UI did not prevent multiple versions of a Tyk Classic API from being assigned to a policy + +When working with Tyk Classic APIs, you cannot permit access to multiple versions of the same API from a single policy. We have fixed an issue in the Dashboard UI where users were able to attach multiple versions to a policy leading to an unusable policy. The UI now correctly prevents the addition of multiple versions of an API to a single policy. + +
      +
    • + +
    • +
      +Dashboard didn't correctly record scope to policy mappings for JWTs + +We have fixed an issue in the Dashboard UI when assigning multiple claim to policy mappings while configuring JWT auth for an API. The scope name was incorrectly recorded instead of the policy ID for the second and subsequent JWT scope mappings. The UI now correctly associates the defined claim with the appropriate policy, ensuring accurate JWT scope to policy mappings. + +
      +
    • + +
    • +
      +Gateway logs page not displaying correctly + +We have fixed an issue in the Monitoring section of the Dashboard UI where the *Gateway logs* page was not displaying correctly. The page is now rendered properly, ensuring users with appropriate permissions can view and manage *Gateway logs* as expected. + +
      +
    • + +
    + + + +--- + + + + +## Further Information + +### Upgrading Tyk +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance on the upgrade strategy. + +### API Documentation + +- [OpenAPI Document]({{}}) +- [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/overview) + +### FAQ + +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. + + + diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/configuration.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/configuration.md index 10506dfcd7..92cc503a25 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/configuration.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/configuration.md @@ -274,6 +274,46 @@ Values for TLS Versions: **Description**: API secret for enabling [Single Sign-on (SSO) flow]({{< ref "/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso.md" >}}) with the Tyk Identity Broker. You can specify any string value in this setting. Omit this setting if you don't require SSO. +## Response Headers Configuration +This section explains how to configure custom HTTP response headers that will be added to all responses from the Portal. + +### PORTAL_RESPONSE_HEADERS +**Config file:** ResponseHeaders
    +**Type:** `[]{Key: string, Value: string}`
    +**Description**: Configures custom HTTP response headers that will be added to all responses from the Portal. The value must be a JSON array of objects containing Key and Value fields. + +**Example configuration via environment variable:** +```bash +export PORTAL_RESPONSE_HEADERS='[{"Key":"X-Frame-Options", "Value":"DENY"}, {"Key":"Content-Security-Policy", "Value":"default-src '\''self'\''"}]' +``` + +**Example configuration via config file:** +```json +{ + "ResponseHeaders": [ + { + "Key": "X-Frame-Options", + "Value": "DENY" + }, + { + "Key": "Content-Security-Policy", + "Value": "default-src 'self'" + } + ] +} +``` + +**Common use cases include:** +- Security headers (X-Frame-Options, Content-Security-Policy) +- CORS headers +- Cache control headers +- Custom application headers + +If the JSON format is invalid, the Portal will return an error message indicating the correct format: +``` +Invalid value for PORTAL_RESPONSE_HEADERS. Valid Format: '[{"Key":"header-key", "Value":"value-for-given-key"}]' +``` + ## Storage settings Using variables from this section, you can configure storage for the portal's CMS assets such as themes, images, and Open API Specification files. The portal supports two types of storage: - S3 volume; @@ -526,12 +566,26 @@ PORTAL_CORS_ALLOWED_METHODS=GET,POST,HEAD **Type:** `int`
    **Description**: Indicates how long the results of a preflight request can be cached. The default value is `0` which stands for no max age. +### PORTAL_DISABLE_CSRF_CHECK +**Config file:** DisableCSRFCheck
    +**Type:** `bool`
    +**Description**: When set to `true`, disables CSRF protection for all routes. By default, CSRF protection is enabled to prevent cross-site request forgery attacks. Only disable this in development environments or when you have alternative security measures in place. ### PORTAL_CORS_ALLOW_CREDENTIALS **Config file:** CORS.AllowCredentials
    **Type:** `boolean`
    **Description**: Indicates whether the request can include user credentials like cookies, HTTP authentication or client side SSL certificates. The default is `false`. +### PORTAL_TIB_ENABLED +**Config file:** TIB.Enabled
    +**Type:** `boolean`
    +**Description**: Enables or disables the Tyk Identity Broker (TIB) integration. When disabled, it will not appear in the UI. The default value is `false`. + +### PORTAL_NOTIFICATIONS_JOB_FREQUENCY +**Config file:** NotificationsJobFrequency
    +**Type:** `int`
    +**Description**: Defines the frequency of the notifications job that fetch notifications from the portal's database in minutes. The default value is `30` minutes. + ## Sample config file ```json @@ -574,6 +628,9 @@ PORTAL_CORS_ALLOWED_METHODS=GET,POST,HEAD "EnableLogs": true, "MaxRetries": 3, "RetryDelay": 2000 + }, + "TIB": { + "Enabled": true } } ``` @@ -604,4 +661,5 @@ PORTAL_DATABASE_CONNECTIONSTRING="admin:secr3t@(localhost:3308)/portal?charset=u PORTAL_DATABASE_ENABLELOGS=true PORTAL_DATABASE_MAXRETRIES=3 PORTAL_DATABASE_RETRYDELAY=5000 -``` +PORTAL_TIB_ENABLED=true +``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal.md index 954942911e..89a4a1cf0d 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal.md @@ -68,5 +68,12 @@ In terms of admin functionality, the only limitation will be the inability to ap ### Does the portal support SQL databases for storing the portal's CMS assets? + +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + Yes, since 1.4.0 version of the Enterprise Developer Portal, it supports SQL databases (MariaDB, SQLite, MySQL, and PostgreSQL) for storing the portal's CMS assets. During the bootstrap process, the portal will create the appropriate tables in the main database. The only thing required to enable SQL storage for the portal's assets is to specify the `db` [storage type]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_storage" >}}) either via a config file or an environment variable. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker.md index 0a0b5d18e6..f317d1fe4d 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker.md @@ -159,6 +159,12 @@ The above MySQL configuration is an example. You can customize deployment of you Please refer to the [MySQL documentation](https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html) for further guidance. {{< /warning >}} +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + #### Create an environment variables file Creating an environment variables file to specify settings for the portal is the next step. This is optional, as you can alternatively specify all the variables using the -e option when starting your deployment. diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm.md index 6b391faaac..af16a95447 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm.md @@ -42,6 +42,12 @@ Where `TYK_ORG` and `TYK_AUTH` are the Tyk Dashboard Organization ID and the Tyk ## Config settings +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + You must set the following values in the `values.yaml` or with `--set {field-name}={field-value}` with the helm upgrade command: | Field Name | Description | diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm.md index 42bfd206ba..72d546947e 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm.md @@ -48,6 +48,13 @@ sudo rpm -i portal-1.7.0-1.x86_64.rpm ### Configure and launch the portal #### Update the configuration file with your license + +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + Before starting the portal service, you need to configure the portal. Once the rpm package has been installed, the portal configuration file will be located in `/opt/portal/portal.conf`. Initially, the config file is filled with the default values. The minimal configuration change to start the portal is to add the `LicenseKey` property to the config file. The below sample configuration will start the portal on portal 3001 with SQLite as a database, no TLS enabled, and all CMS assets (images, theme files, etc.) are stored in the filesystem. diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model.md index 5587abe4fc..3a3f5b3880 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model.md @@ -3,10 +3,6 @@ title: "Customize the User model" date: 2024-02-29 tags: ["Tyk Developer Portal","Enterprise Portal","Sign-up","User attributes","Metadata"] description: "Customize the User model and extend the data stored in the User profile" -menu: - main: - parent: "Customize the portal" -weight: 3 --- {{< note success >}} @@ -68,7 +64,7 @@ By default, the portal assigns the following attributes to credentials metadata |-----------------|---------------------------------------|-----------------------------------------------------------------------------------| | Developer ID | DeveloperID | ID of the developer who created the credential | | Application ID | ApplicationID | ID of the application to which it belongs | -| Organization ID | OrganizationID | ID of the organization to which the developer who created the application belongs | +| Organisation ID | OrganisationID | ID of the organization to which the developer who created the application belongs | | Team IDs | TeamIDs | Array of team IDs to which the developer, who created the application, belongs | Additionally, it is possible to include other default attributes of the User model in the credential metadata fields. @@ -80,5 +76,5 @@ Exercise caution when dealing with personally identifiable information (PII). Ad | Last name | Last | Last name of the developer who created the credential | | Email | Email | Email name of the developer who created the credential | | Role | Role | Array of team IDs to which the developer, who created the application, belongs | -| Organization name | Organization | Name of the organization to which the developer who created the application belongs | +| Organisation name | Organisation | Name of the organization to which the developer who created the application belongs | | Teams name | TeamNames | Array of team names to which the developer, who created the application, belongs | \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0.md index 211c0a58b9..fc2be89d08 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0.md @@ -60,7 +60,7 @@ To upgrade the portal's theme please follow the [upgrade instructions]({{< ref " - Added APIs to manage blog posts along with their tags and categories. - Added a new API endpoint that allows the rotation of API credentials. - UI and API for themes soft delete. Soft deleted themes are not shown in the UI and API, but are kept in the database for future reference. -- Added new TLS variables to set MinVersion ([PORTAL_TLSCONFIG_MINVERSION]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_tlsconfig_minversion" >}}), MaxVersion ([PORTAL_TLSCONFIG_MAXVERSION]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_tlsconfig_maxversion" >}}), and CipherSuites ([PORTAL_TLS_CIPHER_SUITES]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_tls_cipher_suites" >}}). +- Added new TLS variables to set MinVersion ([portal_tls_min_version]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_tls_min_version" >}}), MaxVersion ([PORTAL_TLSCONFIG_MAXVERSION]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_tls_max_version" >}}), and CipherSuites ([PORTAL_TLS_CIPHER_SUITES]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_tls_cipher_suites" >}}). - Added a new configuration to manage the idle timeout of the portal's session ([PORTAL_SESSION_IDLE_TIMEOUT]({{< ref "/product-stack/tyk-enterprise-developer-portal/deploy/configuration#portal_session_idle_timeout" >}}). - Added CSRF protection injection to portal's form. Now you don't need to add it manually to your templates. diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.12.0.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.12.0.md new file mode 100644 index 0000000000..290dac64d6 --- /dev/null +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.12.0.md @@ -0,0 +1,237 @@ +--- +title: Tyk Enterprise Developer Portal v1.12.0 +description: Release notes documenting updates, enhancements and changes for Tyk Enterprise Developer Portal v1.12.0 +tags: ["Developer Portal", "Release notes", "changelog", "v1.12.0"] +menu: +main: +parent: "Release Notes" +weight: 7 +--- + +**Licensed Protected Product** + +## 1.12.0 Release Notes + +### Release Date 13 Nov 2024 + +### Release Highlights +The v1.12.0 release includes the following new features and improvements: +- Embedded Tyk Identity Broker. From this release, you don't need to deploy a separate Tyk Identity Broker to SSO into the portal. +- Now admins can create Apps and Credentials for developers directly from the portal admin UI. +- Credentials notifications. Now admins can configure email notifications for credential expiration and credential expiration warnings. +- Stronger passwords. Now admins can configure the password policy from the portal admin UI. +- Security: 3 new high CVEs fixed. +- Bugfixes: 4 bugs fixed. + +For a comprehensive list of changes, please refer to the detailed [changelog](#Changelog-v1.12.0) below. + +### Breaking Changes +This release has no breaking changes. + + +### Deprecations +There are no deprecations in this release. + + +### Upgrade instructions +If you are on 1.11.0 or an older version we advise you to upgrade ASAP directly to this release. + +To upgrade the portal's theme please follow the [upgrade instructions]({{< ref "product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades" >}}) for the portal's themes. + +### Download +- [Docker image v1.12.0](https://hub.docker.com/r/tykio/portal/tags?page=&page_size=&ordering=&name=v1.12.0) + - ```bash + docker pull tykio/portal:v1.12.0 + ``` +- [The default theme package](https://github.com/TykTechnologies/portal-default-theme/releases/tag/1.12.0) + +### Changelog {#Changelog-v1.12.0} + + + +#### Added + + +
      +
    • +
      +Embedded Tyk Identity Broker + +From this release, you can configure the portal to serve an internal Tyk Identity Broker. This means that you don't need to deploy a separate Tyk Identity Broker service to SSO into the portal. +This enables a new section under the portal admin UI where admins can manage SSO profiles for admins and developers. +{{< img src="/img/dashboard/portal-management/enterprise-portal/1.12.0-embedded-tib.png" width=500px alt="SSO profiles">}} + +We support out of the box integration with the following SSO providers type: +- Open ID Connect: Support for OpenID Connect (OIDC) Identity Tokens provided by any standards compliant OIDC provider such as Auth0. +- LDAP: Bind users to an LDAP server such as Azure Active Directory, using their username and password. +- Social: The social provider should provide seamless integration with Google+ Github, Facebook, Salesforce, Digital Ocean and more. + +You can read more about the supported SSO providers [here]({{< ref "/tyk-identity-broker" >}}). + +
      +
    • +
    • +
      +Creation of Apps and Credentials + +Admins now have enhanced control over application and credential creation in the portal, streamlining the onboarding process and reducing the need for API-based setups. With this update, admins can create applications and assign them to specific users, making it easier to onboard developers who aren’t using self-service options. + +For custom authorization scenarios —like when using an external OAuth2.0 provider— admins can now issue credentials directly in the portal. These credentials are stored as key-value pairs that developers can view, providing a more seamless alternative to manual credential sharing. +{{< img src="/img/dashboard/portal-management/enterprise-portal/1.12.0-non-tyk-managed-credential.png" width=500px alt="Non-Tyk managed credential">}} + + +Admins can also generate auth token credentials, with added flexibility to define custom token values if needed for compatibility with other systems. Additionally, OAuth2.0 credentials can now be created within the portal, ensuring stable, secure access for developers with the added benefit of immutability after creation. +{{< img src="/img/dashboard/portal-management/enterprise-portal/1.12.0-custom-credential.png" width=500px alt="Custom credential">}} + +Overall, these improvements simplify the process for managing applications and credentials, offering a more streamlined experience for admins and developers alike. + +
      +
    • +
    • +
      +Password policy + +Admins can now configure the password policy from the portal admin UI. This includes setting the minimum password length, reused passwords, multi case, and more. +{{< img src="/img/dashboard/portal-management/enterprise-portal/1.12.0-password-policy.png" width=500px alt="Password policy">}} + +
      +
    • +
    • +
      +Credentials notifications + +Admins can now configure two types of notifications: +- Credential expiration: This notification is sent to developers when their credentials expire. You can modify the email template in the `keyexpired.tmpl` file included in the theme package. +- Credential expiration warnings: This notification is sent to developers when their credentials are about to expire. Admins can set the number of days before the expiration in the portal admin UI. You can modify the email template in the `keytoexpire.tmpl` file included in the theme package. + +{{< img src="/img/dashboard/portal-management/enterprise-portal/1.12.0-credential-expiration.png" width=500px alt="Credentials notifications">}} + + +
      +
    • +
    + +#### Changed + + +
      +
    • +
      +Upgrade to Go 1.22 + +The Enterprise Developer Portal has been upgraded from Golang 1.21 to Golang 1.22, bringing enhanced performance, +strengthened security, and access to the latest features available in the new Golang release. + +
      +
    • +
    + +#### Fixed + + +
      +
    • +
      +Fixed a bug where values of dropdown custom attributes weren't removed correctly + +Fixed a bug where values of dropdown custom attributes weren't removed correctly preventing admins from updating User custom attributes. + +
      +
    • +
    • +
      +Fixed a certificate upload issue in Kubernetes environments + +Fixed an issue that was causing certificate uploads to fail when the file size exceeded 2KB in Kubernetes environments. + +
      +
    • + + +
    • +
      +Fixed a bug that prevented to load OAS files from S3 storage + +We have addressed a bug that was causing the portal to fail loading OAS files from S3 storage. + +
      +
    • +
    • +
      +Fixed typos in email subjects + +We have fixed typos in email subjects that were causing notifications to be sent with incorrect information. + +
      +
    • +
    + +#### Security Fixes + + + +
      +
    • +
      +High priority CVEs fixed + +Fixed the following high priority CVEs identified in the Tyk Enterprise Developer Portal, providing increased protection against security +vulnerabilities: + +- [CVE-2024-34158](https://nvd.nist.gov/vuln/detail/CVE-2024-34158) +- [CVE-2024-34156](https://nvd.nist.gov/vuln/detail/CVE-2024-34156) +- [CVE-2022-30635](https://nvd.nist.gov/vuln/detail/CVE-2022-30635) + +
      +
    • +
    + + + + + + + +## Further Information + +### Upgrading Tyk +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance with respect to the upgrade strategy. + +### FAQ +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0.md index be76a8e672..241580df66 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0.md @@ -24,7 +24,7 @@ There are no deprecations in this release. #### Upgrade instructions If you are on 1.7.0 or an older version we advise you to upgrade ASAP directly to this release. When upgrading from 1.6.0 or earlier versions, customers may experience problems when starting the portal. One of the possible issues is the following: -- When the portal theme [manifest]({{< ref "tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow#manifest-file" >}}) has a reference to a template that is not present in the theme then the theme won't be loaded. This check that prevents admin users from uploading themes with potential errors was introduced in version [1.7.0]({{< ref "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0.md#content-blocks-validation" >}}). +- When the portal theme [manifest]({{< ref "tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts#manifest-file" >}}) has a reference to a template that is not present in the theme then the theme won't be loaded. This check that prevents admin users from uploading themes with potential errors was introduced in version [1.7.0]({{< ref "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0.md#content-blocks-validation" >}}). - At the same time, the default theme in version 1.6.0 of the portal had a reference in the theme manifest to the `portal_home` template that didn't exist in the theme. - The portal doesn't update the theme automatically because in that case any customer-made changes will be lost. Subsequently, upgrading from 1.6.0 to 1.8.0 may result in the following error when loading the theme: ```yaml diff --git a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades.md b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades.md index ad81bdba12..ceadab1a1c 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades.md @@ -107,6 +107,6 @@ Once you have merged your local changes with the latest changes from the `portal zip -r9 default.zip ``` -2. Upload the theme package that is created in the [previous step]({{< ref "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades#change-the-name-of-the-theme" >}}) to the portal. You can use the portal's [Admin dashboard]({{< ref "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts#part-1-create-a-new-theme" >}}) or the [admin API]({{< ref "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api" >}}) to do it. +2. Upload the theme package that is created in the previous step to the portal. You can use the portal's [Admin dashboard]({{< ref "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts#part-1-create-a-new-theme" >}}) or the [admin API]({{< ref "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api" >}}) to do it. ![image](https://github.com/TykTechnologies/tyk-docs/assets/14009/f0e547b2-b521-4c3e-97ce-fd3a2a3b170b) 3. Finally, you need to [activate]({{< ref "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts#part-3-activate-a-theme" >}}) the theme so that it will be applied to the portal. diff --git a/tyk-docs/content/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser.md b/tyk-docs/content/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser.md index 8f8242b14a..2d2f2b8a60 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser.md @@ -70,7 +70,7 @@ If you are running a cluster of Gateways, you must have a _GroupID_ configured f `"slave_options":{ "group_id": "FOOBAR" }` -Please see [Gateway configuration options]({{< ref "/tyk-oss-gateway/configuration##slave_optionsgroup_id" >}}) for reference +Please see [Gateway configuration options]({{< ref "/tyk-oss-gateway/configuration#slave_optionsgroup_id" >}}) for reference **2. Control Plane configuration** diff --git a/tyk-docs/content/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7.md b/tyk-docs/content/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7.md index 9b143073bf..d93216ab5d 100644 --- a/tyk-docs/content/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7.md +++ b/tyk-docs/content/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7.md @@ -11,6 +11,63 @@ Licensed Protected Product ## Support Lifetime Our minor releases are supported until our next minor comes out. +## 2.7.1 Release Notes + +##### Release date 10 October 2024 + +#### Breaking Changes +This release has no breaking changes. + +#### 3rd Party Dependencies & Tools +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by MDCB | +| [MongoDB](https://www.mongodb.com/try/download/community) | 5.0.x, 6.0.x, 7.0.x | 4.4.x, 5.0.x, 6.0.x, 7.0.x | Used by MDCB | +| [PostgreSQL](https://www.postgresql.org/download/) | 12.x - 16.x LTS | 12.x - 16.x | Used by MDCB | + +Given the time difference between your upgrade and the release of this version, we recommend customers verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. + +#### Deprecations +There are no deprecations in this release. + +#### Release Highlights + +#### Support GraphQL analytics records +MDCB (Multi-Data Center Bridge) has been enhanced to support the storage of GraphQL aggregate analytics directly. This allows for better tracking and analysis of GraphQL usage across distributed environments. This enhancement simplifies the storage and management of GraphQL analytics within MDCB, improving efficiency and ease of use. + +#### Downloads +- [Docker image v2.7.1](https://hub.docker.com/r/tykio/tyk-mdcb-docker/tags?page=&page_size=&ordering=&name=v2.7.1) +- ```bash + docker pull tykio/tyk-mdcb-docker:v2.7.1 + ``` + + +#### Changelog {#Changelog-v2.7.1} + +##### Added +
      +
    • +
      + Support the storage of GraphQL aggregate analytics +MDCB (Multi-Data Center Bridge) has been enhanced to support the storage of GraphQL aggregate analytics directly. This allows for better tracking and analysis of GraphQL usage across distributed environments when Gateway send analytics data directly to MDCB, which processes and sends the data to the analytics storage. This enhancement simplifies the storage and management of GraphQL analytics without Tyk Pump, improving efficiency and ease of use. +
      +
    • +
    + + +##### Updated +
      + +
    • +
      + Update for compatibility with API definitions for Tyk v5.6 + +MDCB 2.7.1 supports Tyk API definitions up to Tyk Gateway v5.6.0. Please use MDCB 2.7.1+ with Tyk Gateway v5.6.0+. +
      +
    • +
    +--- + ## 2.7.0 Release Notes ##### Release date 12 August 2024 diff --git a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning.md b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning.md index 2fe60dc87d..e651bac0df 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning.md +++ b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning.md @@ -121,7 +121,7 @@ This is easy to do with Tyk. You can include the deprecated endpoint in the new Tyk's access control model supports very granular permissions to versioned APIs. -You can explicitly grant access to specific version(s) of an API by specifying only those version(s) in the [key]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}}) (also known as an *authorization token*, *bearer token*, *access token*, *API token* or *token session object* - see [here]({{< ref "basic-config-and-security/security/authentication-authorization/bearer-tokens" >}})). +You can explicitly grant access to specific version(s) of an API by specifying only those version(s) in the [key]({{< ref "tyk-apis/tyk-gateway-api/token-session-object-details" >}}) (also known as an *authorization token*, *bearer token*, *access token*, *API token* or *token session object* - see [here]({{< ref "/api-management/authentication-authorization#use-bearer-tokens" >}})).
    {{< note success >}} diff --git a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli.md b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli.md index 0ba17402f9..e9224960d0 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli.md +++ b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli.md @@ -2,10 +2,16 @@ date: 2024-08-20T13:32:12Z title: Bundler CLI Tool description: "Explains usage of the bundler CLI tool" -tags: [ "Tag TODO" ] +tags: ["Bundle CLI Tool"] --- -The bundler tool is a CLI service, provided by *Tyk Gateway* as part of its binary since v2.8. This lets you generate [plugin bundles]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles" >}}). Please note that the generated plugin bundles must be served using your own web server. +The bundler tool is a CLI service, provided by _Tyk Gateway_ as part of its binary since v2.8. This lets you generate +[plugin bundles]({{< ref "/plugins/how-to-serve-plugins/plugin-bundles" >}}). + +{{< note >}} +**Note** +Generated plugin bundles must be served using your own web server. +{{< /note >}} Issue the following command to see more details on the `bundle` command: @@ -13,7 +19,86 @@ Issue the following command to see more details on the `bundle` command: /opt/tyk-gateway/bin/tyk bundle -h ``` -### Creating a plugin bundle +--- + +## Prerequisites + +To create plugin bundles you will need the following: + +- **Manifest.json**: The [manifest.json]({{< ref "plugins/how-to-serve-plugins/plugin-bundles#manifest" >}}) file + contains the paths to the plugin source files and the name of the function implementing each plugin. The + _manifest.json_ file is mandatory and must exist on the Tyk Gateway file system. By default the bundle CLI looks for + a file named _manifest.json_ in the current working directory where the bundle command is run from. The exact location + can be specified using the `--manifest` command option. +- **Plugin source code files**: The plugin source code files should be contained relative to the directory in which the + _manifest.json_ file is located. The _manifest.json_ should contain relative path references to source code files. + + {{< note >}} + **Note** + Source code files are not required when creating a plugin bundle for gRPC plugins since the plugin + source code is located at the gRPC server. + {{< /note >}} + +- **Certificate key**: Plugin bundles can optionally be signed with an RSA private key. The corresponding public key + should be located in the file configured in environmental variable `TYK_GW_PUBLICKEYPATH` or the `public_key_path` + parameter in `tyk.conf`: + +```json +{ + "enable_bundle_downloader": true, + "bundle_base_url": "http://my-bundle-server.com/bundles/", + "public_key_path": "/path/to/my/pubkey.pem" +} +``` + +--- + +## Directory Structure + +A suggested directory structure is shown below for Golang, Javascript and Python bundles in the tabs below. + +In this case, the `manifest.json` will reference the Python files located in the plugins subdirectory, ensuring the +Python plugin source files are organized relative to the manifest. The Tyk Gateway will load and execute these Python +plugins based on the paths defined in the `manifest.json` file. + +{{< tabs_start >}} {{< tab_start "Golang" >}} + +```bash +/bundle-directory +├── manifest.json # Manifest file with plugin references +└── /plugins # Subdirectory containing compiled plugin + └── plugin.so # Compiled Golang plugin +``` + +{{< tab_end >}} {{< tab_start "Javascript" >}} + +```bash +/bundle-directory +├── manifest.json # Manifest file with plugin references +└── /plugins # Subdirectory containing source files + ├── plugin1.js # First JavaScript plugin source file + └── plugin2.js # Second JavaScript plugin source file +``` + +{{< tab_end >}} + +{{< tab_start "Python" >}} + +```bash +/bundle-directory +├── manifest.json # Manifest file with plugin references +└── /plugins # Subdirectory containing source files + ├── plugin1.py # First Python plugin source file + └── plugin2.py # Second Python plugin source file +``` + +{{< tab_end >}} + +{{< tabs_end >}} + +--- + +## Creating a plugin bundle Run the following command to create the bundle: @@ -21,14 +106,15 @@ Run the following command to create the bundle: $ tyk bundle build ``` -The resulting file will contain all your specified files and a modified `manifest.json` with the checksum and signature (if required) applied, in ZIP format. +The resulting file will contain all your specified files and a modified `manifest.json` with the checksum and signature +(if required) applied, in ZIP format. -{{< note success >}} -**Note** +By default, Tyk will attempt to sign plugin bundles for improved security. If no private key is specified, the program +will prompt for a confirmation. Use `-y` to override this (see options below). -By default, Tyk will attempt to sign plugin bundles for improved security. If no private key is specified, the program will prompt for a confirmation. -Use `-y` to override this (see options below). -{{< /note >}} +--- + +## Command Options Instructions on how to create plugin bundles is displayed by issuing the following command: @@ -38,6 +124,36 @@ Instructions on how to create plugin bundles is displayed by issuing the followi The following options are supported: -- `--output`: Specifies the name of the bundle file e.g. `--output bundle-latest.zip`. If this flag is not specified, `bundle.zip` will be used. -- `-y`: Force tool to create unsigned bundle without prompting e.g. `$ tyk bundle build --output bundle-latest.zip -y`. -- `--key`: Specifies the path to your private key which is used to generate signed bundle e.g. `$ tyk bundle build --output bundle-latest.zip --key=mykey.pem`. +- `--manifest`: Specifies the path to the manifest file. This defaults to `manifest.json` within the current working + directory. +- `--output`: Specifies the name of the bundle file e.g. `--output bundle-latest.zip`. If this flag is not specified, + `bundle.zip` will be used. +- `-y`: Force tool to create unsigned bundle without prompting e.g. `$ tyk bundle build --output bundle-latest.zip -y`. +- `--key`: Specifies the path to your private key which is used to generate signed bundle e.g. + `$ tyk bundle build --output bundle-latest.zip --key=mykey.pem`. + +--- + +## Docker Example + +Since v5.5 Tyk Gateway uses distroless docker images. + +For Gateway version < v5.5 it is possible to use Docker to create plugin bundles as shown in the example below. + +```bash +docker run --rm -it \ + --name bundler \ + -v `pwd`:/plugin-source \ + -v `pwd`/../../../confs/keys:/keys \ + -w /plugin-source \ + --entrypoint /bin/bash \ + tykio/tyk-gateway:v5.4.0 \ + -c 'export PATH="/opt/tyk-gateway:$$PATH"; tyk bundle build -o bundle.zip -k /keys/key.pem' +``` + +This Docker command runs a container using the `tykio/tyk-gateway:v5.4.0` image to build a Tyk plugin bundle. It mounts +the current directory from the host as `/plugin-source` and a directory containing keys as `/keys` inside the container. +The working directory within the container is set to `/plugin-source`, and the default entrypoint is overridden to use +`/bin/bash`. The command executed in the container exports a modified `PATH` to include the Tyk Gateway binaries, then +runs `tyk bundle build` to generate a plugin bundle named `bundle.zip`, using the specified key for authentication. The +container is automatically removed after the command completes, and the operation is conducted interactively. diff --git a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow.md b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow.md index 862bd60111..e8712c80fb 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow.md +++ b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow.md @@ -1,166 +1,291 @@ --- title: Custom Go plugin development flow -date: 2024-03-04 -description: "Development flow working with Go Plugins" -tags: ["custom plugin", "golang", "go plugin", "middleware"] +tags: + - custom plugin + - golang + - go plugin + - middleware + - debugging go plugins +description: Development flow working with Go Plugins +date: "2024-10-11" --- -Go plugins must be compiled before they can be run. This applies to custom code that you want Tyk to run during the processing of API requests and responses in [custom plugins]({{< ref "plugins" >}}). In this section we describe the process and highlight important information that you must be aware of when working with custom Go plugins. +We recommend that you familiarize yourself with the following official Go documentation to help you work effectively with Go plugins: + +- [The official plugin package documentation - Warnings](https://pkg.go.dev/plugin) +- [Tutorial: Getting started with multi-module workspaces](https://go.dev/doc/tutorial/workspaces) +tags: + - custom plugin + - golang + - go plugin + - middleware + - debugging go plugins +description: Development flow working with Go Plugins +date: "2024-10-11" +--- -## Creating a custom Go plugin for Tyk +We recommend that you familiarize yourself with the following official Go documentation to help you work effectively with Go plugins: -In this section, you will find step-by-step instructions to create a working Go Plugin to implement custom logic in your API processing. +- [The official plugin package documentation - Warnings](https://pkg.go.dev/plugin) +- [Tutorial: Getting started with multi-module workspaces](https://go.dev/doc/tutorial/workspaces) -### Step 1: Initialise Go module for the plugin +{{< note success >}} +**Note** +**Note** -First we must perform some initialisation to configure the environment to build your Go Plugin. +Plugins are currently supported only on Linux, FreeBSD, and macOS, making them unsuitable for applications intended to be portable. +Plugins are currently supported only on Linux, FreeBSD, and macOS, making them unsuitable for applications intended to be portable. +{{< /note >}} -The general steps for initialising plugins can be summarised as follows: +Plugins need to be compiled to native shared object code, which can then be loaded by Tyk Gateway. It's important to understand the need for plugins to be compiled using exactly the same environment and build flags as the Gateway. To simplify this and minimise the risk of compatibility problems, we recommend the use of [Go workspaces](https://go.dev/blog/get-familiar-with-workspaces), to provide a consistent environment. -1. Create a new folder where you will create the plugin -2. Initialise a Go module for your plugin from within the new folder -3. Determine the commit hash for the Tyk Gateway version that will be used to build the plugin. Commit hashes can be found for tagged [Gateway releases](https://github.com/TykTechnologies/tyk/tags) +## Setting up your environment -{{< note success >}} -**Note** +To develop plugins, you'll need: -The process for initialising plugins changed with Tyk Gateway v5.1, please ensure that you follow the correct steps based on your Gateway version. -{{< /note >}} +- Go (matching the version used in the Gateway, which you can determine using `go.mod`). +- Git to check out Tyk Gateway source code. +- A folder with the code that you want to build into plugins. -The commands in the following sections will create a `go.mod` file inside your folder and will ensure that the plugin in compatible with your Tyk Gateway version. +We recommend that you set up a *Go workspace*, which, at the end, is going to contain: -#### Initialise plugin for Tyk Gateway v5.1 and above (v5.1+) +- `/tyk-release-x.y.z` - the Tyk Gateway source code +- `/plugins` - the plugins +- `/go.work` - the *Go workspace* file +- `/go.work.sum` - *Go workspace* package checksums -In Gateway version 5.1, the Gateway and plugins transitioned to using [Go modules builds](https://go.dev/ref/mod#introduction). +Using the *Go workspace* ensures build compatibility between the plugins and Gateway. -The example below shows the set of commands for initialising a plugin for compatibility with Tyk Gateway 5.2.1. +### 1. Checking out Tyk Gateway source code -```bash -mkdir tyk-plugin -cd tyk-plugin -go mod init tyk-plugin -go get github.com/TykTechnologies/tyk@ffa83a27d3bf793aa27e5f6e4c7106106286699d -go mod tidy +``` +git clone --branch release-5.3.6 https://github.com/TykTechnologies/tyk.git tyk-release-5.3.6 || true ``` -In the example above notice that the commit hash was used for [Tyk Gateway 5.2.1](https://github.com/TykTechnologies/tyk/releases/tag/v5.2.1) +This example uses a particular `release-5.3.6` branch, to match Tyk Gateway release 5.3.6. With newer `git` versions, you may pass `--branch v5.3.6` and it would use the tag. In case you want to use the tag it's also possible to navigate into the folder and issue `git checkout tags/v5.3.6`. -#### Initialise plugin for Tyk Gateway versions between v4.2 and v5.0 +### 2. Preparing the Go workspace -For Tyk Gateway versions earlier than v5.1 you also need to use [go mod vendor](https://go.dev/ref/mod#go-mod-vendor). +Your Go workspace can be very simple: -The example below shows how to initialise a Golang plugin module for compiling with Tyk Gateway 5.0.3. +1. Create a `.go` file containing the code for your plugin. +2. Create a `go.mod` file for the plugin. +3. Ensure the correct Go version is in use. -```bash -mkdir tyk-plugin -cd tyk-plugin -go mod init tyk-plugin -go get github.com/TykTechnologies/tyk@54e1072a6a9918e29606edf6b60def437b273d0a -go mod tidy -go mod vendor +As an example, we can use the [CustomGoPlugin.go](https://github.com/TykTechnologies/custom-go-plugin/blob/master/go/src/CustomGoPlugin.go) sample as the source for our plugin as shown: + +``` +mkdir -p plugins +cd plugins +go mod init testplugin +go mod edit -go $(go mod edit -json go.mod | jq -r .Go) +wget -q https://raw.githubusercontent.com/TykTechnologies/custom-go-plugin/refs/heads/master/go/src/CustomGoPlugin.go +cd - ``` -#### Initialise plugin for Tyk Gateway versions prior to v4.2 +The following snippet provides you with a way to get the exact Go version used by Gateway from it's [go.mod](https://github.com/TykTechnologies/tyk/blob/release-5.3.6/go.mod#L3) file: -Up to Tyk Gateway v4.2, plugin compilation relies on *graphql-go-tools*. An alias needs to be configured to associate imports of *github.com/TykTechnologies/graphql-go-tools* with *github.com/jensneuse/graphql-go-tools*. To determine the dependency version open the *go.mod* file in the associated release branch of the [Gateway repository](https://github.com/TykTechnologies/tyk). +- `go mod edit -json go.mod | jq -r .Go` (e.g. `1.22.7`) -For example, for Tyk Gateway v4.0.3, the dependency version for *graphql-go-tools* is *v1.6.2-0.20220426094453-0cc35471c1ca*. This can be found by inspecting the contents of *go.mod* in the *release-4.0.3* branch, particularly the `replace` statements within. +This should be used to ensure the version matches between gateway and the plugin. -```bash -mkdir tyk-plugin -cd tyk-plugin -go mod init tyk-plugin -go get github.com/TykTechnologies/tyk@6c76e802a29838d058588ff924358706a078d0c5 -go mod edit -replace github.com/jensneuse/graphql-go-tools=github.com/TykTechnologies/graphql-go-tools@v1.6.2-0.20220426094453-0cc35471c1ca -go mod tidy -go mod vendor -``` +To summarize what was done: + +1. We created a plugins folder and initialzed a `go` project using `go mod` command. +2. Set the Go version of `go.mod` to match the one set in the Gateway. +3. Initialzied the project with sample plugin `go` code. + +At this point, we don't have a *Go workspace* but we will create one next so that we can effectively share the Gateway dependency across Go modules. + +### 3. Creating the Go workspace + +To set up the Go workspace, start in the directory that contains the Gateway and the Plugins folder. You'll first, create the `go.work` file to set up your Go workspace, and include the `tyk-release-5.3.6` and `plugins` folders. Then, navigate to the plugins folder to fetch the Gateway dependency at the exact commit hash and run `go mod tidy` to ensure dependencies are up to date. + +Follow these commands: -### Step 2: Write your plugin +``` +go work init ./tyk-release-5.3.6 +go work use ./plugins +commit_hash=$(cd tyk-release-5.3.6 && git rev-parse HEAD) +cd plugins && go get github.com/TykTechnologies/tyk@${commit_hash} && go mod tidy && cd - +``` -We provide details of the many features available to you when writing your custom logic in the [Writing Go Plugins]({{< ref "product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins" >}}) section, but for this example we will create a plugin with very basic functionality: +The following snippet provides you to get the commit hash exactly, so it can be used with `go get`. -- we will add a custom header `"Foo: Bar"` to a request -- we want this to happen right before the request is passed to the upstream service +- `git rev-parse HEAD` -Create a file `plugin.go` with the following content: +The Go workspace file (`go.work`) should look like this: -```go -package main +``` +go 1.22.7 -import ( - "net/http" +use ( + ./plugins + ./tyk-release-5.3.6 ) +``` -// AddFooBarHeader adds custom "Foo: Bar" header to the request -func AddFooBarHeader(rw http.ResponseWriter, r *http.Request) { - r.Header.Add("Foo", "Bar") -} +### 4. Building and validating the plugin -func main() {} +Now that your *Go workspace* is ready, you can build your plugin as follows: + +``` +cd tyk-release-5.3.6 && go build -tags=goplugin -trimpath . && cd - +cd plugins && go build -trimpath -buildmode=plugin . && cd - ``` -We see that the Golang plugin: +These steps build both the Gateway and the plugin. -- is a Golang project with a `main` package -- has an empty `func main()` -- has one exported `func AddFooBarHeader` which must have the same method signature as `type HandlerFunc func(ResponseWriter, *Request)` from the standard `"net/http"` Golang package +You can use the Gateway binary that you just built to test that your new plugin loads into the Gateway without having to configure and then make a request to an API using this command: -{{< note success >}} -**Note** +``` +./tyk-release-5.3.6/tyk plugin load -f plugins/testplugin.so -s AuthCheck +``` -If a dependency that your plugin uses is also used by the gateway, the version _used by the gateway_ will be used in your plugin. This may mask conflicts between transitive dependencies. -{{< /note >}} +You should see an output similar to: + +``` +time="Oct 14 13:39:55" level=info msg="--- Go custom plugin init success! ---- " +[file=plugins/testplugin.so, symbol=AuthCheck] loaded ok, got 0x76e1aeb52140 +``` + +The log shows that the plugin has correctly loaded into the Gateway and that its `init` function has been successfully invoked. + +### 5. Summary + +In the preceding steps we have put together an end-to-end build environment for both the Gateway and the plugin. Bear in mind that runtime environments may have additional restrictions beyond Go version and build flags to which the plugin developer must pay attention. -### Step 3: Synchronise dependencies +Compatibility in general is a big concern when working with Go plugins: as the plugins are tightly coupled to the Gateway, consideration must always be made for the build restrictions enforced by environment and configuration options. -If you are working with Tyk Gateway v5.1 or later, you can skip this step. +Continue with [Loading Go Plugins into Tyk](https://tyk.io/docs/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/). -If you are working with a Tyk Gateway prior to v5.1 you must download any required dependencies to ensure that all plugin dependencies are correctly resolved. All dependencies are saved to the `vendor` folder. -Issue these commands to perform this sync: +## Debugging Golang Plugins + +Plugins are native Go code compiled to a binary shared object file. The code may depend on `cgo` and require libraries like `libc` provided by the runtime environment. The following are some debugging steps for diagnosing issues arising from using plugins. + +### Warnings + +The [Plugin package - Warnings](https://pkg.go.dev/plugin#hdr-Warnings) section in the Go documentation outlines several requirements which can't be ignored when working with plugins. The most important restriction is the following: + +> Runtime crashes are likely to occur unless all parts of the program (the application and all its plugins) are compiled using exactly the same version of the toolchain, the same build tags, and the same values of certain flags and environment variables. + +We provide the *Tyk Plugin Compiler* docker image, which we strongly recommend is used to build plugins compatible with the official Gateway releases. This tool provides the cross compilation toolchain, Go version used to build the release, and ensures that compatible flags are used when compiling plugins, like `-trimpath`, `CC`, `CGO_ENABLED`, `GOOS`, `GOARCH`. + +The *Plugin Compiler* also works around known Go issues such as: + +- https://github.com/golang/go/issues/19004 +- https://www.reddit.com/r/golang/comments/qxghjv/plugin_already_loaded_when_a_plugin_is_loaded/ + +Supplying the argument `build_id` to the *Plugin Compiler* ensures the same plugin can be rebuilt. The *Plugin Compiler* does this by replacing the plugin `go.mod` module path. + +Continue with [Tyk Plugin Compiler](https://tyk.io/docs/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/). + +### Using Incorrect Build Flags + +When working with Go plugins, it's easy to miss the restriction that the plugin at the very least must be built with the same Go version, and the same flags (notably `-trimpath`) as the Tyk Gateway on which it is to be used. + +If you miss an argument (for example `-trimpath`) when building the plugin, the Gateway will report an error when your API attempts to load the plugin, for example: -```bash -go mod tidy -go mod vendor # only for Tyk Gateway <5.1 +``` +task: [test] cd tyk-release-5.3.6 && go build -tags=goplugin -trimpath . +task: [test] cd plugins && go build -buildmode=plugin . +task: [test] ./tyk-release-5.3.6/tyk plugin load -f plugins/testplugin.so -s AuthCheck +tyk: error: unexpected error: plugin.Open("plugins/testplugin"): plugin was built with a different version of package internal/goarch, try --help ``` -{{< note info >}} -**Note** +Usually when the error hints at a standard library package, the build flags between the Gateway and plugin binaries don't match. -If you are working with a Tyk Gateway prior to v5.1 you must run these commands on initial plugin initialisation and every time you add a new third-party library in your code. -{{< /note >}} +Other error messages may be reported, depending on what triggered the issue. For example, if you omitted `-race` in the plugin but the gateway was built with `-race`, the following error will be reported: +``` +plugin was built with a different version of package runtime/internal/sys, try --help +``` + +Strictly speaking: + +- Build flags like `-trimpath`, `-race` need to match. +- Go toolchain / build env needs to be exactly the same. +- For cross compilation you must use the same `CC` value for the build (CGO). +- `CGO_ENABLED=1`, `GOOS`, `GOARCH` must match with runtime. + +When something is off, you can check what is different by using the `go version -m` command for the Gateway (`go version -m tyk`) and plugin (`go version -m plugin.so`). Inspecting and comparing the output of `build` tokens usually yields the difference that caused the compatibility issue. + +### Plugin Compatibility Issues + +Below are some common situations where dependencies might cause issues: + +- The `Gateway` has a dependency without a `go.mod` file, but the plugin needs to use it. +- Both the `Gateway` and the plugin share a dependency. In this case, the plugin must use the exact same version as the `Gateway`. +- The plugin requires a different version of a shared dependency. + +Here’s how to handle each case: -### Step 4: Build the plugin +**Case 1: Gateway dependency lacks `go.mod`** -A Golang plugin is built as a shared library (`.so`), and must use exactly the same Tyk Gateway binary as the one to be installed. We provide a [Docker image](https://hub.docker.com/r/tykio/tyk-plugin-compiler/tags), that we also use internally for building our official binaries. +- The plugin depends on the `Gateway`, which uses dependency *A*. +- *A* doesn’t have a `go.mod` file, so a pseudo version is generated during the build. +- Result: The build completes, but the plugin fails to load due to a version mismatch. -The steps for building a plugin are as follows: +**Solution:** Update the code to remove dependency *A*, or use a version of *A* that includes a `go.mod` file. -1. Mount your plugin source code directory to the `/plugin-source` container location -2. Specify the docker tag for the target Tyk Gateway version, e.g. `v5.2.1` -3. Specify the name for your plugin's shared library file, e.g. `plugin.so` +**Case 2: Shared dependency with version matching** -An example is shown below that builds a plugin named *plugin.so*, compatible with Gateway version v5.2.1. This mounts the source code from the current directory into the docker container at `/plugin-source`. +- The plugin and `Gateway` share a dependency, and this dependency includes a `go.mod` file. +- The version matches, and the dependency is promoted to *direct* in `go.mod`. +- Outcome: You’ll need to keep this dependency version in sync with the `Gateway`. -```bash -docker pull tykio/tyk-plugin-compiler:v5.2.1 -docker run --rm -v `pwd`:/plugin-source \ - --platform=linux/amd64 \ - tykio/tyk-plugin-compiler:v5.2.1 plugin.so +**Case 3: Plugin requires a different version of a shared dependency** + +- The plugin and `Gateway` share a dependency, but the plugin needs a different version. +- If the other version is a major release (e.g., `/v4`), it’s treated as a separate package, allowing both versions to coexist. +- If it’s just a minor/patch difference, the plugin will likely fail to load due to a version conflict. + +**Recommendation:** For best results, use Go package versions that follow the Go module versioning (metaversion). However, keep in mind that many `Gateway` dependencies use basic `v1` semantic versioning, which doesn’t always enforce strict versioned import paths. + +### List plugin symbols + +Sometimes it's useful to list symbols from a plugin. For example, we can list the symbols as they are compiled into our testplugin: + +``` +# nm -gD testplugin.so | grep testplugin +00000000014db4b0 R go:link.pkghashbytes.testplugin +000000000170f7d0 D go:link.pkghash.testplugin +000000000130f5e0 T testplugin.AddFooBarHeader +000000000130f900 T testplugin.AddFooBarHeader.deferwrap1 +000000000130f980 T testplugin.AuthCheck +0000000001310100 T testplugin.AuthCheck.deferwrap1 +000000000130f540 T testplugin.init +0000000001310ce0 T testplugin.init.0 +0000000001ce9580 D testplugin..inittask +0000000001310480 T testplugin.InjectConfigData +0000000001310180 T testplugin.InjectMetadata +0000000001d2a3e0 B testplugin.logger +0000000001310cc0 T testplugin.main +0000000001310820 T testplugin.MakeOutboundCall +0000000001310c40 T testplugin.MakeOutboundCall.deferwrap1 ``` -#### Building from source +This command prints other symbols that are part of the binary. In the worst case, a build compatibility issue may cause a crash in the Gateway due to an unrecoverable error and this can be used to further debug the binaries produced. -If you are building a plugin for a Gateway version compiled from the source, you can use the following command: +A very basic check to ensure Gateway/plugin compatibility is using the built in `go version -m `: -```bash -go build -trimpath -buildmode=plugin -o plugin.so +``` +[output truncated] + build -buildmode=exe + build -compiler=gc + build -race=true + build -tags=goplugin + build -trimpath=true + build CGO_ENABLED=1 + build GOARCH=amd64 + build GOOS=linux + build GOAMD64=v1 + build vcs=git + build vcs.revision=1db1935d899296c91a55ba528e7b653aec02883b + build vcs.time=2024-09-24T12:54:26Z + build vcs.modified=false ``` -As a result of this build command, we get a shared library with the plugin implementation placed at `plugin.so`. +These options should match between the Gateway binary and the plugin. You can use the command for both binaries and then compare the outputs. -For older gateway versions (<5.1), using `go mod vendor` is used to vendor third party dependencies. -If you are using [Go modules](https://blog.golang.org/using-go-modules), it should be as simple as running `go mod vendor` command. -For newer Gateway verions than 5.1, the vendoring step is not required. diff --git a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples.md b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples.md index 83874bb8f2..ceedf109e2 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples.md +++ b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples.md @@ -109,7 +109,7 @@ Here we see that: ## Performing custom authentication with a Golang plugin -You can implement your own authentication method, using a Golang plugin and custom `"auth_check"` middleware. Ensure you set the two fields in [Post Authentication Hook](#post-authentication-hook). +You can implement your own authentication method, using a Golang plugin and custom `"auth_check"` middleware. Ensure you set the two fields in Post Authentication Hook. Let's have a look at the code example. Imagine we need to implement a very trivial authentication method when only one key is supported (in the real world you would want to store your keys in some storage or have some more complex logic). diff --git a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins.md b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins.md index 9a05c61312..6d4f4638b5 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins.md +++ b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins.md @@ -100,9 +100,10 @@ The contents of `manifest.json`: "name": "AddFooBarHeader", "path": "AddFooBarHeader.so" } - ] + ], + "driver": "goplugin" }, - "driver": "goplugin", + ... } ``` diff --git a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins.md b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins.md index 79aa079803..f91fd3496b 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins.md +++ b/tyk-docs/content/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins.md @@ -200,7 +200,7 @@ You can terminate the request within your custom Go plugin and provide an HTTP r - the HTTP request round-trip to the upstream target won't happen - analytics records will still be created and sent to the analytics processing flow -This [example]({{< ref "product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples#custom-go-plugin-as-a-virtual-endpoint" >}}) demonstrates a custom Go plugin configured as a virtual endpoint. +This [example]({{< ref "product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples#using-a-custom-go-plugin-as-a-virtual-endpoint" >}}) demonstrates a custom Go plugin configured as a virtual endpoint. ## Logging from a custom plugin diff --git a/tyk-docs/content/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic.md index 314bb2ac1b..08c9b487a0 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic.md @@ -5,42 +5,57 @@ tags: ["event handling", "API events", "webhook", "Tyk Classic"] description: "Webhook event handlers with Tyk Classic APIs" --- -[Webhooks]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks" >}}) are event handlers that can be registered against API Events. The webhook will be triggered when the corresponding event is fired and will send a customisable fixed payload to any open endpoint. +[Webhooks]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks" >}}) are event handlers that can +be registered against API Events. The webhook will be triggered when the corresponding event is fired and will send a +customisable fixed payload to any open endpoint. -Webhooks are configured in the Tyk Classic API Definition. You can do this via the Tyk Dashboard API or in the API Designer. +Webhooks are configured in the Tyk Classic API Definition. You can do this via the Tyk Dashboard API or in the API +Designer. -If you're using the newer Tyk OAS APIs, then check out the [Tyk OAS]({{< ref "product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas" >}}) page. +If you're using the newer Tyk OAS APIs, then check out the [Tyk +OAS]({{< ref "product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas" >}}) +page. ## Set up a webhook event handler in the Tyk Classic API Definition -To add a webhook event handler you must add a new event handler object within the `event_handlers.events` section of the API definition for the appropriate [API event]({{< ref "basic-config-and-security/report-monitor-trigger-events/event-types" >}}). +To add a webhook event handler you must add a new event handler object within the `event_handlers.events` section of the +API definition for the appropriate [API event]({{< ref "basic-config-and-security/report-monitor-trigger-events/event-types" >}}). The event handler object has the following configuration: + - `handler_name`: this identifies the type of event handler and must be set to `eh_web_hook_handler` - `handler_meta`: this structure configures the HTTP request that will be sent when the webhook is triggered The `handler_meta` object has the following configuration: -- `method`: this can be any of `GET`, `PUT`, `POST`, `PATCH` or `DELETE` and will be the HTTP method used to send the request; methods that do not support an encoded request body will not have the event metadata provided with the request; we advise using `POST` where possible + +- `method`: this can be any of `GET`, `PUT`, `POST`, `PATCH` or `DELETE` and will be the HTTP method used to send the + request; methods that do not support an encoded request body will not have the event metadata provided with the + request; we advise using `POST` where possible - `target_path`: this is an **absolute URL** to which the request will be sent -- `template_path`: this is the path to the [webhook template]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#webhook-payload" >}}) that will be used to construct the request body +- `template_path`: this is the path to the [webhook + template]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#webhook-payload" >}}) that will be + used to construct the request body - `header_map`: a map of custom headers to be provided with the request -- `event_timeout`: the [webhook cooldown]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#webhook-cooldown" >}}) for duplicate events (in seconds); use this to prevent flooding of the target endpoint when multiple events are fired in quick succession +- `event_timeout`: the [webhook + cooldown]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#webhook-cooldown" >}}) for duplicate + events (in seconds); use this to prevent flooding of the target endpoint when multiple events are fired in quick succession For example: -```json {linenos=true, linenostart=1} + +```json {linenos=true, linenostart=1} { "event_handlers": { "events": { "AuthFailure": [ { - "handler_name":"eh_web_hook_handler", - "handler_meta": { - "method": "POST", - "target_path": "http://posttestserver.com/post.php?dir=tyk-event-test", - "template_path": "templates/default_webhook.json", - "header_map": {"X-Tyk-Test-Header": "Tyk v1.BANANA"}, - "event_timeout": 10 - } + "handler_name": "eh_web_hook_handler", + "handler_meta": { + "method": "POST", + "target_path": "http://posttestserver.com/post.php?dir=tyk-event-test", + "template_path": "templates/default_webhook.json", + "header_map": { "X-Tyk-Test-Header": "Tyk v1.BANANA" }, + "event_timeout": 10 + } } ] } @@ -48,26 +63,36 @@ For example: } ``` -In this example, when the `AuthFailure` event is fired, the webhook event handler will send a request to `POST http://posttestserver.com/post.php?dir=tyk-event-test` and then start a 10 second cooldown before another webhook request can be sent. +In this example, when the `AuthFailure` event is fired, the webhook event handler will send a request to +`POST http://posttestserver.com/post.php?dir=tyk-event-test` and then start a 10 second cooldown before another webhook +request can be sent. -The request will have one custom header `X-Tyk-Test-Header: Tyk v1.BANANA` and the body will be constructed from the webhook template located at `templates/default_webhook.json`. +The request will have one custom header `X-Tyk-Test-Header: Tyk v1.BANANA` and the body will be constructed from the +webhook template located at `templates/default_webhook.json`. -{{< note success >}} -**Note** +{{< note success >}} **Note** -This manually configured webhook event handler is private to the API within which it has been defined, it is not a [global webhook]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#using-webhooks-with-tyk-dashboard" >}}). +This manually configured webhook event handler is private to the API within which it has been defined, it is not a +[global +webhook]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#using-webhooks-with-tyk-dashboard" >}}). {{< /note >}} - ## Set up a webhook event handler in the Tyk Dashboard -It is very simple to register webhooks to be triggered in response to specific API events when using Tyk Classic APIs with the Tyk Dashboard. The API Designer in the Dashboard allows you to register *global webhooks* to handle events. +It is very simple to register webhooks to be triggered in response to specific API events when using Tyk Classic APIs +with the Tyk Dashboard. The API Designer in the Dashboard allows you to register _global webhooks_ to handle events. -Note that Tyk Gateway does not have access to the *global webhook* definitions registered with Tyk Dashboard and can only operate on the configuration within the API definition. Dashboard will manage the conversion of *global webhooks* to [locally defined webhook handlers](#set-up-a-webhook-event-handler-in-the-tyk-classic-api-definition) within the Tyk Classic API definition, automatically updating the configuration in each API definition when the APIs are reloaded to the Gateway. +Note that Tyk Gateway does not have access to the _global webhook_ definitions registered with Tyk Dashboard and can +only operate on the configuration within the API definition. Dashboard will manage the conversion of _global webhooks_ +to [locally defined webhook handlers](#set-up-a-webhook-event-handler-in-the-tyk-classic-api-definition) within the Tyk +Classic API definition, automatically updating the configuration in each API definition when the APIs are reloaded to +the Gateway. #### Step 1: Define the webhook -Before you can configure a webhook event handler for your API, you must first create a global webhook from the **Webhooks** screen in the **API Management** menu, as described [here]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#creating-a-global-webhook-definition-using-tyk-dashboard" >}}). +Before you can configure a webhook event handler for your API, you must first create a global webhook from the +**Webhooks** screen in the **API Management** menu, as described +[here]({{< ref "basic-config-and-security/report-monitor-trigger-events/webhooks#creating-a-global-webhook-definition-using-tyk-dashboard" >}}). #### Step 2: Register the webhook with the event @@ -76,11 +101,51 @@ From the API Designer select the **Advanced Options** tab and locate the **Webho {{< img src="/img/2.10/webhooks_designer_settings.png" alt="Webhook API Details" >}} Now: -- select the *API Event* for which you want to trigger the webhook from the dropdown list -- select the *Webhook to use* when the event fires, again from the dropdown list -- finally, configure the required *Cooldown period* + +- select the _API Event_ for which you want to trigger the webhook from the dropdown list +- select the _Webhook to use_ when the event fires, again from the dropdown list +- finally, configure the required _Cooldown period_ - click **Add** -Note that you can register multiple webhooks to be triggered in response to a single event and you can register the same webhook with multiple API events. +Note that you can register multiple webhooks to be triggered in response to a single event and you can register the same +webhook with multiple API events. Remember to click **Save** to save your changes. + +## Set up a webhook event handler in Tyk Operator + +Tyk Operator supports event handler integration for Tyk Classic API Definition. Configuring the `event_handlers` field +in ApiDefinition Custom Resource Definition (CRD) enables webhooks to be triggered by [specific +API events]({{< ref "basic-config-and-security/report-monitor-trigger-events/event-types" >}}). + +The process for configuring webhook event handlers using Tyk Operator is similar to that explained in +[Set up a webhook event handler in the Tyk Classic API Definition](#set-up-a-webhook-event-handler-in-the-tyk-classic-api-definition). +The example API Definition below enables the event handler by setting `spec.event_handlers`. + +```yaml {hl_lines=["14-25"],linenos=true, linenostart=1} +apiVersion: tyk.tyk.io/v1alpha1 +kind: ApiDefinition +metadata: + name: webhook-handler +spec: + name: webhook-handler + use_keyless: true + protocol: http + active: true + proxy: + target_url: http://httpbin.org + listen_path: /webhook-handler + strip_listen_path: true + event_handlers: + events: + AuthFailure: + - handler_name: "eh_web_hook_handler" + handler_meta: + method: "POST" + name: "webhook name" + target_path: "http://posttestserver.com/post.php?dir=tyk-event-test" + template_path: "templates/default_webhook.json" + header_map: + X-Tyk-Test-Header: "Tyk v1.BANANA" + event_timeout: 10 +``` diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/allow-list-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/allow-list-tyk-classic.md index 935c512acc..db057eb2d4 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/allow-list-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/allow-list-tyk-classic.md @@ -26,7 +26,7 @@ The `white_list` object has the following configuration: - `path`: the endpoint path - `method`: this should be blank - `ignore_case`: if set to `true` then the path matching will be case insensitive -- `method_actions`: a shared object used to configure the [mock response]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#mock-response" >}}) middleware +- `method_actions`: a shared object used to configure the [mock response]({{< ref "product-stack/tyk-gateway/middleware/mock-response-tyk-oas#configuring-mock-response-using-tyk-dashboard-ui" >}}) middleware The `method_actions` object should be configured as follows, with an entry created for each allowed method on the path: @@ -89,7 +89,7 @@ Use the *save* or *create* buttons to save the changes and activate the allow li ## Configuring the Allow List in Tyk Operator {#tyk-operator} -Similar to the configuration of a [Tyk Classic API Definition](#tyk-classic) you must add a new `white_list` object to the `extended_paths` section of your API definition. Furthermore, the `use_extended_paths` configuration parameter should be set to `true`. +Similar to the configuration of a Tyk Classic API Definition you must add a new `white_list` object to the `extended_paths` section of your API definition. Furthermore, the `use_extended_paths` configuration parameter should be set to `true`. {{< note success >}} **Note** diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/block-list-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/block-list-tyk-classic.md index 37875f0770..9f593a693c 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/block-list-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/block-list-tyk-classic.md @@ -27,7 +27,7 @@ The `black_list` object has the following configuration: - `path`: the endpoint path - `method`: this should be blank - `ignore_case`: if set to `true` then the path matching will be case insensitive -- `method_actions`: a shared object used to configure the [mock response]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#mock-response" >}}) middleware +- `method_actions`: a shared object used to configure the [mock response]({{< ref "product-stack/tyk-gateway/middleware/mock-response-middleware#when-is-it-useful" >}}) middleware The `method_actions` object should be configured as follows, with an entry created for each blocked method on the path: - `action`: this should be set to `no_action` 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 2a74c2ea30..14b2c15287 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 @@ -59,7 +59,7 @@ In this example, the endpoint caching middleware has been configured to cache al 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#request-selective-cache-control" >}}) To enable the advanced middleware you must add a new `advance_cache_config` object to the `extended_paths` section of your API definition. @@ -185,7 +185,7 @@ You can use Tyk Operator to configure the endpoint caching middleware for your T ### Simple endpoint cache -Configuring simple endpoint caching in Tyk Operator is similar to the process for a [Tyk Classic API Definition](#tyk-classic). A list of endpoints for which you wish to cache safe requests should be configured within the `cache` list in the `extended_paths` section. +Configuring simple endpoint caching in Tyk Operator is similar to the process for a Tyk Classic API Definition. A list of endpoints for which you wish to cache safe requests should be configured within the `cache` list in the `extended_paths` section. In the API-level `cache_options` object, you must enable caching by setting `enable_cache` to true and configure the cache refresh period by setting a value for the `cache_timeout` in seconds. To allow selective caching per endpoint you should also set `cache_all_safe_requests`to `false`. @@ -233,7 +233,7 @@ Advanced caching with Tyk Operator is a similar process to that for configuring To enable the advanced middleware you must add a new `advance_cache_config` object to the `extended_paths` section of your API definition. -This allows you to configure caching per endpoint. For each endpoint, it is possible to specify the endpoint path, method, list of response codes to cache, cache timeout and a cache key regular expression. The cache key regular expression represents 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" >}}) +This allows you to configure caching per endpoint. For each endpoint, it is possible to specify the endpoint path, method, list of response codes to cache, cache timeout and a cache key regular expression. The cache key regular expression represents a pattern match to cache only requests containing specific data in the [request body]({{< ref " basic-config-and-security/reduce-latency/caching/advanced-cache#request-selective-cache-control" >}}) For example: diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas.md index 47c50a1905..a9bb93b7ef 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas.md @@ -33,7 +33,7 @@ The `cache` object has the following configuration: - `enabled`: enable the middleware for the endpoint - `timeout`: set to the refresh period for the cache (in seconds) - `cacheResponseCodes`: HTTP responses codes to be cached (for example `200`) -- `cacheByRegex`: Pattern match for [selective caching by body value]({{< ref "basic-config-and-security/reduce-latency/caching/advanced-cache#selective-caching-by-body-value" >}}) +- `cacheByRegex`: Pattern match for [selective caching by body value]({{< ref "basic-config-and-security/reduce-latency/caching/advanced-cache#request-selective-cache-control" >}}) For example: ```json {hl_lines=["37-40", "45-51"],linenos=true, linenostart=1} diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/ignore-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/ignore-tyk-classic.md index 42742fbf97..5f32a3423f 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/ignore-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/ignore-tyk-classic.md @@ -21,7 +21,7 @@ The `ignored` object has the following configuration: - `path`: the endpoint path - `method`: this should be blank - `ignore_case`: if set to `true` then the path matching will be case insensitive -- `method_actions`: a shared object used to configure the [mock response]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#mock-response" >}}) middleware +- `method_actions`: a shared object used to configure the [mock response]({{< ref "product-stack/tyk-gateway/middleware/mock-response-middleware#when-is-it-useful" >}}) middleware The `method_actions` object should be configured as follows, with an entry created for each allowed method on the path: - `action`: this should be set to `no_action` diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-openapi.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-openapi.md index 800a37d20e..7b6bcbdfd3 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-openapi.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-openapi.md @@ -7,7 +7,7 @@ tags: ["mock response", "mock", "middleware", "per-endpoint", "OpenAPI", "OAS"] The [OpenAPI Specification](https://learn.openapis.org/specification/docs.html#adding-examples) provides metadata that can be used by automatic documentation generators to create comprehensive reference guides for APIs. Most objects in the specification include a `description` field that offers additional human-readable information for documentation. Alongside descriptions, some OpenAPI objects can include sample values in the OpenAPI Document, enhancing the generated documentation by providing representative content that the upstream service might return in responses. -Tyk leverages examples from your API documentation (in OpenAPI Spec format) to generate mock responses for the API exposed via the gateway. Based on this data, Tyk adds a new middleware named "Mock Response" and returns various mock responses according to your spec. Refer to the [Mock configuration guide]({{< ref "product-stack/tyk-gateway/middleware/mock-response-tyk-oas#automatically-configuring-the-middleware-from-the-openapi-document" >}}) to learn how to do this. +Tyk leverages examples from your API documentation (in OpenAPI Spec format) to generate mock responses for the API exposed via the gateway. Based on this data, Tyk adds a new middleware named "Mock Response" and returns various mock responses according to your spec. Refer to the [Mock configuration guide]({{< ref "product-stack/tyk-gateway/middleware/mock-response-tyk-oas#automatic-configuration-inferred-from-your-openapi-document" >}}) to learn how to do this. The specification provides three methods for Tyk to deduce the mock response: `example`, `examples` and `schema`. 1. `example`: A sample value that could be returned in a specific field in a response (see [below](#1-using-example-to-generate-a-mock-response)) @@ -80,7 +80,7 @@ In this extract, the API developer also indicates that a call to `GET /get` coul } ``` -The `exampleNames` for these two values have been configured as `first-example` and `second-example` and can be used to [invoke the desired response]({{< ref "product-stack/tyk-gateway/middleware/mock-response-tyk-oas#working-with-multiple-mock-responses-for-an-endpoint" >}}) from a mocked endpoint. +The `exampleNames` for these two values have been configured as `first-example` and `second-example` and can be used to [invoke the desired response]({{< ref "product-stack/tyk-gateway/middleware/mock-response-tyk-oas#multiple-mock-responses-for-a-single-endpoint" >}}) from a mocked endpoint. ### 3. Using `schema` to generate a mock response diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-classic.md index 52b406f5c7..b1b341dc09 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-classic.md @@ -101,7 +101,7 @@ Use the *save* or *create* buttons to save the changes and activate the middlewa {{< note success >}} **Note** -For the mock response to be enabled, the endpoint must also be in a list. We recommend adding the path to an [allow list]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}). If this isn't done, then the mock will not be saved when you save your API in the designer. +For the mock response to be enabled, the endpoint must also be in a list. We recommend adding the path to an [allow list]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas" >}}). If this isn't done, then the mock will not be saved when you save your API in the designer. {{< /note >}} ## Configuring the middleware in Tyk Operator {#tyk-operator} diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-oas.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-oas.md index 653b8d0472..58e86a8a7a 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-oas.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/mock-response-tyk-oas.md @@ -29,7 +29,7 @@ For basic operation, the `mockResponse` object has the following configuration: - `body`: the payload to be returned as the body of the response - `headers`: the headers to inject with the response -Please remember that this API definition needs to be updated in Tyk Dashboard. In the Dashboard UI it might be trivial but if you are doing it declaratively, you need to use the Tyk Dashboard API endpoint to update an existing API (PUT) or import as a new API (POST). Once updated, Tyk Gateway/s will return mock responses to all valid requests to the endpoint, depending on the [content of the request](#working-with-multiple-mock-responses-for-an-endpoint). +Please remember that this API definition needs to be updated in Tyk Dashboard. In the Dashboard UI it might be trivial but if you are doing it declaratively, you need to use the Tyk Dashboard API endpoint to update an existing API (PUT) or import as a new API (POST). Once updated, Tyk Gateway/s will return mock responses to all valid requests to the endpoint, depending on the [content of the request](#multiple-mock-responses-for-a-single-endpoint). In the following example, we configure a mock response middleware for requests to the `GET /example-mock-response1/anything` endpoint: @@ -219,7 +219,7 @@ Content-Type: text/plain {{< note success >}} **Note** -If multiple `examples` are defined in the OpenAPI description but no default `exampleName` is set in the middleware configuration `fromOASExamples` Tyk will select randomly from the multiple `examples`. Yes, that means the response may change with every request. You can [control which response](#working-with-multiple-mock-responses-for-an-endpoint) will be returned using special headers in the request. +If multiple `examples` are defined in the OpenAPI description but no default `exampleName` is set in the middleware configuration `fromOASExamples` Tyk will select randomly from the multiple `examples`. Yes, that means the response may change with every request. You can [control which response](#multiple-mock-responses-for-a-single-endpoint) will be returned using special headers in the request. {{< /note >}} The configuration above is a complete and valid Tyk OAS API Definition that you can import into Tyk to try out the mock response middleware. @@ -410,7 +410,7 @@ Tyk Dashboard will automatically select a valid HTTP response code from the drop Here you can edit the mock response: - modify, add or delete Response Body examples (note that this must follow the selected `content-type`) -- choose a default Response Body example that will be provided (unless [overridden in the request]({{< ref "#working-with-multiple-mock-responses-for-an-endpoint" >}})) +- choose a default Response Body example that will be provided (unless [overridden in the request]({{< ref "#multiple-mock-responses-for-a-single-endpoint" >}})) - add a description for your mock response - define headers to be provided with the response (note that these must be defined as a JSON schema) - add a schema diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic.md index 812fadd14a..8653719c4f 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic.md @@ -16,9 +16,9 @@ If you're using Tyk Operator then check out the [configuring the middleware in T ## Configuring the middleware in the Tyk Classic API Definition {#tyk-classic} There are three different levels of granularity that can be used when configuring a request size limit. -- [system-wide]({{< ref "basic-config-and-security/control-limit-traffic/request-size-limits#applying-a-system-wide-size-limit" >}}): affecting all APIs deployed on the gateway -- [API-level]({{< ref "product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic#applying-a-size-limit-for-a-specific-api" >}}): affecting all endpoints for an API -- [endpoint-level]({{< ref "product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic#applying-a-size-limit-for-a-specific-endpoint" >}}): affecting a single API endpoint +- [system-wide]({{< ref "basic-config-and-security/control-limit-traffic/request-size-limits#applying-a-system-level-size-limit" >}}): affecting all APIs deployed on the gateway +- [API-level]({{< ref "product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic#tyk-classic-api" >}}): affecting all endpoints for an API +- [endpoint-level]({{< ref "product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic#tyk-classic-endpoint" >}}): affecting a single API endpoint ### Applying a size limit for a specific API {#tyk-classic-api} diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas.md index 05d7eae509..1872dd9411 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas.md @@ -14,15 +14,15 @@ If you're using the legacy Tyk Classic APIs, then check out the [Tyk Classic]({{ ## Configuring the middleware in the Tyk OAS API Definition There are three different levels of granularity that can be used when configuring a request size limit. -- [system-wide]({{< ref "basic-config-and-security/control-limit-traffic/request-size-limits#applying-a-system-wide-size-limit" >}}): affecting all APIs deployed on the gateway +- [system-wide]({{< ref "basic-config-and-security/control-limit-traffic/request-size-limits#applying-a-system-level-size-limit" >}}): affecting all APIs deployed on the gateway - [API-level]({{< ref "product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas#applying-a-size-limit-for-a-specific-api" >}}): affecting all endpoints for an API - [endpoint-level]({{< ref "product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas#applying-a-size-limit-for-a-specific-endpoint" >}}): affecting a single API endpoint ### Applying a size limit for a specific API -The API-level rate limit has not yet been implemented for Tyk OAS APIs. +The API-level size limit has not yet been implemented for Tyk OAS APIs. -You can work around this by implementing a combination of endpoint-level rate limits and [allow]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}) or [block]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#blocklist" >}}) lists. +You can work around this by implementing a combination of endpoint-level size limits and [allow]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas#configuring-the-allow-list-in-the-tyk-oas-api-definition" >}}) or [block]({{< ref "product-stack/tyk-gateway/middleware/block-list-tyk-oas#configuring-the-block-list-in-the-api-designer" >}}) lists. ### Applying a size limit for a specific endpoint diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic.md index 797c10fd50..4bfa86cc96 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic.md @@ -257,4 +257,4 @@ spec: "rewrite_to": "https://beta.library.com/books/author" ``` -For further examples check out the [internal looping]({{< ref "/product-stack/tyk-operator/advanced-configurations/internal-looping" >}}) page. +For further examples check out the [internal looping]({{< ref "/api-management/automations#internal-looping-with-tyk-operator" >}}) page. diff --git a/tyk-docs/content/product-stack/tyk-gateway/middleware/validate-request-tyk-oas.md b/tyk-docs/content/product-stack/tyk-gateway/middleware/validate-request-tyk-oas.md index 01950ed19f..8d4808e297 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/middleware/validate-request-tyk-oas.md +++ b/tyk-docs/content/product-stack/tyk-gateway/middleware/validate-request-tyk-oas.md @@ -5,7 +5,7 @@ description: "Using the Request Validation middleware with Tyk OAS APIs" tags: ["request validation", "validate request", "middleware", "per-endpoint", "Tyk OAS", "Tyk OAS API"] --- -The [request validation]({{< ref "product-stack/tyk-gateway/middleware/validate-request-middleware" >}}) middleware provides a way to validate the presence, correctness and conformity of HTTP requests to make sure they meet the expected format required by the upstream API endpoints. +The [request validation]({{< ref "product-stack/tyk-gateway/middleware/validate-request-middleware" >}}) middleware provides a way to validate the presence, correctness and conformity of HTTP requests to make sure they meet the expected format required by the upstream API endpoints. If the incoming request fails validation, the Tyk Gateway will reject the request with an `HTTP 422 Unprocessable Entity` response. Tyk can be [configured](#configuring-the-request-validation-middleware) to return a different HTTP status code if required. The middleware is configured in the [Tyk OAS API Definition]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc#operation" >}}). You can do this via the Tyk Dashboard API or in the API Designer. @@ -25,13 +25,21 @@ As explained in the OpenAPI [documentation](https://learn.openapis.org/specifica ### Request parameters -The `parameters` field in the OpenAPI description is an array of [parameter objects](https://swagger.io/docs/specification/describing-parameters/) that each describe one parameter shared by all operations on that path. Here, an operation is defined as a combination of HTTP method and path, or, as Tyk calls it, an endpoint. Each `parameter` has two mandatory fields: +The `parameters` field in the OpenAPI description is an array of [parameter objects](https://swagger.io/docs/specification/describing-parameters/) that each describe one variable element in the request. Each `parameter` has two mandatory fields: - `in`: the location of the parameter (`path`, `query`, `header`) - `name`: a unique identifier within that location (i.e. no duplicate header names for a given operation/endpoint) There are also optional `description` and `required` fields. -For each parameter, a schema can be declared that defines the `type` of data that can be stored (e.g. `boolean`, `string`) and any `example` or `default` values. +For each parameter, a schema can be declared that defines the `type` of data that can be stored (e.g. `boolean`, `string`) and any `example` or `default` values. + +#### Operation (endpoint-level) parameters + +An operation is a combination of HTTP method and path or, as Tyk calls it, an endpoint - for example `GET /users`. Operation, or endpoint-level parameters can be defined in the OpenAPI description and will apply only to that operation within the API. These can be added or modified within Tyk Dashboard's [API designer](#configuring-the-middleware-in-the-api-designer). + +#### Common (path-level) parameters + +[Common parameters](https://swagger.io/docs/specification/v3_0/describing-parameters/#common-parameters), that apply to all operations within a path, can be defined at the path level within the OpenAPI description. Tyk refers to these as path-level parameters and displays them as read-only fields in the Dashboard's API designer. If you need to add or modify common parameters you must use the *Raw Definition* editor, or edit your OpenAPI document outside Tyk and [update]({{< ref "/getting-started/using-oas-definitions/update-an-oas-api" >}}) the API. ### Request body @@ -39,11 +47,15 @@ The `requestBody` field in the OpenAPI description is a [Request Body Object](ht ## Configuring the request validation middleware -The request validation middleware does not require configuration when working with Tyk OAS APIs. If it is [enabled](#enabling-the-request-validation-middleware) for an endpoint, then the middleware will automatically validate requests made to that endpoint against the schema defined in the API definition. The default response, if validation fails, is for Tyk Gateway to reject the request with an `HTTP 422 Unprocessable Entity` response. If you want to return a different HTTP status code, this can be set when enabling the middleware. +When working with Tyk OAS APIs, the request validation middleware automatically determines the validation rules based on the API schema. The only configurable option for the middleware is to set the desired HTTP status code that will be returned if a request fails validation. The default response will be `HTTP 422 Unprocessable Entity` unless otherwise configured. ## Enabling the request validation middleware -When you create a Tyk OAS API by importing your OpenAPI description, you can instruct Tyk to enable request validation [automatically](#automatically-enabling-the-request-validation-middleware) for all endpoints with defined schemas. If you are creating your API without import, or if you only want to enable request validation for some endpoints, you can [manually enable](#manually-enabling-the-request-validation-middleware) the middleware in the Tyk OAS API definition. +If the middleware is enabled for an endpoint, then Tyk will automatically validate requests made to that endpoint against the schema defined in the API definition. + +When you create a Tyk OAS API by importing your OpenAPI description, you can instruct Tyk to enable request validation [automatically](#automatically-enabling-the-request-validation-middleware) for all endpoints with defined schemas. + +If you are creating your API without import, or if you only want to enable request validation for some endpoints, you can [manually enable](#manually-enabling-the-request-validation-middleware) the middleware in the Tyk OAS API definition. ### Automatically enabling the request validation middleware @@ -53,7 +65,7 @@ The request validation middleware can be enabled for all endpoints that have def {{< img src="/img/dashboard/api-designer/tyk-oas-validate-request-import.png" alt="Select the option during OpenAPI import to validate requests" >}} -If you want to adjust the configuration, for example to remove validation from specific endpoints or to change the HTTP status code returned on error, you can update the API definition as described [here](#manual-activation-of-request-validation-middleware). +As noted, the automatic application of request validation during import will apply the middleware to all endpoints declared in your OpenAPI description. If you want to adjust this configuration, for example to remove validation from specific endpoints or to change the HTTP status code returned on error, you can update the Tyk OAS API definition as described [here](#manually-enabling-the-request-validation-middleware). ### Manually enabling the request validation middleware diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4.md index 42d6987dd4..48ca093a36 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4.md @@ -18,7 +18,7 @@ Here are the packages and their versions we are releasing today: Tyk Gateway v2. ### Mutual TLS -A major feature of this release is the implementation of Mutual TLS. Now you can protect your APIs by allow listing certificates, idenitfy users based on them, and increase security between Tyk and upstream API. For details, see [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}). +A major feature of this release is the implementation of Mutual TLS. Now you can protect your APIs by allow listing certificates, idenitfy users based on them, and increase security between Tyk and upstream API. For details, see [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}). ### Extended use of Multiple Policies @@ -81,7 +81,7 @@ This release is packed with way more more cool stuff. Here are detailed release ### Tyk Gateway v2.4.0 #### Mutual TLS support -[Docs]({{< ref "basic-config-and-security/security/mutual-tls" >}}) +[Docs]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) #### Global API rate limits [Docs]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting" >}}) @@ -124,7 +124,7 @@ We have added a new `log_level` configuration variable to `tyk.conf` to control Possible values are: `debug`, `info`, `warn`, `error` -[Docs]({{< ref "tyk-oss-gateway/configuration#a-name-log-level-a-log-level" >}}) +[Docs]({{< ref "tyk-oss-gateway/configuration#log_level" >}}) #### Added jsonMarshal to body transform templates @@ -166,7 +166,7 @@ This was very resource consuming and unstable feature. We recommend using load b ### Tyk Dashboard v1.4.0 #### Mutual TLS support -[Docs]({{< ref "basic-config-and-security/security/mutual-tls" >}}) +[Docs]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) #### Global API rate limits [Docs]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting" >}}) @@ -270,7 +270,7 @@ This is a UI only fix, it is still allowable via the API (which is OK). See https://tyk.io/docs/configure/tyk-pump-configuration/ for a sample pump.conf file. ### MDCB v1.4.0 -Added support for Mutual TLS, mentioned by Gateway and Dashboard above. See [Docs]({{< ref "basic-config-and-security/security/mutual-tls#a-name-mdcb-a-mdcb" >}}) +Added support for Mutual TLS, mentioned by Gateway and Dashboard above. See [Docs]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) Also fixed bug when Mongo connections became growing though the roof if client with wrong credentials tries to connect. @@ -285,7 +285,7 @@ Tyk Identity Broker now fully support LDAP search with complex filters! [Docs]({ Cloud users will be automatically upgraded to the new release. -Hybrid users should follow the upgrade instructions [here]({{< ref "upgrading-tyk#tyk-multi-cloud-gateway" >}}). +Hybrid users should follow the upgrade instructions [here]({{< ref "upgrading-tyk#upgrade-guides-toc" >}}). Self-Managed users can download the new release packages from their usual repositories. diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5.md index 4274b0996c..788674a139 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5.md @@ -68,13 +68,13 @@ You can disable URL encoding using a new boolean `http_server_options` setting: `skip_target_path_escaping` -[Docs]({{< ref "tyk-oss-gateway/configuration#a-name-http-server-options-a-http-server-options" >}}) +[Docs]({{< ref "tyk-oss-gateway/configuration#http_server_options" >}}) #### Enable Key Logging By default all key ids in logs are hidden. You can now turn it on if you want to see them for debugging reasons using the `enable_key_logging` option. -[Docs]({{< ref "tyk-oss-gateway/configuration#a-name-enable-key-logging-a-enable-key-logging" >}}) +[Docs]({{< ref "tyk-oss-gateway/configuration#enable_key_logging" >}}) #### Specify TLS Cipher Suites diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9.md index 76fff6a374..8181d7cdfb 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9.md @@ -41,7 +41,7 @@ Other changes: Now you can set granular permissions on per user basis, by injecting permissions to the "scope" claim of a JSON Web Token. To make it work you need to provide mapping between the scope and policy ID, and thanks to enchanced policy merging capabilities mentioned above, Tyk will read the scope value from the JWT and will generate dynamic access rules. Your JWT scopes can look like `"users:read companies:write"` or similar, it is up to your imagination. OpenID supports it as well, but at the moment only if your OIDC provider can generate ID tokens in JWT format (which is very common this days). -See our [JWT Scope docs]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens#jwt-scope-to-policy-mapping-support" >}}) for more details. +See our [JWT Scope docs]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) for more details. ### Go plugins diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/overview.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/overview.md index 0b18fcc80d..8173929978 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/overview.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/overview.md @@ -8,6 +8,7 @@ This page provides access to release notes for Tyk Gateway. Links to archived re ## Release 5 +- [v5.6]({{< ref "product-stack/tyk-gateway/release-notes/version-5.6.md" >}}) - [v5.5]({{< ref "product-stack/tyk-gateway/release-notes/version-5.5.md" >}}) - [v5.4]({{< ref "product-stack/tyk-gateway/release-notes/version-5.4.md" >}}) - [v5.3]({{< ref "product-stack/tyk-gateway/release-notes/version-5.3.md" >}}) - LTS diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.0.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.0.md index dc3f7af443..7fcc9fe689 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.0.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.0.md @@ -40,7 +40,7 @@ Want to reference secrets from a KV store in your API definitions? We now have n We added a new middleware hook allowing middleware to modify the response from the upstream. Using response middleware you can transform, inspect or obfuscate parts of the response body or response headers, or fire an event or webhook based on information received by the upstream service. -At the moment the Response hook is supported for [Python and gRPC plugins]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#overriding-response" >}}). +At the moment the Response hook is supported for [Python and gRPC plugins]({{< ref "plugins/supported-languages/rich-plugins/rich-plugins-work#coprocess-dispatcher---hooks" >}}). #### Enhanced Gateway health check API @@ -55,7 +55,7 @@ Detailed logging is used in a lot of the cases for debugging issues. Now as well New detailed logging changes are available only to our Self-Managed customers currently. -[Read More]({{< ref "tyk-stack/tyk-pump/useful-debug-modes#enabling-detailed-logging" >}}) +[Read More]({{< ref "tyk-stack/tyk-pump/useful-debug-modes" >}}) #### Better Redis failover diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.2.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.2.md index 0c41ebd28b..0c48eae7a3 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.2.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-3.2.md @@ -25,7 +25,7 @@ If you’re using GraphQL upstream services with UDG, you’re now able to forwa #### Go response plugins With Go response plugins you are now able to modify and create a full request round trip made through the Tyk Gateway. -Find out more about [plugins]({{< ref "plugins" >}}) and how to write [Go response plugins]({{< ref "plugins/supported-languages/golang#using-a-go-response-plugin" >}}). +Find out more about [plugins]({{< ref "plugins" >}}) and how to write [Go response plugins]({{< ref "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins#creating-a-custom-response-plugin" >}}). ## Changelog diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-4.3.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-4.3.md index 4d7332c2f9..d5c6918fa7 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-4.3.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-4.3.md @@ -16,7 +16,7 @@ Does your Tyk OAS API Definition define examples or a schema for your path respo If you’re using a 3rd party IDP to generate tokens for your OAuth applications, Tyk can now validate the generated tokens by either performing JWT validation or by communicating with the authorization server and executing token introspection. -This can be achieved by configuring the new External OAuth authentication mechanism. Find out more here [External OAuth Integration]({{< ref "basic-config-and-security/security/authentication-authorization/ext-oauth-middleware" >}}) +This can be achieved by configuring the new External OAuth authentication mechanism. Find out more here [External OAuth Integration]({{< ref "/api-management/authentication-authorization#integrate-external-oauth-middleware" >}}) #### Updated the Tyk Gateway version of Golang, to 1.16. diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.0.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.0.md index d29529caa0..67a022e3d7 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.0.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.0.md @@ -1,9 +1,30 @@ --- title: Tyk Gateway 5.0 Release Notes description: Tyk Gateway v5.0 release notes -tags: ["release notes", "Tyk Gateway", "v5.0", "5.0", "5.0.0", "5.0.1", "5.0.1", "5.0.2", "5.0.3", "5.0.4", "5.0.5", "5.0.6", "5.0.7", "5.0.8", "5.0.9", "5.0.10", "5.0.11", "5.0.13", "5.0.14"] +tags: + [ + "release notes", + "Tyk Gateway", + "v5.0", + "5.0", + "5.0.0", + "5.0.1", + "5.0.1", + "5.0.2", + "5.0.3", + "5.0.4", + "5.0.5", + "5.0.6", + "5.0.7", + "5.0.8", + "5.0.9", + "5.0.10", + "5.0.11", + "5.0.13", + "5.0.14", + ] aliases: - - /release-notes/version-5.0/ + - /release-notes/version-5.0/ --- **Open Source** ([Mozilla Public License](https://github.com/TykTechnologies/tyk/blob/master/LICENSE.md)) @@ -12,11 +33,65 @@ aliases: --- +## 5.0.15 Release Notes {#rn-v5.0.15} + +### Release Date 24 October 2024 + +### Breaking Changes + +There are no breaking changes in this release. + +### Upgrade Instructions + +Go to the [Upgrading Tyk](https://tyk.io/docs/product-stack/tyk-gateway/release-notes/version-5.0/#upgrading-tyk) +section for detailed upgrade instructions. + +### Release Highlights + +This patch release for Tyk Gateway addresses critical stability issues for users running Tyk Gateway within the data +plane, connecting to the control plane or Tyk Hybrid. Affected users should upgrade immediately to version 5.0.15 to +avoid service interruptions and ensure reliable operations with the control plane or Tyk Hybrid. + +For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.0.15">}}) below. + +### Changelog {#Changelog-v5.0.15} + +#### Fixed + +
      +
    • +
      +Resolved gateway panic on reconnecting to MDCB control plane or Tyk Cloud +In version 5.0.14, Tyk Gateway could encounter panic when attempting to reconnect to the control plane after it was restarted. This patch version has resolved this issue, ensuring stable connectivity between the gateway and control plane following reconnections and reducing the need for manual intervention. +
      +
    • +
    + +--- + ## 5.0.14 Release Notes {#rn-v5.0.14} ### Release Date 18th September 2024 +{{< note success >}} **Important Update**

    Date: 12 October 2024
    Topic: Gateway panic when +reconnecting to MDCB control plane or Tyk Cloud
    Workaround: Restart Gateway
    Affected Product: Tyk +Gateway as an Edge Gateway
    Affected versions: v5.6.0, v5.3.6, and v5.0.14
    Issue Description:
    + +

    We have identified an issue affecting Tyk Gateway deployed as a data plane connecting to the Multi-Data Center Bridge (MDCB) control plane or Tyk Cloud. In the above mentioned Gateway versions a panic may occur when gateway reconnect to the control plane after the control plane is restarted. +

    Our engineering team is actively working on a fix, and a patch (versions 5.6.1, 5.3.7, and 5.0.15) will be released soon.
    +Recommendations:
    +

      +
    • For users on versions 5.5.0, 5.3.5, and 5.0.13
      +We advise you to delay upgrading to the affected versions (5.6.0, 5.3.6, or 5.0.14) until the patch is available. + +
    • For users who have already upgraded to 5.6.0, 5.3.6, or 5.0.14 and are experiencing a panic in the gateway:
      +Restarting the gateway process will restore it to a healthy state. If you are operating in a *Kubernetes* environment, Tyk Gateway instance should automatically restart, which ultimately resolves the issue.
      +
    +

    We appreciate your understanding and patience as we work to resolve this. Please stay tuned for the upcoming patch release, which will address this issue. +{{< /note >}} + ### Breaking Changes + **Attention:** Please read this section carefully. There are no breaking changes in this release. @@ -25,12 +100,13 @@ There are no breaking changes in this release. This release is not tightly coupled with Tyk Dashboard v5.0.14, so you do not have to upgrade both together. - -Go to the [Upgrading Tyk](https://tyk.io/docs/product-stack/tyk-gateway/release-notes/version-5.0/#upgrading-tyk) section for detailed upgrade instructions. +Go to the [Upgrading Tyk](https://tyk.io/docs/product-stack/tyk-gateway/release-notes/version-5.0/#upgrading-tyk) +section for detailed upgrade instructions. ### Release Highlights -This release fixes some issues related to the way that Tyk performs URL path matching, introducing two new Gateway configuration options to control path matching strictness. +This release fixes some issues related to the way that Tyk performs URL path matching, introducing two new Gateway +configuration options to control path matching strictness. ### Changelog {#Changelog-v5.0.14} @@ -41,15 +117,24 @@ This release fixes some issues related to the way that Tyk performs URL path mat

    Implemented Gateway configuration options to set URL path matching strictness -We have introduced two new options in the `http_server_options` [Gateway configuration]({{< ref "tyk-oss-gateway/configuration#http_server_options" >}}) that will enforce prefix and/or suffix matching when Tyk performs checks on whether middleware or other logic should be applied to a request: +We have introduced two new options in the `http_server_options` [Gateway +configuration]({{< ref "tyk-oss-gateway/configuration#http_server_options" >}}) that will enforce prefix and/or suffix matching +when Tyk performs checks on whether middleware or other logic should be applied to a request: -- `enable_path_prefix_matching` ensures that the start of the request path must match the path defined in the API definition -- `enable_path_suffix_matching` ensures that the end of the request path must match the path defined in the API definition -- combining `enable_path_prefix_matching` and `enable_path_suffix_matching` will ensure an exact (explicit) match is performed +- `enable_path_prefix_matching` ensures that the start of the request path must match the path defined in the API + definition +- `enable_path_suffix_matching` ensures that the end of the request path must match the path defined in the API + definition +- combining `enable_path_prefix_matching` and `enable_path_suffix_matching` will ensure an exact (explicit) match is + performed -These configuration options provide control to avoid unintended matching of paths from Tyk's default *wildcard* match. Use of regex special characters when declaring the endpoint path in the API definition will automatically override these settings for that endpoint. +These configuration options provide control to avoid unintended matching of paths from Tyk's default _wildcard_ match. +Use of regex special characters when declaring the endpoint path in the API definition will automatically override these +settings for that endpoint. + +**Tyk recommends that exact matching is employed, but both options default to `false` to avoid introducing a breaking +change for existing users.** -**Tyk recommends that exact matching is employed, but both options default to `false` to avoid introducing a breaking change for existing users.**
  • @@ -61,14 +146,22 @@ These configuration options provide control to avoid unintended matching of path
    Incorrectly configured regex in policy affected Path-Based Permissions authorization -Fixed an issue when using granular [Path-Based Permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}) in access policies and keys that led to authorization incorrectly being granted to endpoints if an invalid regular expression was configured in the key/policy. Also fixed an issue where path-based parameters were not correctly handled by Path-Based Permissions. Now Tyk's authorization check correctly handles both of these scenarios granting access only to the expected resources. +Fixed an issue when using granular [Path-Based +Permissions]({{< ref "security/security-policies/secure-apis-method-path" >}}) in access policies and keys that led to authorization +incorrectly being granted to endpoints if an invalid regular expression was configured in the key/policy. Also fixed an issue +where path-based parameters were not correctly handled by Path-Based Permissions. Now Tyk's authorization check correctly +handles both of these scenarios granting access only to the expected resources. +
  • Missing path parameter can direct to the wrong endpoint -Fixed an issue where a parameterized endpoint URL (e.g. `/user/{id}`) would be invoked if a request is made that omits the parameter. For example, a request to `/user/` will now be interpreted as a request to `/user` and not to `/user/{id}`. +Fixed an issue where a parameterized endpoint URL (e.g. `/user/{id}`) would be invoked if a request is made that omits +the parameter. For example, a request to `/user/` will now be interpreted as a request to `/user` and not to +`/user/{id}`. +
  • @@ -76,7 +169,11 @@ Fixed an issue where a parameterized endpoint URL (e.g. `/user/{id}`) would be i
    Improved Gateway Synchronization with MDCB for Policies and APIs -We have enhanced the Tyk Gateway's synchronization with MDCB to ensure more reliable loading of policies and APIs. A synchronous initialization process has been implemented to prevent startup failures and reduce the risk of service disruptions caused by asynchronous operations. This update ensures smoother and more consistent syncing of policies and APIs from MDCB. +We have enhanced the Tyk Gateway's synchronization with MDCB to ensure more reliable loading of policies and APIs. A +synchronous initialization process has been implemented to prevent startup failures and reduce the risk of service +disruptions caused by asynchronous operations. This update ensures smoother and more consistent syncing of policies and +APIs from MDCB. +
    @@ -89,14 +186,19 @@ We have enhanced the Tyk Gateway's synchronization with MDCB to ensure more reli ### Release Highlights -Resolved an issue encountered in MDCB environments where changes to custom keys made via the Dashboard were not properly replicated to dataplanes. The issue impacted both key data and associated quotas, in the following versions: +Resolved an issue encountered in MDCB environments where changes to custom keys made via the Dashboard were not properly +replicated to dataplanes. The issue impacted both key data and associated quotas, in the following versions: + - 5.0.4 to 5.0.12 - 5.1.1 and 5.1.2 - 5.2.0 to 5.2.6 - 5.3.0 to 5.3.2 ##### Action Required -Customers should clear their edge Redis instances of any potentially affected keys to maintain data consistency and ensure proper synchronization across their environments. Please refer to the item in the [fixed](#fixed) section of the changelog for recommended actions. + +Customers should clear their edge Redis instances of any potentially affected keys to maintain data consistency and +ensure proper synchronization across their environments. Please refer to the item in the [fixed](#fixed) section of the +changelog for recommended actions. ### Changelog {#Changelog-v5.0.13} @@ -107,7 +209,10 @@ Customers should clear their edge Redis instances of any potentially affected ke
    Resolved an issue where changes to custom keys were not properly replicated to dataplanes -Resolved a critical issue affecting MDCB environments, where changes to custom keys made via the dashboard were not properly replicated to dataplanes. This affected both the key data and associated quotas. This issue was present in versions: +Resolved a critical issue affecting MDCB environments, where changes to custom keys made via the dashboard were not +properly replicated to dataplanes. This affected both the key data and associated quotas. This issue was present in +versions: + - 5.0.4 to 5.0.12 - 5.1.1 and 5.1.2 - 5.2.0 to 5.2.6 @@ -115,7 +220,9 @@ Resolved a critical issue affecting MDCB environments, where changes to custom k **Action Required** -Customers are advised to clear their edge Redis instances of any keys that might have been affected by this bug to ensure data consistency and proper synchronization across their environments. There are several methods available to address this issue: +Customers are advised to clear their edge Redis instances of any keys that might have been affected by this bug to +ensure data consistency and proper synchronization across their environments. There are several methods available to +address this issue: 1. **Specific Key Deletion via API**: To remove individual buggy keys, you can use the following API call: @@ -123,16 +230,19 @@ Customers are advised to clear their edge Redis instances of any keys that might curl --location --request DELETE 'http://tyk-gateway:{tyk-hybrid-port}/tyk/keys/my-custom-key' \ --header 'X-Tyk-Authorization: {dashboard-key}' ``` -Replace `{tyk-hybrid-port}`, `my-custom-key` and `{dashboard-key}` with your specific configuration details. This method is safe and recommended for targeted removals without affecting other keys. +Replace `{tyk-hybrid-port}`, `my-custom-key` and `{dashboard-key}` with your specific configuration details. This method +is safe and recommended for targeted removals without affecting other keys. -2. **Bulk Key Deletion Using Redis CLI**: For environments with numerous affected keys, you might consider using the Redis CLI to remove keys en masse: +2. **Bulk Key Deletion Using Redis CLI**: For environments with numerous affected keys, you might consider using the + Redis CLI to remove keys en masse: ```bash redis-cli --scan --pattern 'apikey-*' | xargs -L 1 redis-cli del redis-cli --scan --pattern 'quota-*' | xargs -L 1 redis-cli del ``` -This method can temporarily impact the performance of the Redis server, so it should be executed during a maintenance window or when the impact on production traffic is minimal. +This method can temporarily impact the performance of the Redis server, so it should be executed during a maintenance +window or when the impact on production traffic is minimal. 3. **Complete Redis Database Flush**: If feasible, flushing the entire Redis database offers a clean slate: @@ -140,8 +250,9 @@ This method can temporarily impact the performance of the Redis server, so it sh redis-cli FLUSHALL ASYNC ``` -**Implications** -Regardless of the chosen method, be aware that quotas will be reset and will need to resynchronize across the system. This may temporarily affect reporting and rate limiting capabilities. +**Implications** Regardless of the chosen method, be aware that quotas will be reset and will need to resynchronize +across the system. This may temporarily affect reporting and rate limiting capabilities. +
    @@ -149,51 +260,61 @@ Regardless of the chosen method, be aware that quotas will be reset and will nee --- ## 5.0.12 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.12). --- ## 5.0.11 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.11). --- ## 5.0.10 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.10). --- ## 5.0.9 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.9). --- ## 5.0.8 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.8). --- ## 5.0.7 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.7). --- ## 5.0.6 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.6). --- ## 5.0.5 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.5). --- ## 5.0.4 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.4). --- ## 5.0.3 Release Notes + Please refer to our GitHub [release notes](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.3). --- @@ -204,17 +325,18 @@ Please refer to our GitHub [release notes](https://github.com/TykTechnologies/ty #### Release Highlights -This release primarily focuses on bug fixes. -For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.0.2">}}) below. +This release primarily focuses on bug fixes. For a comprehensive list of changes, please refer to the detailed +[changelog]({{< ref "#Changelog-v5.0.2">}}) below. #### Downloads -- [docker image to pull](https://hub.docker.com/layers/tykio/tyk-gateway/v5.0.2/images/sha256-5e126d64571989f9e4b746544cf7a4a53add036a68fe0df4502f1e62f29627a7?context=explore) +- [docker image to pull](https://hub.docker.com/layers/tykio/tyk-gateway/v5.0.2/images/sha256-5e126d64571989f9e4b746544cf7a4a53add036a68fe0df4502f1e62f29627a7?context=explore) - [source code](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.2) #### Changelog {#Changelog-v5.0.2} ##### Updated + - Internal refactoring to make storage related parts more stable and less affected by potential race issues --- @@ -224,29 +346,38 @@ For a comprehensive list of changes, please refer to the detailed [changelog]({{ ##### Release Date 25 Apr 2023 #### Release Highlights -This release primarily focuses on bug fixes. -For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.0.1">}}) below. + +This release primarily focuses on bug fixes. For a comprehensive list of changes, please refer to the detailed +[changelog]({{< ref "#Changelog-v5.0.1">}}) below. #### Downloads + - [docker image to pull](https://hub.docker.com/layers/tykio/tyk-gateway/v5.0.1/images/sha256-5fa7aa910d62a7ed2c1cfbc68c69a988b4b0e9420d7a52018f80f9a45cadb083?context=explore - [source code](https://github.com/TykTechnologies/tyk/releases/tag/v5.0.1) #### Changelog {#Changelog-v5.0.1} ##### Added + - Added a new `enable_distributed_tracing` option to the NewRelic config to enable support for Distributed Tracer ##### Fixed -- Fixed panic when JWK method was used for JWT authentication and the token didn't include kid -- Fixed an issue where failure to load GoPlugin middleware didn’t prevent the API from proxying traffic to the upstream: now Gateway logs an error when the plugin fails to load (during API creation/update) and responds with HTTP 500 if the API is called; at the moment this is fixed only for file based plugins + +- Fixed panic when JWK method was used for JWT authentication and the token didn't include kid +- Fixed an issue where failure to load GoPlugin middleware didn’t prevent the API from proxying traffic to the upstream: + now Gateway logs an error when the plugin fails to load (during API creation/update) and responds with HTTP 500 if the + API is called; at the moment this is fixed only for file based plugins - Fixed MutualTLS issue causing leak of allowed CAs during TLS handshake when there are multiple mTLS APIs - Fixed a bug during hot reload of Tyk Gateway where APIs with JSVM plugins stored in filesystem were not reloaded - Fixed a bug where the gateway would remove the trailing `/`at the end of a URL - Fixed a bug where nested field-mappings in UDG weren't working as intended -- Fixed a bug when using Tyk OAuth 2.0 flow on Tyk Cloud where a request for an Authorization Code would fail with a 404 error -- Fixed a bug where mTLS negotiation could fail when there are a large number of certificates and CAs; added an option (`http_server_options.skip_client_ca_announcement`) to use the alternative method for certificate transfer +- Fixed a bug when using Tyk OAuth 2.0 flow on Tyk Cloud where a request for an Authorization Code would fail with a 404 + error +- Fixed a bug where mTLS negotiation could fail when there are a large number of certificates and CAs; added an option + (`http_server_options.skip_client_ca_announcement`) to use the alternative method for certificate transfer - Fixed CVE issue with go.uuid package -- Fixed a bug where rate limits were not correctly applied when policies are partitioned to separate access rights and rate limits into different scopes +- Fixed a bug where rate limits were not correctly applied when policies are partitioned to separate access rights and + rate limits into different scopes --- @@ -255,23 +386,37 @@ For a comprehensive list of changes, please refer to the detailed [changelog]({{ ##### Release Date 28 Mar 2023 #### Deprecations -- Tyk Gateway no longer natively supports **LetsEncrypt** integration. You still can use LetsEncrypt CLI tooling to generate certificates and use them with Tyk. + +- Tyk Gateway no longer natively supports **LetsEncrypt** integration. You still can use LetsEncrypt CLI tooling to + generate certificates and use them with Tyk. #### Release Highlights ##### Improved OpenAPI support -We have added some great features to the Tyk OAS API definition bringing it closer to parity with our Tyk Classic API and to make it easier to get on board with Tyk using your Open API workflows. +We have added some great features to the Tyk OAS API definition bringing it closer to parity with our Tyk Classic API +and to make it easier to get on board with Tyk using your Open API workflows. -Tyk’s OSS users can now make use of extensive [custom middleware](https://tyk.io/docs/plugins/) options with your OAS APIs, to transform API requests and responses, exposing your upstream services in the way that suits your users and internal API governance rules. We’ve enhanced the Request Validation for Tyk OAS APIs to include parameter validation (path, query, headers, cookie) as well as the body validation that was introduced in Tyk 4.1. +Tyk’s OSS users can now make use of extensive [custom middleware](https://tyk.io/docs/plugins/) options with your OAS +APIs, to transform API requests and responses, exposing your upstream services in the way that suits your users and +internal API governance rules. We’ve enhanced the Request Validation for Tyk OAS APIs to include parameter validation +(path, query, headers, cookie) as well as the body validation that was introduced in Tyk 4.1. -[Versioning your Tyk OAS APIs]({{< ref "getting-started/key-concepts/oas-versioning" >}}) is easier than ever, with the Tyk OSS Gateway now looking after the maintenance of the list of versions associated with the base API for you; we’ve also added a new endpoint on the Tyk API that will return details of the versions for a given API. +[Versioning your Tyk OAS APIs]({{< ref "getting-started/key-concepts/oas-versioning" >}}) is easier than ever, with the +Tyk OSS Gateway now looking after the maintenance of the list of versions associated with the base API for you; we’ve +also added a new endpoint on the Tyk API that will return details of the versions for a given API. -We’ve improved support for [OAS Mock Responses]({{< ref "product-stack/tyk-gateway/middleware/mock-response-middleware" >}}), with the Tyk OAS API definition now allowing you to register multiple Mock Responses in a single API, providing you with increased testing flexibility. +We’ve improved support for [OAS +Mock Responses]({{< ref "product-stack/tyk-gateway/middleware/mock-response-middleware" >}}), with the Tyk OAS API +definition now allowing you to register multiple Mock Responses in a single API, providing you with increased testing +flexibility. -Of course, we’ve also addressed some bugs and usability issues as part of our ongoing ambition to make Tyk OAS API the best way for you to create and manage your APIs. +Of course, we’ve also addressed some bugs and usability issues as part of our ongoing ambition to make Tyk OAS API the +best way for you to create and manage your APIs. -Thanks to our community contributors [armujahid](https://github.com/armujahid), [JordyBottelier](https://github.com/JordyBottelier) and [ls-michal-dabrowski](https://github.com/ls-michal-dabrowski) for your PRs that further improve the quality of Tyk OSS Gateway! +Thanks to our community contributors [armujahid](https://github.com/armujahid), +[JordyBottelier](https://github.com/JordyBottelier) and [ls-michal-dabrowski](https://github.com/ls-michal-dabrowski) +for your PRs that further improve the quality of Tyk OSS Gateway! #### Downloads @@ -281,15 +426,18 @@ Thanks to our community contributors [armujahid](https://github.com/armujahid), #### Changelog {#Changelog-v5.0.0} ##### Added + - Support for request validation (including query params, headers and the rest of OAS rules) with Tyk OAS APIs - Transform request/response middleware for Tyk OAS APIs - Custom middleware for Tyk OAS APIs - Added a new API endpoint to manage versions for Tyk OAS APIs - Improved Mock API plugin for Tyk OAS APIs -- Universal Data Graph and GraphQL APIs now support using context variables in request headers, allowing passing information it to your subgraphs +- Universal Data Graph and GraphQL APIs now support using context variables in request headers, allowing passing + information it to your subgraphs - Now you can control access to introspection on policy and key level #### Fixed + - Fixed potential race condition when using distributed rate limiter --- @@ -297,6 +445,7 @@ Thanks to our community contributors [armujahid](https://github.com/armujahid), ## Further Information ### Upgrading Tyk + Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance with respect to the upgrade strategy. ### API Documentation @@ -305,4 +454,6 @@ Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for furthe - [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/collection/27225007-374cc3d0-f16d-4620-a435-68c53553ca40) ### FAQ -Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. + +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating +to reporting bugs, upgrading Tyk, technical support and how to contribute. diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.1.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.1.md index 9af30b7254..71911a5b5b 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.1.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.1.md @@ -22,7 +22,7 @@ Minor releases are supported until our next minor comes out in Q3. **Attention warning*: Please read carefully this section. ##### Golang Version upgrade -Our Gateway is using [Golang 1.19](https://tip.golang.org/doc/go1.19) programming language starting with the 5.1 release. This brings improvements to the code base and allows us to benefit from the latest features and security enhancements in Go. Don’t forget that, if you’re using GoPlugins, you'll need to [recompile]({{< ref "plugins/supported-languages/golang#initialise-plugin-for-gateway-51" >}}) these to maintain compatibility with the latest Gateway. +Our Gateway is using [Golang 1.19](https://tip.golang.org/doc/go1.19) programming language starting with the 5.1 release. This brings improvements to the code base and allows us to benefit from the latest features and security enhancements in Go. Don’t forget that, if you’re using GoPlugins, you'll need to [recompile]({{< ref "plugins/supported-languages/golang#upgrading-your-tyk-gateway" >}}) these to maintain compatibility with the latest Gateway. ##### Early Access Features: Please note that the `Tyk OAS APIs` feature, currently marked as *Early Access*, is subject to breaking changes in subsequent releases. Please refer to our [Early Access guide]({{}}) for specific details. Upgrading to a new version may introduce changes that are not backward-compatible. Downgrading to a previous version after upgrading may result in a broken installation. diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.2.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.2.md index 24acb355ad..445071ae4f 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.2.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.2.md @@ -299,7 +299,7 @@ Fixed a potential race condition where the *DRL Manager* was not properly protec
    Performance issue encountered when Tyk Gateway retrieves a key via MDCB for a JWT API -Fixed a performance issue encountered when Tyk Gateway retrieves a key via MDCB for a JWT API. The token is now validated against [JWKS or the public key]({{}}) in the API Definition. +Fixed a performance issue encountered when Tyk Gateway retrieves a key via MDCB for a JWT API. The token is now validated against [JWKS or the public key]({{}}) in the API Definition.
  • @@ -503,7 +503,7 @@ Reference the *Tyk OAS API definition* from within your custom *Go Plugins*, bri #### Configure Caching For Each API Endpoint -We’ve added the ability to [configure]({{< ref "/basic-config-and-security/reduce-latency/caching/advanced-cache#advanced-caching-by-endpoint" >}}) per-endpoint timeouts for Tyk’s response cache, giving you increased flexibility to tailor your APIs to your upstream services. +We’ve added the ability to [configure]({{< ref "product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas#configuring-the-middleware-in-the-tyk-oas-api-definition" >}}) per-endpoint timeouts for Tyk’s response cache, giving you increased flexibility to tailor your APIs to your upstream services. #### Added Header Management in Universal Data Graph @@ -594,14 +594,14 @@ Added *OpenTelemetry* support for GraphQL. This is activated by setting [opentel
    Add support to configure granual control over cache timeout at the endpoint level -Added a new [timeout option]({{< ref "/basic-config-and-security/reduce-latency/caching/advanced-cache#advanced-caching-by-endpoint" >}}), offering granular control over cache timeout at the endpoint level. +Added a new [timeout option]({{< ref "product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas#configuring-the-middleware-in-the-tyk-oas-api-definition" >}}), offering granular control over cache timeout at the endpoint level.
  • Enable request context variables in UDG global or data source headers -Added support for using [request context variables]({{< ref "context-variables#the-available-context-variables-are" >}}) in *UDG* global or data source headers. This feature enables much more advanced [header management]({{< ref "/universal-data-graph/concepts/header_management" >}}) for UDG and allows users to extract header information from an incoming request and pass it to upstream data sources. +Added support for using [request context variables]({{< ref "context-variables#available-context-variables" >}}) in *UDG* global or data source headers. This feature enables much more advanced [header management]({{< ref "/universal-data-graph/concepts/header_management" >}}) for UDG and allows users to extract header information from an incoming request and pass it to upstream data sources.
  • diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.3.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.3.md index 3db8d51f04..2dbef72eb8 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.3.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.3.md @@ -1,8 +1,9 @@ --- title: Tyk Gateway 5.3 LTS Release Notes date: 2024-03-27T15:51:11Z -description: "Release notes documenting updates, enhancements, and changes for Tyk Gateway versions within the 5.3.X series." -tags: ["Tyk Gateway", "Release notes", "changelog", "v5.3", "5.3.0", "5.3.1", "5.3.3", "5.3.5"] +description: + "Release notes documenting updates, enhancements, and changes for Tyk Gateway versions within the 5.3.X series." +tags: ["Tyk Gateway", "Release notes", "changelog", "v5.3", "5.3.0", "5.3.1", "5.3.3", "5.3.5", "5.3.7", "5.3.8" ] --- + Our minor releases are supported until our next minor comes out. --- -## 5.3.5 Release Notes +## 5.3.8 Release Notes +### Release Date 07 November 2024 -### Release Date 26 September 2024 +### Release Highlights + +This release focuses mainly on bug fixes. For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.3.8">}}) below. + +### Breaking Changes + +This release has no breaking changes. + +### Dependencies + + + +#### Compatibility Matrix For Tyk Components + + + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.8 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools + + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.22 (GW) | 1.22 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + +This is an advanced notice that the dedicated External OAuth, OpenID Connect (OIDC) authentication options, and SQLite support will be deprecated starting in version 5.7.0. We recommend that users of the [External OAuth]({{< ref "/api-management/authentication-authorization#integrate-external-oauth-middleware" >}}) and [OpenID Connect]({{< ref "api-management/authentication-authorization#use-openid-connect" >}}) methods migrate to Tyk's dedicated [JWT Auth]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) method. Please review your API configurations, as the Gateway logs will provide notifications for any APIs utilizing these methods. + + +### Upgrade Instructions + +If you are upgrading to 5.3.8, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads + +- [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.8) + - ```bash + docker pull tykio/tyk-gateway:v5.3.8 + ``` +- Helm charts + - [tyk-charts v2.0.0]({{}}) +- [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) + +### Changelog {#Changelog-v5.3.8} + + + +#### Added +
      +
    • +
      +Deprecation notice of External OAuth and OpenID Connect options +A deprecation notice for External OAuth and OpenID Connect (OIDC) authentication mechanisms has been implemented in the Gateway logs starting from version 5.3.8. This provides advanced notification to users regarding any APIs configured with these authentication methods in preparation for future upgrades where these middleware options may be removed in version 5.7.0. +
      +
    • +
    + +#### Fixed + +
      +
    • +
      +Memory consumption reduced in Gateway for large payloads + +This update fixes a bug that caused increased memory usage when proxying large response payloads that was introduced in version 5.3.1, restoring memory requirements to the levels seen in version 5.0.6. Users experiencing out-of-memory errors with 1GB+ file downloads will notice improved performance and reduced latency. +
      +
    • +
    • +
      +Path-based permissions in combined policies not preserved + +We resolved an issue that caused path-based permissions in policies to be lost when policies were combined, potentially omitting URL values and restricting access based on the merge order. It ensures that all applicable policies merge their allowed URL access rights, regardless of the order in which they are applied. +
      +
    • +
    • +
      +Enhanced flexibility in Tyk OAS schema validation + +A backwards compatibility issue in the way that the Gateway handles Tyk OAS API definitions has been addressed by reducing the strictness of validation against the expected schema. Since Tyk version 5.3, the Gateway has enforced strict validation, potentially causing problems for users downgrading from newer versions. With this change, Tyk customers can move between versions seamlessly, ensuring their APIs remain functional and avoiding system performance issues. +
      +
    • +
    • +
      +Fix for API key loss on worker Gateways due to keyspace sync interruption + +This update resolves an issue where API keys could be lost if the [keyspace synchronization]({{}}) between control and data planes was interrupted. The solution now enforces a resynchronization whenever a connection is re-established between MDCB and the data plane, ensuring key data integrity and seamless API access. +
      +
    • +
    + +--- + +## 5.3.7 Release Notes + +### Release Date 22 October 2024 ### Release Highlights -This release fixes some issues related to the way that Tyk performs URL path matching, introducing two new Gateway configuration options to control path matching strictness. For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.3.5">}}) below. +This patch release for Tyk Gateway addresses critical stability issues for users running Tyk Gateway within the data +plane, connecting to the control plane or Tyk Hybrid. Affected users should upgrade immediately to version 5.3.7 to +avoid service interruptions and ensure reliable operations with the control plane or Tyk Hybrid. +For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.3.7">}}) below. ### Breaking Changes -There are no breaking changes in this release, however if moving from an version of Tyk older than 5.3.0 please read the explanation provided with [5.3.0 release]({{< ref "#TykOAS-v5.3.0">}}). - +There are no breaking changes in this release. ### Deprecations There are no deprecations in this release. - ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.7 please follow the [detailed upgrade instructions](#upgrading-tyk). + +### Dependencies + + + +#### Compatibility Matrix For Tyk Components + + + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.7 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------- | ------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Downloads + +- [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.7) + - ```bash + docker pull tykio/tyk-gateway:v5.3.7 + ``` +- Helm charts + - [tyk-charts v2.0.0]({{}}) +- [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) + +### Changelog {#Changelog-v5.3.7} + +#### Fixed + + +
      +
    • +
      + Resolved gateway panic on reconnecting to MDCB control plane or Tyk Cloud +In version 5.3.6, Tyk Gateway could encounter a panic when attempting to reconnect to the control plane after it was restarted. This patch version has resolved this issue, ensuring stable connectivity between the gateway and control plane following reconnections and reducing the need for manual intervention. +
      +
    • +
    + + + +--- + +## 5.3.6 Release Notes + +### Release Date 04 October 2024 + +{{< note success >}} **Important Update**

    Date: 12 October 2024
    Topic: Gateway panic when +reconnecting to MDCB control plane or Tyk Cloud
    Workaround: Restart Gateway
    Affected Product: Tyk +Gateway as an Edge Gateway
    Affected versions: v5.6.0, v5.3.6, and v5.0.14
    Issue Description:
    + +

    We have identified an issue affecting Tyk Gateway deployed as a data plane connecting to the Multi-Data Center Bridge (MDCB) control plane or Tyk Cloud. In the above mentioned Gateway versions a panic may occur when gateway reconnect to the control plane after the control plane is restarted. +

    Our engineering team is actively working on a fix, and a patch (versions 5.6.1, 5.3.7, and 5.0.15) will be released soon.
    +Recommendations:
    +

      +
    • For users on versions 5.5.0, 5.3.5, and 5.0.13
      +We advise you to delay upgrading to the affected versions (5.6.0, 5.3.6, or 5.0.14) until the patch is available. + +
    • For users who have already upgraded to 5.6.0, 5.3.6, or 5.0.14 and are experiencing a panic in the gateway:
      +Restarting the gateway process will restore it to a healthy state. If you are operating in a *Kubernetes* environment, Tyk Gateway instance should automatically restart, which ultimately resolves the issue.
      +
    +

    We appreciate your understanding and patience as we work to resolve this. Please stay tuned for the upcoming patch release, which will address this issue. +{{< /note >}} + +### Release Highlights + +This release primarily focuses on bug fixes. For a comprehensive list of changes, please refer to the detailed +[changelog]({{< ref "#Changelog-v5.3.6">}}) below. + +### Breaking Changes + +Docker images are now based on [distroless](https://github.com/GoogleContainerTools/distroless). No shell is shipped in +the image. + +If moving from an version of Tyk older than 5.3.0 please read the explanation provided with [5.3.0 release]({{< ref "#TykOAS-v5.3.0">}}). + +### Deprecations + +There are no deprecations in this release. + +### Upgrade Instructions + +When upgrading to 5.3.6 please follow the [detailed upgrade instructions](#upgrading-tyk). ### Dependencies @@ -56,16 +301,16 @@ Version compatibility with other components in the Tyk stack. This takes the for -| Gateway Version | Recommended Releases | Backwards Compatibility | -|---- |---- |---- | -| 5.3.5 | MDCB v2.5.1 | MDCB v2.5.1 | -| | Operator v0.17 | Operator v0.16 | -| | Sync v1.4.3 | Sync v1.4.3 | -| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | -| | EDP v1.8.3 | EDP all versions | -| | Pump v1.9.0 | Pump all versions | -| | TIB (if using standalone) v1.5.1 | TIB all versions | +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.6 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | #### 3rd Party Dependencies & Tools @@ -75,16 +320,206 @@ Additionally, a disclaimer statement was added below the table, for customers to An example is given below for illustrative purposes only. Tested Versions and Compatible Versions information will require discussion with relevant squads and QA. --> +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------- | ------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Downloads + +- [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.6) + - ```bash + docker pull tykio/tyk-gateway:v5.3.6 + ``` +- Helm charts + - [tyk-charts v2.0.0]({{}}) +- [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) + +### Changelog {#Changelog-v5.3.6} + + + +#### Changed + + +

      +
    • +
      +Upgrade to Go 1.22 for Tyk Gateway -| Third Party Dependency | Tested Versions | Compatible Versions | Comments | -| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | -| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | -| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | -| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | +The Tyk Gateway has been upgraded from Golang 1.21 to Golang 1.22, bringing enhanced performance, strengthened security, +and access to the latest features available in the new Golang release. +
      +
    • -Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. +
    • +
      +Introducing Distroless Containers for Tyk Gateway (2024 LTS) +In this release, we've enhanced the security of the Tyk Gateway image by changing the build process to support +[distroless](https://github.com/GoogleContainerTools/distroless) containers. This significant update addresses critical +CVEs associated with Debian, ensuring a more secure and minimal runtime environment. Distroless containers reduce the +attack surface by eliminating unnecessary packages, which bolsters the security of your deployments. + +
      +
    • + +
    + +#### Fixed + +
      +
    • +
      +Custom Response Plugins not working for Tyk OAS APIs + +We have resolved an issue where custom [response plugins]({{< ref "plugins/plugin-types/response-plugins" >}}) were not being +triggered for Tyk OAS APIs. This fix ensures that all [supported]({{< ref "getting-started/using-oas-definitions/oas-reference" >}}) +custom plugins are invoked as expected when using Tyk OAS APIs. + +
      +
    • + +
    • +
      +Data plane gateways sometimes didn't synchronise policies and APIs on start-up + +We have enhanced the initial synchronization of Data Plane gateways with the Control Plane to ensure more reliable +loading of policies and APIs on start-up. A synchronous initialization process has been implemented to avoid sync +failures and reduce the risk of service disruptions caused by failed loads. This update ensures smoother and more +consistent syncing of policies and APIs in distributed deployments. + +
      +
    • + +
    • +
      +Quota wasn't respected under extreme load + +We have fixed an issue where the quota limit was not being consistently respected during request spikes, especially in +deployments with multiple gateways. The problem occurred when multiple gateways cached the current and remaining quota +counters at the end of quota periods. To address this, a distributed lock mechanism has been implemented, ensuring +coordinated quota resets and preventing discrepancies across gateways. + +
      +
    • + +
    • +
      +Restored Key Creation Speed in Gateway 4.0.13 and Later + +We have addressed a performance regression identified in Tyk Gateway versions 4.0.13 and later, where key creation for +policies with a large number of APIs (100+) became significantly slower. The operation, which previously took around 1.5 +seconds in versions 4.0.0 to 4.0.12, was taking over 20 seconds in versions 4.0.13 and beyond. This issue has been +resolved by optimizing Redis operations during key creation, restoring the process to its expected speed of +approximately 1.5 seconds, even with a large number of APIs in the policy. + +
      +
    • +
    + +#### Security Fixes + + + +
      +
    • +
      +High priority CVEs fixed + +Fixed the following high priority CVEs identified in the Tyk Gateway, providing increased protection against security +vulnerabilities: + +- [CVE-2024-6104](https://nvd.nist.gov/vuln/detail/CVE-2024-6104) +
      +
    • +
    + +--- + +## 5.3.5 Release Notes + +### Release Date 26 September 2024 + +### Release Highlights + +This release fixes some issues related to the way that Tyk performs URL path matching, introducing two new Gateway +configuration options to control path matching strictness. For a comprehensive list of changes, please refer to the +detailed [changelog]({{< ref "#Changelog-v5.3.5">}}) below. + +### Breaking Changes + +There are no breaking changes in this release, however if moving from an version of Tyk older than 5.3.0 please read the +explanation provided with [5.3.0 release]({{< ref "#TykOAS-v5.3.0">}}). + +### Deprecations + +There are no deprecations in this release. + +### Upgrade Instructions + +When upgrading to 5.3.5 please follow the [detailed upgrade instructions](#upgrading-tyk). + +### Dependencies + + + +#### Compatibility Matrix For Tyk Components + + + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.5 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v2.0.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools + + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. ### Downloads @@ -96,7 +531,6 @@ Given the potential time difference between your upgrade and the release of this - [tyk-charts v2.0.0]({{}}) - [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) - ### Changelog {#Changelog-v5.3.5} #### Compatibility Matrix For Tyk Components + -| Gateway Version | Recommended Releases | Backwards Compatibility | -|---- |---- |---- | -| 5.3.4 | MDCB v2.5.1 | MDCB v2.5.1 | -| | Operator v0.17 | Operator v0.16 | -| | Sync v1.4.3 | Sync v1.4.3 | -| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.4.0 | Helm all versions | -| | EDP v1.8.3 | EDP all versions | -| | Pump v1.9.0 | Pump all versions | -| | TIB (if using standalone) v1.5.1 | TIB all versions | +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.4 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.4.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | #### 3rd Party Dependencies & Tools + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | -| Third Party Dependency | Tested Versions | Compatible Versions | Comments | -| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | -| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | -| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | -| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | - - -Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. - +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. ### Downloads + - [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.4) - ```bash docker pull tykio/tyk-gateway:v5.3.4 @@ -222,42 +672,43 @@ Given the potential time difference between your upgrade and the release of this - [tyk-charts v1.4]({{< ref "product-stack/tyk-charts/release-notes/version-1.4.md" >}}) - [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) - ### Changelog {#Changelog-v5.3.4} Since this release was version bumped only to align with Dashboard v5.3.4, no changes were encountered in this release. --- -## 5.3.3 Release Notes +## 5.3.3 Release Notes ### Release Date August 2nd 2024 - ### Breaking Changes -**Attention**: Please read this section carefully. - -There are no breaking changes in this release, however if moving from an version of Tyk older than 5.3.0 please read the explanation provided with [5.3.0 release]({{< ref "#TykOAS-v5.3.0">}}). +**Attention**: Please read this section carefully. +There are no breaking changes in this release, however if moving from an version of Tyk older than 5.3.0 please read the +explanation provided with [5.3.0 release]({{< ref "#TykOAS-v5.3.0">}}). ### Deprecations -There are no deprecations in this release. +There are no deprecations in this release. ### Upgrade Instructions -If you are using 5.3.0 we advise you to upgrade ASAP and if you are on an older version you should first [upgrade to 5.3.0](#upgrade-5.3.0) and then upgrade directly to this release. Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade instructions. +When upgrading to 5.3.3 please follow the [detailed upgrade instructions](#upgrading-tyk). ### Release Highlights #### Bug Fixes -This release primarily focuses on bug fixes. For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.3.3">}}) below. +This release primarily focuses on bug fixes. For a comprehensive list of changes, please refer to the detailed +[changelog]({{< ref "#Changelog-v5.3.3">}}) below. #### FIPS Compliance -Tyk Gateway now offers [FIPS 140-2](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.140-2.pdf) compliance. For further details please consult [Tyk API Management FIPS support]({{< ref "developer-support/special-releases-and-features/fips-release" >}}). +Tyk Gateway now offers [FIPS 140-2](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.140-2.pdf) compliance. For further +details please consult [Tyk API Management +FIPS support]({{< ref "developer-support/special-releases-and-features/fips-release" >}}). ### Dependencies @@ -266,38 +717,39 @@ Version compatibility with other components in the Tyk stack. This takes the for 3rd party dependencies and tools --> #### Compatibility Matrix For Tyk Components + -| Gateway Version | Recommended Releases | Backwards Compatibility | -|---- |---- |---- | -| 5.3.3 | MDCB v2.5.1 | MDCB v2.5.1 | -| | Operator v0.17 | Operator v0.16 | -| | Sync v1.4.3 | Sync v1.4.3 | -| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.4.0 | Helm all versions | -| | EDP v1.8.3 | EDP all versions | -| | Pump v1.9.0 | Pump all versions | -| | TIB (if using standalone) v1.5.1 | TIB all versions | +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.3 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.4.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | #### 3rd Party Dependencies & Tools + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | -| Third Party Dependency | Tested Versions | Compatible Versions | Comments | -| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | -| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | -| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | -| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | - - -Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. - +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. ### Downloads + - [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.3) - ```bash docker pull tykio/tyk-gateway:v5.3.3 @@ -306,10 +758,8 @@ Given the potential time difference between your upgrade and the release of this - [tyk-charts v1.4]({{< ref "product-stack/tyk-charts/release-notes/version-1.4.md" >}}) - [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) - ### Changelog {#Changelog-v5.3.3} - #### Compatibility Matrix For Tyk Components + -| Gateway Version | Recommended Releases | Backwards Compatibility | -|---- |---- |---- | -| 5.3.2 | MDCB v2.5.1 | MDCB v2.5.1 | -| | Operator v0.17 | Operator v0.16 | -| | Sync v1.4.3 | Sync v1.4.3 | -| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.4.0 | Helm all versions | -| | EDP v1.8.3 | EDP all versions | -| | Pump v1.9.0 | Pump all versions | -| | TIB (if using standalone) v1.5.1 | TIB all versions | +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.2 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.4.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | #### 3rd Party Dependencies & Tools + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | -| Third Party Dependency | Tested Versions | Compatible Versions | Comments | -| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | -| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | -| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | -| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | - - -Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. - +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. ### Downloads + - [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.2) - ```bash docker pull tykio/tyk-gateway:v5.3.2 @@ -451,17 +915,15 @@ Given the potential time difference between your upgrade and the release of this - [tyk-charts v1.4]({{< ref "product-stack/tyk-charts/release-notes/version-1.4.md" >}}) - [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) - ### Changelog {#Changelog-v5.3.2} - - #### Fixed + #### Compatibility Matrix For Tyk Components + -| Gateway Version | Recommended Releases | Backwards Compatibility | -|---- |---- |---- | -| 5.3.1 | MDCB v2.5.1 | MDCB v2.5.1 | -| | Operator v0.17 | Operator v0.16 | -| | Sync v1.4.3 | Sync v1.4.3 | -| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.3.0 | Helm all versions | -| | EDP v1.8.3 | EDP all versions | -| | Pump v1.9.0 | Pump all versions | -| | TIB (if using standalone) v1.5.1 | TIB all versions | + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.1 | MDCB v2.5.1 | MDCB v2.5.1 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.3.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | #### 3rd Party Dependencies & Tools + -| Third Party Dependency | Tested Versions | Compatible Versions | Comments | -| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | -| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | -| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | -| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | -Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. ### Downloads + - [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.1) - ```bash docker pull tykio/tyk-gateway:v5.3.1 - ``` + ``` - Helm charts - [tyk-charts v1.3]({{< ref "product-stack/tyk-charts/release-notes/version-1.3.md" >}}) - [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) @@ -582,88 +1068,122 @@ Given the potential time difference between your upgrade and the release of this
    Improved security: don't load APIs into Gateway if custom plugin bundle fails to load -Issues were addressed where Tyk failed to properly reject custom plugin bundles with signature verification failures, allowing APIs to load without necessary plugins, potentially exposing upstream services. With the fix, if the plugin bundle fails to load (for example, due to failed signature verification) the API will not be loaded and an error will be logged in the Gateway. +Issues were addressed where Tyk failed to properly reject custom plugin bundles with signature verification failures, +allowing APIs to load without necessary plugins, potentially exposing upstream services. With the fix, if the plugin +bundle fails to load (for example, due to failed signature verification) the API will not be loaded and an error will be +logged in the Gateway. +
  • Stability: fixed a Gateway panic that could occur when using custom JavaScript plugins with the Ignore Authentication middleware -Fixed a panic scenario that occurred when a custom JavaScript plugin that requests access to the session metadata (`require_session:true`) is assigned to the same endpoint as the Ignore Authentication middleware. While the custom plugin expects access to a valid session, the configuration flag doesn't guarantee its presence, only that it's passed if available. As such, the custom plugin should be coded to verify that the session metadata is present before attempting to use it. +Fixed a panic scenario that occurred when a custom JavaScript plugin that requests access to the session metadata +(`require_session:true`) is assigned to the same endpoint as the Ignore Authentication middleware. While the custom +plugin expects access to a valid session, the configuration flag doesn't guarantee its presence, only that it's passed +if available. As such, the custom plugin should be coded to verify that the session metadata is present before +attempting to use it. +
  • Stability: Gateway could crash when custom Python plugins attempted to access storage -Fixed a bug where the Gateway could crash when using custom Python plugins that access the Redis storage. The Tyk Python API methods `store_data` and `get_data` could fail due to connection issues with the Redis. With this fix, the Redis connection will be created if required, avoiding the crash. +Fixed a bug where the Gateway could crash when using custom Python plugins that access the Redis storage. The Tyk Python +API methods `store_data` and `get_data` could fail due to connection issues with the Redis. With this fix, the Redis +connection will be created if required, avoiding the crash. +
  • Stability: Gateway panics when arguments are missing in persist GraphQL endpoints -In some instances users were noticing gateway panics when using the **Persist GQL** middleware without arguments defined. This issue has been fixed and the gateway will not throw panics in these cases anymore. +In some instances users were noticing gateway panics when using the **Persist GQL** middleware without arguments +defined. This issue has been fixed and the gateway will not throw panics in these cases anymore. +
  • Missing GraphQL OTel attributes in spans when requests fail validation -In cases where `detailed_tracing` was set to `false` and the client was sending a malformed request to a GraphQL API, the traces were missing GraphQL attributes (operation name, type and document). This has been corrected and debugging GraphQL with OTel will be easier for users. +In cases where `detailed_tracing` was set to `false` and the client was sending a malformed request to a GraphQL API, +the traces were missing GraphQL attributes (operation name, type and document). This has been corrected and debugging +GraphQL with OTel will be easier for users. +
  • Incorrect naming for semantic conventions attributes in GQL spans -GQL Open Telemetry semantic conventions attribute names were missing `graphql` prefix and therefore were not in line with the community standard. This has been fixed and all attributes have the correct prefix. +GQL Open Telemetry semantic conventions attribute names were missing `graphql` prefix and therefore were not in line +with the community standard. This has been fixed and all attributes have the correct prefix. +
  • URL Rewrite middleware did not always correctly observe quotas for requests using keys created from policies -Fixed two bugs in the handling of usage quotas by the URL rewrite middleware when it was configured to rewrite to itself (e.g. to `tyk://self`). Quota limits were not observed and the quota related response headers always contained `0`. +Fixed two bugs in the handling of usage quotas by the URL rewrite middleware when it was configured to rewrite to itself +(e.g. to `tyk://self`). Quota limits were not observed and the quota related response headers always contained `0`. +
  • Tyk Dashboard License Statistics page could display incorrect number of data plane gateways -Resolved an issue in distributed deployments where the MDCB data plane gateway counter was inaccurately incremented when a Gateway was stopped and restarted. +Resolved an issue in distributed deployments where the MDCB data plane gateway counter was inaccurately incremented when +a Gateway was stopped and restarted. +
  • Unable to clear the API cache in distributed data plane Gateways from the control plane Dashboard -Addressed a bug where clearing the API cache from the Tyk Dashboard failed to invalidate the cache in distributed data plane gateways. This fix requires MDCB 2.5.1. +Addressed a bug where clearing the API cache from the Tyk Dashboard failed to invalidate the cache in distributed data +plane gateways. This fix requires MDCB 2.5.1. +
  • Unable to load custom Go plugins compiled in RHEL 8 -Fixed a bug where custom Go plugins compiled in RHEL8 environments were unable to load into Tyk Gateway due to a discrepancy in base images between the Gateway and Plugin Compiler environments. This fix aligns the plugin compiler base image with the gateway build environment, enabling seamless plugin functionality on RHEL8 environments. +Fixed a bug where custom Go plugins compiled in RHEL8 environments were unable to load into Tyk Gateway due to a +discrepancy in base images between the Gateway and Plugin Compiler environments. This fix aligns the plugin compiler +base image with the gateway build environment, enabling seamless plugin functionality on RHEL8 environments. +
  • Removed unused packages from plugin compiler image -Removed several unused packages from the plugin compiler image. The packages include: docker, buildkit, ruc, sqlite, curl, wget, and other build tooling. The removal was done in order to address invalid CVE reporting, none of the removed dependencies are used to provide plugin compiler functionality. +Removed several unused packages from the plugin compiler image. The packages include: docker, buildkit, ruc, sqlite, +curl, wget, and other build tooling. The removal was done in order to address invalid CVE reporting, none of the removed +dependencies are used to provide plugin compiler functionality. +
  • --- + ## 5.3.0 Release Notes ### Release Date 5 April 2024 ### Breaking Changes + + **Attention: Please read this section carefully** #### Tyk OAS APIs Compatibility Caveats - Tyk OSS {#TykOAS-v5.3.0} @@ -673,26 +1193,42 @@ This upgrade transitions Tyk OAS APIs out of [Early Access]({{< ref "developer-s For licensed deployments (Tyk Cloud, Self Managed including MDCB), please refer to the [release notes of Tyk Dashboard 5.3.0]({{}}). - **Out of Early Access** - - This means that from now on, all Tyk OAS APIs will be backwards compatible and in case of a downgrade from v5.3.X to v5.3.0, the Tyk OAS API definitions will always work. + - This means that from now on, all Tyk OAS APIs will be backwards compatible and in case of a downgrade from v5.3.X to + v5.3.0, the Tyk OAS API definitions will always work. - **Not Backwards Compatible** - - Tyk OAS APIs in Tyk Gateway v5.3.0 are not [backwards compatible](https://tinyurl.com/3xy966xn). This means that the new Tyk OAS API format created by Tyk Gateway v5.3.X does not work with older versions of Tyk Gateway, i.e. you cannot export these API definitions from a v5.3.X Tyk Gateway and import them to an earlier version. - - The upgrade is **not reversible**, i.e. you cannot use version 5.3.X Tyk OAS API definitions with an older version of Tyk Dashboard. - - This means that if you wish to downgrade or revert to your previous version of Tyk, you will need to restore these API definitions from a backup. Please go to the [backup]({{< ref "#upgrade-instructions" >}}) section for detailed instructions on backup before upgrading to v5.3.0. + - Tyk OAS APIs in Tyk Gateway v5.3.0 are not [backwards compatible](https://tinyurl.com/3xy966xn). This means that the + new Tyk OAS API format created by Tyk Gateway v5.3.X does not work with older versions of Tyk Gateway, i.e. you + cannot export these API definitions from a v5.3.X Tyk Gateway and import them to an earlier version. + - The upgrade is **not reversible**, i.e. you cannot use version 5.3.X Tyk OAS API definitions with an older version + of Tyk Dashboard. + - This means that if you wish to downgrade or revert to your previous version of Tyk, you will need to restore these + API definitions from a backup. Please go to the [backup]({{< ref "#upgrade-instructions" >}}) section for detailed + instructions on backup before upgrading to v5.3.0. - If you are not using Tyk OAS APIs, Tyk will maintain backward compatibility standards. - **Not Forward Compatible** - - Tyk OAS API Definitions prior to v5.3.0 are not [forward compatible](https://tinyurl.com/t3zz88ep) with Tyk Gateway v5.3.X. - - This means that any Tyk OAS APIs created in any previous release (4.1.0-5.2.x) cannot work with the new Tyk Gateway v5.3.X without being migrated to its [latest format]({{}}). + - Tyk OAS API Definitions prior to v5.3.0 are not [forward compatible](https://tinyurl.com/t3zz88ep) with Tyk Gateway + v5.3.X. + - This means that any Tyk OAS APIs created in any previous release (4.1.0-5.2.x) cannot work with the new Tyk Gateway + v5.3.X without being migrated to its [latest format]({{}}). - **After upgrade (the good news)** - - Tyk OAS API definitions that are part of the file system **are not automatically converted** to the [new format]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}). Subsequently, users will have to manually update their OAS API Definitions to the new format. - - If users upgrade to 5.3.0, create new Tyk OAS APIs and then decide to rollback then the upgrade is non-reversible. Reverting to your previous version requires restoring from a backup. + - Tyk OAS API definitions that are part of the file system **are not automatically converted** to the [new + format]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}). Subsequently, users will have to manually update their + OAS API Definitions to the new format. + - If users upgrade to 5.3.0, create new Tyk OAS APIs and then decide to rollback then the upgrade is non-reversible. + Reverting to your previous version requires restoring from a backup. -**Important:** Please go to the [backup]({{< ref "#upgrade-instructions" >}}) section for detailed instructions on backup before upgrading to v5.3.0 +**Important:** Please go to the [backup]({{< ref "#upgrade-instructions" >}}) section for detailed instructions on +backup before upgrading to v5.3.0 #### Python plugin support -Starting from Tyk Gateway version v5.3.0, Python is no longer bundled with the official Tyk Gateway Docker image to reduce exposure to security vulnerabilities in the Python libraries. +Starting from Tyk Gateway version v5.3.0, Python is no longer bundled with the official Tyk Gateway Docker image to +reduce exposure to security vulnerabilities in the Python libraries. + +Whilst the Gateway still supports Python plugins, you must [extend +the image]({{< ref "plugins/supported-languages/rich-plugins/python/python#install-the-python-development-packages" >}}) +to add the language support. -Whilst the Gateway still supports Python plugins, you must [extend the image]({{< ref "plugins/supported-languages/rich-plugins/python/python#install-the-python-development-packages" >}}) to add the language support. ### Dependencies {#dependencies-5.3.0} + #### Compatibility Matrix For Tyk Components + -| Gateway Version | Recommended Releases | Backwards Compatibility | -|---- |---- |---- | -| 5.3.0 | MDCB v2.5 | MDCB v2.4.2 | -| | Operator v0.17 | Operator v0.16 | -| | Sync v1.4.3 | Sync v1.4.3 | -| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.3.0 | Helm all versions | -| | EDP v1.8.3 | EDP all versions | -| | Pump v1.9.0 | Pump all versions | -| | TIB (if using standalone) v1.5.1 | TIB all versions | + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | ------------------------------------------------------------------ | ----------------------- | +| 5.3.0 | MDCB v2.5 | MDCB v2.4.2 | +| | Operator v0.17 | Operator v0.16 | +| | Sync v1.4.3 | Sync v1.4.3 | +| | Helm Chart (tyk-stack, tyk-oss, tyk-dashboard, tyk-gateway) v1.3.0 | Helm all versions | +| | EDP v1.8.3 | EDP all versions | +| | Pump v1.9.0 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | #### 3rd Party Dependencies & Tools + -| Third Party Dependency | Tested Versions | Compatible Versions | Comments | -| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | -| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | -| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | -| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------------- | --------------------- | ------------------------------------------------------------------------------------------ | +| [Go](https://go.dev/dl/) | 1.19 (GQL), 1.21 (GW) | 1.19 (GQL), 1.21 (GW) | [Go plugins]({{< ref "plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | -Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. ### Deprecations + -In 5.3.0, we have simplified the configuration of response transform middleware. We encourage users to embrace the `global_headers` mechanism as the `response_processors.header_injector` is now an optional setting and will be removed in a future release. + +In 5.3.0, we have simplified the configuration of response transform middleware. We encourage users to embrace the +`global_headers` mechanism as the `response_processors.header_injector` is now an optional setting and will be removed +in a future release. ### Upgrade instructions {#upgrade-5.3.0} + If you are upgrading to 5.3.0, please follow the detailed [upgrade instructions](#upgrading-tyk). -**The following steps are essential to follow before upgrading** -Tyk Cloud (including Hybrid Gateways) and Self Managed users - Please refer to the [release notes of Tyk Dashboard 5.3.0]({{}}). +**The following steps are essential to follow before upgrading** Tyk Cloud (including Hybrid Gateways) and Self Managed +users - Please refer to the [release notes of Tyk Dashboard 5.3.0]({{}}). + +For OSS deployments - -For OSS deployments - -1. Backup Your environment using the [usual guidance]({{}}) documented with every release (this includes backup config file and database). -2. Backup all your API definitions (Tyk OAS API and Classic Definitions) by saving your API and policy files or by exporting them using the `GET /tyk/apis` and `Get /tyk/policies` -3. Performing the upgrade - follow the instructions in the [upgrade guide]({{}}) when upgrading Tyk. +1. Backup Your environment using the [usual guidance]({{}}) documented with every release (this includes + backup config file and database). +2. Backup all your API definitions (Tyk OAS API and Classic Definitions) by saving your API and policy files or by + exporting them using the `GET /tyk/apis` and `Get /tyk/policies` +3. Performing the upgrade - follow the instructions in the [upgrade + guide]({{}}) when upgrading Tyk. ### Release Highlights + -We’re thrilled to announce the release of 5.3.0, an update packed with exciting features and significant fixes to elevate your experience with Tyk Gateway. For a comprehensive list of changes, please refer to the detailed [changelog](#Changelog-v5.3.0) below. +We’re thrilled to announce the release of 5.3.0, an update packed with exciting features and significant fixes to +elevate your experience with Tyk Gateway. For a comprehensive list of changes, please refer to the detailed +[changelog](#Changelog-v5.3.0) below. #### Tyk OAS Feature Maturity -Tyk OAS is now out of [Early Access]({{< ref "developer-support/special-releases-and-features/early-access-features" >}}) as we have reached feature maturity. You are now able to make use of the majority of Tyk Gateway's features from your Tyk OAS APIs, so they are a credible alternative to the legacy Tyk Classic APIs. + +Tyk OAS is now out of [Early +Access]({{< ref "developer-support/special-releases-and-features/early-access-features" >}}) as we have reached feature maturity. +You are now able to make use of the majority of Tyk Gateway's features from your Tyk OAS APIs, so they are a credible alternative +to the legacy Tyk Classic APIs. From Tyk 5.3.0 we support the following features when using Tyk OAS APIs with Tyk Gateway: - Security - - All Tyk-supported client-gateway authentication methods including custom auth plugins - - Automatic configuration of authentication from the OpenAPI description - - Gateway-upstream mTLS - - CORS + + - All Tyk-supported client-gateway authentication methods including custom auth plugins + - Automatic configuration of authentication from the OpenAPI description + - Gateway-upstream mTLS + - CORS - API-level (global) middleware including: - - Response caching - - Custom plugins for PreAuth, Auth, PostAuth, Post and Response hooks - - API-level rate limits - - Request transformation - headers - - Response transformation - headers - - Service discovery - - Internal API + + - Response caching + - Custom plugins for PreAuth, Auth, PostAuth, Post and Response hooks + - API-level rate limits + - Request transformation - headers + - Response transformation - headers + - Service discovery + - Internal API - Endpoint-level (per-path) middleware including: - - Request validation - headers and body (automatically configurable from the OpenAPI description) - - Request transformation - method, headers and body - - Response transformation - headers and body - - URL rewrite and internal endpoints - - Mock responses (automatically configurable from the OpenAPI description) - - Response caching - - Custom Go Post-Plugin - - Request size limit - - Virtual endpoint - - Allow and block listing - - Do-not-track - - Circuit breakers - - Enforced timeouts - - Ignore authentication + + - Request validation - headers and body (automatically configurable from the OpenAPI description) + - Request transformation - method, headers and body + - Response transformation - headers and body + - URL rewrite and internal endpoints + - Mock responses (automatically configurable from the OpenAPI description) + - Response caching + - Custom Go Post-Plugin + - Request size limit + - Virtual endpoint + - Allow and block listing + - Do-not-track + - Circuit breakers + - Enforced timeouts + - Ignore authentication - Observability - - Open Telemetry tracing - - Detailed log recording (include payload in the logs) - - Do-not-track endpoint -- Governance - - API Versioning + - Open Telemetry tracing + - Detailed log recording (include payload in the logs) + - Do-not-track endpoint +- Governance + - API Versioning #### Enhanced KV storage of API Definition Fields -Tyk is able to store configuration data from the API definition in KV systems, such as Vault and Consul, and then reference these values during configuration of the Tyk Gateway or APIs deployed on the Gateway. Previously this was limited to the Target URL and Listen Path but from 5.3.0 you are able to store any `string` type field from your API definition, unlocking the ability to store sensitive information in a centralised location. For full details check out the [documentation]({{< ref "tyk-configuration-reference/kv-store" >}}) of this powerful feature. + +Tyk is able to store configuration data from the API definition in KV systems, such as Vault and Consul, and then +reference these values during configuration of the Tyk Gateway or APIs deployed on the Gateway. Previously this was +limited to the Target URL and Listen Path but from 5.3.0 you are able to store any `string` type field from your API +definition, unlocking the ability to store sensitive information in a centralised location. For full details check out +the [documentation]({{< ref "tyk-configuration-reference/kv-store" >}}) of this powerful feature. #### Redis v7.x Compatibility -We have upgraded Redis driver [go-redis](https://github.com/redis/go-redis) to v9. Subsequently, Tyk 5.3 is compatible with Redis v7.x. + +We have upgraded Redis driver [go-redis](https://github.com/redis/go-redis) to v9. Subsequently, Tyk 5.3 is compatible +with Redis v7.x. #### Gateway and Component Upgrades -We've raised the bar with significant upgrades to our Gateway and components. Leveraging the power and security of Go 1.21, upgrading Sarama to version 1.41.0 and enhancing the GQL engine with Go version 1.19, we ensure improved functionality and performance to support your evolving needs seamlessly. + +We've raised the bar with significant upgrades to our Gateway and components. Leveraging the power and security of Go +1.21, upgrading Sarama to version 1.41.0 and enhancing the GQL engine with Go version 1.19, we ensure improved +functionality and performance to support your evolving needs seamlessly. ### Downloads + - [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.3.0) - ```bash docker pull tykio/tyk-gateway:v5.3.0 - ``` + ``` - Helm charts - [tyk-charts v1.3]({{< ref "product-stack/tyk-charts/release-notes/version-1.3.md" >}}) - [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) ### Changelog {#Changelog-v5.3.0} + #### Added + +Each change log item should be expandable. The first line summarises the changelog entry. It should be then possible to +expand this to reveal further details about the changelog item. This is achieved using HTML as shown in the example +below. --> +
    • Improved OAuth token management in Redis -In this release, we fixed automated token trimming in Redis, ensuring efficient management of OAuth tokens by implementing a new hourly job within the Gateway and providing a manual trigger endpoint. +In this release, we fixed automated token trimming in Redis, ensuring efficient management of OAuth tokens by +implementing a new hourly job within the Gateway and providing a manual trigger endpoint. +
    • Tyk Gateway now validates RFC3339 Date-Time Formats -We fixed a bug in the Tyk OAS Validate Request middleware where we were not correctly validating date-time format schema, which could lead to invalid date-time values reaching the upstream services. +We fixed a bug in the Tyk OAS Validate Request middleware where we were not correctly validating date-time format +schema, which could lead to invalid date-time values reaching the upstream services. +
    • Inaccurate Distributed Rate Limiting (DRL) behavior on Gateway startup -Fixed an issue when using the Distributed Rate Limiter (DRL) where the Gateway did not apply any rate limit until a DRL notification was received. Now the rate of requests will be limited at 100% of the configured rate limit until the DRL notification is received, after which the limit will be reduced to an even share of the total (i.e. 100% divided by the number of Gateways) per the rate limit algorithm design. +Fixed an issue when using the Distributed Rate Limiter (DRL) where the Gateway did not apply any rate limit until a DRL +notification was received. Now the rate of requests will be limited at 100% of the configured rate limit until the DRL +notification is received, after which the limit will be reduced to an even share of the total (i.e. 100% divided by the +number of Gateways) per the rate limit algorithm design. +
    • Duplicate fields added by OAS-to-UDG converter -Fixed an issue where the OAS-to-UDG converter was sometimes adding the same field to an object type many times. This caused issues with the resulting GQL schema and made it non-compliant with GQL specification. +Fixed an issue where the OAS-to-UDG converter was sometimes adding the same field to an object type many times. This +caused issues with the resulting GQL schema and made it non-compliant with GQL specification. +
    • Gateway issue processing queries with GQL Engine -Fixed an issue where the Gateway attempted to execute a query with GQL engine version 1 (which lacks OTel support), while simultaneously trying to validate the same query with the OpenTelemetry (OTel) supported engine. It caused the API to fail with an error message "Error socket hang up". Right now with OTel enabled, the gateway will enforce GQL engine to default to version 2, so that this problem doesn't occur anymore. +Fixed an issue where the Gateway attempted to execute a query with GQL engine version 1 (which lacks OTel support), +while simultaneously trying to validate the same query with the OpenTelemetry (OTel) supported engine. It caused the API +to fail with an error message "Error socket hang up". Right now with OTel enabled, the gateway will enforce GQL engine +to default to version 2, so that this problem doesn't occur anymore. +
    • Handling arrays of objects in endpoint responses by OAS-to-UDG converter -The OAS-to-UDG converter now effectively handles array of objects within POST paths. Previously, there were instances where the converter failed to accurately interpret and represent these structures in the generated UDG configuration. +The OAS-to-UDG converter now effectively handles array of objects within POST paths. Previously, there were instances +where the converter failed to accurately interpret and represent these structures in the generated UDG configuration. +
    • GQL Playground issues related to encoding of request response -An issue was identified where the encoding from the GQL upstream cache was causing readability problems in the response body. Specifically, the upstream GQL cache was utilizing brotli compression and not respecting the Accept-Encoding header. Consequently, larger response bodies became increasingly unreadable for the GQL engine due to compression, leading to usability issues for users accessing affected content. The issue has now been fixed by adding the brotli encoder to the GQL engine. +An issue was identified where the encoding from the GQL upstream cache was causing readability problems in the response +body. Specifically, the upstream GQL cache was utilizing brotli compression and not respecting the Accept-Encoding +header. Consequently, larger response bodies became increasingly unreadable for the GQL engine due to compression, +leading to usability issues for users accessing affected content. The issue has now been fixed by adding the brotli +encoder to the GQL engine. +
    • OAS-to-UDG converter issue with "JSON" return type -OAS-to-UDG converter was unable to correctly process Tyk OAS API definitions where "JSON" was used as one of enum values. This issue is now fixed and whenever "JSON" is used as one of enums in the OpenAPI description, it will get correctly transformed into a custom scalar in GQL schema. +OAS-to-UDG converter was unable to correctly process Tyk OAS API definitions where "JSON" was used as one of enum +values. This issue is now fixed and whenever "JSON" is used as one of enums in the OpenAPI description, it will get +correctly transformed into a custom scalar in GQL schema. +
    • Gateway Panic during API Edit with Virtual Endpoint -Fixed an issue where the Gateway could panic while updating a Tyk OAS API with the Virtual Endpoint middleware configured. +Fixed an issue where the Gateway could panic while updating a Tyk OAS API with the Virtual Endpoint middleware +configured. +
    • @@ -1094,34 +1756,44 @@ Fixed an issue where the Gateway could panic while updating a Tyk OAS API with t Gateway panics during API Reload with JavaScript middleware bundle Fixed an issue where reloading a bundle containing JS plugins could cause the Gateway to panic. +
    • GraphQL introspection issue when Allow/Block List enabled -Fixed an issue where the *Disable introspection* setting was not working correctly in cases where field-based permissions were set (allow or block list). It was not possible to introspect the GQL schema while introspection was technically allowed but field-based permissions were enabled. Currently, Allow/Block list settings are ignored only for introspection queries and introspection is only controlled by the *Disable introspection* setting. +Fixed an issue where the _Disable introspection_ setting was not working correctly in cases where field-based +permissions were set (allow or block list). It was not possible to introspect the GQL schema while introspection was +technically allowed but field-based permissions were enabled. Currently, Allow/Block list settings are ignored only for +introspection queries and introspection is only controlled by the _Disable introspection_ setting. +
    • Handling of objects without properties in OAS-to-UDG converter -The OAS-to-UDG converter was unable to handle a document properly if an object within the OpenAPI description had no properties defined. This limitation resulted in unexpected behavior and errors during the conversion process. The tool will now handle such cases seamlessly, ensuring a smoother and more predictable conversion process +The OAS-to-UDG converter was unable to handle a document properly if an object within the OpenAPI description had no +properties defined. This limitation resulted in unexpected behavior and errors during the conversion process. The tool +will now handle such cases seamlessly, ensuring a smoother and more predictable conversion process +
    • Fixed memory leak issue in Tyk Gateway v5.2.4 -Addressed a memory leak issue in Tyk Gateway linked to a logger mutex change introduced in v5.2.4. Reverting these changes has improved connection management and enhanced system performance. +Addressed a memory leak issue in Tyk Gateway linked to a logger mutex change introduced in v5.2.4. Reverting these +changes has improved connection management and enhanced system performance. +
    - #### Security Fixes + ---- - + ## Further Information ### Upgrading Tyk + Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance on the upgrade strategy. ### API Documentation + + - [Tyk Gateway API]({{}}) - [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/overview) ### FAQ -Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. + +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating +to reporting bugs, upgrading Tyk, technical support and how to contribute. diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.5.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.5.md index 8de566cfa3..fc20a55d0d 100644 --- a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.5.md +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.5.md @@ -2,7 +2,7 @@ title: Tyk Gateway 5.5 Release Notes date: 2024-03-27T15:51:11Z description: "Release notes documenting updates, enhancements, and changes for Tyk Gateway versions within the 5.5.X series." -tags: ["Tyk Gateway", "Release notes", "changelog", "v5.5", "5.5", "5.5.0", "5.5.1"] +tags: ["Tyk Gateway", "Release notes", "changelog", "v5.5", "5.5", "5.5.0", "5.5.1", "5.5.2"] --- **Open Source** ([Mozilla Public License](https://github.com/TykTechnologies/tyk/blob/master/LICENSE.md)) @@ -15,6 +15,60 @@ Our minor releases are supported until our next minor comes out. --- +## 5.5.2 Release Notes + +### Release Date 03 October 2024 + +### Release Highlights +This release replaces Tyk Gateway 5.5.1 which was accidentally released as a non-distroless image. + + +### Breaking Changes + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.5.2} + +#### Compatibility Matrix For Tyk Components + +| Gateway Version | Recommended Releases | Backwards Compatibility | +|---- |---- |---- | +| 5.5.2 | MDCB v2.7 | MDCB v2.4.2 | +| | Operator v0.18 | Operator v0.17 | +| | Sync v1.5 | Sync v1.4.3 | +| | Helm Chart v2.0.0 | Helm all versions | +| | EDP v1.10 | EDP all versions | +| | Pump v1.11 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------ | ---------------------- | ---------------------- | -------- | +| [Go](https://go.dev/dl/) | 1.21 | 1.21 | [Go plugins]({{< ref "/plugins/supported-languages/golang" >}}) must be built using Go 1.21 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3)| v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + +There are no deprecations in this release. + +### Upgrade instructions {#upgrade-5.5.2} +If you are upgrading to 5.5.2, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads +- [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.5.2) + - ```bash + docker pull tykio/tyk-gateway:v5.5.2 + ``` +- Helm charts + - [tyk-charts v2.0.0]({{< ref "product-stack/tyk-charts/release-notes/version-2.0.md" >}}) +- [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) + +--- + ## 5.5.1 Release Notes ### Release Date 26 September 2024 @@ -134,7 +188,7 @@ Now configure rate limits at the endpoint level for both [Tyk OAS]({{< ref "prod #### Root CA Support for Client Certificates -Simplify certificate management with support for root Certificate Authority (CA) certificates, enabling clients to authenticate using certificates signed by the [configured root CA]({{< ref "basic-config-and-security/security/mutual-tls/client-mtls#can-i-register-a-root-certificate-authority-ca-certificate-with-tyk-so-that-tyk-will-validate-requests-with-certificates-signed-by-this-ca" >}}). +Simplify certificate management with support for root Certificate Authority (CA) certificates, enabling clients to authenticate using certificates signed by the [configured root CA]({{< ref "/api-management/authentication-authorization#faq" >}}). #### Optimised AST Document Handling diff --git a/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.6.md b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.6.md new file mode 100644 index 0000000000..893374aa46 --- /dev/null +++ b/tyk-docs/content/product-stack/tyk-gateway/release-notes/version-5.6.md @@ -0,0 +1,481 @@ +--- +title: Tyk Gateway 5.6 Release Notes +date: 2024-10-08T15:51:11Z +description: + "Release notes documenting updates, enhancements, and changes for Tyk Gateway versions within the 5.6.X series." +tags: ["Tyk Gateway", "Release notes", "v5.6", "5.6.0", "5.6.1", "5.6", "changelog"] +--- + + + +**Open Source** ([Mozilla Public License](https://github.com/TykTechnologies/tyk/blob/master/LICENSE.md)) + +**This page contains all release notes for version 5.6.X displayed in a reverse chronological order** + +## Support Lifetime + + + +Our minor releases are supported until our next minor comes out. + +--- + +## 5.6.1 Release Notes + +### Release Date 18 October 2024 + +### Release Highlights + + + +This patch release for Tyk Gateway addresses critical stability issues for users running Tyk Gateway within the data +plane, connecting to the control plane or Tyk Hybrid. Affected users should upgrade immediately to version 5.6.1 to +avoid service interruptions and ensure reliable operations with the control plane or Tyk Hybrid. + +For a comprehensive list of changes, please refer to the detailed [changelog]({{< ref "#Changelog-v5.6.1">}}) below. + +### Breaking Changes + + + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.6.1} + + + +#### Compatibility Matrix For Tyk Components + + + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | -------------------------------- | ----------------------- | +| 5.6.1 | MDCB v2.7.1 | MDCB v2.4.2 | +| | Operator v1.0.0 | Operator v0.17 | +| | Sync v2.0 | Sync v1.4.3 | +| | Helm Chart v2.1 | Helm all versions | +| | EDP v1.11 | EDP all versions | +| | Pump v1.11 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools + + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------- | ------------------- | ------------------------------------------------------------------------------------------- | +| [Go](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "/plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + + + +There are no deprecations in this release. + + + + +### Upgrade instructions {#upgrade-5.6.1} + +If you are upgrading to 5.6.1, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads + +- [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.6.1) + - ```bash + docker pull tykio/tyk-gateway:v5.6.1 + ``` +- Helm charts + + - [tyk-charts v2.1.0]({{}}) + +- [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) + +### Changelog {#Changelog-v5.6.1} + + + +#### Fixed + + +
      +
    • +
      +Resolved gateway panic on reconnecting to MDCB control plane or Tyk Cloud + +In version 5.6.0, Tyk Gateway could encounter a panic when attempting to reconnect to the control plane after it was +restarted. This patch version has resolved this issue, ensuring stable connectivity between the gateway and control +plane following reconnections and reducing the need for manual intervention. + +
      +
    • +
    + + + + + +## 5.6.0 Release Notes + +### Release Date 10 October 2024 + +{{< note success >}} **Important Update**

    Date: 12 October 2024
    Topic: Gateway panic when +reconnecting to MDCB control plane or Tyk Cloud
    Workaround: Restart Gateway
    Affected Product: Tyk +Gateway as an Edge Gateway
    Affected versions: v5.6.0, v5.3.6, and v5.0.14
    Issue Description:
    + +

    We have identified an issue affecting Tyk Gateway deployed as a data plane connecting to the Multi-Data Center Bridge (MDCB) control plane or Tyk Cloud. In the above mentioned Gateway versions a panic may occur when gateway reconnect to the control plane after the control plane is restarted. +

    Our engineering team is actively working on a fix, and a patch (versions 5.6.1, 5.3.7, and 5.0.15) will be released soon.
    +Recommendations:
    +

      +
    • For users on versions 5.5.0, 5.3.5, and 5.0.13
      +We advise you to delay upgrading to the affected versions (5.6.0, 5.3.6, or 5.0.14) until the patch is available. + +
    • For users who have already upgraded to 5.6.0, 5.3.6, or 5.0.14 and are experiencing a panic in the gateway:
      +Restarting the gateway process will restore it to a healthy state. If you are operating in a *Kubernetes* environment, Tyk Gateway instance should automatically restart, which ultimately resolves the issue.
      +
    +

    We appreciate your understanding and patience as we work to resolve this. Please stay tuned for the upcoming patch release, which will address this issue. +{{< /note >}} + +### Release Highlights + + + +We are thrilled to announce new updates and improvements in Tyk 5.6.0, bringing more control, flexibility, and +performance. For a comprehensive list of changes, please refer to the detailed +[changelog]({{< ref "#Changelog-v5.6.0">}}) below. + +#### Per endpoint Rate Limiting for clients + +Building on the [per-endpoint upstream rate +limits]({{< ref "getting-started/key-concepts/rate-limiting#api-level-rate-limiting" >}}) introduced in Tyk 5.5.0 we have +now added [per-endpoint client +rate limits]({{< ref "getting-started/key-concepts/rate-limiting#key-level-rate-limiting" >}}). This new feature allows +for more granular control over client consumption of API resources by associating the rate limit with the access key, +enabling you to manage and optimize API usage more effectively. + +#### Gateway logs in JSON format + +You can now output Tyk Gateway system logs in JSON format. This allows for easier integration with logging systems and +more structured log data. + +#### Go upgrade to 1.22 + +We’ve upgraded the Tyk Gateway to Golang 1.22, bringing improved performance, better security, and enhanced stability to +the core system. + +### Breaking Changes + + + +There are no breaking changes in this release. + +### Dependencies {#dependencies-5.6.0} + + + +#### Compatibility Matrix For Tyk Components + + + +| Gateway Version | Recommended Releases | Backwards Compatibility | +| --------------- | -------------------------------- | ----------------------- | +| 5.6.0 | MDCB v2.7.1 | MDCB v2.4.2 | +| | Operator v1.0.0 | Operator v0.17 | +| | Sync v2.0 | Sync v1.4.3 | +| | Helm Chart v2.1 | Helm all versions | +| | EDP v1.11 | EDP all versions | +| | Pump v1.11 | Pump all versions | +| | TIB (if using standalone) v1.5.1 | TIB all versions | + +#### 3rd Party Dependencies & Tools + + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ------------------------------------------------------------- | --------------- | ------------------- | ------------------------------------------------------------------------------------------- | +| [Go](https://go.dev/dl/) | 1.22 | 1.22 | [Go plugins]({{< ref "/plugins/supported-languages/golang" >}}) must be built using Go 1.22 | +| [Redis](https://redis.io/download/) | 6.2.x, 7.x | 6.2.x, 7.x | Used by Tyk Gateway | +| [OpenAPI Specification](https://spec.openapis.org/oas/v3.0.3) | v3.0.x | v3.0.x | Supported by [Tyk OAS]({{< ref "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc" >}}) | + +Given the potential time difference between your upgrade and the release of this version, we recommend users verify the +ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + + + +There are no deprecations in this release. + + + + +### Upgrade instructions {#upgrade-5.6.0} + +If you are upgrading to 5.6.0, please follow the detailed [upgrade instructions](#upgrading-tyk). + +### Downloads + +- [Docker image to pull](https://hub.docker.com/r/tykio/tyk-gateway/tags?page=&page_size=&ordering=&name=v5.6.0) + - ```bash + docker pull tykio/tyk-gateway:v5.6.0 + ``` +- Helm charts + + - [tyk-charts v2.1.0]({{}}) + +- [Source code tarball for OSS projects](https://github.com/TykTechnologies/tyk/releases) + +### Changelog {#Changelog-v5.6.0} + + + +#### Added + + +

      +
    • +
      +Per endpoint client rate limiting + +Building on the [per-endpoint upstream rate +limits]({{< ref "getting-started/key-concepts/rate-limiting#api-level-rate-limiting" >}}) introduced in Tyk 5.5.0 we have +added [per-endpoint client +rate limits]({{< ref "getting-started/key-concepts/rate-limiting#key-level-rate-limiting" >}}). This new feature +provided users with more precise control over API resource consumption by linking rate limits to access keys, allowing +for better management and optimization of API usage. + +
      +
    • +
    • +
      +New option to generate Gateway system logs in JSON format + +The Tyk Gateway now supports logging in JSON format. To enable this feature, set the environment variable +`TYK_GW_LOGFORMAT` to `json`. If a different value is provided, the logs will default to the standard format. This +enhancement allows for improved log processing and integration with various monitoring tools. + +
      +
    • +
    + +#### Changed + + +
      +
    • +
      +Upgrade to Go 1.22 for Tyk Dashboard + +The Tyk Gateway and Tyk Dashboard have been upgraded from Golang 1.21 to Golang 1.22, bringing enhanced performance, +strengthened security, and access to the latest features available in the new Golang release. + +
      +
    • +
    + +#### Fixed + + +
      +
    • +
      +Data plane gateways sometimes didn't synchronise policies and APIs on start-up + +We have enhanced the initial synchronization of Data Plane gateways with the Control Plane to ensure more reliable +loading of policies and APIs on start-up. A synchronous initialization process has been implemented to avoid sync +failures and reduce the risk of service disruptions caused by failed loads. This update ensures smoother and more +consistent syncing of policies and APIs in distributed deployments. + +
      +
    • +
    • +
      +Quota wasn't respected under extreme load + +We have fixed an issue where the quota limit was not being consistently respected during request spikes, especially in +deployments with multiple gateways. The problem occurred when multiple gateways cached the current and remaining quota +counters at the end of quota periods. To address this, a distributed lock mechanism has been implemented, ensuring +coordinated quota resets and preventing discrepancies across gateways. + +
      +
    • + + +
    • +
      +Rate limits were incorrectly combined when multiple policies were applied to a key + +We have fixed an issue where API-level rate limits set in multiple policies were not correctly applied to the same key. +With this update, when multiple policies configure rate limits for a key, the key will now receive the highest rate +limit from the combined policies, ensuring proper enforcement of limits. + +
      +
    • +
    • +
      +Restored key creation performance to Gateway 4.0.12/4.3.3 levels + +We have addressed a performance regression where key creation for policies with a large number of APIs (100+) became +significantly slower in Tyk 4.0.13/5.0.1. The operation, which previously took around 1.5 seconds, has been taking over +20 seconds since versions 4.0.13/5.0.1. This issue has been resolved by optimizing Redis operations during key creation, +restoring the process to the previous duration, even with a large number of APIs in the policy. + +
      +
    • +
    + +#### Security Fixes + + + +
      +
    • +
      +High priority CVEs fixed + +Fixed the following high priority CVEs identified in the Tyk Gateway, providing increased protection against security +vulnerabilities: + +- [CVE-2024-6104](https://nvd.nist.gov/vuln/detail/CVE-2024-6104) +
      +
    • +
    + + + + + + + +## Further Information + +### Upgrading Tyk + +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance on the upgrade strategy. + +### API Documentation + + + +- [Tyk Gateway API]({{}}) +- [Postman Collection](https://www.postman.com/tyk-technologies/workspace/tyk-public-workspace/overview) + +### FAQ + +Please visit our [Developer Support]({{< ref "/frequently-asked-questions/faq" >}}) page for further information relating +to reporting bugs, upgrading Tyk, technical support and how to contribute. diff --git a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/client-authentication.md b/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/client-authentication.md deleted file mode 100644 index 3f37be2bf5..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/client-authentication.md +++ /dev/null @@ -1,392 +0,0 @@ ---- -title: "Authentication examples" -date: 2024-06-25 -tags: ["Tyk", "Kubernetes", "API Management", "CRD", "DevOps", "API Gateway Configuration"] -description: "This documentation provides a comprehensive guide on configuring API versioning within the ApiDefinition Custom Resource Definition (CRD)." -keywords: ["Tyk Operator", "Kubernetes", "API Versioning"] ---- - -Client to Gateway Authentication in Tyk ensures secure communication between clients and the Tyk Gateway. Tyk supports various authentication methods to authenticate and authorize clients before they can access your APIs. These methods include API keys, Static Bearer Tokens, JWT, mTLS, Basic Authentication, and more. This document provides example manifests for each authentication method supported by Tyk. - -## Keyless (Open) - -This configuration allows [keyless (open)]({{}}) access to the API without any authentication. - -```yaml {hl_lines=["7-7"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-keyless -spec: - name: httpbin-keyless - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true -``` - -## Auth Token (Bearer Token) - -This setup requires a [bearer token]({{}}) for access. - -In the below example, the authentication token is set by default to the `Authorization` header of the request. You can customize this behavior by configuring the following fields: - -- `use_cookie`: Set to true to use a cookie value for the token. -- `cookie_name`: Specify the name of the cookie if use_cookie is enabled. -- `use_param`: Set to true to allow the token to be passed as a query parameter. -- `param_name`: Specify the parameter name if use_param is enabled. -- `use_certificate`: Enable client certificate. This allows you to create dynamic keys based on certificates. -- `validate_signature`: Enable [signature validation]({{}}). - -```yaml {hl_lines=["13-35"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-auth-token -spec: - name: httpbin-auth-token - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - use_standard_auth: true - auth_configs: - authToken: - # Auth Key Header Name - auth_header_name: Authorization - # Use cookie value - use_cookie: false - # Cookie name - cookie_name: "" - # Allow query parameter as well as header - use_param: false - # Parameter name - param_name: "" - # Enable client certificate - use_certificate: false - # Enable Signature validation - validate_signature: false - signature: - algorithm: "" - header: "" - secret: "" - allowed_clock_skew: 0 - error_code: 0 -``` - -## JWT - -This configuration uses [JWT tokens]({{}}) for authentication. - -Users can configure JWT authentication by defining the following fields: - -- `jwt_signing_method`: Specify the method used to sign the JWT. Refer to [JWT Signing Method]({{}}) for supported methods. -- `jwt_source`: Specify the public key used for verifying the JWT. -- `jwt_identity_base_field`: Define the identity source, typically set to `sub` (subject), which uniquely identifies the user or entity. -- `jwt_policy_field_name`: Specify the claim within the JWT payload that indicates the policy ID to apply. -- `jwt_default_policies` (Optional): Define default policies to apply if no policy claim is found in the JWT payload. - -The following example configures an API to use JWT authentication. It specifies the ECDSA signing method and public key, sets the `sub` claim as the identity source, uses the `pol` claim for policy ID, and assigns a default policy (`jwt-policy` SecurityPolicy in `default` namespace) if no policy is specified in the token. - -```yaml {hl_lines=["13-22"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-jwt1 -spec: - name: httpbin-jwt1 - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin-jwt1 - strip_listen_path: true - enable_jwt: true - strip_auth_data: true - jwt_signing_method: ecdsa - # ecdsa pvt: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2V2WnpMMWdkQUZyODhoYjIKT0YvMk54QXBKQ3pHQ0VEZGZTcDZWUU8zMGh5aFJBTkNBQVFSV3oram42NUJ0T012ZHlIS2N2akJlQlNEWkgycgoxUlR3am1ZU2k5Ui96cEJudVE0RWlNbkNxZk1QV2lacUI0UWRiQWQwRTdvSDUwVnB1WjFQMDg3RwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t - # ecdsa pub: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVZzL281K3VRYlRqTDNjaHluTDR3WGdVZzJSOQpxOVVVOEk1bUVvdlVmODZRWjdrT0JJakp3cW56RDFvbWFnZUVIV3dIZEJPNkIrZEZhYm1kVDlQT3hnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t - jwt_source: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFRVZzL281K3VRYlRqTDNjaHluTDR3WGdVZzJSOQpxOVVVOEk1bUVvdlVmODZRWjdrT0JJakp3cW56RDFvbWFnZUVIV3dIZEJPNkIrZEZhYm1kVDlQT3hnPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t - jwt_identity_base_field: sub - jwt_policy_field_name: pol - jwt_default_policies: - - default/jwt-policy ---- -apiVersion: tyk.tyk.io/v1alpha1 -kind: SecurityPolicy -metadata: - name: jwt-policy -spec: - access_rights_array: - - name: httpbin-jwt1 - namespace: default - versions: - - Default - active: true - name: jwt-policy - state: active -``` - -You can verify the API is properly authenticated with following command: - -1. JWT with default policy -```bash -curl http://localhost:8080/httpbin-jwt1/get -H 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaWF0IjoxNTE2MjM5MDIyfQ.rgPyrCJYs2im7zG6im5XUqsf_oAf_Kqk-F6IlLb3yzZCSZvrQObhBnkLKgfmVTbhQ5El7Q6KskXPal5-eZFuTQ' -{ - "args": {}, - "headers": { - "Accept": "*/*", - "Accept-Encoding": "gzip", - "Host": "httpbin.org", - "Traceparent": "00-d2b93d763ca27f29181c8e508b5ac0c9-a446afa3bd053617-01", - "User-Agent": "curl/8.6.0", - "X-Amzn-Trace-Id": "Root=1-6696f0bf-1d9e532c6a2eb3a709e7086b" - }, - "origin": "127.0.0.1, 178.128.43.98", - "url": "http://httpbin.org/get" -} -``` - -2. JWT with explicit policy -```bash -curl http://localhost:8080/httpbin-jwt1/get -H 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiaWF0IjoxNTE2MjM5MDIyLCJwb2wiOiJaR1ZtWVhWc2RDOXFkM1F0Y0c5c2FXTjUifQ.7nY9TvYgsAZqIHLhJdUPqZtzqU_5T-dcNtCt4zt8YPyUj893Z_NopL6Q8PlF8TlMdxUq1Ff8rt4-p8gVboIqlA' -{ - "args": {}, - "headers": { - "Accept": "*/*", - "Accept-Encoding": "gzip", - "Host": "httpbin.org", - "Traceparent": "00-002adf6632ec20377cb7ccf6c3037e78-3c4cb97c70d790cb-01", - "User-Agent": "curl/8.6.0", - "X-Amzn-Trace-Id": "Root=1-6696f1dd-7f9de5f947c8c73279f7cca6" - }, - "origin": "127.0.0.1, 178.128.43.98", - "url": "http://httpbin.org/get" -} -``` - -## Client mTLS - -This setup requires mutual TLS (mTLS) for client authentication using specified client certificates. The example provided shows how to create an API definition with mTLS authentication for `httpbin-client-mtls`. - -1. **Generate Self-Signed Key Pair:** - -You can generate a self-signed key pair using the following OpenSSL command: - -```bash -openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -``` - -2. **Create Kubernetes Secret:** - -Create a secret in Kubernetes to store the client certificate: - -```bash -kubectl create secret tls my-test-tls --cert cert.pem --key key.pem -``` - -3. **Create API Definition:** - -Below is the YAML configuration for an API that uses mTLS authentication. Note that the `client_certificate_refs` field references the Kubernetes secret created in the previous step. - -```yaml {hl_lines=["19-21"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-client-mtls -spec: - name: Httpbin Client MTLS - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default - use_mutual_tls_auth: true - client_certificate_refs: - - my-test-tls -``` - -## Basic Authentication - -This configuration uses [Basic Authentication]({{}}), requiring a username and password for access. - -```yaml {hl_lines=["13-13"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-basic-auth -spec: - name: Httpbin Basic Authentication - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - use_basic_auth: true -``` - -## Custom Plugin Auth (go) - -This configuration uses a [Golang plugin]({{}}) for custom authentication. The following example shows how to create an API definition with a Golang custom plugin for `httpbin-go-auth`. - -For an example of Golang authentication middleware, see [Performing custom authentication with a Golang plugin]({{}}). - -```yaml {hl_lines=["7-7", "14-21"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-go-auth -spec: - name: httpbin-go-auth - use_go_plugin_auth: true # Turn on GO auth - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - custom_middleware: - driver: goplugin - pre: - - name: "AddFooBarHeader" - path: "/mnt/tyk-gateway/example-go-plugin.so" - auth_check: - name: "MyPluginCustomAuthCheck" - path: "/mnt/tyk-gateway/example-go-plugin.so" -``` - -## Custom Plugin Auth (gRPC) - -This configuration uses a [gRPC plugin]({{}}) for custom authentication. The following example shows how to create an API definition with a gRPC custom plugin for `httpbin-grpc-auth`. - -For a detailed walkthrough on setting up Tyk with gRPC authentication plugins, refer to [Extending Tyk with gRPC Authentication Plugins](https://tyk.io/blog/how-to-setup-custom-authentication-middleware-using-grpc-and-java/). - -```yaml {hl_lines=["9-9", "14-26"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-grpc-auth -spec: - name: httpbin-grpc-auth - protocol: http - active: true - enable_coprocess_auth: true - proxy: - target_url: http://httpbin.default.svc:8000 - listen_path: /httpbin-grpc-auth - strip_listen_path: true - custom_middleware: - driver: grpc - post_key_auth: - - name: "HelloFromPostKeyAuth" - path: "" - auth_check: - name: foo - path: "" - id_extractor: - extract_from: header - extract_with: value - extractor_config: - header_name: Authorization -``` - -## Multiple (Chained) Auth - -This setup allows for [multiple authentication]({{}}) methods to be chained together, requiring clients to pass through each specified authentication provider. - -To enable multiple (chained) auth, you should set `base_identity_provided_by` field to one of the supported chained enums. Consult [Enable Multi (Chained) Authentication in your API Definition]({{}}) for the supported auths. - -In this example, we are creating an API definition with basic authentication and mTLS with basic authentication as base identity for `httpbin-multiple-authentications`. - -```yaml {hl_lines=["19-21"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin-multiple-authentications -spec: - name: Httpbin Multiple Authentications - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default - base_identity_provided_by: basic_auth_user - use_basic_auth: true - use_mutual_tls_auth: true -``` - -## IP Allowlist - -To enable [IP Allowlist]({{}}), set the following fields: - -* `enable_ip_whitelisting`: Enables IPs allowlist. When set to `true`, only requests coming from the explicit list of IP addresses defined in (`allowed_ips`) are allowed through. -* `allowed_ips`: A list of strings that defines the IP addresses (in [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) notation) that are allowed access via Tyk. - -In this example, only requests coming from 127.0.0.2 is allowed. - -```yaml {hl_lines=["10-12"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: true - protocol: http - active: true - enable_ip_whitelisting: true - allowed_ips: - - 127.0.0.2 - proxy: - target_url: http://httpbin.default.svc:8000 - listen_path: /httpbin - strip_listen_path: true -``` - -## IP Blocklist - -To enable [IP Blocklist]({{}}), set the following fields: - -* `enable_ip_blacklisting`: Enables IPs blocklist. If set to `true`, requests coming from the explicit list of IP addresses (blacklisted_ips) are not allowed through. -* `blacklisted_ips`: A list of strings that defines the IP addresses (in [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) notation) that are blocked access via Tyk. This list is explicit and wildcards are currently not supported. - -In this example, requests coming from 127.0.0.2 will be forbidden (`403`). - -```yaml {hl_lines=["10-12"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: true - protocol: http - active: true - enable_ip_blacklisting: true - blacklisted_ips: - - 127.0.0.2 - proxy: - target_url: http://httpbin.default.svc:8000 - listen_path: /httpbin - strip_listen_path: true -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/custom-plugins.md b/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/custom-plugins.md index 87e8ff13de..6a32c4d057 100644 --- a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/custom-plugins.md +++ b/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/custom-plugins.md @@ -3,151 +3,168 @@ title: "Custom Plugins" date: 2024-08-07 tags: ["Tyk", "Kubernetes", "Plugins", "Javascript Plugins", "API Gateway Configuration"] description: "This documentation explains how to configure plugins using Tyk Operator" -keywords: [ "Tyk Operator", "custom plugins", "plugins" ] +keywords: ["Tyk Operator", "custom plugins", "plugins"] --- -This guide explains how to configure one or more custom plugins where the source code and associated configuration is co-located on Tyk Gateway’s file system. The process is similar to that for configuring the API Definition of a Tyk Classic API to use custom plugins. +This guide explains how to configure one or more custom plugins where the source code and associated configuration is +co-located on Tyk Gateway’s file system. The process is similar to that for configuring the API Definition of a Tyk +Classic API to use custom plugins. --- ## Overview -Using Tyk Classic APIs, developers can implement API-level custom plugins that can be optionally setup to execute for each of the following [hooks]({{< ref "plugins/plugin-types/plugintypes#plugin-and-hook-types" >}}) in the API request lifecycle: [Pre (Request)]({{< ref "plugins/plugin-types/request-plugins" >}}), [Authentication]({{< ref "plugins/plugin-types/auth-plugins/auth-plugins" >}}), [Post (Request)]({{< ref "plugins/plugin-types/request-plugins" >}}), [Post Authentication]({{< ref "plugins/plugin-types/request-plugins" >}}), [Response]({{< ref "plugins/plugin-types/response-plugins" >}}) and [Analytics]({{< ref "plugins/plugin-types/analytics-plugins" >}}). Subsequently, users can execute, or “hook”, their plugin into these phases of the API request lifecycle based on their specific use case. +Using Tyk Classic APIs, developers can implement API-level custom plugins that can be optionally setup to execute for +each of the following [hooks]({{< ref "plugins/plugin-types/plugintypes#plugin-and-hook-types" >}}) in the API request +lifecycle: [Pre (Request)]({{< ref "plugins/plugin-types/request-plugins" >}}), [Authentication]({{< ref "plugins/plugin-types/auth-plugins/auth-plugins" >}}), +[Post (Request)]({{< ref "plugins/plugin-types/request-plugins" >}}), [Post +Authentication]({{< ref "plugins/plugin-types/request-plugins" >}}), [Response]({{< ref "plugins/plugin-types/response-plugins" >}}) +and [Analytics]({{< ref "plugins/plugin-types/analytics-plugins" >}}). Subsequently, users can execute, or “hook”, their +plugin into these phases of the API request lifecycle based on their specific use case. This document explains how to configure the following plugin types with different drivers (plugin languages): + - Pre (Request) - Authentication - Post-Auth (Request) - Post (Request) - Response -Please refer to [Analytics Plugins]({{< ref "plugins/plugin-types/analytics-plugins" >}}) to learn how to configure Analytics plugins using Tyk Operator. +Please refer to [Analytics Plugins]({{< ref "plugins/plugin-types/analytics-plugins" >}}) to learn how to configure Analytics +plugins using Tyk Operator. --- ## How It Works {#tyk-classic} -In Tyk Classic APIs, the *custom_middleware* section of the Tyk Classic API Definition is where you configure plugins that will run at different points during the lifecycle of an API request. +In Tyk Classic APIs, the _custom_middleware_ section of the Tyk Classic API Definition is where you configure plugins +that will run at different points during the lifecycle of an API request. -The table below illustrates the Tyk Classic API configuration parameters that correspond to each phase of the API request lifecycle: +The table below illustrates the Tyk Classic API configuration parameters that correspond to each phase of the API +request lifecycle: -| Phase | Description | Config Value | -| ----- | --- | ---- | -| Pre | Occurs before main request processing. | pre | -| Auth | Custom authentication can be handled during this phase. | auth_check | -| Post Auth | Occurs after key authentication | post_key_auth | -| Post | Occurs after the main request processing but before the response is sent. | post | -| Response | Occurs after the main request processing but before the response is sent. | response | +| Phase | Description | Config Value | +| --------- | ------------------------------------------------------------------------- | ------------- | +| Pre | Occurs before main request processing. | pre | +| Auth | Custom authentication can be handled during this phase. | auth_check | +| Post Auth | Occurs after key authentication | post_key_auth | +| Post | Occurs after the main request processing but before the response is sent. | post | +| Response | Occurs after the main request processing but before the response is sent. | response | -The example configuration below illustrates how to set up multiple plugins for different phases of the request lifecycle: +The example configuration below illustrates how to set up multiple plugins for different phases of the request +lifecycle: -```json {linenos=true, linenostart=1} +```json {linenos=true, linenostart=1} { - "custom_middleware": { - "pre": [ - { - "name": "PreHook1", - "path": "/path/to/plugin1.so", - "require_session": false, - "raw_body_only": false - } - ], - "auth_check": { - "name": "AuthCheck", - "path": "/path/to/plugin.so", - "require_session": false, - "raw_body_only": false - }, - "post_key_auth": [ - { - "name": "PostKeyAuth", - "path": "/path/to/plugin.so", - "require_session": false, - "raw_body_only": false - } - ], - "post": [ - { - "name": "PostHook1", - "path": "/path/to/plugin1.so", - "require_session": false, - "raw_body_only": false - }, - { - "name": "PostHook2", - "path": "/path/to/plugin2.so", - "require_session": false, - "raw_body_only": false - } - ], - "response": [ - { - "name": "ResponseHook", - "path": "/path/to/plugin.so", - "require_session": false, - "raw_body_only": false - } - ], - "driver": "goplugin" - } + "custom_middleware": { + "pre": [ + { + "name": "PreHook1", + "path": "/path/to/plugin1.so", + "require_session": false, + "raw_body_only": false + } + ], + "auth_check": { + "name": "AuthCheck", + "path": "/path/to/plugin.so", + "require_session": false, + "raw_body_only": false + }, + "post_key_auth": [ + { + "name": "PostKeyAuth", + "path": "/path/to/plugin.so", + "require_session": false, + "raw_body_only": false + } + ], + "post": [ + { + "name": "PostHook1", + "path": "/path/to/plugin1.so", + "require_session": false, + "raw_body_only": false + }, + { + "name": "PostHook2", + "path": "/path/to/plugin2.so", + "require_session": false, + "raw_body_only": false + } + ], + "response": [ + { + "name": "ResponseHook", + "path": "/path/to/plugin.so", + "require_session": false, + "raw_body_only": false + } + ], + "driver": "goplugin" + } } ``` -In the `custom_middleware` section of the API definition above we can see that there are Golang custom authentication (`auth_check`), post authentication (`post_key_auth`), post, pre and response plugins configured. +In the `custom_middleware` section of the API definition above we can see that there are Golang custom authentication +(`auth_check`), post authentication (`post_key_auth`), post, pre and response plugins configured. -It can be seen that each plugin is configured with the specific function name and associated source file path of the file that contains the function. Furthermore, each lifecycle phase can have a list of plugins configured, allowing for complex processing workflows. For example, you might develop one plugin for logging and another for modifying the request in the pre request phase. +It can be seen that each plugin is configured with the specific function name and associated source file path of the +file that contains the function. Furthermore, each lifecycle phase can have a list of plugins configured, allowing for +complex processing workflows. For example, you might develop one plugin for logging and another for modifying the +request in the pre request phase. -The `driver` configuration parameter describes the plugin implementation language. Please refer to the [supported languages]({{< ref "/plugins/supported-languages#plugin-driver-names" >}}) section for list of supported plugin driver names. +The `driver` configuration parameter describes the plugin implementation language. Please refer to the [supported +languages]({{< ref "/plugins/supported-languages#plugin-driver-names" >}}) section for list of supported plugin driver names. Each plugin can have additional settings, such as: + - `raw_body_only`: When true, indicates that only the raw body should be processed. -- `require_session`: When true, indicates that session metadata will be available to the plugin. This is applicable only for post, post authentication and response plugins. +- `require_session`: When true, indicates that session metadata will be available to the plugin. This is applicable only + for post, post authentication and response plugins. ### Unsupported ##### Per-Endpoint Plugins -At the endpoint-level, Tyk provides the facility to attach a custom Golang plugin at the end of the request processing chain (immediately before the API-level post-plugin is executed). Please note that [per-endpoint]({{< ref "product-stack/tyk-gateway/middleware/endpoint-plugin" >}}) level plugins are not currently supported by Tyk Operator. - -### Undocumented - -##### Plugin Bundles - -Tyk Operator also supports configuring custom plugins using plugin bundles, where the source code and associated configuration is packaged into a zip file and uploaded to a remote webserver. Tyk Gateway will then download, extract, cache and execute the plugin bundles for each of the configured phases of the [API request lifecycle]({{< ref "concepts/middleware-execution-order" >}}). - -Currently, there are no examples documented for configuring plugin bundles with Tyk Operator. Please refer to [plugin bundles]({{< ref "plugins/how-to-serve-plugins/plugin-bundles" >}}) for further details of the equivalent Tyk Classic API configuration or reach out on the [community forum](https://community.tyk.io). +At the endpoint-level, Tyk provides the facility to attach a custom Golang plugin at the end of the request processing +chain (immediately before the API-level post-plugin is executed). Please note that +[per-endpoint]({{< ref "product-stack/tyk-gateway/middleware/endpoint-plugin" >}}) level plugins are not currently +supported by Tyk Operator. --- ## Example: Configure Custom Plugins (JavaScript) With Tyk Operator -In this example we will create a JavaScript plugin that will inject a request header *Hello* with a value of *World*. This will be configured as a pre request [hook]({{< ref "" >}}). +In this example we will create a JavaScript plugin that will inject a request header _Hello_ with a value of _World_. +This will be configured as a pre request [hook]({{< ref "" >}}). ### 1. Implement Plugin -The first step is to create the plugin source code. +The first step is to create the plugin source code. ```javascript var exampleJavaScriptMiddlewarePreHook = new TykJS.TykMiddleware.NewMiddleware({}); -exampleJavaScriptMiddlewarePreHook.NewProcessRequest(function(request, session) { - // You can log to Tyk console output by calling the built-in log() function: - log("Hello from the Tyk JavaScript middleware pre hook function") - - // Add a request header - request.SetHeaders["Hello"] = "World"; +exampleJavaScriptMiddlewarePreHook.NewProcessRequest(function (request, session) { + // You can log to Tyk console output by calling the built-in log() function: + log("Hello from the Tyk JavaScript middleware pre hook function"); - // You must return both the request and session metadata - return exampleJavaScriptMiddlewarePreHook.ReturnData(request, {} ); + // Add a request header + request.SetHeaders["Hello"] = "World"; + + // You must return both the request and session metadata + return exampleJavaScriptMiddlewarePreHook.ReturnData(request, {}); }); ``` -Copy the source code above and save it to the following file on the Gateway file system at `/opt/tyk-gateway/middleware/example-javascript-middleware.js` - +Copy the source code above and save it to the following file on the Gateway file system at +`/opt/tyk-gateway/middleware/example-javascript-middleware.js` ### 2. Create API Definition Resource -The example API Definition resource listed below listens on path */httpbin* and forwards requests to upstream *http://httpbin.org*. +The example API Definition resource listed below listens on path _/httpbin_ and forwards requests to upstream +*http://httpbin.org*. ```yaml {linenos=table,hl_lines=["14-18"],linenostart=1} apiVersion: tyk.tyk.io/v1alpha1 @@ -170,15 +187,25 @@ spec: path: "middleware/example-javascript-middleware.js" ``` -At lines 14-18 we can see the *custom_middleware* section contains the configuration for our plugin: +At lines 14-18 we can see the _custom_middleware_ section contains the configuration for our plugin: -- The `driver` configuration parameter is set to `otto` at line 15, since our plugin is a Javascript plugin. For other valid values please refer to the [plugins driver page]({{< ref "plugins/supported-languages#plugin-driver-names" >}}). -- A plugin hook configuration block is specified at line 16, containing the `name` and `path` for our plugin. The plugin configuration block identifies the "hook" or phase in the API request lifecycle when Tyk Gateway will execute the plugin. In the example above the configuration block is for a `pre` request plugin that will be executed before any middleware. Valid values are the same as the [Tyk Classic API Definition]({{< ref "#tyk-classic" >}}) equivalent, i.e. `pre`, `auth_check`, `post`, `post-auth` and `response`. We can see that the following fields are set within the `pre` plugin hook configuration object: +- The `driver` configuration parameter is set to `otto` at line 15, since our plugin is a Javascript plugin. For other + valid values please refer to the [plugins driver page]({{< ref "plugins/supported-languages#plugin-driver-names" >}}). +- A plugin hook configuration block is specified at line 16, containing the `name` and `path` for our plugin. The plugin + configuration block identifies the "hook" or phase in the API request lifecycle when Tyk Gateway will execute the + plugin. In the example above the configuration block is for a `pre` request plugin that will be executed before any + middleware. Valid values are the same as the [Tyk Classic API Definition]({{< ref "#tyk-classic" >}}) equivalent, i.e. + `pre`, `auth_check`, `post`, `post-auth` and `response`. We can see that the following fields are set within the `pre` + plugin hook configuration object: - - The `name` field represents the name of the function that implements the plugin in your source code. For Javascript plugins this must match the name of the middleware object that was created. In the example above we created the middleware object, `exampleJavaScriptMiddlewarePreHook`, by calling `var exampleJavaScriptMiddlewarePreHook = new TykJS.TykMiddleware.NewMiddleware({});`. - - The `path` field contains the path to the source file `middleware/example-javascript-middleware.js`, relative to the base installation folder, i.e `/opt/tyk-gateway`. + - The `name` field represents the name of the function that implements the plugin in your source code. For Javascript + plugins this must match the name of the middleware object that was created. In the example above we created the + middleware object, `exampleJavaScriptMiddlewarePreHook`, by calling + `var exampleJavaScriptMiddlewarePreHook = new TykJS.TykMiddleware.NewMiddleware({});`. + - The `path` field contains the path to the source file `middleware/example-javascript-middleware.js`, relative to the + base installation folder, i.e `/opt/tyk-gateway`. -Save the API Definition to file and create the APIDefinition resource: +Save the API Definition to file and create the APIDefinition resource: ```bash $ kubectl apply -f path_to_your_apidefinition.yaml @@ -187,7 +214,7 @@ apidefinition.tyk.tyk.io/httpbin created ### 3. Test Plugin -We can test that our plugin injects a *Hello* header with a corresponding value of *World* by using the curl command: +We can test that our plugin injects a _Hello_ header with a corresponding value of _World_ by using the curl command: ```bash $ curl http://localhost:8080/httpbin/headers @@ -202,3 +229,18 @@ $ curl http://localhost:8080/httpbin/headers ``` The header `"Hello: World"` should be injected by the custom plugin. + +--- + +## Example: Configure Custom Plugins (Python) using plugin bundles via Tyk Operator + +Tyk Operator also supports configuring custom plugins using plugin bundles, where the source code and associated +configuration is packaged into a zip file and uploaded to a remote webserver. Tyk Gateway will then download, extract, +cache and execute the plugin bundles for each of the configured phases of the [API +request lifecycle]({{< ref "concepts/middleware-execution-order" >}}). + +For a detailed guide, check out our blog post +[How to Deploy Python Plugins in Tyk Running on Kubernetes](https://tyk.io/blog/how-to-deploy-python-plugins-in-tyk-running-on-kubernetes/), +which walks you through all the steps required to create Python [plugin +bundles]({{< ref "plugins/how-to-serve-plugins/plugin-bundles" >}}), load them into the Tyk Gateway, and configure an API +Definition to use them with the Tyk Operator. diff --git a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/internal-looping.md b/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/internal-looping.md deleted file mode 100644 index d7c9e49b78..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/internal-looping.md +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Internal Looping -date: 2024-08-07 -description: "Using internal looping with Tyk Operator" -tags: ["Internal Looping", "Tyk Operator", "internal looping","per-API", "Tyk Classic"] ---- - -The concept of [internal looping]({{< ref "advanced-configuration/transform-traffic/looping" >}}) allows you to use URL Rewriting to redirect your URL to *another API endpoint* or to *another API* in the Gateway. In Tyk, looping is generally targeted using the `tyk:///` scheme, which requires prior knowledge of the `API_ID`. Tyk Operator simplifies the management and transformation of API traffic within Kubernetes environments by abstracting APIs as objects, managing them and dynamically assigning `API_ID`s by its Kubernetes metedata name and namespace. - ---- - -## Configuring looping to internal ApiDefinition resources - -Looping can be configured within Tyk Operator for [URL Rewrites](#url-rewrites), [URL Rewrite Triggers](#url-rewrite-triggers) and [Proxy to internal APIs](#proxy-to-internal-apis) by configuring the `rewrite_to_internal` in `url_rewrite`, `rewrite_to_internal` in `triggers`, and `proxy.target_internal` fields respectively with these properties: - -- **Path**: The `path` property specifies the endpoint on the target API where the request should be directed. This is the portion of the URL that follows the domain and is crucial for ensuring that the request reaches the correct resource. For example, setting a value of `"/myendpoint"` means that the request will be forwarded to the `/myendpoint` path on the target API. - -- **Query**: The `query` property allows you to append additional query parameters to the target URL. These parameters can be used to modify the behavior of the target API or to pass along specific request information. For instance, setting `query: "check_limits=true"` will include this query string in the redirected request, potentially triggering special handling by the target API. - -- **Target**: The `target` property identifies the API resource to which the request should be routed. It consists of two components: `name` and `namespace`. The `name` is the identifier of the target API, while the `namespace` specifies the Kubernetes namespace where the API resource resides. Together, these elements ensure that Tyk Operator accurately locates and routes the request to the intended API. For example, `name: "proxy-api"` and `namespace: "default"` direct the request to the `proxy-api` resource in the `default` namespace. - -Tyk Operator would dynamically update the API definition by generating internal looping URL in the form of `tyk:///`. This mechanism is essential for routing traffic within a microservices architecture or when managing APIs across different namespaces in Kubernetes. Using this object you can effectively manage and optimize API traffic within your Tyk Gateway. - ---- - -## URL Rewrites {#url-rewrites} - -[URL rewriting]({{< ref "transform-traffic/url-rewriting" >}}) in Tyk enables the alteration of incoming API request paths to align with the expected endpoint format of your backend services. - -Assume that we wish to redirect incoming `GET /basic/` requests to an API defined by an ApiDefinition object named `proxy-api` in the `default` namespace. We want the `/basic/` prefix to be stripped from the request path and the redirected path should be of the format `/proxy/$1`, where the context variable `$1` is substituted with the remainder of the path request. For example `GET /basic/456` should become `GET /proxy/456`. - -In this case we can use a `rewrite_to_internal` object to instruct Tyk Operator to automatically generate the API rewrite URL on our behalf for the API identified by name `proxy-api` in the `default` namespace: - -```yaml -url_rewrites: - - path: "/{id}" - match_pattern: "/basic/(.*)" - method: GET - rewrite_to_internal: - target: - name: proxy-api - namespace: default - path: proxy/$1 -``` - -In the above example an incoming request of `/basic/456` would be matched by the `match_pattern` rule `/basic/(.*)` for `GET` requests specified in the `method` field. The `456` part of the URL will be captured and replaces `{id}` in the `path` field. Tyk Operator will use the `rewrite_to_internal` configuration to generate the URL rewrite for the API named `proxy-api` in the `default` namespace, and update the `rewrite_to` field accordingly: - -```yaml -url_rewrites: -- match_pattern: /basic/(.*) - method: GET - path: /{id} - rewrite_to: tyk://ZGVmYXVsdC9wcm94eS1hcGk/proxy/$1 -``` - -Here we can see that the `rewrite_to` field has been generated with the value `tyk://ZGVmYXVsdC9wcm94eS1hcGk/proxy/$1` where `ZGVmYXVsdC9wcm94eS1hcGk` represents the API ID for the `proxy-api` API resource in the `default` namespace. Notice also that path `proxy/$1` is appended to the base URL `tyk://ZGVmYXVsdC9wcm94eS1hcGk` and contains the context variable `$1`. This will be substituted with the value of `{id}` in the `path` configuration parameter. - -## URL Rewrite Triggers {#url-rewrite-triggers} - -[Triggers]({{< ref "product-stack/tyk-gateway/middleware/url-rewrite-middleware#url-rewrite-triggers" >}}) are configurations that specify actions based on certain conditions present in HTTP headers, query parameters, path parameters etc. - -Triggers are essential for executing specific actions when particular criteria are met, such as rewriting URLs. They are useful for automating actions based on real-time data received in requests. For example, you might use triggers to: - -- Redirect users to different APIs in the Gateway based on their authentication status. -- Enforce business rules by redirecting requests to different APIs in the Gateway based on certain parameters. - -The process for configuring internal looping in triggers to is similar to that explained in section [URL Rewrites](#url-rewrites"). - -Assume that we wish to instruct Tyk Operator to redirect all *Basic Authentication* requests to the API identified by `basic-auth-internal` within the `default` namespace. Subsequently, we can use a `rewrite_to_internal` object as follows: - -```yaml -triggers: - - "on": "all" - options: - header_matches: - "Authorization": - match_rx: "^Basic" - rewrite_to_internal: - target: - name: basic-auth-internal - namespace: default - path: "basic/$2" -``` - -Here we we can see that a trigger is configured for all requests that include an `Authorization` header containing `Basic` in the header value. - -A `rewrite_to_internal` configuration object is used to instruct Tyk Operator to generate a redirect to the API identified by the `basic-auth-internal` API resource in the `default` namespace. The redirect path will be prefixed with `basic`. For example, a basic authentication request to path `/` will be redirected to `/basic/`. - -Tyk Operator will automatically generate a URL Rewrite (`rewrite_to`) to redirect the request to the API identified by `basic-auth-internal` within the `default` namespace as follows: - -```yaml -triggers: -- "on": all - options: - header_matches: - Authorization: - match_rx: ^Basic - rewrite_to: tyk://ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs/basic/$2 -``` - -Here we can see that the `rewrite_to` field has been generated with the value `tyk://ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs/proxy/$1` where `ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs` represents the API ID for the `proxy-api` API resource in the `default` namespace. Notice also that path `basic/$2` is appended to the base URL `tyk://ZGVmYXVsdC9iYXNpYy1hdXRoLWludGVybmFs` and contains the context variable `$2`. This will be substituted with the remainder of the request path. - -## Proxy to Internal APIs {#proxy-to-internal-apis} - -Internal looping can also be used for [proxying to internal APIs]({{< ref "advanced-configuration/transform-traffic/looping" >}}). - -Assume that we wish to redirect all incoming requests on listen path `/users` to an API defined by an ApiDefinition object named `users-internal-api` in the `default` namespace. - -In this case we can use a `proxy.target_internal` field to instruct Tyk Operator to automatically generate the target URL on our behalf for the API identified by name `users-internal-api` in the `default` namespace: - -```yaml {linenos=true, linenostart=1, hl_lines=["12-15"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: users -spec: - name: Users API - protocol: http - active: true - use_keyless: true - proxy: - target_url: "" - target_internal: - target: - name: users-internal-api - namespace: default - listen_path: /users - strip_listen_path: true -``` - -The proxy object’s `target_internal` field references other API resources. This field shares the same properties as those described for `rewrite_to_internal`, ensuring consistent configuration. - -Tyk Operator will automatically generate the target URL to redirect the request to the API identified by `users-internal-api` within the `default` namespace as follows: - -```yaml - target_url: "tyk://ZGVmYXVsdC91c2Vycy1pbnRlcm5hbC1hcGk" -``` - ---- - -## Example - -Assume a business has legacy customers who authenticate with a service using *Basic Authentication*. The business also wants to support API Keys, enabling both client types to access the same ingress. - -To facilitate this, Tyk must be configured for dynamic authentication, accommodating both *Basic Authentication* and *Auth Token* methods. - -This setup requires configuring four API Definitions within Tyk: - -1. Entry Point API -2. BasicAuth Internal API -3. AuthToken Internal API -4. Proxy Internal API - -When a request arrives at the ingress route, a URL rewrite can direct it to either the *BasicAuth Internal* or *AuthToken Internal* API, depending on the authentication method used. - -These internal APIs will authenticate the requests. Assuming successful authentication (the happy path), they will forward the requests to the *Proxy Internal API*, which handles the proxying to the underlying service. - -
    - -{{< note success >}} -**Note** - -There are no actual HTTP redirects in this scenario, meaning that there is no performance penalty in performing any of these *Internal Redirects*. - -{{< /note >}} - -### Entry Point API - -The *Entry Point* API is the first point of entry for a client request. It inspects the header to determine if the incoming client request requires authentication using *Basic Authentication* or *Auth Token*. Consequently, it then redirects the request to the *BasicAuth Internal* or *AuthToken Internal* API depending upon the header included in the client request. - -The API definition resource for the *Entry Point* API is listed below. It is configured to listen for requests on the `/entry` path and forward requests upstream to `http://example.com` - -We can see that there is a URL Rewrite rule (`url_rewrites`) with two triggers configured to match Basic Authentication and Auth Token requests: - -- **Basic Authentication trigger**: Activated for incoming client requests that include an *Authorization* header containing a value starting with *Basic*. In this case a `rewrite_to_internal` configuration object is used to instruct Tyk Operator to redirect the request to the *BasicAuthInternal* API, identified by name `basic-auth-internal` in the `default` namespace. The request URL is rewritten, modifying the path to `/basic/`. -- **Auth Token trigger**: Activated for incoming client requests that include an *Authorization* header containing a value starting with *Bearer*. In this case a `rewrite_to_internal` configuration object is used to instruct Tyk Operator to redirect the request to the *AuthTokenInternal* API, identified by name `auth-token-internal` in the `default` namespace. The request URL is rewritten, modifying the path to `/token/`. - - ```yaml {linenos=true, linenostart=1, hl_lines=["21-45"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: entrypoint-api -spec: - name: Entrypoint API - protocol: http - active: true - proxy: - listen_path: /entry - target_url: http://example.com - use_keyless: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default - use_extended_paths: true - extended_paths: - url_rewrites: - - path: "/{id}" - match_pattern: "/(.*)/(.*)" - method: GET - triggers: - - "on": "all" - options: - header_matches: - "Authorization": - match_rx: "^Basic" - rewrite_to_internal: - target: - name: basic-auth-internal - namespace: default - path: "basic/$2" - - "on": "all" - options: - header_matches: - "Authorization": - match_rx: "^Bearer" - rewrite_to_internal: - target: - name: auth-token-internal - namespace: default - path: "token/$2" -``` - -### BasicAuth Internal API - -The *BasicAuth Internal* API listens to requests on path `/basic` and forwards them upstream to `http://example.com`. - -The API is configured with a URL rewrite rule in `url_rewrites` to redirect incoming `GET /basic/` requests to the API in the Gateway represented by name `proxy-api` in the `default` namespace. The `/basic/` prefix will be stripped from the request URL and the URL will be rewritten with the format `/proxy/$1`. The context variable `$1` is substituted with the remainder of the path request. For example `GET /basic/456` will become `GET /proxy/456`. - -Furthermore, a header transform rule is configured within `transform_headers` to add the header `x-transform-api` with value `basic-auth`, to the request. - -```yaml {linenos=true, linenostart=1, hl_lines=["21-35"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: basic-auth-internal -spec: - name: BasicAuth Internal API - protocol: http - proxy: - listen_path: "/basic" - target_url: http://example.com - active: true - use_keyless: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default - use_extended_paths: true - extended_paths: - url_rewrites: - - path: "/{id}" - match_pattern: "/basic/(.*)" - method: GET - rewrite_to_internal: - target: - name: proxy-api - namespace: default - path: proxy/$1 - transform_headers: - - add_headers: - x-transform-api: "basic-auth" - method: GET - path: "/{id}" - delete_headers: [] -``` - -### AuthToken Internal API - -The *AuthToken Internal* API listens to requests on path `/token` and forwards them upstream to `http://example.com`. - -The API is configured with a URL rewrite rule in `url_rewrites` to redirect incoming `GET /token/` requests to the API in the Gateway represented by name `proxy-api` in the `default` namespace. The `/token/` prefix will be stripped from the request URL and the URL will be rewritten to the format `/proxy/$1`. The context variable `$1` is substituted with the remainder of the path request. For example `GET /token/456` will become `GET /proxy/456`. - -Furthermore, a header transform rule is configured within `transform_headers` to add the header `x-transform-api` with value `token-auth`, to the request. - -```yaml {linenos=true, linenostart=1, hl_lines=["21-35"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: auth-token-internal -spec: - name: AuthToken Internal API - protocol: http - proxy: - listen_path: "/token" - target_url: http://example.com - active: true - use_keyless: true - version_data: - default_version: Default - not_versioned: true - versions: - Default: - name: Default - use_extended_paths: true - extended_paths: - url_rewrites: - - path: "/{id}" - match_pattern: "/token/(.*)" - method: GET - rewrite_to_internal: - target: - name: proxy-api - namespace: default - path: proxy/$1 - transform_headers: - - add_headers: - x-transform-api: "token-auth" - method: GET - path: "/{id}" - delete_headers: [] -``` - -### Proxy Internal API - -The *Proxy Internal* API is keyless and responsible for listening to requests on path `/proxy` and forwarding upstream to `http://httpbin.org`. The listen path is stripped from the request before it is sent upstream. - -This API receives requests forwarded from the internal *AuthToken Internal* and *BasicAuth Internal APIs*. Requests will contain the header `x-transform-api` with value `token-auth` or `basic-auth`, depending upon which internal API the request originated from. - -```yaml {linenos=true, linenostart=1, hl_lines=["10-13"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: proxy-api -spec: - name: Proxy API - protocol: http - active: true - internal: true - proxy: - listen_path: "/proxy" - target_url: http://httpbin.org - strip_listen_path: true - use_keyless: true -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/management-of-api.md b/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/management-of-api.md deleted file mode 100644 index 2a0f86683f..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/advanced-configurations/management-of-api.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: "Management of APIs" -date: 2024-06-25 -tags: ["Tyk", "Kubernetes", "API Management", "CRD", "DevOps", "API Gateway Configuration"] -description: "This documentation provides a comprehensive guide on configuring various aspects of API descriptions and metadata using Tyk Operator. It includes detailed instructions and examples for setting API name, status, category, ID, path, ownership, and versioning within the ApiDefinition Custom Resource Definition (CRD). The guide ensures that users can manage their Tyk API Gateway configurations effectively within a Kubernetes environment." -keywords: ["Tyk Operator", "Kubernetes", "API Gateway", "API Configuration", "API Metadata", "ApiDefinition CRD", "Tyk Dashboard", "API Status", "API Category", "API ID", "API Path", "API Ownership", "API Versioning"] ---- - -This documentation provides a comprehensive guide on configuring various aspects of API descriptions and metadata using Tyk Operator. - -## API Name - -To set the name of an API in the `ApiDefinition`, use the `spec.name` string field. This name is displayed on the Tyk Dashboard and should concisely describe what the API represents. - -Example: - -```yaml {linenos=true, linenostart=1, hl_lines=["6-6"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: example-api # This is the metadata name of the Kubernetes resource -spec: - name: Example API # This is the "API NAME" in Tyk - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://example.com - listen_path: /example - strip_listen_path: true -``` - -## API Status - -### API Active Status - -An active API will be loaded to the Gateway, while an inactive API will not, resulting in a 404 response when called. - -The active status of an API can be set by modifying the `spec.active` configuration parameter. When set to `true`, this enables the API so that Tyk will listen for and process requests made to the `listenPath`. - -```yaml {linenos=true, linenostart=1, hl_lines=["9-9"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: inactive-api -spec: - name: Inactive API - use_keyless: true - protocol: http - active: false - proxy: - target_url: http://inactive.example.com - listen_path: /inactive - strip_listen_path: true -``` - -### API Accessibility - -An API can be configured as internal so that external requests are not processed. This is achieved by setting the `spec.internal`configuration parameter as shown in the example below. - - -```yaml {linenos=true, linenostart=1, hl_lines=["10-10"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: inactive-api -spec: - name: Inactive API - use_keyless: true - protocol: http - active: true - internal: true - proxy: - target_url: http://inactive.example.com - listen_path: /inactive - strip_listen_path: true -``` - -## API Category - -For a Tyk Classic API, you can specify the category name using the `spec.name` field with a `#` qualifier. This will categorize the API in the Tyk Dashboard. - -Example - -```yaml {linenos=true, linenostart=1, hl_lines=["6-6"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: categorized-api -spec: - name: "my-classic-api #global #staging" - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://categorized.example.com - listen_path: /categorized - strip_listen_path: true -``` - -## API ID - -### Creating a new API - -If you're creating a new API using Tyk Operator, you don't need to specify the ID in the manifest. The API ID will be generated in a deterministic way. You can inspect `status.api_id` field to get the generated API ID. - -Example - -```yaml {linenos=true, linenostart=1} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: order - namespace: shop -spec: - name: Order API - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://order.example.com - listen_path: /order - strip_listen_path: true -``` - -Run the following command to inspect generated API ID. - -```bash -% kubectl get apidefinition order --namespace shop -o yaml | grep api_id -B 1 -status: - api_id: c2hvcC9vcmRlcg -``` - -### Updating an existing API - -If you already have API configurations created in the Tyk Dashboard and want to start using Tyk Operator to manage these APIs, you can include the existing API ID in the manifest under the `spec.api_id` field. This way, when you apply the manifest, Tyk Operator will not create a new API in the Dashboard. Instead, it will update the original API with the Kubernetes spec. - -Example - -```yaml {linenos=true, linenostart=1, hl_lines=["8-8"]} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: existing-api - namespace: default -spec: - name: Existing API - api_id: 12345 - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://existing.example.com - listen_path: /existing - strip_listen_path: true -``` - -In this example, the API with ID `12345` will be updated according to the provided spec instead of creating a new API. - -## API Ownership - -To configure API ownership, ensure Tyk Operator is also an owner of the API. This can be done using Operator Context. For details, refer to Tyk [Operator API Ownership]({{< ref "product-stack/tyk-operator/getting-started/tyk-operator-api-ownership">}}). - -## API Versioning - -For details on how to configure API versions, refer to [configuring API versioning in Tyk Operator]({{< ref "getting-started/key-concepts/versioning#tyk-operator" >}}) \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-graphql.md b/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-graphql.md deleted file mode 100644 index 0f84a63a80..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-graphql.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Sample GraphQL Proxy -tags: ["Tyk Operator", "Sample", "Kubernetes"] -description: "Tyk Operator manifest example" ---- - -This page provides a sample manifest for creating [GraphQL proxy APIs]({{}}). - -In the example below we can see that the configuration is contained within the `graphql` configuration object. A GraphQL schema is specified within the `schema` field and the execution mode is set to `proxyOnly`. The [GraphQL public playground]({{< ref "graphql/graphql-playground#enabling-public-graphql-playground" >}}) is enabled with the path set to `/playground`. - -```yaml {hl_lines=["15-17", "18-92"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: trevorblades -spec: - name: trevorblades - use_keyless: true - protocol: http - active: true - proxy: - target_url: https://countries.trevorblades.com - listen_path: /trevorblades - strip_listen_path: true - graphql: - enabled: true - version: "2" - execution_mode: proxyOnly - schema: | - directive @cacheControl(maxAge: Int, scope: CacheControlScope) on FIELD_DEFINITION | OBJECT | INTERFACE - - enum CacheControlScope { - PUBLIC - PRIVATE - } - - type Continent { - code: ID! - name: String! - countries: [Country!]! - } - - input ContinentFilterInput { - code: StringQueryOperatorInput - } - - type Country { - code: ID! - name: String! - native: String! - phone: String! - continent: Continent! - capital: String - currency: String - languages: [Language!]! - emoji: String! - emojiU: String! - states: [State!]! - } - - input CountryFilterInput { - code: StringQueryOperatorInput - currency: StringQueryOperatorInput - continent: StringQueryOperatorInput - } - - type Language { - code: ID! - name: String - native: String - rtl: Boolean! - } - - input LanguageFilterInput { - code: StringQueryOperatorInput - } - - type Query { - continents(filter: ContinentFilterInput): [Continent!]! - continent(code: ID!): Continent - countries(filter: CountryFilterInput): [Country!]! - country(code: ID!): Country - languages(filter: LanguageFilterInput): [Language!]! - language(code: ID!): Language - } - - type State { - code: String - name: String! - country: Country! - } - - input StringQueryOperatorInput { - eq: String - ne: String - in: [String] - nin: [String] - regex: String - glob: String - } - - """The `Upload` scalar type represents a file upload.""" - scalar Upload - playground: - enabled: true - path: /playground -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-http.md b/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-http.md deleted file mode 100644 index 70a26f019d..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-http.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Sample HTTP Proxy -tags: ["Tyk Operator", "Sample", "Kubernetes"] -description: "Tyk Operator manifest example" ---- - -This page provides some sample manifests for creating different types of HTTP proxy APIs. Follow these examples to learn how to configure your APIs. - -## HTTP Proxy - -This example creates a basic API definition that routes requests to listen path `/httpbin` to target URL `http://httpbin.org`. - -Traffic routing can be configured under `spec.proxy`: -- `target_url` defines the upstream address (or target URL) to which requests should be proxied. -- `listen_path` is the base path on Tyk to which requests for this API should be sent. Tyk listens out for any requests coming into the host at this path, on the port that Tyk is configured to run on and processes these accordingly. For example, `/api/` or `/` or `/httpbin/`. -- `strip_listen_path` removes the inbound listen path (as accessed by the client) when generating the outbound request for the upstream service. For example, consider the scenario where the Tyk base address is `http://acme.com/`, the listen path is `example/` and the upstream URL is `http://httpbin.org/`: If the client application sends a request to `http://acme.com/example/get` then the request will be proxied to `http://httpbin.org/example/get` - -```yaml {hl_lines=["10-13"],linenos=false} -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 -``` - -## HTTP Host-based Proxy - -`spec.domain` is the domain to bind this API to. This enforces domain matching for client requests. - -In this example, requests to `httpbin.tyk.io` will be proxied to upstream URL `http://httpbin.org` - -```yaml {hl_lines=["10-10"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: true - protocol: http - active: true - domain: httpbin.tyk.io - proxy: - target_url: http://httpbin.org - listen_path: / - strip_listen_path: true -``` - -## HTTPS Proxy - -This example creates a API definition that routes requests to a http://httpbin.org via port 8443. - -```yaml {hl_lines=["35-38"],linenos=false} -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: selfsigned-issuer -spec: - selfSigned: { } ---- -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: my-test-cert -spec: - secretName: my-test-tls - dnsNames: - - foo.com - - bar.com - privateKey: - rotationPolicy: Always - issuerRef: - name: selfsigned-issuer - # We can reference ClusterIssuers by changing the kind here. - # The default value is Issuer (i.e. a locally namespaced Issuer) - kind: Issuer - # This is optional since cert-manager will default to this value however - # if you are using an external issuer, change this to that issuer group. - group: cert-manager.io ---- -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: true - protocol: https - listen_port: 8443 - certificate_secret_names: - - my-test-tls - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-tcp.md b/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-tcp.md deleted file mode 100644 index f098aab1d6..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-tcp.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Sample TCP Proxy -tags: ["Tyk Operator", "Sample", "Kubernetes"] -description: "Tyk Operator manifest example" ---- - -This page provides sample manifest for creating TCP proxy APIs. Follow the example to learn how to configure your APIs. - -This example creates a API definition that proxies request from TCP port `6380` to `tcp://localhost:6379`. - -```yaml {hl_lines=["8-11"],linenos=false} -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: redis-tcp -spec: - name: redis-tcp - active: true - protocol: tcp - listen_port: 6380 - proxy: - target_url: tcp://localhost:6379 -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-udg.md b/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-udg.md deleted file mode 100644 index b9b4c56f79..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/getting-started/quick-start-udg.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Sample TCP Proxy -tags: ["Tyk Operator", "Sample", "Kubernetes"] -description: "Tyk Operator manifest example" ---- - -This page provides sample manifest for creating [Universal Data Graph (UDG)]({{}}) APIs. Follow the example to learn how to configure your APIs. - -## UDG v2 (Tyk 3.2 and above) - -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 -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership.md b/tyk-docs/content/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership.md deleted file mode 100644 index 620353f926..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "Manage API Ownership with OperatorContext" -date: 2024-06-25 -tags: ["Tyk Operator", "Organizations", "Kubernetes"] -description: "Explains the key concepts for Tyk Operator" ---- - -This guide explains how to efficiently manage API Ownerships within Tyk using Tyk Operator Custom Resource Definitions (CRDs). - -Please consult the [API Ownership]({{< ref "product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership">}}) documentation for the fundamental concepts of API Ownership in Tyk and [Operator Context]({{< ref "/product-stack/tyk-operator/key-concepts/operator-context" >}}) documentation for an overview of the use of OperatorContext to manage resources for different teams effectively. - -The guide includes practical examples for managing API ownership via OperatorContext. Key topics include defining user owners and user group owners in OperatorContext for connecting and authenticating with a Tyk Dashboard, and using `contextRef` in API Definition objects to ensure configurations are applied within specific organizations. The provided YAML examples illustrate how to set up these configurations. - -## How to manage API Ownership in Tyk Operator - -In Tyk Dashboard, API Ownership ensures that only designated 'users' who own an API can modify it. This security model is crucial for maintaining control over API configurations, especially in a multi-tenant environment where multiple teams or departments may have different responsibilities and permissions. - -Tyk Operator is designed to interact with Tyk Dashboard as a system user. For the Tyk Dashboard, Tyk Operator is just another user that must adhere to the same access controls and permissions as any other user. This means: -- Tyk Operator needs the correct access rights to modify any APIs. -- It must be capable of managing APIs according to the ownership rules set in Tyk Dashboard. - -To facilitate API ownership and ensure secure operations, Tyk Operator must be able to 'impersonate' different users for API operations. This is where `OperatorContext` comes into play. Users can define different `OperatorContext` objects that act as different agents to connect to Tyk Dashboard. Each `OperatorContext` can specify different access parameters, including the user access key and organization it belongs to. Within `OperatorContext`, users can specify the IDs of owner users or owner user groups. All APIs managed through that `OperatorContext` will be owned by the specified users and user groups, ensuring compliance with Tyk Dashboard's API ownership model. - -Here's how `OperatorContext` allows Tyk Operator to manage APIs under different ownerships: - -## Defining OperatorContext - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: OperatorContext -metadata: - name: team-alpha - namespace: default -spec: - env: - # The mode of the admin api - # ce - community edition (open source gateway) - # pro - dashboard (requires a license) - mode: pro - # Org ID to use - org: *YOUR_ORGANIZATION_ID* - # The authorization token this will be set in x-tyk-authorization header on the - # client while talking to the admin api - auth: *YOUR_API_ACCESS_KEY* - # The url to the Tyk Dashboard API - url: http://dashboard.tyk.svc.cluster.local:3000 - # Set this to true if you want to skip tls certificate and host name verification - # this should only be used in testing - insecureSkipVerify: true - # For ingress the operator creates and manages ApiDefinition resources, use this to configure - # which ports the ApiDefinition resources managed by the ingress controller binds to. - # Use this to override default ingress http and https port - ingress: - httpPort: 8000 - httpsPort: 8443 - # Optional - The list of users who are authorized to update/delete the API. - # The user pointed by auth needs to be in this list, if not empty. - user_owners: - - a1b2c3d4e5f6 - # Optional - The list of groups of users who are authorized to update/delete the API. - # The user pointed by auth needs to be a member of one of the groups in this list, if not empty. - user_group_owners: - - 1a2b3c4d5e6f -``` - -## Using contextRef in API Definitions - -Once an `OperatorContext` is defined, you can reference it in your API Definition objects using `contextRef`. Below is an example: - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin - namespace: alpha -spec: - contextRef: - name: team-alpha - namespace: default - name: httpbin - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true -``` - -In this example, the `ApiDefinition` object references the `team-alpha` context, ensuring that it is managed under the ownership of the specified users and user groups. - -{{< img src="/img/operator/tyk-api-ownership.svg" alt="Enabling API ownership with OperatorContext" width="600" >}} \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations.md b/tyk-docs/content/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations.md deleted file mode 100644 index a3396fb32e..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: "Managing Multiple Organizations with OperatorContext" -date: 2024-06-25 -tags: ["Tyk Operator", "Environments", "Organizations", "Kubernetes"] -description: "Learn how to use Tyk Operator Custom Resource Definitions (CRDs) to manage multiple organizations within Tyk. This guide explains how to leverage OperatorContext to efficiently manage resources for different teams. Examples and best practices are included for effective multi-tenant API management." ---- - -This guide explains how to efficiently manage multiple organizations within Tyk using Tyk Operator Custom Resource Definitions (CRDs). - -Please consult the [key concepts for Tyk Operator]({{< ref "/product-stack/tyk-operator/key-concepts/operator-context" >}}) documentation for an overview of the fundamental concepts of organizations in Tyk and the use of OperatorContext to manage resources for different teams effectively. - -The guide includes practical examples and best practices for multi-tenant API management. Key topics include defining OperatorContext for connecting and authenticating with a Tyk Dashboard, and using `contextRef` in API Definition objects to ensure configurations are applied within specific organizations. The provided YAML examples illustrate how to set up these configurations. - -## Defining OperatorContext - -An [OperatorContext]({{< ref "/product-stack/tyk-operator/key-concepts/operator-context" >}}) specifies the parameters for connecting and authenticating with a Tyk Dashboard. Below is an example of how to define an `OperatorContext`: - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: OperatorContext -metadata: - name: team-alpha - namespace: default -spec: - env: - # The mode of the admin api - # ce - community edition (open source gateway) - # pro - dashboard (requires a license) - mode: pro - # Org ID to use - org: *YOUR_ORGANIZATION_ID* - # The authorization token this will be set in x-tyk-authorization header on the - # client while talking to the admin api - auth: *YOUR_API_ACCESS_KEY* - # The url to the Tyk Dashboard API - url: http://dashboard.tyk.svc.cluster.local:3000 - # Set this to true if you want to skip tls certificate and host name verification - # this should only be used in testing - insecureSkipVerify: true - # For ingress the operator creates and manages ApiDefinition resources, use this to configure - # which ports the ApiDefinition resources managed by the ingress controller binds to. - # Use this to override default ingress http and https port - ingress: - httpPort: 8000 - httpsPort: 8443 -``` - -For better security, you can also replace sensitive data with values contained within a referenced secret with `.spec.secretRef`. - -In this example, API access key `auth` and organization ID `org` are not specified in the manifest. They are provided through a Kubernetes secret named `tyk-operator-conf` in `alpha` namespace. The secret contains keys `TYK_AUTH` and `TYK_ORG` which correspond to the `auth` and `org` fields respectively. - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: OperatorContext -metadata: - name: team-alpha - namespace: default -spec: - secretRef: - name: tyk-operator-conf ## Secret containing keys TYK_AUTH and TYK_ORG - namespace: alpha - env: - mode: pro - url: http://tyk.tykce-control-plane.svc.cluster.local:8001 - insecureSkipVerify: true - ingress: - httpPort: 8000 - httpsPort: 8443 - user_owners: - - a1b2c3d4f5e6f7 - user_group_owners: - - 1a2b3c4d5f6e7f -``` - -You can provide the following fields through secret as referenced by `secretRef`. The table shows mappings between `.spec.env` properties and secret `.spec.data` keys. If a value is configured in both the secret and OperatorContext `spec.env` field, the value from secret will take precedence. - -| Secret key | .spec.env | -|------------|-----------| -| TYK_MODE | mode | -| TYK_URL | url | -| TYK_AUTH | auth | -| TYK_ORG | org | -| TYK_TLS_INSECURE_SKIP_VERIFY | insecureSkipVerify | -| TYK_USER_OWNERS (comma separated list) | user_owners | -| TYK_USER_GROUP_OWNERS (comma separated list) | user_group_owners | - -## Using contextRef in API Definitions - -Once an `OperatorContext` is defined, you can reference it in your API Definition objects using `contextRef`. Below is an example: - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin - namespace: alpha -spec: - contextRef: - name: team-alpha - namespace: default - name: httpbin - use_keyless: true - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true -``` - -In this example, the `ApiDefinition` object references the `team-alpha` context, ensuring that the configuration is applied within the `alpha` organization. diff --git a/tyk-docs/content/product-stack/tyk-operator/install/.placeholder b/tyk-docs/content/product-stack/tyk-operator/install/.placeholder deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tyk-docs/content/product-stack/tyk-operator/key-concepts/custom-resources.md b/tyk-docs/content/product-stack/tyk-operator/key-concepts/custom-resources.md deleted file mode 100644 index b12a1fad02..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/key-concepts/custom-resources.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "Kubernetes Custom Resources" -date: 2024-06-25 -tags: ["Tyk Operator", "Kubernetes", "Operator User"] -description: "Explains the key concepts for Tyk Operator" ---- - -In Kubernetes, a [Custom Resource (CR)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) is an extension of the Kubernetes API that allows you to introduce custom objects in your cluster. Custom Resources enable you to define and manage custom configurations and settings specific to your applications, making Kubernetes highly extensible. These custom objects are defined using Custom Resource Definitions (CRDs), which specify the schema and structure of the resource. - -## Custom Resources in Tyk - -Tyk supports several custom resources to help manage and configure API gateways within Kubernetes. These custom resources allow you to declaratively manage Tyk API configurations, security policies, and more. - -### API Definition and Security Policy - -The following custom resources can be used to configure APIs and policies at [Tyk Gateway]({{}}) or [Tyk Dashboard]({{}}). - -| Kind | Group | Version | Description | -|--------------------|-------------|-----------|---------------------------------------------------------------------------------------------------| -| ApiDefinition | tyk.tyk.io | v1alpha1 | Defines configuration of [Tyk Classic API Definition object]({{}}) | -| SecurityPolicy | tyk.tyk.io | v1alpha1 | Defines configuration of [security policies]({{}}). Operator supports linking ApiDefinition custom resources in SecurityPolicy's access list so that API IDs do not need to be hardcoded in the resource manifest. | -| SubGraph | tyk.tyk.io | v1alpha1 | Defines a [GraphQL federation subgraph]({{}}). | -| SuperGraph | tyk.tyk.io | v1alpha1 | Defines a [GraphQL federation supergraph]({{}}). | -| OperatorContext | tyk.tyk.io | v1alpha1 | Manages the context in which the Tyk Operator operates, affecting its overall behavior and environment. See [Operator Context]({{}}) for details. | - -### Tyk Classic Developer Portal - -The following custom resources can be used to configure [Tyk Classic Developer Portal]({{}}). - -| Kind | Group | Version | Description | -|--------------------|-------------|-----------|---------------------------------------------------------------------------------------------------| -| APIDescription | tyk.tyk.io | v1alpha1 | Configures [Portal Documentation]({{}}). | -| PortalAPICatalogue | tyk.tyk.io | v1alpha1 | Configures [Portal API Catalogue]({{}}). | -| PortalConfig | tyk.tyk.io | v1alpha1 | Configures [Portal Configuration]({{}}). | - -## CRD Versioning - -Tyk follows standard practices for naming and versioning custom resources as outlined by the Kubernetes Custom Resource Definition [versioning guidelines](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/). Although we are currently on the `v1alpha1` version, no breaking changes will be introduced to existing Custom Resources without a version bump. This means that any significant changes or updates that could impact existing resources will result in a new version (e.g., `v1beta1` or `v1`) and Operator will continue supporting all CRD versions for a reasonable time before deprecating an older version. This ensures a smooth transition and compatibility, allowing you to upgrade without disrupting your current configurations and workflows. - -For more details on Kubernetes CRD versioning practices, refer to the Kubernetes Custom Resource Definition [Versioning documentation](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning/). diff --git a/tyk-docs/content/product-stack/tyk-operator/key-concepts/operator-context.md b/tyk-docs/content/product-stack/tyk-operator/key-concepts/operator-context.md deleted file mode 100644 index 32b841fda6..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/key-concepts/operator-context.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Operator Context" -date: 2024-06-25 -tags: ["Tyk Operator", "Organizations", "Kubernetes"] -description: "Explains the key concepts for Tyk Operator" ---- - -## Multi-tenancy in Tyk - -Tyk Dashboard is multi-tenant capable, which means you can use a single Tyk Dashboard instance to host separate [organizations]({{< ref "basic-config-and-security/security/dashboard/organisations">}}) for each team or department. Each organization is a completely isolated unit with its own: - -- API Definitions -- API Keys -- Users -- Developers -- Domain -- Tyk Classic Portal - -This structure is ideal for businesses with a complex hierarchy, where distinct departments operate independently but within the same overall infrastructure. - -{{< img src="/img/operator/tyk-organisations.svg" alt="Multi-tenancy in Tyk Dashboard" width="600" >}} - -## OperatorContext - -OperatorContext is a set of access parameters that define: - -- Which Tyk Dashboard the Operator is interacting with -- Which organization it belongs to -- Which user it is using -- Which environment it is working in - -For example, if you have multiple organizations for different teams, each with its own set of users and API Definitions, you can create different `OperatorContext` objects for each team. These contexts are referenced in your API definition or security policy CRDs using `contextRef` field. - -During reconciliation, Tyk Operator will use the identity defined in the referenced `OperatorContext` to make requests to the Tyk Dashboard. - -{{< img src="/img/operator/tyk-operator-context.svg" alt="Multi-tenancy in Kubernetes Tyk Operator" width="600" >}} - -## Example scenarios - -With OperatorContext, you can define different sets of credentials and configuration parameters for different teams or departments, enabling isolated management of API configurations within the same Tyk Operator instance. - -Here are some example scenarios that explain what happens: - -1. No OperatorContext defined - - Tyk Operator uses default credentials from the `tyk-operator-conf` secret or environment variables. All API operations are performed under the default system user's credentials. - -2. OperatorContext defined but not referenced - - Tyk Operator still uses default credentials from `tyk-operator-conf` for API operations. The defined OperatorContext is ignored, and operations are conducted using default credentials. - -3. OperatorContext defined and referenced - - Tyk Operator uses the credentials and parameters from the specified OperatorContext for each API. Each API is managed according to its referenced OperatorContext, allowing isolated management. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/key-concepts/operator-user.md b/tyk-docs/content/product-stack/tyk-operator/key-concepts/operator-user.md deleted file mode 100644 index 5f2de17bba..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/key-concepts/operator-user.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Operator User" -date: 2024-06-25 -tags: ["Tyk Operator", "Kubernetes", "Operator User"] -description: "Explains the key concepts for Tyk Operator" ---- - -Tyk Operator is a Kubernetes Controller that manages Tyk Custom Resources (CRs) such as API Definitions and Security Policies. Developers define these resources as [Custom Resource (CRs)]({{}}), and Tyk Operator ensures that the desired state is reconciled with the Tyk Gateway or Dashboard. This involves creating, updating, or deleting API configurations until the target state matches the desired state. - -For the Tyk Dashboard, Tyk Operator functions as a system user, bound by Organization and RBAC rules. - -During start up, Tyk Operator looks for these keys from `tyk-operator-conf` secret or from the environment variables (listed in the table below). - -| Key or Environment Variable | Description | -|:-----|:-------------| -| `TYK_MODE` | "ce" for OSS or "pro" for licensed users | -| `TYK_URL` | URL of Tyk Gateway or Dashboard API | -| `TYK_ORG` | Organization ID of Operator user | -| `TYK_AUTH` | API key of Operator user | - -These would be the default credentials Tyk Operator uses to connect to Tyk. - -## Multi-tenancy in Tyk Operator - -Tyk Operator is a cluster resource, and it is not safe to run multiple Tyk Operator deployments in a single cluster. However, this raises the question of how to handle scenarios where multiple teams or departments need to manage their own API configurations using different credentials. - -While you cannot run multiple instances of Tyk Operator in a single cluster, you can achieve multi-tenancy by leveraging OperatorContext. OperatorContext allows you to define different sets of credentials and configuration parameters for different teams or departments, enabling isolated management of API configurations within the same Tyk Operator instance. Check [Operator Context]({{< ref "product-stack/tyk-operator/key-concepts/operator-context" >}}) for more information. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/reference/api-definition.md b/tyk-docs/content/product-stack/tyk-operator/reference/api-definition.md deleted file mode 100644 index 1874fc18d0..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/reference/api-definition.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: "API Definition" -date: 2024-06-25 -tags: ["Tyk Operator", "Kubernetes", "API Definition"] -description: "Support features of APIDefinition CRD" ---- - -The ApiDefinition custom resource defines configuration of [Tyk Classic API Definition object]({{}}). - -Here are the supported features: - -## API Types - -| Type | Support | Supported From | Comments | Sample | -|--------------------------------|---------|----------------|------------------------------|--------------------------------------------------------------------------------------------| -| HTTP | ✅ | v0.1 | - | [HTTP Proxy]({{}}) | -| HTTPS | ✅ | v0.4 | - | [HTTPS Proxy]({{}}) | -| TCP | ✅ | v0.1 | - | [TCP Proxy]({{}}) | -| TLS | ✅ | v0.1 | - | | -| GraphQL - Proxy | ✅ | v0.1 | - | [GraphQL Proxy]({{}}) | -| Universal Data Graph v1 | ✅ | v0.1 | - | [UDG v1 Proxy]({{}}) | -| Universal Data Graph v2 | ✅ | v0.12 | - | [UDG v2 Proxy]({{}}) | -| GraphQL - Federation | ✅ | v0.12 | - | [GraphQL Federation]({{}}) | - -## Management of APIs - -| Type | Support | Supported From | Comments | Sample | -|--------------------------------|---------|----------------|------------------------------|--------| -| API Name | ✅ | v0.1 | - | [API Name]({{}}) | -| API Status (inactive/active) | ✅ | v0.2 | - | [API Active Status]({{}}) | -| API Categories | ✅ | v0.1 | - | [API Categories]({{}}) | -| API ID | ✅ | v0.1 | - | [API ID]({{}}) |- | | -| API Ownership | ✅ | v0.12 | - | [API Ownership]({{}}) | -| API Versioning | ✅ | v0.1 | - | [API Versioning]({{}}) | - -## Traffic Routing - - -| Type | Supported | Supported From | Comments | Sample | -| --------------------------- | --------- | -------------- | -------- | ------------- | -| Path-Based Proxy | ✅ | v0.1 | - | [HTTP Proxy]({{}}) | -| Host-Based Proxy | ✅ | v0.1 | - | [HTTP Host-based Proxy]({{}}) | -| Target URL | ✅ | v0.1 | - | [HTTP Proxy]({{}}) | - -## Client to Gateway Authentication and Authorization - -| Type | Supported | Supported From | Comments | Sample | -| ----------------------------- | --------- | -------------- | -------- | ------------- | -| Keyless | ✅ | v0.1 | - | [Keyless]({{}}) | -| Auth Token | ✅ | v0.1 | - | [Auth Token]({{}}) | -| JWT | ✅️ | v0.5 | - | [JWT]({{}}) | -| OpenID Connect | ❌ | - | JWT is the recommended way configuring OIDC. Please see [OpenID Connect]({{}}) documentation for details. | | -| OAuth2 | ❌ | - | JWT is the recommended way to configure OAuth2. Please see [OpenID Connect]({{}}) documentation for details. | | -| Client mTLS | ✅ | v0.11 | Only static client mTLS is supported | [mTLS]({{}}) | -| HMAC | ❌ | - | Not implemented | | -| Basic Authentication | ✅ | v0.12 | Only enabling with default metadata values is supported | [Basic Auth]({{}}) | -| Custom Authentication Plugin (Go) | ✅ | v0.11 | - | [Custom Auth (go)]({{}}) | -| Custom Authentication Plugin (gRPC) | ✅ | v0.1 | - | [Custom Auth (gRPC)]({{}}) | -| Multiple Authentication | ✅ | v0.14 | - | [Multiple Auth]({{}}) | -| IP Allowlist | ✅ | v0.5 | - | [IP Allowlist]({{}}) | -| IP Blocklist | ✅ | v0.5 | - | [IP Blocklist]({{}}) | - -## Gateway to Upstream Authentication - -| Type | Supported | Supported From | Comments | Sample | -|-------------------------------------------------|-----------|----------------|-----------------| ------------- | -| Upstream Certificates mTLS | ✅ | v0.9 | | [Upstream mTLS]({{}}) | -| Public Key Certificate Pinning | ✅ | v0.9 | | [Certificate Pinning]({{}}) | -| Upstream Request Signing | ❌ | - | Not implemented | | - -## API-level (Global) Features - -| Feature | Supported | Supported From | Comments | Sample | -|--------------------------------------|-----------|----------------|------------------------------------------------------------------------|-----------------------------------------------------------------| -| Detailed recording (in Log Browser) | ✅ | v0.4.0 | - | [Detailed recording]({{}}) | -| Config Data | ✅ | v0.8.2 | - | [Config Data]({{}}) | -| Context Variables | ✅ | v0.1 | - | [Context Variables]({{}}) | -| Cross Origin Resource Sharing (CORS) | ✅ | v0.2 | - | [CORS]({{}}) | -| Service Discovery | ⚠️ | - | Untested | | -| Segment Tags | ✅ | v0.1 | - | [Segment Tags]({{}}) | -| Internal API (not exposed by Gateway)| ✅ | v0.6.0 | - | [API Accessibility]({{< ref "product-stack/tyk-operator/advanced-configurations/management-of-api#api-accessibility" >}}) | -| Global (API-level) Header Transform | ✅ | v0.1.0 | - | [Global Header Transform]({{}}) | -| Global (API-level) Rate Limit | ✅ | v0.10 | - | [Global Rate Limit]({{}}) | -| Custom Plugins | ✅ | v0.1 | - | [Custom Plugins]({{< ref "product-stack/tyk-operator/advanced-configurations/custom-plugins" >}}) -| Analytics Plugin | ✅ | v0.16.0 | - | [Analytics Plugins]({{}})| -| Batch Requests | ❌ | - | - | | -| Custom Analytics Tags (Tag Headers) | ✅ | v0.10.0 | - | [Custom Analytics Tags (Tag Headers)]({{< ref "tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics#tyk-operator" >}}) | -| Expire Analytics After | ❌ | - | - | | -| Do not track Analytics (per API) | ✅ | v0.1.0 | - | [Do Not Track]({{< ref "product-stack/tyk-gateway/middleware/do-not-track-tyk-classic" >}}) |- | | -| Webhooks | ❌ | - | - | | -| Looping | ✅ | v0.6 | - | [Internal Looping]({{< ref "product-stack/tyk-operator/advanced-configurations/internal-looping" >}}) | -| Round Robin Load Balancing | ✅ | - | - | [Load Balancing]({{}}) | - -## Endpoint-level Features - -| Endpoint Middleware | Supported | Supported From | Comments | Sample | -|-----------------------------------|-----------|----------------|------------------------------------------------|---------------| -| Allow list | ✅️ | v0.8.2 | - | [Allow list]({{}}) | -| Block list | ✅️ | v0.8.2 | - | [Block list]({{}}) | -| Cache | ✅ | v0.1 | - | [Cache]({{}}) | -| Advance Cache | ✅ | v0.1 | - | [Advanced Cache]({{}}) | -| Circuit Breaker | ✅ | v0.5 | - | [Circuit Breaker]({{}}) | -| Track Endpoint | ✅ | v0.1 | | [Track Endpoint]({{}}) | -| Do Not Track Endpoint | ✅ | v0.1 | | [Do Not Track Endpoint]({{}}) | -| Enforced Timeouts | ✅ | v0.1 | - | [Enforced Timeouts]({{}}) | -| Ignore Authentication | ✅ | v0.8.2 | - | [Ignore Authentication]({{}}) | -| Internal Endpoint | ✅ | v0.1 | - | [Internal Endpoint]({{}}) | -| URL Rewrite | ✅️ | v0.1 | - | [URL Rewrite]({{}}) | -| Validate Request | ✅ | v0.8.2 | - | [Validate Request]({{}}) | -| Rate Limit | ❌ | - | - | | -| Request Size Limit | ✅️ | v0.1 | - | [Request Size Limit]({{}}) | -| Request Method Transform | ✅ | v0.5 | - | [Request Method Transform]({{}}) | -| Request Header Transform | ✅ | v0.1 | - | [Request Header Transform]({{}}) | -| Request Body Transform | ✅ | v0.1 | - | [Request Body Transform]({{}}) | -| Request Body JQ Transform | ⚠️ | v0.1 | Requires [JQ on Gateway Docker Image]({{}}) | | -| Response Header Transform | ✅ | v0.1 | - | [Response Header Transform]({{}}) | -| Response Body Transform | ✅ | v0.1 | - | [Response Body Transform]({{}}) | -| Response Body JQ Transform | ⚠️ | v0.1 | Requires [JQ on Gateway Docker Image]({{}}) | | -| Mock Response | ✅ | v0.1 | - | [Mock Response]({{}})| -| Virtual Endpoint | ✅ | v0.1 | - | [Virtual Endpoint]({{}}) | -| Per-Endpoint Plugin | ❌ | - | - | | -| Persist Graphql | ❌ | - | - | | \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/reference/security-policy.md b/tyk-docs/content/product-stack/tyk-operator/reference/security-policy.md deleted file mode 100644 index 1aaf3ab0d4..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/reference/security-policy.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Security Policy" -date: 2024-06-25 -tags: ["Tyk Operator", "Kubernetes", "Security Policy"] -description: "Support features of SecurityPolicy CRD" ---- - -The SecurityPolicy custom resource defines configuration of [Tyk Security Policy object]({{}}). -Here are the supported features: - -| Feature | Supported | -|-----------------------------------------------------------|----------------------------------------------------------------| -| API Access | ✅ | -| Rate Limit, Throttling, Quotas | ✅ | -| Meta Data & Tags | ✅ | -| Path based permissions | ✅ | -| Partitions | ✅ | -| Per API limit | ❌ | - -Consult [Security Policy CRD]({{}}) to see examples of setting these features. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/reference/version-compatibility.md b/tyk-docs/content/product-stack/tyk-operator/reference/version-compatibility.md deleted file mode 100644 index 2ed603fac9..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/reference/version-compatibility.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: "Version Compatibility" -date: 2024-06-25 -tags: ["Tyk Operator", "Kubernetes", "version compatibility"] -description: "Version compatibility matrix with Tyk and Kubernetes version" ---- - -Ensuring compatibility between different versions is crucial for maintaining stable and efficient operations. This document provides a comprehensive compatibility matrix for Tyk Operator with various versions of Tyk and Kubernetes. By understanding these compatibility details, you can make informed decisions about which versions to deploy in your environment, ensuring that you leverage the latest features and maintain backward compatibility where necessary. - -## Compatibility with Tyk -Tyk Operator can work with all version of Tyk beyond Tyk 3.x+. Since Tyk is backward compatible, you can safely use the -latest version of Tyk Operator to work with any version of Tyk. -However, if you're using a feature that was not yet available on an earlier version of Tyk, e.g. Defining a Subgraph with Tyk 3.x, you'll see error in Tyk Operator controller manager logs. - -See [Release notes]({{}}) to check for each Tyk Operator release, -which version of Tyk it is tested against. - -| Tyk Version | 3.2 | 4.0 | 4.1 | 4.2 | 4.3 | 5.0 | 5.2 | 5.3 | 5.4 | -| -------------------- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| Tyk Operator v0.13 | Y | | | | Y | | | | | -| Tyk Operator v0.14 | Y | Y | | | Y | Y | | | | -| Tyk Operator v0.14.1 | Y | Y | | | Y | Y | | | | -| Tyk Operator v0.15.0 | Y | Y | | | Y | Y | | | | -| Tyk Operator v0.15.1 | Y | Y | | | Y | Y | | | | -| Tyk Operator v0.16.0 | Y | Y | | | Y | Y | Y | | | -| Tyk Operator v0.17.0 | Y | Y | | | Y | Y | Y | Y | | -| Tyk Operator v0.17.1 | Y | Y | | | | Y | Y | Y | | -| Tyk Operator v0.18.0 | Y | Y | | | | Y | Y | Y | Y | - -## Compatibility with Kubernetes Version - -See [Release notes](https://github.com/TykTechnologies/tyk-operator/releases) to check for each Tyk Operator release, -which version of Kubernetes it is tested against. - -| Kubernetes Version | 1.19 | 1.20 | 1.21 | 1.22 | 1.23 | 1.24 | 1.25 | 1.26 | 1.27 | 1.28 | 1.29 | -| -------------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| Tyk Operator v0.13 | Y | Y | Y | Y | Y | Y | Y | | | | | -| Tyk Operator v0.14 | Y | Y | Y | Y | Y | Y | Y | | | | | -| Tyk Operator v0.14.1 | | Y | Y | Y | Y | Y | Y | Y | | | | -| Tyk Operator v0.15.0 | | Y | Y | Y | Y | Y | Y | Y | | | | -| Tyk Operator v0.15.1 | | Y | Y | Y | Y | Y | Y | Y | | | | -| Tyk Operator v0.16.0 | | Y | Y | Y | Y | Y | Y | Y | | | | -| Tyk Operator v0.17.0 | | | | | | | Y | Y | Y | Y | Y | -| Tyk Operator v0.17.1 | | | | | | | Y | Y | Y | Y | Y | -| Tyk Operator v0.18.0 | | | | | | | Y | Y | Y | Y | Y | \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.17.md b/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.17.md index bbaa2b71a7..f3a56b2c01 100644 --- a/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.17.md +++ b/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.17.md @@ -21,7 +21,7 @@ This release has no breaking changes. There are no deprecations in this release. #### Upgrade Instructions -Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade instructions. +Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade instructions. #### Release Highlights This release is focused on bug fixes. For details please refer to the [changelog]({{< ref "#Changelog-v0.17.1">}}) below. @@ -83,7 +83,7 @@ This release has no breaking changes. There are no deprecations in this release. #### Upgrade Instructions -Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade Instructions. +Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade Instructions. #### Release Highlights This release added support for `GraphQLIntrospectionConfig` in API definition and fixed an issue where the Tyk Operator creates duplicate APIs on Tyk. diff --git a/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.18.md b/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.18.md index 7f273249eb..840961a975 100644 --- a/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.18.md +++ b/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-0.18.md @@ -21,7 +21,7 @@ This release has no breaking changes. There are no deprecations in this release. #### Upgrade Instructions -Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade instructions. +Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade instructions. #### Release Highlights This release added support for Tyk 5.4 API definition. diff --git a/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-1.0.md b/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-1.0.md new file mode 100644 index 0000000000..de76fda33d --- /dev/null +++ b/tyk-docs/content/product-stack/tyk-operator/release-notes/operator-1.0.md @@ -0,0 +1,328 @@ +--- +title: Tyk Operator 1.0 Release Notes +tag: ["Tyk Operator", "Release notes", "v1.0", "changelog" ] +description: "Release notes documenting updates, enhancements, fixes and changes for Tyk Operator versions within the 1.0.x series." +--- +**Licensed Protected Product** + +**This page contains all release notes for version 1.0.X displayed in a reverse chronological order** + +## Support Lifetime + +Our minor releases are supported until our next minor comes out. + +--- + +## 1.0.0 Release Notes + +We are excited to announce the release of **Tyk Operator v1.0**, marking a significant milestone with new features, enhancements, and critical changes. This release introduces support for Tyk OAS APIs, extended capabilities for managing Classic APIs and security policies, and includes **license changes** that you must be aware of before upgrading. + +### Release Date 10 Oct 2024 + +### Release Highlights + +##### Support for Tyk OAS API +The Tyk Operator v1.0 release introduces powerful new features designed to enhance how you manage APIs in Kubernetes environments. One of the key highlights is the full support for Tyk OAS APIs, allowing you to define and manage APIs through the new **`TykOasApiDefinition`** custom resource. This integration extends GitOps API Management to Tyk OAS, allowing you to have declarative, versioned, and fully automated control to your APIs in Kubernetes environments. + +Key features: + +- **Define and Manage Tyk OAS APIs** using the TykOasApiDefinition custom resource. +- **Manage API Definitions in ConfigMaps**: Any changes are automatically tracked and synced to Tyk. +- **Configure Tyk OAS in a Kubernetes-native way**: You can organize APIs by categories or manage multiple API versions easily with the new CRD. +- **Simplify certificate management** by referencing Kubernetes secrets. +- **Use the Tyk Ingress controller** to create Tyk OAS APIs from Ingress specs. + +With this release, users benefit from seamless GitOps workflows, ensuring a Kubernetes-native operation workflow. Security is also made simpler with automated certificate synchronization, removing the hassle of manual certificate management. + +##### Enhanced Classic API and Security Policy Features +Enhanced support for Tyk Classic APIs continues, with improvements to security policies and new capabilities for setting API and endpoint-specific rate limits, making it easier than ever to customize API usage policies. + +This release represents a significant upgrade for both API management and security, offering a more efficient, scalable, and Kubernetes-native way to operate Tyk. Whether you're leveraging Tyk OAS APIs or continuing with Tyk Classic, this version brings the tools and features you need to streamline your workflows and enhance operational efficiency. + +For details please refer to the [changelog]({{< ref "#Changelog-v1.0.0">}}) below. + + +### Breaking Changes + + +**License Requirement:** Tyk Operator is now a closed-source product and requires a valid license key to operate. Please follow our [Installation and Upgrade Guide]({{}}) to set your license key before installation or upgrade. + +If the license is missing, invalid, or expired, Tyk Operator will exit with an error message. Ensure that you carefully review the setup steps to avoid any issues during the upgrade or installation process. + + + + + + + + + + + + +### Dependencies {#dependencies-1.1} +#### 3rd Party Dependencies & Tools + + +| Third Party Dependency | Tested Versions | Compatible Versions | Comments | +| ---------------------------------------------------------- | ---------------------- | ---------------------- | -------- | +| [Kubernetes](https://kubernetes.io) | 1.26.x to 1.30.x | 1.19.x to 1.30.x | | + +Given the time difference between your upgrade and the release of this version, we recommend customers verify the ongoing support of third-party dependencies they install, as their status may have changed since the release. + +### Deprecations + +There are no deprecations in this release. + + + + +### Upgrade instructions + +Tyk Operator v1.0 introduced new Custom Resource Definitions (CRDs). Before upgrading to Tyk Operator v1.0 with Helm Chart, please run the following commands to install the CRDs: + +```bash +$ kubectl apply -f https://raw.githubusercontent.com/TykTechnologies/tyk-charts/refs/heads/main/tyk-operator-crds/crd-v1.0.0.yaml +``` + + +Go to the [Upgrading Tyk Operator]({{}}) section for detailed upgrade instructions. + + +### Downloads +- [Docker image v1.0.0](https://hub.docker.com/r/tykio/tyk-operator/tags?page=&page_size=&ordering=&name=v1.0.0) + - ```bash + docker pull tykio/tyk-operator:v1.0.0 + ``` +- Helm chart + - [tyk-charts v2.1.0]({{}}) + + +### Changelog {#Changelog-v1.0.0} + + +#### Added + +
      +
    • +
      +TykOasApiDefinition: new Custom Resource for Tyk OAS + +The `TykOasApiDefinition` custom resource allows you to manage Tyk OAS APIs directly within your Kubernetes environment. You can now categorize APIs, manage multiple versions, and simplify SSL certificate management by referencing Kubernetes secrets. This enhancement offers a Kubernetes-native approach to managing Tyk APIs, streamlining operations and reducing the complexity of versioning and certificate handling across different environments. + +Learn More: [Create Tyk OAS API]({{}}) +
      +
    • +
    • +
      +Ingress Controller: Support Tyk OAS API as an Ingress Template + +With this release, you can use the TykOasApiDefinition resource as a template for automatically creating Tyk OAS APIs based on Kubernetes Ingress specs. This simplifies the process of generating APIs by leveraging Ingress controller annotations, reducing manual intervention, and automating API creation workflows for better scalability and operational efficiency. + +Learn More: [Tyk Ingress Controller]({{}}) +
      +
    • +
    • +
      +SecurityPolicy: Support for Key-Level Per-API Rate Limits and Quota + +This release introduces the ability to configure specific rate limits, quotas, and throttling rules at the API level using the `access_rights_array` in the security policy. Each API now has the flexibility to inherit global limit settings or apply custom limits, making it easier to control API usage on a per-API basis. This provides enhanced granularity in managing traffic, ensuring optimal resource allocation and improved performance under heavy loads. + +Learn More: [Key-Level Per-API Rate Limits and Quota]({{}}) +
      +
    • +
    • +
      +SecurityPolicy: Support for Key-Level Per-Endpoint Rate Limits + +By configuring key-level per-endpoint limits, you can restrict the request rate for specific API clients to a specific endpoint of an API. + +Learn More: [Key-Level Per-Endpoint Rate Limits]({{}}) +
      +
    • +
    • +
      +SecurityPolicy: Support for TykOasApiDefinition + +This update extends the security policy to include TykOasApiDefinition resources within the `access_rights_array`, allowing you to manage security policies for both Tyk Classic APIs and Tyk OAS APIs. By specifying the API kind, you can now apply rate limits, quotas, and other access controls to Tyk OAS APIs, streamlining security management in mixed environments. + +Learn More: [TykOasApiDefinition in Security Policy]({{}}) +
      +
    • +
    • +
      +ApiDefinition: Support for Event Handler + +Tyk Operator now supports event handler integration for ApiDefinition, enabling webhooks to be triggered by specific API events. This allows for real-time, event-driven automation between Tyk and other systems, sending notifications or executing actions as events occur in the API lifecycle. The event_handlers field in the ApiDefinition CRD makes it easy to set up webhook-driven processes for better control and automation across your services. + +Learn More: [Event Webhook with Tyk Classic]({{}}) +
      +
    • +
    • +
      +ApiDefinition: Support timeout Field in Advanced Cache Control + +The advanced cache configuration for ApiDefinition now supports a timeout field, providing greater control over cache behavior. You can define specific cache timeouts for different API paths, allowing for more fine-tuned control over caching strategies. This feature helps optimize API performance, particularly for high-traffic endpoints requiring precise cache management. +```yaml +extended_paths: + advance_cache_config: + - path: "/json" + method: "GET" + cache_response_codes: [200, 204] + timeout: 120 +``` +
      +
    • +
    • +
      +ApiDefinition: Support new Fields in `VersionDefinition` + +`VersionDefinition` within `ApiDefinition` has been expanded to include additional fields, offering more granular control over API versioning and path management. These new fields allow you to configure version handling more flexibly, enhancing your ability to manage API versions and customize how version data is processed in API paths. +
      +
    • +
    + + +#### Changed + +
      +
    • +
      +Go Version Updated to 1.22 + +The underlying Go runtime for Tyk Operator has been updated to version 1.22. This upgrade brings performance improvements, enhanced security, and compatibility with the latest Go libraries, ensuring Tyk Operator remains efficient and secure in production environments. +
      +
    • +
    + + + + + + + +--- + + + + + + +## Further Information + +### Upgrading Tyk +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance on the upgrade strategy. + + + +### FAQ +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. + + diff --git a/tyk-docs/content/product-stack/tyk-operator/release-notes/overview.md b/tyk-docs/content/product-stack/tyk-operator/release-notes/overview.md index a4a5a9fb22..da707e5e81 100644 --- a/tyk-docs/content/product-stack/tyk-operator/release-notes/overview.md +++ b/tyk-docs/content/product-stack/tyk-operator/release-notes/overview.md @@ -7,6 +7,7 @@ description: "Index to Operator release notes" This page provides access to release notes for Tyk Operator. +* [Operator v1.0]({{}}) * [Operator v0.18]({{}}) * [Operator v0.17]({{}}) * [Operator v0.16]({{}}) diff --git a/tyk-docs/content/product-stack/tyk-operator/troubleshooting/.placeholder b/tyk-docs/content/product-stack/tyk-operator/troubleshooting/.placeholder deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tyk-docs/content/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied.md b/tyk-docs/content/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied.md deleted file mode 100644 index 9104514019..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "API changes not applied" -date: 2023-07-19 -tags: ["Tyk Operator", "Reconciliation", "Kubernetes"] -description: "How to troubleshoot API changes not applied" -weight: 30 -menu: - main: - parent: "Tyk Operator" ---- - -If you experience issues with the behavior of the Tyk Operator (e.g. API changes not being applied), to investigate, you can check the logs of the tyk-operator-controller-manager Deployment's pod in your cluster with the following command: - -```console -$ kubectl logs $TYK_CONTROLLER_MANAGER_POD_NAME -n $TYK_OPERATOR_NS manager -``` - -If the operator webhook cannot be reached, this internal error occurs: - -```console -failed calling webhook "mapidefinition.kb.io": failed to call webhook: Post "https://tyk-operator-webhook-service.tyk.svc:443/mutate-tyk-tyk-io-v1alpha1-apidefinition?timeout=10s": context deadline exceeded -Solution: -``` -This typically happens when the webhook does not have access to the operator manager service. This is typically due to connectivity issues or if the manager is not up. - -Please refer to cert-manager [The Definitive Debugging Guide](https://cert-manager.io/docs/troubleshooting/webhook/#error-context-deadline-exceeded) for the cert-manager Webhook Pod documentation about possible solutions based on your environment (GKE, EKS, etc.) diff --git a/tyk-docs/content/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting.md b/tyk-docs/content/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting.md deleted file mode 100644 index a63de8d9ab..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "Understanding Reconciliation Status" -date: 2023-07-19 -tags: ["Tyk Operator", "Reconciliation", "Kubernetes"] -description: "How to check for reconciliation status using latestTransaction" -weight: 30 -menu: - main: - parent: "Tyk Operator" ---- - -From [Tyk Operator v0.15.0](https://github.com/TykTechnologies/tyk-operator/releases/tag/v0.15.0), we introduce a new status [subresource](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#subresources) in APIDefinition CRD, called _latestTransaction_ which holds information about reconciliation status. - -> The [Status subresource](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#status-subresource) in Kubernetes is a specialized endpoint that allows developers and operators to retrieve the real-time status of a specific Kubernetes resource. By querying this subresource, users can efficiently access essential information about a resource's current state, conditions, and other relevant details without fetching the entire resource, simplifying monitoring and aiding in prompt decision-making and issue resolution. - -The new status subresource _latestTransaction_ consists of a couple of fields that show the latest result of the reconciliation: -- `.status.latestTransaction.status`: shows the status of the latest reconciliation, either Successful or Failed; -- `.status.latestTransaction.time`: shows the time of the latest reconciliation; -- `.status.latestTransaction.error`: shows the message of an error if observed in the latest transaction. - -## Example: Find out why an APIDefinition resource cannot be deleted -Consider the scenario when APIDefinition and SecurityPolicy are connected. Usually, APIDefinition cannot be deleted directly since it is protected by SecurityPolicy. The proper approach to remove an APIDefinition is to first remove the reference to the SecurityPolicy (either by deleting the SecurityPolicy CR or updating SecurityPolicy CR’s specification), and then remove the APIDefinition itself. However, if we directly delete this APIDefinition, Tyk Operator won’t delete the APIDefinition unless the link between SecurityPolicy and APIDefinition is removed. It is to protect the referential integrity between your resources. - -```console -$ kubectl delete tykapis httpbin -apidefinition.tyk.tyk.io "httpbin" deleted -^C% -``` - -After deleting APIDefinition, the operation hangs, and we suspect that something is wrong. -Users might still look through the logs to comprehend the issue, as they did in the past, but they can now examine their APIDefinition’s status subresource to make their initial, speedy issue diagnosis. - -```console -$ kubectl get tykapis httpbin -NAME DOMAIN LISTENPATH PROXY.TARGETURL ENABLED STATUS -httpbin /httpbin http://httpbin.org true Failed -``` -As seen in the STATUS column, something went wrong, and the STATUS is Failed. - -To get more information about the APIDefinition resource, we can use `kubectl describe` or `kubectl get`: -```console -$ kubectl describe tykapis httpbin -Name: httpbin -Namespace: default -API Version: tyk.tyk.io/v1alpha1 -Kind: ApiDefinition -Metadata: - ... -Spec: - ... -Status: - api_id: ZGVmYXVsdC9odHRwYmlu - Latest CRD Spec Hash: 9169537376206027578 - Latest Transaction: - Error: unable to delete api due to security policy dependency=default/httpbin - Status: Failed - Time: 2023-07-18T07:26:45Z - Latest Tyk Spec Hash: 14558493065514264307 - linked_by_policies: - Name: httpbin - Namespace: default -``` -or -```console -$ kubectl get tykapis httpbin -o json | jq .status.latestTransaction -{ - "error": "unable to delete api due to security policy dependency=default/httpbin", - "status": "Failed", - "time": "2023-07-18T07:26:45Z" -} -``` -Instead of digging into Tyk Operator's logs, we can now diagnose this issue simply by looking at the `.status.latestTransaction` field. As `.status.latestTransaction.error` implies, the error is related to *SecurityPolicy* dependency. diff --git a/tyk-docs/content/product-stack/tyk-operator/tyk-ingress-controller.md b/tyk-docs/content/product-stack/tyk-operator/tyk-ingress-controller.md deleted file mode 100644 index 4f61418678..0000000000 --- a/tyk-docs/content/product-stack/tyk-operator/tyk-ingress-controller.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: "Configure Tyk Operator as Ingress Controller " -tags: ["Tyk Operator", "Kubernetes", "Ingress", "Ingress Controller"] -description: "Configure Tyk Operator as Ingress Controller" ---- - - -Tyk Operator offers an Ingress Controller, which dynamically manages ApiDefinition resources as per the ingress spec. - Tyk Gateway can be configured as a drop-in replacement for a standard Kubernetes Ingress. - -Most Ingress Controllers heavily rely on annotations to configure the ingress gateway. With Tyk Operator, our Ingress - Controller prefers to reference a strongly typed custom resource template. - -## Motivation - -The standard Ingress resource is very basic and does not natively support many advanced capabilities that are required - for API Management use-cases. Despite this, the community have built tooling, capabilities and dependencies - on top of the ingress resource. These all rely on abuse of the metadata annotations. This practice is apparent - with the standard [Kubernetes NginX Ingress resource](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#annotations). - -In order to decouple, gain all the benefits of Kubernetes, offer a Native & consistent API, we introduced the Tyk - ApiDefinition custom resource, which adds additional API Management capabilities, like security policy and rate limiting to Kubernetes Ingress. A side effect of - this meant a potential trade-off between offering a K8s native experience & integrating with Ingress which would - facilitate clean integration with 3rd party tooling built on-top of and dependent on the Ingress Resource. - -As a compromise & attempt to propose an alternative & more scalable solution, we have introduced the concept of the - ingress template ApiDefinition resource. The Template ApiDefinition resource offers a means to extend the capabilities - of the standard Ingress Resource, by merging features of the ingress specification with that of the template. - - The following sections shows some example of Tyk ApiDefinition template and Ingress specification. - -## How to configure Tyk Operator to handle Ingress resources - -To configure Tyk Operator to handle Ingress resources, first create a ApiDefinition resource template. The template provides default API configurations. -Next, specify ingress class as `tyk` in the Ingress resource. This allows Tyk Operator to read the Ingress resource and create API Definition resources -based on ingress path and ApiDefinition template. - -Here are some [Ingress Examples](https://github.com/TykTechnologies/tyk-operator/tree/master/config/samples/ingress) we provided on GitHub: -* [HTTP Host-Based](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/ingress-httpbin/) -* [HTTP Path Based](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/ingress-httpbin/) -* [HTTP Host and Path](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/ingress-httpbin/) -* [HTTPS with Cert-Manager Integration](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/ingress-tls) -* [Multiple Ingress Resources](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/ingress-multi) -* [Wildcard Hosts](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/ingress-wildcard-host) -* [Istio Ingress Gateway](https://github.com/TykTechnologies/tyk-operator/blob/master/config/samples/ingress/istio-ingress-bookinfo) - -### Ingress Class - -The value of the `kubernetes.io/ingress.class` annotation identifies the IngressClass that will process Ingress objects. - -Tyk Operator by default looks for the value `tyk` and will ignore all other ingress classes. If you wish to override this default behavior, - you may do so by setting the environment variable `WATCH_INGRESS_CLASS` in the operator manager deployment. [See Installing Tyk Operator]({{}}) for further information. - -### Sample Template ApiDefinition resource - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: myapideftemplate - labels: - template: "true" -spec: - name: foo - protocol: http - use_keyless: true - proxy: - target_url: http://example.com -``` - -Pay particular attention to the ApiDefinition metadata. This specifies that we have an ApiDefinition object with the - label `template: true`. - -When applying this manifest, the ApiDefinition controller will skip reconciliation. This will allow - the ApiDefinition to be stored inside Kubernetes as a resource, but will not reconcile the ApiDefinition inside Tyk. - -All mandatory fields inside the ApiDefinition spec are still mandatory, but can be replaced with placeholders as they - will be overwritten by the Ingress reconciler. - -### Sample HTTP Ingress resource - -```yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: httpbin-ingress - annotations: - kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER - tyk.io/template: myapideftemplate # <---------------- REFERENCE TO APIDEFINITION IN SAME NAMESPACE -spec: - rules: - - http: - paths: - - path: /httpbin - pathType: Prefix - backend: - service: - name: httpbin - port: - number: 8000 -``` - -Tyk Ingress Controller will create APIs in Tyk for each path defined for a specific rule in Ingress resource. Each API -created inside Tyk will follow a special naming convention as follows: -``` --- -``` - - -The above ingress resource will create an ApiDefinition called `default-httpbin-ingress-78acd160d` inside Tyk's Gateway. -ApiDefinition's name comes from: -- `default`: The namespace of this Ingress resource, -- `httpbin-ingress`: The name of this Ingress resource, -- `78acd160d`: Short hash (first 9 characters) of Host (`""`) and Path (`/httpbin`). The hash algorithm is SHA256. - -The ApiDefinition will offer path-based routing listening on `/httpbin`. Because the referenced template is `myapideftemplate`, the IngressReconciler will retrieve the `myapideftemplate` resource and determine that the ApiDefinition object it creates needs to have standard auth enabled. - -### Sample HTTPS Ingress resource - -```yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: httpbin-ingress-tls - annotations: - kubernetes.io/ingress.class: tyk # <----------------- REFERENCES TYK INGRESS CONTROLLER - tyk.io/template: myapideftemplate # <---------------- REFERENCE TO APIDEFINITION IN SAME NAMESPACE - cert-manager.io/cluster-issuer: "letsencrypt-prod" - acme.cert-manager.io/http01-edit-in-place: "true" -spec: - tls: - - hosts: - - myingress.do.poc.tyk.technology - secretName: httpbin-ingress-tls - rules: - - host: myingress.do.poc.tyk.technology - http: - paths: - - path: /httpbin - pathType: Prefix - backend: - service: - name: httpbin - port: - number: 8000 -``` - -Assuming you already have a `letsencrypt-prod` cluster issuer, it is possible to automatically provision TLS certificates - issued by LetsEncrypt. - -```yaml -metadata: - annotations: - cert-manager.io/cluster-issuer: "letsencrypt-prod" - acme.cert-manager.io/http01-edit-in-place: "true" -``` - -Tyk ingress controller can then handle the acme challenge when cert-manager edits the ingress resource. - -## Ingress Path Types - -Each path in an Ingress must have its own particular path type. Kubernetes offers three types of path types: `ImplementationSpecific`, `Exact`, and `Prefix`. Currently, not all path types are supported. The below table shows the unsupported path types for [Sample HTTP Ingress Resource](#sample-http-ingress-resource) based on the examples in the [Kubernetes Ingress documentation](https://kubernetes.io/docs/concepts/services-networking/ingress/#examples). - -| Kind | Path(s) | Request path(s) | Expected to match? | Works as Expected | -|--------|-----------|-----------------|----------------------------------|-----------------------------------------| -| Exact | /foo | /foo/ | No | No. | -| Prefix | /foo/ | /foo, /foo/ | Yes | No, /foo/ matches, /foo does not match. | -| Prefix | /aaa/bb | /aaa/bbb | No | No, the request forwarded to service. | -| Prefix | /aaa/bbb/ | /aaa/bbb | Yes, ignores trailing slash | No, /aaa/bbb does not match. | -| Prefix | /aaa/bbb | /aaa/bbbxyz | No, does not match string prefix | No, the request forwarded to service. | - -Please bear in mind that if `proxy.strip_listen_path` is set to true on API Definition, Tyk strips the listen-path (for example, the listen-path for the Ingress under [Sample HTTP Ingress Resource](#sample-http-ingress-resource) is /httpbin) with an empty string. - -The following table shows an example of path matching if the listen-path is set to `/httpbin` or `/httpbin/`. - -| Kind | Path(s) | Request path(s) | Matches? | -|------------------------|-----------|---------------------------|-------------------------------------------------------| -| Exact | /httpbin | /httpbin, /httpbin/ | Yes. The request forwarded as `/` to your service. | -| Prefix | /httpbin | /httpbin, /httpbin/ | Yes. The request forwarded as `/` to your service. | -| ImplementationSpecific | /httpbin | /httpbin, /httpbin/ | Yes. The request forwarded as `/` to your service. | -| Exact | /httpbin | /httpbinget, /httpbin/get | Yes. The request forwarded as `/get` to your service. | -| Prefix | /httpbin | /httpbinget, /httpbin/get | Yes. The request forwarded as `/get` to your service. | -| ImplementationSpecific | /httpbin | /httpbinget, /httpbin/get | Yes. The request forwarded as `/get` to your service. | -| Exact | /httpbin/ | /httpbin/, /httpbin/get | Yes. The request forwarded as `/get` to your service. | -| Prefix | /httpbin/ | /httpbin/, /httpbin/get | Yes. The request forwarded as `/get` to your service. | -| ImplementationSpecific | /httpbin/ | /httpbin/, /httpbin/get | Yes. The request forwarded as `/get` to your service. | -| Exact | /httpbin/ | /httpbin | No. Ingress cannot find referenced service. | -| Prefix | /httpbin/ | /httpbin | No. Ingress cannot find referenced service. | -| ImplementationSpecific | /httpbin/ | /httpbin | No. Ingress cannot find referenced service. | diff --git a/tyk-docs/content/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing.md b/tyk-docs/content/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing.md index 650e5214f5..94440ca1fd 100644 --- a/tyk-docs/content/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing.md +++ b/tyk-docs/content/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing.md @@ -66,7 +66,7 @@ pipeline: ## Aggregating -Once our window has been grouped the next step is to calculate the aggregated passenger and unique cars counts. For this purpose the [Bloblang query language]({{< ref "/product-stack/tyk-streaming/guides/bloblang/overview" >}}) comes in handy as the method [from_all]({{< ref "/product-stack/tyk-streaming/guides/bloblang/methods/general#from_all" >}}) executes the target function against the entire batch and returns an array of the values, allowing us to mutate the result with chained methods such as [sum]({{< ref "/product-stack/tyk-streaming/guides/bloblang/methods/general#sum" >}}): +Once our window has been grouped the next step is to calculate the aggregated passenger and unique cars counts. For this purpose the [Bloblang query language]({{< ref "/product-stack/tyk-streaming/guides/bloblang/overview" >}}) comes in handy as the method [from_all]({{< ref "/product-stack/tyk-streaming/guides/bloblang/methods/general#from_all" >}}) executes the target function against the entire batch and returns an array of the values, allowing us to mutate the result with chained methods such as sum: ```yaml pipeline: diff --git a/tyk-docs/content/product-stack/tyk-streaming/configuration/processors/dedupe.md b/tyk-docs/content/product-stack/tyk-streaming/configuration/processors/dedupe.md index cf6ebb8a0b..b5b46e0010 100644 --- a/tyk-docs/content/product-stack/tyk-streaming/configuration/processors/dedupe.md +++ b/tyk-docs/content/product-stack/tyk-streaming/configuration/processors/dedupe.md @@ -40,9 +40,9 @@ The cache resource to target with this processor. Type: `string` ### key - +https://tyk.io/docs/product-stack/tyk-streaming/guides/bloblang/overview/ An interpolated string yielding the key to deduplicate by for each message. -This field supports [interpolation functions](#bloblang-queries). +This field supports [interpolation functions]({{< ref "product-stack/tyk-streaming/configuration/processors/dedupe" >}}). Type: `string` diff --git a/tyk-docs/content/product-stack/tyk-streaming/getting-started.md b/tyk-docs/content/product-stack/tyk-streaming/getting-started.md index 7cc9441436..de84727d23 100644 --- a/tyk-docs/content/product-stack/tyk-streaming/getting-started.md +++ b/tyk-docs/content/product-stack/tyk-streaming/getting-started.md @@ -152,7 +152,7 @@ curl -X POST -d '{"message":"Hello, Tyk Streams!"}' http://localhost:8080/}}) above. +- In case you used this repo before, ensure all Docker images are as defined in the [example env]({{< ref "#configure-the-installation" >}}) above. - Verify the API definition is properly configured in the Tyk Dashboard - Check the Tyk Gateway logs for any error messages. Most of the time it'll be syntax errors in the stream configuration. In such case, you might see 404 since the API definition has not been created in Tyk diff --git a/tyk-docs/content/product-stack/tyk-streaming/guides/bloblang/overview.md b/tyk-docs/content/product-stack/tyk-streaming/guides/bloblang/overview.md index 6186831eed..2015c4e936 100644 --- a/tyk-docs/content/product-stack/tyk-streaming/guides/bloblang/overview.md +++ b/tyk-docs/content/product-stack/tyk-streaming/guides/bloblang/overview.md @@ -317,7 +317,7 @@ You can find a full list of methods and their parameters in the [methods page]({ ## Maps -Defining named maps allows you to reuse common mappings on values with the [apply method]({{< ref "/product-stack/tyk-streaming/guides/bloblang/methods/overview#apply" >}}): +Defining named maps allows you to reuse common mappings on values with the apply method: ```coffee map things { @@ -358,7 +358,7 @@ root = if this.doc.urls.length() < 10 { deleted() } ## Error Handling -Functions and methods can fail under certain circumstances, such as when they receive types they aren't able to act upon. These failures, when not caught, will cause the entire mapping to fail. However, the method [catch]({{< ref "/product-stack/tyk-streaming/guides/bloblang/methods/overview#catch" >}}) can be used in order to return a value when a failure occurs instead: +Functions and methods can fail under certain circumstances, such as when they receive types they aren't able to act upon. These failures, when not caught, will cause the entire mapping to fail. However, the method catch can be used in order to return a value when a failure occurs instead: ```coffee # Map an empty array to `foo` if the field `bar` is not a string. @@ -385,7 +385,7 @@ root.things = this.foo.split(",").map_each( ele -> ele.parse_json() ).catch([]) root.things = this.foo.split(",").map_each( ele -> ele.parse_json().catch({}) ) ``` -However, the `catch` method only acts on errors, sometimes it's also useful to set a fall back value when a query returns `null` in which case the method [or]({{< ref "/product-stack/tyk-streaming/guides/bloblang/methods/overview#or" >}}) can be used the same way: +However, the `catch` method only acts on errors, sometimes it's also useful to set a fall back value when a query returns `null` in which case the method or can be used the same way: ```coffee # Map "default" if either the element index 5 does not exist, or the underlying diff --git a/tyk-docs/content/product-stack/tyk-streaming/overview.md b/tyk-docs/content/product-stack/tyk-streaming/overview.md index 16e5646b78..3c51a5c8a0 100644 --- a/tyk-docs/content/product-stack/tyk-streaming/overview.md +++ b/tyk-docs/content/product-stack/tyk-streaming/overview.md @@ -11,6 +11,7 @@ manage and monetize real-time event streams and asynchronous APIs. ## Getting started Our first release of Tyk Streams is now available, and we'd love for you to try it out. Click the button to sign up and take it for a spin: + {{< button_left href="https://survey.hsforms.com/1ItPCBg-_Tre8WFJZL4pp6Q3ifmg" color="green" content="Get started with Tyk Streams" >}} --- diff --git a/tyk-docs/content/product-stack/tyk-sync/commands/sync-dump.md b/tyk-docs/content/product-stack/tyk-sync/commands/sync-dump.md deleted file mode 100644 index c93dd3fd7b..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/commands/sync-dump.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Dump Command -description: "Learn about the usage and flags for tyk-sync dump command" -tags: [ "Tyk Sync", "GitOps" ] ---- - -The tyk-sync `dump` command is used to export API definitions, policies, and templates from your Tyk Dashboard to local files. This command helps in creating backups or migrating configurations. It will also generate an index file `.tyk.json` that can be used for `sync`, `update`, and `publish` command. - -{{< note success >}} -**Notes** - -Dump command is available to Tyk Dashboard users only. Open source users can find API resource files in the file system, e.g. `/var/tyk-gateway/apps` (LINUX) or `/opt/tyk-gateway/apps` (Docker). -{{< /note >}} - -## Usage - -```bash -tyk-sync dump -d DASHBOARD_URL [-s SECRET] [-t PATH] -``` - -## Flags -* `-d, --dashboard DASHBOARD_URL`: Specify the fully qualified URL of the Tyk Dashboard. -* `-h, --help`: Help for the `dump` command. -* `-t, --target PATH`: Target directory for the output files. Default to current directory if not provided (optional). -* `-s, --secret SECRET`: Your API secret for accessing Dashboard API (optional). - -## Flags for specifying resources to dump (Optional) -* `--apis IDS`: Specify API IDs to dump. Use this to selectively dump specific APIs. It can be a single ID or an array of string such as "id1,id2". -* `--oas-apis IDS`: Specify OAS API IDs to dump. Use this to selectively dump specific OAS APIs. It can be a single ID or an array of string such as "id1,id2". -* `--policies IDS`: Specify policy IDs to dump. Use this to selectively dump specific policies. It can be a single ID or an array of string such as "id1,id2". -* `--templates IDS`: Specify template IDs to dump. Use this to selectively dump specific API templates. It can be a single ID or an array of string such as "id1,id2". - -## Examples -1. Dump all configurations - -The simplest form of the `tyk-sync dump` command only requires specifying the Dashboard URL and secret via the `--dashboard` and `--secret` flags. It will dump all APIs, security policies, and templates in the target dashboard as files in the current directory of your file system. - -```bash -tyk-sync dump --dashboard http://tyk-dashboard:3000 --secret your-secret -``` - -2. Dump specific APIs - -```bash -tyk-sync dump --dashboard http://tyk-dashboard:3000 --secret your-secret \ - --target /path/to/backup \ - --apis c2ltcGxlLWdyYXBoLWRldi90eWthcGktc2NoZW1h,baa5d2b65f1b45385dac3aeb658fa04c -``` - -3. Dump specific policies - -```bash -tyk-sync dump --dashboard http://tyk-dashboard:3000 --secret your-secret \ - --target /path/to/backup \ - --policies 6667305de04e940001b09c9a -``` - -4. Dump specific templates - -```bash -tyk-sync dump --dashboard http://tyk-dashboard:3000 --secret your-secret \ - --target /path/to/backup \ - --templates eab07eea465d41ba8319428d42b3b796 -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/commands/sync-examples.md b/tyk-docs/content/product-stack/tyk-sync/commands/sync-examples.md deleted file mode 100644 index b9b20a8498..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/commands/sync-examples.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Examples Command -description: "Learn about the usage and flags for tyk-sync examples command" -tags: [ "Tyk Sync", "GitOps" ] ---- - -## Examples Command - -The examples command lists all examples from our official [Tyk examples](https://github.com/TykTechnologies/tyk-examples) repository. [See output in example usage]({{< relref "#import-tyk-example-into-dashboard" >}}) -```bash -Usage: - tyk-sync examples [flags] - tyk-sync examples [command] - -Available Commands: - publish Publish a specific example to a gateway or dashboard by using its location - show Shows details of a specific example by using its location - -Flags: - -h, --help help for examples -``` - -## Show Command -Shows more details about a specific example by using its location. [See output in example usage]({{< relref "#import-tyk-example-into-dashboard" >}}) -```bash -Usage: - tyk-sync examples show [flags] - -Flags: - -h, --help help for show - -l, --location string Location to example -``` - -## Publish Command -Publishs an example by using its location. -```bash -Usage: - tyk-sync examples publish [flags] - -Flags: - -b, --branch string Branch to use (defaults to refs/heads/main) (default "refs/heads/main") - -d, --dashboard string Fully qualified dashboard target URL - -g, --gateway string Fully qualified gateway target URL - -h, --help help for publish - -k, --key string Key file location for auth (optional) - -l, --location string Location to example - -s, --secret string Your API secret - --test Use test publisher, output results to stdio -``` - -API secret refers to secret use to access your Gateway API or Dashboard API. For dashboard users, you can get it from "User" page under “Tyk Dashboard API Access key”. - -## Examples -### Import Tyk example into Dashboard - -To list all available examples you need to run this command: -```bash -tyk-sync examples -LOCATION NAME DESCRIPTION -udg/vat-checker VAT number checker UDG Simple REST API wrapped in GQL using Universal Data Graph that allows user to check validity of a VAT number and display some details about it. -udg/geo-info Geo information about the World Countries GQL API extended with information from Restcountries -``` - -It's also possible to show more details about an example by using its location. For example, based on the output from `tyk-sync examples` above, we can use the location of the example "VAT number checker UDG" to get more information: -```bash -tyk-sync examples show --location="udg/vat-checker" -LOCATION -udg/vat-checker - -NAME -VAT number checker UDG - -DESCRIPTION -Simple REST API wrapped in GQL using Universal Data Graph that allows user to check validity of a VAT number and display some details about it. - -FEATURES -- REST Datasource - -MIN TYK VERSION -5.0 -``` - -To publish it into the Dashboard you will need to use this command: -```bash -tyk-sync examples publish -d="http://localhost:3000" -s="b2d420ca5302442b6f20100f76de7d83" -l="udg/vat-checker" -Fetched 1 definitions -Fetched 0 policies -Using publisher: Dashboard Publisher -org override detected, setting. -Creating API 0: vat-validation ---> Status: OK, ID:726e705e6afc432742867e1bd898cb26 -Updating API 0: vat-validation ---> Status: OK, ID:726e705e6afc432742867e1bd898cb26 -org override detected, setting. -Done -``` diff --git a/tyk-docs/content/product-stack/tyk-sync/commands/sync-publish.md b/tyk-docs/content/product-stack/tyk-sync/commands/sync-publish.md deleted file mode 100644 index 91fe459e41..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/commands/sync-publish.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Publish Command -description: "Learn about the usage and flags for tyk-sync publish command" -tags: [ "Tyk Sync", "GitOps" ] ---- - -The tyk-sync `publish` command publishes API definitions, policies and templates from source in a file system or version control system to Tyk Gateway or Dashboard. Unlike the `sync` command, `publish` will not update existing APIs, and if it detects a collision, the operation will stop. It allows you to publish new API configurations to the target Dashboard without deleting or updating existing resources. - -## Usage - -Publish from Git repository: -```bash -tyk-sync publish {-d DASHBOARD_URL | -g GATEWAY_URL} [-s SECRET] [-b BRANCH] [-k SSHKEY] [-o ORG_ID] REPOSITORY_URL -``` - -Publish from file system: -```bash -tyk-sync publish {-d DASHBOARD_URL | -g GATEWAY_URL} [-s SECRET] [-o ORG_ID] -p PATH -``` - -An index `.tyk.json` file is expected in the root directory of the Git repository or specified file path. An example index file is provided in the [example](#examples). - -## Flags -* `-b, --branch BRANCH`: Specify the branch of the GitHub repository to use. Defaults to `refs/heads/master` (optional). -* `-d, --dashboard DASHBOARD_URL`: Specify the fully qualified URL of the Tyk Dashboard where configuration changes should be applied (Either -d or -g is required). -* `-g, --gateway GATEWAY_URL`: Specify the fully qualified URL of the Tyk Gateway where configuration changes should be applied (Either -d or -g is required). -* `-h, --help`: Help for the `publish` command. -* `-k, --key SSHKEY`: Provide the location of the SSH key file for authentication to Git (optional). -* `-p, --path PATH`: Specify the source file directory where API configuration files are located (Required for synchronising from file system). -* `-s, --secret SECRET`: Your API secret for accessing Dashboard or Gateway API (optional). -* `--test`: Use test publisher, output results to stdio. - -## Flags for specifying resources to publish (Optional) -* `--apis IDS`: Specify API IDs to publish. Use this to selectively publish specific APIs. It can be a single ID or an array of string such as "id1,id2". -* `--oas-apis IDS`: Specify OAS API IDs to dump. Use this to selectively dump specific OAS APIs. It can be a single ID or an array of string such as "id1,id2". -* `--policies IDS`: Specify policy IDs to publish. Use this to selectively publish specific policies. It can be a single ID or an array of string such as "id1,id2". -* `--templates IDS`: Specify template IDs to publish. Use this to selectively publish specific API templates. It can be a single ID or an array of string such as "id1,id2". - -## Examples -### Publish an API from local file system - -1. First, prepare a `.tyk.json` file. This file serves as a configuration file for tyk-sync, providing necessary metadata and settings required for the synchronisation process. - -A basic `.tyk.json` file looks like this: - -```json -{ - "type": "apidef", - "files": [ - { - "file": "api-726e705e6afc432742867e1bd898cb23.json" - } - ], - "policies": [ - { - "file": "policy1.json" - } - ], - "assets": [ - { - "file": "asset1.json" - } - ] -} -``` - -2. Then, run the following command to publish only specific API with ID `726e705e6afc432742867e1bd898cb23` to Tyk Dashboard. - -```bash -tyk-sync publish -d http://tyk-dashboard:3000 -s your-secret -p /app/data --apis 726e705e6afc432742867e1bd898cb23 -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/commands/sync-sync.md b/tyk-docs/content/product-stack/tyk-sync/commands/sync-sync.md deleted file mode 100644 index c161709932..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/commands/sync-sync.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Sync Command -description: "Learn about the usage and flags for tyk-sync sync command" -tags: [ "Tyk Sync", "GitOps" ] ---- - -The tyk-sync `sync` command synchronises an API Gateway with the contents of a Git repository or file system. The sync is one-way: from the repository to the gateway, and it will not write back to the repository. This command will delete any objects in the dashboard or gateway that it cannot find in the Git repository or file system, update those that it can find, and create those that are missing. This allows for a streamlined and automated way to manage API configurations declaratively. - -API developers can use this command in the CI/CD pipeline to achieve GitOps for API configurations, managing the API configurations for each Tyk environment in Git. By maintaining an up-to-date index file .tyk.json in their Git repository, developers can ensure that the Tyk Dashboard or Gateway reflects the desired state of their API configurations. - -## Usage - -Synchronise from Git repository: -```bash -tyk-sync sync {-d DASHBOARD_URL | -g GATEWAY_URL} [-s SECRET] [-b BRANCH] [-k SSHKEY] [-o ORG_ID] REPOSITORY_URL -``` - -Synchronise from file system: -```bash -tyk-sync sync {-d DASHBOARD_URL | -g GATEWAY_URL} [-s SECRET] [-o ORG_ID] -p PATH -``` - -An index `.tyk.json` file is expected in the root directory of the Git repository or specified file path. An example index file is provided in the [example](#examples). - -## Flags -* `-b, --branch BRANCH`: Specify the branch of the GitHub repository to use. Defaults to `refs/heads/master` (optional). -* `-d, --dashboard DASHBOARD_URL`: Specify the fully qualified URL of the Tyk Dashboard where configuration changes should be applied (Either -d or -g is required). -* `-g, --gateway GATEWAY_URL`: Specify the fully qualified URL of the Tyk Gateway where configuration changes should be applied (Either -d or -g is required). -* `-h, --help`: Help for the `sync` command. -* `-k, --key SSHKEY`: Provide the location of the SSH key file for authentication to Git (optional). -* `-o, --org ORG_ID`: Override the organization ID to use for the synchronisation process (optional). -* `-p, --path PATH`: Specify the source file directory where API configuration files are located (Required for synchronising from file system). -* `-s, --secret SECRET`: Your API secret for accessing Dashboard or Gateway API (optional). -* `--test`: Use test publisher, output results to stdio. - -### Flags for specifying resources to synchronise (Optional, to be deprecated) -The options `--apis` and `--policies` will be deprecated. If you want to create or update individual IDs, it is recommended to use the `publish` and `update` commands respectively. -* `--apis IDS`: Specify API IDs to synchronise. These APIs will be created or updated during synchronisation. Other resources will be deleted. -* `--policies IDS`: Specify policy IDs to synchronise. These policies will be created or updated during synchronisation. Other resources will be deleted. - -## Examples -### Synchronising API configurations from Git - -```bash -tyk-sync sync -d http://tyk-dashboard:3000 -s your-secret https://github.com/your-repo -``` - -The Git repository must contain a `.tyk.json` file in the root directory. This file serves as a configuration file for tyk-sync, providing necessary metadata and settings required for the synchronisation process. - -A basic `.tyk.json` file looks like this: - -```json -{ - "type": "apidef", - "files": [ - { - "file": "api1/api1.json" - }, - { - "file": "api2/api2.json" - }, - { - "file": "api3.json" - } - ], - "policies": [ - { - "file": "policy1.json" - } - ], - "assets": [ - { - "file": "template1.json" - } - ] -} -``` diff --git a/tyk-docs/content/product-stack/tyk-sync/commands/sync-update.md b/tyk-docs/content/product-stack/tyk-sync/commands/sync-update.md deleted file mode 100644 index 2f75da7965..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/commands/sync-update.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Update Command -description: "Learn about the usage and flags for tyk-sync update command" -tags: [ "Tyk Sync", "GitOps" ] ---- - -The tyk-sync `update` command updates existing API definitions, policies, and templates from source in a file system or Git repository to Tyk Gateway or Dashboard. This command will identify matching APIs or Policies and update them accordingly. It will not create new resources; for creating new ones, use the `publish` or `sync` commands. - -API teams can use this command to make changes to API configurations declaratively and then synchronise the Dashboard or Gateway with the latest configurations, ensuring consistency and version control across their API management infrastructure. - -## Usage - -Update from Git repository: -```bash -tyk-sync update {-d DASHBOARD_URL | -g GATEWAY_URL} [-s SECRET] [-b BRANCH] [-k SSHKEY] [-o ORG_ID] REPOSITORY_URL -``` - -Update from file system: -```bash -tyk-sync update {-d DASHBOARD_URL | -g GATEWAY_URL} [-s SECRET] [-o ORG_ID] -p PATH -``` - -An index `.tyk.json` file is expected in the root directory of the Git repository or specified file path. An example index file is provided in the [example](#examples). - -## Flags -* `-b, --branch BRANCH`: Specify the branch of the GitHub repository to use. Defaults to `refs/heads/master` (optional). -* `-d, --dashboard DASHBOARD_URL`: Specify the fully qualified URL of the Tyk Dashboard where configuration changes should be applied (Either -d or -g is required). -* `-g, --gateway GATEWAY_URL`: Specify the fully qualified URL of the Tyk Gateway where configuration changes should be applied (Either -d or -g is required). -* `-h, --help`: Help for the `update` command. -* `-k, --key SSHKEY`: Provide the location of the SSH key file for authentication to Git (optional). -* `-p, --path PATH`: Specify the source file directory where API configuration files are located (Required for synchronising from file system). -* `-s, --secret SECRET`: Your API secret for accessing Dashboard or Gateway API (optional). -* `--test`: Use test publisher, output results to stdio. - -## Flags for specifying resources to update (Optional) -* `--apis IDS`: Specify API IDs to update. Use this to selectively update specific APIs. It can be a single ID or an array of string such as "id1,id2". -* `--oas-apis IDS`: Specify OAS API IDs to dump. Use this to selectively dump specific OAS APIs. It can be a single ID or an array of string such as "id1,id2". -* `--policies IDS`: Specify policy IDs to update. Use this to selectively update specific policies. It can be a single ID or an array of string such as "id1,id2". -* `--templates IDS`: Specify template IDs to update. Use this to selectively update specific API templates. It can be a single ID or an array of string such as "id1,id2". - -## Examples -### Update API configurations from local file system - -1. First, prepare a `.tyk.json` file. This file serves as a configuration file for tyk-sync, providing necessary metadata and settings required for the synchronisation process. - -A basic `.tyk.json` file looks like this: - -```json -{ - "type": "apidef", - "files": [ - { - "file": "api-726e705e6afc432742867e1bd898cb23.json" - } - ], - "policies": [ - { - "file": "policy1.json" - } - ], - "assets": [ - { - "file": "asset1.json" - } - ] -} -``` - -2. Then, run the following command to update only specific API with ID `726e705e6afc432742867e1bd898cb23` to Tyk Dashboard. - -```bash -tyk-sync update -d http://tyk-dashboard:3000 -s your-secret -p /app/data --apis 726e705e6afc432742867e1bd898cb23 -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/installing-tyk-sync.md b/tyk-docs/content/product-stack/tyk-sync/installing-tyk-sync.md deleted file mode 100644 index 41f94535d3..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/installing-tyk-sync.md +++ /dev/null @@ -1,164 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Installing and running Tyk Sync -description: "Learn about Tyk Sync's prerequisites, installation steps via Docker and Packagecloud, and detailed guides for using Tyk Sync locally or integrating it with Git in a CI/CD pipeline." -tags: [ "Tyk Sync" ] ---- - -### Pre-requisites -- Access to a Git repository or local file system for storing configurations -- Tyk Gateway or Tyk Dashboard - -{{< note success >}} -**Gateway and Dashboard Version** - -
    Tyk Sync manages API definition and require an update whenever the API definition schema has changed in Gateway or Dashboard. Please check the "Compatibility Matrix For Tyk Components" section in [Tyk Gateway]({{}}) and [Dashboard]({{< ref "product-stack/tyk-dashboard/release-notes/overview">}})'s release notes to select the correct version of Tyk Sync. -{{< /note >}} - -{{< note success >}} -**Gateway and Dashboard Configuration** - -
    Tyk Sync tries to be clever about what APIs and Policies to update and which to create, it will actually base all ID matching on the API ID and the masked Policy ID, so it can identify the same object across installations. Tyk has a tendency to generate fresh IDs for all new Objects, so Tyk Sync gets around this by using portable IDs and ensuring the necessary portable IDs are set when using the `dump` command. -
    -
    In order for policy ID matching to work correctly, your Dashboard must have [allow_explicit_policy_id]({{}}) and [enable_duplicate_slugs]({{}}) set to `true` and your Gateway must have [policies.allow_explicit_policy_id]({{}}) set to `true`. -{{< /note >}} - -## 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: - -##### 1. 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. - -##### 2. 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. - -## Command usage - -The following flags can be passed to tyk-sync commands to specify how to connect to the target Tyk installation and where the source API configurations are stored. - -### Check version - -To check the version of Tyk Sync installed, use the `version` command. This command displays the current version of Tyk Sync that is installed on your system. - -```bash -tyk-sync version -``` - -This will output the version information, helping you ensure that you have the correct version installed for your needs. - -### Getting help - -To display usage options please do: -```bash -tyk-sync help -``` - -You can also get help with any commands with `-h` or `--help` flag. -```bash -tyk-sync [command] --help -``` - -### 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] -``` - -### Specifying source API configurations -For the `sync`, `update`, and `publish` commands, you need to specify where Tyk Sync can get the source API configurations to update the target Tyk installation. You can store the source files either in a Git repository or the local file system. - -#### Working with Git -For any Tyk Sync command that requires Git repository access, specify the Git repository as the first argument after the command. By default, Tyk Sync reads from the `master` branch. To specify a different branch, use the `--branch` or `-b` flag. If the Git repository requires connection using Secure Shell Protocol (SSH), you can specify SSH keys with `--key` or `-k` flag. - -```bash -tyk-sync [command] https://github.com/your-repo --branch develop -``` - -#### Working with the local file system -To update API configurations from the local file system, use the `--path` or `-p` flag to specify the source directory for your API configuration files. - -```bash -tyk-sync [command] --path /path/to/local/directory -``` - -#### Index File Requirement -A `.tyk.json` index file is required at the root of the source Git repository or the specified path. This `.tyk.json` file lists all the files that should be processed by Tyk Sync. - -Example `.tyk.json`: -```json -{ - "type": "apidef", - "files": [ - { - "file": "api1/api1.json" - }, - { - "file": "api2/api2.json" - }, - { - "file": "api3.json" - } - ], - "policies": [ - { - "file": "policy1.json" - } - ], - "assets": [ - { - "file": "template1.json" - } - ] -} -``` \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/overview.md b/tyk-docs/content/product-stack/tyk-sync/overview.md deleted file mode 100644 index afaae91c6a..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/overview.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Tyk Sync -description: "An introduction to the purpose and benefits of using Tyk Sync for GitOps in API management. Learn about Tyk Sync's main features, including synchronization of API definitions and policies, support for version control system (VCS) and file system, and backup of objects from Tyk." -aliases: - - /tyk-sync - - /advanced-configuration/manage-multiple-environments/tyk-sync -tags: [ "Tyk Sync", "GitOps" ] ---- - -Tyk Sync is a command line (CLI) tool designed to streamline the implementation of GitOps for API management. It enables users to store API definitions, security policies, and API templates as files in version control system (VCS) or file system and synchronize changes to Tyk, promoting a consistent and automated approach to managing API configurations. - -If you are Kubernetes users, [Tyk Operator]({{}}) is another tool that offer GitOps for API management through Kubernetes-native custom resources. - -## Features -Tyk Sync works with the Open Source *Tyk Gateway* and *Tyk Dashboard* installation. However with Tyk Gateway, Tyk Sync supports managing Classic API definitions only. With Tyk Dashboard, Tyk Sync supports managing Classic and OAS API definitions, security policies, and API templates. - -| Tyk Sync Feature | Tyk Gateway (OSS) | Tyk Dashboard (Licensed) | -| ---------------------------------------------------------------------------|-------------------|--------------------------| -|

    Backup objects from Tyk to a directory

    If you want to backup your API definitions, policies and templates in Tyk, you can use the `dump` command. It allows you to save the objects in transportable files. You can use this command to backup important API configurations before upgrading Tyk, or to save API configurations from one Dashboard instance and then use `update`, `publish`, or `sync` commands to update the API configurations to another Dashboard instance. | ❌ | ✅ | -|

    Synchronise objects from Git (or any VCS) to Tyk

    To implement GitOps for API management, store your API definitions, policies and templates in Git or any version control system. Use the `sync` command to synchronise those objects to Tyk. During this operation, Tyk Sync will delete any objects in the Dashboard or Gateway that cannot be found in the VCS, and update those that can be found and create those that are missing.| Classic API definitions only | ✅ | -|

    Update objects

    The `update` command will read from VCS or file system and will attempt to identify matching API definitions, policies and templates in the target Dashboard or Gateway, and update them. Unmatched objects will not be created.| Classic API definitions only | ✅ | -|

    Publish objects

    The `publish` command will read from VCS or file system and create API definitions, policies, and templates in target Dashboard or Gateway. This will not update any existing objects. If it detects a collision, the command will stop.| Classic API definitions only | ✅ | -|

    Show and import Tyk examples

    The `examples` command allow you to show and import [Tyk examples](https://github.com/TykTechnologies/tyk-examples). An easy way to load up your Tyk installation with some interesting examples!| ✅ | ✅ | - -{{< note success >}} -**Working with OAS APIs** - -From Sync v1.5+ and Dashboard v5.3.2+, Tyk Sync supports both [Tyk OAS APIs]({{< ref "getting-started/key-concepts/high-level-concepts" >}}) and [Tyk Classic APIs]({{< ref "getting-started/key-concepts/what-is-an-api-definition#api-definition-types" >}}) when working with Tyk Dashboard without special flag and configuration. -
    - -If you're using Sync v1.4.1 to v1.4.3, you must set the [allow-unsafe-oas]({{< ref "tyk-dashboard/configuration#allow_unsafe_oas" >}}) configuration in Dashboard, and the flag `--allow-unsafe-oas` when invoking Tyk Sync if you want to use Tyk Sync to migrate Tyk OAS APIs. In Tyk Sync v1.4.1 to 1.4.3, API Category is not supported for Tyk OAS APIs. - -{{< /note >}} diff --git a/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-1.4.md b/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-1.4.md index 81332cfcc6..57ae5ea948 100644 --- a/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-1.4.md +++ b/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-1.4.md @@ -50,7 +50,7 @@ Tyk Sync supports both Tyk OAS APIs and Tyk Classic APIs when working with Tyk D Recommended usage: Tyk Dashboard setting: [allow-unsafe-oas]({{}}) -Tyk Sync: use the [--allow-unsafe-oas]({{}}) when invoking the CLI +Tyk Sync: use the [--allow-unsafe-oas]({{}}) when invoking the CLI ###### API Category is not yet supported API Categories are a new capability with v5.3.0 of Tyk Dashboard. API Categories are currently not supported in Tyk Sync for Tyk OAS APIs. This means that Tyk Sync will not be able to save the category definition set for the Tyk OAS API. Until we update Tyk Sync you would need to manually recreate the categories in the new environment. diff --git a/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-2.0.md b/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-2.0.md new file mode 100644 index 0000000000..b90de6429b --- /dev/null +++ b/tyk-docs/content/product-stack/tyk-sync/release-notes/sync-2.0.md @@ -0,0 +1,94 @@ +--- +title: Tyk Sync 2.0 Release Notes +tag: ["Tyk Sync", "Release notes", "v2.0", "2.0.0", "changelog" ] +description: "Release notes documenting updates, enhancements, fixes and changes for Tyk Sync versions within the 2.0.X series." +--- +**Licensed Protected Product** + +**This page contains all release notes for version 2.0.X displayed in a reverse chronological order** + +## Support Lifetime + +Our minor releases are supported until our next minor comes out. + +--- + +## 2.0.0 Release Notes + +From Tyk Sync v2.0, Tyk Sync will be closed source and we will only support use of Tyk Sync with licensed Tyk Dashboard. + +### Release Date 10 Oct 2024 + +### Release Highlights + +Tyk Sync 2.0 has been updated to support API configurations from Tyk 5.6.0. + +Please refer to the [changelog]({{< ref "#Changelog-v2.0.0">}}) below for detailed explanation. + +### Breaking Changes + +This release has no breaking changes. + +### Deprecations + +#### Deprecation of `--gateway` Flag + +As of Tyk Sync v2.0, support for the **Open Source Tyk Gateway** has been removed. Tyk Sync v2.0 is now compatible exclusively with licensed Tyk Dashboard. This change means that Tyk Sync can no longer be used with the Open Source (OSS) version of the Tyk Gateway. + +The `--gateway` flag, previously used to sync with the OSS Tyk Gateway, is **deprecated** and will be fully **removed in a future release**. Users should prepare to transition their Tyk Sync workflows to licensed Tyk Dashboard environments to ensure continued functionality. + + +#### Future deprecations +As part of our ongoing efforts to streamline and improve Tyk Sync, we plan to deprecate the following options in future releases: + +- `--apis` for the `tyk-sync sync` command. +- `--policies` for the `tyk-sync sync` command. + +We recommend users update their workflows to use the `publish` and `update` commands for managing individual API and Policy IDs. To continue using the `sync` command, ensure all required resources are listed in the `.tyk.json` index file. This file will serve as the source of truth for API configuration states, and Tyk Sync will create or update all specified resources while removing any others from Tyk Dashboard. + +### Upgrade instructions +Go to the [Upgrading Tyk](#upgrading-tyk) section for detailed upgrade Instructions. + +### Downloads +- [Docker image v2.0.0](https://hub.docker.com/r/tykio/tyk-sync/tags?page=&page_size=&ordering=-name&name=v2.0.0) + - ```bash + docker pull tykio/tyk-sync:v2.0.0 + ``` +- [Source code](https://github.com/TykTechnologies/tyk-sync/releases/tag/v2.0.0) + +### Changelog {#Changelog-v2.0.0} + +#### Updated + +
      +
    • +
      +API definitions and policies supported up to Tyk Gateway v5.6.0 + +Tyk Sync 2.0 supports API definitions and policies up to Tyk Gateway v5.6.0. This update ensures that Tyk Sync can manage API definitions and policies compatible with Tyk Gateway v5.6.0. +
      +
    • + +
    • +
      +Deprecated --gateway flag + +As of Tyk Sync v2.0, support for the **Open Source Tyk Gateway** has been removed. Tyk Sync v2.0 is now compatible exclusively with licensed Tyk Dashboard. This change means that Tyk Sync can no longer be used with the Open Source (OSS) version of the Tyk Gateway. + +The `--gateway` flag, previously used to sync with the OSS Tyk Gateway, is **deprecated** and will be fully **removed in a future release**. Users should prepare to transition their Tyk Sync workflows to licensed Tyk Dashboard environments to ensure continued functionality. +
      +
    • +
    + +## Further Information + +### Upgrading Tyk +Please refer to the [upgrading Tyk]({{< ref "upgrading-tyk" >}}) page for further guidance with respect to the upgrade strategy. + +### FAQ +Please visit our [Developer Support]({{< ref "frequently-asked-questions/faq" >}}) page for further information relating to reporting bugs, upgrading Tyk, technical support and how to contribute. + +## Earlier Versions Release Notes +Release Notes for Tyk Sync v1.4.1 and earlier can we found in [Tyk Sync GitHub](https://github.com/TykTechnologies/tyk-sync/releases) \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations.md b/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations.md deleted file mode 100644 index ef8bf30a5e..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Backing up API configurations with GitHub Actions -description: "Learn about how API platform teams can automate the backup of API configurations using GitHub Actions. By setting up a scheduled GitHub Action, the tutorial explains how to periodically dump API configurations and store backups in cloud storage, such as AWS S3." -tags: [ "Tyk Sync" ] ---- - -This tutorial guides API platform teams on automating the backup of API configurations using GitHub Actions. By setting up a scheduled GitHub Action, the tutorial explains how to periodically dump API configurations and store backups in cloud storage, such as AWS S3. The expected outcome is a regularly updated backup of all API configurations, ensuring data safety and easy restoration. - -### Step 1: Create a GitHub Action workflow - -1. In your repository, create a new file `.github/workflows/tyk-backup.yml`. -2. Add the following content to the `tyk-backup.yml` file: - -```yaml -name: Tyk Backup - -on: - schedule: - - cron: '0 0 * * *' # Runs every day at midnight - -jobs: - backup: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Create Backup Directory - run: | - BACKUP_DIR="backup/$(date +%Y-%m-%d)" - mkdir -p $BACKUP_DIR - echo "BACKUP_DIR=$BACKUP_DIR" >> $GITHUB_ENV - - - name: Set Permissions for Backup Directory - run: | - sudo chown -R 1001:1001 ${{ github.workspace }}/backup - - - name: Dump API Configurations - run: | - docker run --user 1001:1001 -v ${{ github.workspace }}:/app/data tykio/tyk-sync:${TYK_SYNC_VERSION} dump --target /app/data/${{ env.BACKUP_DIR }} --dashboard ${TYK_DASHBOARD_URL} --secret ${TYK_DASHBOARD_SECRET} - env: - TYK_SYNC_VERSION: ${{ vars.TYK_SYNC_VERSION }} - TYK_DASHBOARD_URL: ${{ secrets.TYK_DASHBOARD_URL }} - TYK_DASHBOARD_SECRET: ${{ secrets.TYK_DASHBOARD_SECRET }} - - - name: Upload to S3 - uses: jakejarvis/s3-sync-action@v0.5.1 - with: - args: --acl private --follow-symlinks --delete - env: - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_REGION: 'us-east-1' # Change to your region - SOURCE_DIR: ${{ env.BACKUP_DIR }} -``` - -### Step 2: Set up secrets - -1. Go to your GitHub repository. -2. Navigate to Settings > Secrets and variables > Actions. -3. Add the following variable: - - `TYK_SYNC_VERSION`: The version of Tyk Sync you want to use. -4. Add the following secrets: - - `TYK_DASHBOARD_URL`: The URL of your Tyk Dashboard. - - `TYK_DASHBOARD_SECRET`: The secret key for your Tyk Dashboard. - - `AWS_S3_BUCKET`: The name of your AWS S3 bucket. - - `AWS_ACCESS_KEY_ID`: Your AWS access key ID. - - `AWS_SECRET_ACCESS_KEY`: Your AWS secret access key. - -### Step 3: Commit and push changes - -Commit the `tyk-backup.yml` file and push it to the main branch of your repository. - -### Step 4: Verify backups - -The GitHub Action will run every day at midnight, dumping API configurations into a backup directory and uploading them to your specified S3 bucket. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations.md b/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations.md deleted file mode 100644 index 60942f1131..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Synchronising API configurations with GitHub Actions -description: "Learn about how API platform teams can automate the synchronisation of API configurations, policies, and templates from a Git repository to a Tyk installation using GitHub Actions. Triggered by changes in the repository, the GitHub Action generates a `.tyk.json` file and uses the `sync` command to apply updates." -tags: [ "Tyk Sync" ] ---- - -This tutorial demonstrates how API platform teams can automate the synchronisation of API configurations, policies, and templates from a Git repository to a Tyk installation using GitHub Actions. Triggered by changes in the repository, the GitHub Action generates a `.tyk.json` file and uses the `sync` command to apply updates. The expected outcome is an automated, continuous integration process that keeps the Tyk setup in sync with the repository. - -### Step 1: Setup GitHub repository -Organize your repository with the following structure: - -- `/apis/` for API definition files. -- `/policies/` for security policy files. -- `/assets/` for API template files. - -### Step 2: Create a GitHub Action workflow - -1. In your repository, create a new file `.github/workflows/tyk-sync.yml`. -2. Add the following content to the `tyk-sync.yml` file: - -```yaml -name: Tyk Sync - -on: - push: - branches: - - main - -jobs: - sync: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Create .tyk.json - run: | - echo '{' > .tyk.json - echo ' "type": "apidef",' >> .tyk.json - echo ' "files": [' >> .tyk.json - find . -type f -name '*.json' -path './apis/*' -exec echo ' {"file": "{}"},' \; | sed '$ s/,$//' >> .tyk.json - echo ' ],' >> .tyk.json - echo ' "policies": [' >> .tyk.json - find . -type f -name '*.json' -path './policies/*' -exec echo ' {"file": "{}"},' \; | sed '$ s/,$//' >> .tyk.json - echo ' ],' >> .tyk.json - echo ' "assets": [' >> .tyk.json - find . -type f -name '*.json' -path './assets/*' -exec echo ' {"file": "{}"},' \; | sed '$ s/,$//' >> .tyk.json - echo ' ]' >> .tyk.json - echo '}' >> .tyk.json - cat .tyk.json - - - name: Sync with Tyk - run: | - docker run tykio/tyk-sync:${TYK_SYNC_VERSION} version - docker run -v ${{ github.workspace }}:/app/data tykio/tyk-sync:${TYK_SYNC_VERSION} sync --path /app/data --dashboard ${TYK_DASHBOARD_URL} --secret ${TYK_DASHBOARD_SECRET} - env: - TYK_SYNC_VERSION: ${{ vars.TYK_SYNC_VERSION }} - TYK_DASHBOARD_URL: ${{ secrets.TYK_DASHBOARD_URL }} - TYK_DASHBOARD_SECRET: ${{ secrets.TYK_DASHBOARD_SECRET }} -``` - -### Step 3: Set up secrets - -1. Go to your GitHub repository. -2. Navigate to Settings > Secrets and variables > Actions. -3. Add the following variable: - - `TYK_SYNC_VERSION`: The version of Tyk Sync you want to use (e.g., v1.5.0). -4. Add the following secrets: - - `TYK_DASHBOARD_URL`: The URL of your Tyk Dashboard. - - `TYK_DASHBOARD_SECRET`: The secret key for your Tyk Dashboard. - -### Step 4: Commit and push changes - -Commit the `tyk-sync.yml` file and push it to the main branch of your repository. - -### Step 5: Verify synchronisation - -Each time there is a change in the repository, the GitHub Action will be triggered. It will create the `.tyk.json` file including all JSON files in the repository and use the `sync` command to update the Tyk installation. \ No newline at end of file diff --git a/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations.md b/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations.md deleted file mode 100644 index 93e7fdd204..0000000000 --- a/tyk-docs/content/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -date: 2017-03-23T13:19:38Z -title: Keeping and updating API Definitions locally -description: "Learn about how API developers who prefer to manage their API definitions on their local file system during development can use the `publish` or `update` commands of Tyk Sync to upload local API configurations to the Tyk Dashboard." -tags: [ "Tyk Sync" ] ---- - -This tutorial is aimed at API developers who prefer to manage their API definitions on their local file system during development. It explains how to use the `publish` or `update` commands of Tyk Sync to upload local API Definitions to the Tyk Dashboard. The expected outcome is a streamlined process for maintaining and updating API definitions locally and ensuring they are reflected in the Tyk Dashboard. - -### Step 1. Prepare your API Definition - -Create your API definition file and save it locally. For example, save it as *api1.json* in a directory structure of your choice. - -### Step 2: Create a .tyk.json index file - -In the root directory of your API definitions, create a `.tyk.json` file to list all API definition files that Tyk Sync should process. - -Example `.tyk.json`: -```json -{ - "type": "apidef", - "files": [ - { - "file": "api1.json" - } - ] -} -``` - -### Step 3: Install Tyk Sync via Docker - -If you haven't installed Tyk Sync, you can do so via Docker: - -```bash -docker pull tykio/tyk-sync:v1.5.0 -``` - -### Step 4: Publish API Definitions to Tyk - -Use the `publish` command to upload your local API definitions to Tyk. Use Docker bind mounts to access your local files. - -```bash -docker run -v /path/to/your/directory:/app/data tykio/tyk-sync:v1.5.0 publish \ - --path /app/data \ - --dashboard [DASHBOARD_URL] \ - --secret [SECRET] -``` - -### Step 5: Update API Definitions to Tyk - -Similarly, to update existing API definitions, use the update command. - -```bash -docker run -v /path/to/your/directory:/app/data tykio/tyk-sync:v1.5.0 update \ - --path /app/data \ - --dashboard [DASHBOARD_URL] \ - --secret [SECRET] -``` - -### Step 6: Verify the update - -Log in to your Tyk Dashboard to verify that the API definitions have been published or updated successfully. \ No newline at end of file diff --git a/tyk-docs/content/security/certificate-pinning.md b/tyk-docs/content/security/certificate-pinning.md index ce2789695e..7e8c115ba5 100644 --- a/tyk-docs/content/security/certificate-pinning.md +++ b/tyk-docs/content/security/certificate-pinning.md @@ -64,7 +64,7 @@ You can define certificate public key pinning from the **Advanced** tab of the A 1. From the **Add upstream certificates** options add the domain details and then add a new certificate ID or the server path to a certificate, or select from any certificates you have added previously. 2. Click **Add** -## Define via Tyk Operator +## Define via Tyk Operator (Tyk Classic){#tyk-operator-classic} Tyk Operator supports configuring certificate pinning using one of the following fields within the ApiDefinition object: @@ -150,3 +150,71 @@ spec: name: Default ``` +## Define via Tyk Operator (Tyk OAS){#tyk-operator-oas} + +Tyk Operator supports certificate pinning in Tyk OAS custom resource, allowing you to secure your API by pinning a public key stored in a secret to a specific domain. + +Example of public keys pinning + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: cm + namespace: default +data: + test_oas.json: |- + { + "info": { + "title": "httpbin with certificate pinning", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "components": {}, + "paths": {}, + "x-tyk-api-gateway": { + "info": { + "name": "httpbin with certificate pinning", + "state": { + "active": true + } + }, + "upstream": { + "url": "https://httpbin.org/" + }, + "server": { + "listenPath": { + "value": "/httpbin/", + "strip": true + } + } + } + } +--- +apiVersion: v1 +kind: Secret +metadata: + name: domain-secret +type: kubernetes.io/tls # The secret needs to be a type of kubernetes.io/tls +data: + tls.crt: + tls.key: "" +--- +apiVersion: tyk.tyk.io/v1alpha1 +kind: TykOasApiDefinition +metadata: + name: "oas-pinned-public-keys" +spec: + tykOAS: + configmapRef: + keyName: test_oas.json + name: cm + certificatePinning: + enabled: true + domainToPublicKeysMapping: + - domain: "httpbin.org" + publicKeyRefs: + - domain-secret +``` + +This example demonstrates how to enable certificate pinning for the domain `httpbin.org` using a public key stored in a Kubernetes secret (`domain-secret`). \ No newline at end of file diff --git a/tyk-docs/content/shared/api-def-authentication.md b/tyk-docs/content/shared/api-def-authentication.md index d722e2b451..3eb6794a84 100644 --- a/tyk-docs/content/shared/api-def-authentication.md +++ b/tyk-docs/content/shared/api-def-authentication.md @@ -11,7 +11,7 @@ However Tyk supports many more methods, and these can be set by enabling these f This method has no additional metadata settings. - `use_basic_auth`: This method will enable basic auth as specified by the HTTP spec, an API with this flag set will request for a username and password and require a standard base64 Authentication header to be let through. - Keys cannot be generated by Tyk for this method and need to use the `/tyk/keys/add` method with the `basic_auth_data` metadata set in the keys session configuration (see [Basic Authentication]({{< ref "basic-config-and-security/security/authentication-authorization/basic-auth" >}}) and the overview of the Session Object in this use case in the Key Management section of the [Tyk Gateway API](https://tyk.io/docs/tyk-gateway-api/)). + Keys cannot be generated by Tyk for this method and need to use the `/tyk/keys/add` method with the `basic_auth_data` metadata set in the keys session configuration (see [Basic Authentication]({{< ref "/api-management/authentication-authorization#use-basic-authentication" >}}) and the overview of the Session Object in this use case in the Key Management section of the [Tyk Gateway API](https://tyk.io/docs/tyk-gateway-api/)). - `enable_signature_checking`: a.k.a HMAC signing. If this option is set to `true`, Tyk will attempt to implement the HMAC signing standard as proposed in the [HTTP Signatures Spec](https://web-payments.org/specs/ED/http-signatures/2014-02-01/#page-3). In particular the structure of the Authorization header and the encoding method need to be taken into account. This method will use a session key to identify a user and a user secret that should be used by the client to sign each request's `date` header. @@ -24,7 +24,7 @@ However Tyk supports many more methods, and these can be set by enabling these f - `use_oauth2`: Tyk attempts to implement a semi-seamless OAuth2 flow. Given the nature of OAuth2's three-party system, it is difficult to implement as a proxy without significantly compromising security or usability. Enabling this option will cause Tyk to add OAuth2-standard endpoints to the API for `/authorize` and `/token`, these will supersede any other requests to your proxied system in order to enable the flow. - Please see the [OAuth2 Flow]({{< ref "basic-config-and-security/security/authentication-authorization/oauth-2-0" >}}) section for a comprehensive discussion of how to integrate with Tyk. + Please see the [OAuth2 Flow]({{< ref "/api-management/authentication-authorization#set-up-oauth-20-authorization" >}}) section for a comprehensive discussion of how to integrate with Tyk. - `oauth_meta.allowed_access_types`: Should be a string array of OAuth access options, types can be: - `authorization_code` - client has an authorization code to request a new access token. diff --git a/tyk-docs/content/shared/api-def-common.md b/tyk-docs/content/shared/api-def-common.md index f192b66e5a..463b285cba 100644 --- a/tyk-docs/content/shared/api-def-common.md +++ b/tyk-docs/content/shared/api-def-common.md @@ -39,4 +39,4 @@ Your Tyk Gateway can listen on multiple domains/subdomains through the use of re * `getUser` * `GetUser` -If set to true, this will override ignoring the case for a particular endpoint with the [Ignore]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#ignore" >}}), [Blocklist]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#blocklist" >}}) and [Allowlist]({{< ref "advanced-configuration/transform-traffic/endpoint-designer#allowlist" >}}) plugins. This setting can be overriden at a "global" Tyk level by setting `ignore_endpoint_case` to `true` in your `tyk.conf` file. See [ignore_endpoint_case]({{< ref "tyk-oss-gateway/configuration#ignore_endpoint_case" >}}) for details. +If set to true, this will override ignoring the case for a particular endpoint with the [Ignore]({{< ref "product-stack/tyk-gateway/middleware/ignore-tyk-oas#configuring-the-middleware-in-the-api-designer" >}}) and [Allowlist]({{< ref "product-stack/tyk-gateway/middleware/allow-list-tyk-oas#configuring-the-allow-list-in-the-api-designer" >}}) plugins. This setting can be overriden at a "global" Tyk level by setting `ignore_endpoint_case` to `true` in your `tyk.conf` file. See [ignore_endpoint_case]({{< ref "tyk-oss-gateway/configuration#ignore_endpoint_case" >}}) for details. diff --git a/tyk-docs/content/shared/api-def-version.md b/tyk-docs/content/shared/api-def-version.md index dfe907ba17..a2eb342a68 100644 --- a/tyk-docs/content/shared/api-def-version.md +++ b/tyk-docs/content/shared/api-def-version.md @@ -74,7 +74,7 @@ Tyk will look in the First part of the URL Path for the version information. For } ``` -Each version of your API should be defined here with a unique name. This name is what will be matched by `definition.key`. Once Tyk has identified the API to load, and has allowed the access key through, it will check the access token's session data for access permissions. If it finds none, it will let the token through. However, if there are permissions and versions defined, it will be strict in **only** allowing access to that version. For more information about handling access control, see the [Security - Authentication and Authorization]({{< ref "basic-config-and-security/security/authentication-&-authorization" >}}) section. +Each version of your API should be defined here with a unique name. This name is what will be matched by `definition.key`. Once Tyk has identified the API to load, and has allowed the access key through, it will check the access token's session data for access permissions. If it finds none, it will let the token through. However, if there are permissions and versions defined, it will be strict in **only** allowing access to that version. For more information about handling access control, see the [Security - Authentication and Authorization]({{< ref "/api-management/authentication-authorization" >}}) section. * `version_data.{version-name}.expires`: The expires header, if set, will deprecate access to the API after the time specified. The entry here takes the form of: `"YYYY-MM-DD HH:MM"`. If this is not set the version will never expire. * `version_data.{version-name}.override_target`: Setting this value will override the target of the API for this version, overriding the target will invalidate (and is not compatible with) Round Robin Load balancing and Service Discovery. diff --git a/tyk-docs/content/shared/create-api-include.md b/tyk-docs/content/shared/create-api-include.md index 9d3d62a99a..4ab2e0dbd2 100644 --- a/tyk-docs/content/shared/create-api-include.md +++ b/tyk-docs/content/shared/create-api-include.md @@ -9,7 +9,7 @@ In Tyk v4.1 we introduced support for APIs defined according to the [OpenAPI Specification v3.0.3](https://spec.openapis.org/oas/v3.0.3) (OAS). This introduces a standard way to describe the vendor-agnostic elements of an API (the OpenAPI Definition, stored as an OpenAPI Document); we take this and add Tyk-specific configuration options to create the *Tyk OAS API Definition*. You can import your own OpenAPI document and Tyk will use this to generate the Tyk OAS API Definition. -For a detailed tutorial on using OAS with Tyk Gateway, check out our guide to [creating a Tyk OAS API Definition]({{< ref "getting-started/using-oas-definitions/create-an-oas-api#tutorial-create-an-oas-api-with-the-tyk-gateway-api" >}}). +For a detailed tutorial on using OAS with Tyk Gateway, check out our guide to [creating a Tyk OAS API Definition]({{< ref "getting-started/using-oas-definitions/create-an-oas-api#tutorial-1-create-a-tyk-oas-api-using-the-tyk-gateway-api" >}}). {{< /note >}} @@ -55,12 +55,12 @@ Take a look at the **Authentication** section: You have the following options: -- **Authentication mode**: This is the method that Tyk should use to authenticate requests to call your API. Tyk supports several different authentication modes - see [Authentication and Authorization]({{< ref "basic-config-and-security/security/authentication-&-authorization" >}}) for more details on securing your API. For this tutorial, you should select `Open (Keyless)`. +- **Authentication mode**: This is the method that Tyk should use to authenticate requests to call your API. Tyk supports several different authentication modes - see [Authentication and Authorization]({{< ref "/api-management/authentication-authorization" >}}) for more details on securing your API. For this tutorial, you should select `Open (Keyless)`. - **Strip Authorization Data**: Select this option to ensure that any security (authentication) tokens provided to authorize requests to your API on Tyk are not leaked to the upstream. You can leave this unchecked for this tutorial. - **Auth Key Header Name**: The header parameter that will hold the authentication token (or key) for requests to this API; the default for this is `Authorization`. - **Allow query parameter as well as header**: This option allows the authentication token to be set in the query parameter, not just in the Request Header. For this tutorial, leave this unchecked. - **Use Cookie Value**: Tyk also supports the use of a cookie value as an alternative authentication token location. For this tutorial, leave this unchecked. -- **Enable client certificate**: Tyk supports the use of Mutual TLS to authenticate requests to your API; you would use this checkbox to enable this mode. See [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}) for details on implementing this feature. For this tutorial, leave this unchecked. +- **Enable client certificate**: Tyk supports the use of Mutual TLS to authenticate requests to your API; you would use this checkbox to enable this mode. See [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) for details on implementing this feature. For this tutorial, leave this unchecked. ### Step 5: Save the API diff --git a/tyk-docs/content/shared/create-portal-entry-include.md b/tyk-docs/content/shared/create-portal-entry-include.md index 3b9b202982..8884e7509e 100644 --- a/tyk-docs/content/shared/create-portal-entry-include.md +++ b/tyk-docs/content/shared/create-portal-entry-include.md @@ -97,4 +97,4 @@ To save the API, click **SAVE**. You can now visit your portal to see the API catalog entry. Select **Open Your Portal** from the **Your Developer Portal** menu: -{{< img src="/img/2.10/portal_menu.png" alt="Portal nav menu location" >}} +{{< img src="/img/getting-started/portal_menu.png" alt="Portal nav menu location" >}} diff --git a/tyk-docs/content/shared/dashboard-config.md b/tyk-docs/content/shared/dashboard-config.md index 96d20900fe..5412601f74 100644 --- a/tyk-docs/content/shared/dashboard-config.md +++ b/tyk-docs/content/shared/dashboard-config.md @@ -594,7 +594,7 @@ To have the Dashboard report Javascript errors to you, add a separate DSN here. ENV: TYK_DB_ENABLEMASTERKEYS
    Type: `bool`
    -If this is set to true, session objects (key definitions) that do not have explicit access rights set will be allowed by Tyk. This means that keys that are created have access to ALL APIs, which in many cases is unwanted behaviour unless you are sure about what you are doing. To use this setting also requires the corresponding Gateway configuration setting `allow_master_keys` to be set to `true`. +If this is set to true, session objects (key definitions) that do not have explicit access rights set will be allowed by Tyk. This means that keys that are created have access to ALL APIs, which in many cases is unwanted behavior unless you are sure about what you are doing. To use this setting also requires the corresponding Gateway configuration setting `allow_master_keys` to be set to `true`. ### enable_duplicate_slugs ENV: TYK_DB_ENABLEDUPLICATESLUGS
    diff --git a/tyk-docs/content/shared/gateway-config.md b/tyk-docs/content/shared/gateway-config.md index 6b485c2438..b96f338338 100644 --- a/tyk-docs/content/shared/gateway-config.md +++ b/tyk-docs/content/shared/gateway-config.md @@ -91,7 +91,10 @@ Specify public keys used for Certificate Pinning on global level. ENV: TYK_GW_SECURITY_CERTIFICATES_UPSTREAM
    Type: `map[string]string`
    -Specify upstream mutual TLS certificates at a global level in the following format: `{ "": "" }`` +Upstream is used to specify the certificates to be used in mutual TLS connections to upstream services. These are set at gateway level as a map of domain -> certificate id or path. +For example if you want Tyk to use the certificate `ab23ef123` for requests to the `example.com` upstream and `/certs/default.pem` for all other upstreams then: +In `tyk.conf` you would configure `"security": {"certificates": {"upstream": {"*": "/certs/default.pem", "example.com": "ab23ef123"}}}` +And if using environment variables you would set this to `*:/certs/default.pem,example.com:ab23ef123`. ### security.certificates.control_api ENV: TYK_GW_SECURITY_CERTIFICATES_CONTROLAPI
    @@ -153,50 +156,46 @@ Regular expressions and parameterized routes will be left alone regardless of th ENV: TYK_GW_HTTPSERVEROPTIONS_ENABLEPATHPREFIXMATCHING
    Type: `bool`
    -EnablePathPrefixMatching changes the URL matching from wildcard mode to prefix mode. -For example, `/json` matches `*/json*` by current default behaviour. -If prefix matching is enabled, the match will be performed as a prefix match (`/json*`). +EnablePathPrefixMatching changes how the gateway matches incoming URL paths against routes (patterns) defined in the API definition. +By default, the gateway uses wildcard matching. When EnablePathPrefixMatching is enabled, it switches to prefix matching. For example, a defined path such as `/json` will only match request URLs that begin with `/json`, rather than matching any URL containing `/json`. -The `/json` url would be matched as `^/json` against the following paths: +The gateway checks the request URL against several variations depending on whether path versioning is enabled: +- Full path (listen path + version + endpoint): `/listen-path/v4/json` +- Non-versioned full path (listen path + endpoint): `/listen-path/json` +- Path without version (endpoint only): `/json` -- Full listen path and versioning URL (`/listen-path/v4/json`) -- Stripped listen path URL (`/v4/json`) -- Stripped version information (`/json`) - match. +For patterns that start with `/`, the gateway prepends `^` before performing the check, ensuring a true prefix match. +For patterns that start with `^`, the gateway will already perform prefix matching so EnablePathPrefixMatching will have no impact. +This option allows for more specific and controlled routing of API requests, potentially reducing unintended matches. Note that you may need to adjust existing route definitions when enabling this option. -If versioning is disabled then the following URLs are considered: - -- Full listen path and endpoint (`/listen-path/json`) -- Stripped listen path (`/json`) - match. - -For inputs that start with `/`, a prefix match is ensured by -prepending the start of string `^` caret. +Example: -For all other cases, the pattern remains unmodified. +With wildcard matching, `/json` might match `/api/v1/data/json`. +With prefix matching, `/json` would not match `/api/v1/data/json`, but would match `/json/data`. -Combine this option with `enable_path_suffix_matching` to achieve -exact url matching with `/json` being evaluated as `^/json$`. +Combining EnablePathPrefixMatching with EnablePathSuffixMatching will result in exact URL matching, with `/json` being evaluated as `^/json$`. ### http_server_options.enable_path_suffix_matching ENV: TYK_GW_HTTPSERVEROPTIONS_ENABLEPATHSUFFIXMATCHING
    Type: `bool`
    -EnablePathSuffixMatching changes the URL matching to match as a suffix. -For example: `/json` is matched as `/json$` against the following paths: +EnablePathSuffixMatching changes how the gateway matches incoming URL paths against routes (patterns) defined in the API definition. +By default, the gateway uses wildcard matching. When EnablePathSuffixMatching is enabled, it switches to suffix matching. For example, a defined path such as `/json` will only match request URLs that end with `/json`, rather than matching any URL containing `/json`. -- Full listen path and versioning URL (`/listen-path/v4/json`) -- Stripped listen path URL (`/v4/json`) -- Stripped version information (`/json`) - match. +The gateway checks the request URL against several variations depending on whether path versioning is enabled: +- Full path (listen path + version + endpoint): `/listen-path/v4/json` +- Non-versioned full path (listen path + endpoint): `/listen-path/json` +- Path without version (endpoint only): `/json` -If versioning is disabled then the following URLs are considered: +For patterns that already end with `$`, the gateway will already perform suffix matching so EnablePathSuffixMatching will have no impact. For all other patterns, the gateway appends `$` before performing the check, ensuring a true suffix match. +This option allows for more specific and controlled routing of API requests, potentially reducing unintended matches. Note that you may need to adjust existing route definitions when enabling this option. -- Full listen path and endpoint (`/listen-path/json`) -- Stripped listen path (`/json`) - match. +Example: -If the input pattern already ends with a `$` (`/json$`) -then the pattern remains unmodified. +With wildcard matching, `/json` might match `/api/v1/json/data`. +With suffix matching, `/json` would not match `/api/v1/json/data`, but would match `/api/v1/json`. -Combine this option with `enable_path_prefix_matching` to achieve -exact url matching with `/json` being evaluated as `^/json$`. +Combining EnablePathSuffixMatching with EnablePathPrefixMatching will result in exact URL matching, with `/json` being evaluated as `^/json$`. ### http_server_options.ssl_insecure_skip_verify ENV: TYK_GW_HTTPSERVEROPTIONS_SSLINSECURESKIPVERIFY
    @@ -601,7 +600,7 @@ Type: `bool`
    Disable the capability of the Gateway to `autodiscover` the Dashboard through heartbeat messages via Redis. The goal of zeroconf is auto-discovery, so you do not have to specify the Tyk Dashboard address in your Gateway`tyk.conf` file. -In some specific cases, for example, when the Dashboard is bound to a public domain, not accessible inside an internal network, or similar, `disable_dashboard_zeroconf` can be set to `true`, in favour of directly specifying a Tyk Dashboard address. +In some specific cases, for example, when the Dashboard is bound to a public domain, not accessible inside an internal network, or similar, `disable_dashboard_zeroconf` can be set to `true`, in favor of directly specifying a Tyk Dashboard address. ### slave_options The `slave_options` allow you to configure the RPC slave connection required for MDCB installations. @@ -636,7 +635,7 @@ Use this setting to add the URL for your MDCB or load balancer host. ENV: TYK_GW_SLAVEOPTIONS_RPCKEY
    Type: `string`
    -Your organisation ID to connect to the MDCB installation. +Your organization ID to connect to the MDCB installation. ### slave_options.api_key ENV: TYK_GW_SLAVEOPTIONS_APIKEY
    @@ -668,8 +667,8 @@ Set this option to `true` if you don’t want to monitor changes in the keys fro ENV: TYK_GW_SLAVEOPTIONS_GROUPID
    Type: `string`
    -This is the `zone` that this instance inhabits, e.g. the cluster/data-centre the Gateway lives in. -The group ID must be the same across all the Gateways of a data-centre/cluster which are also sharing the same Redis instance. +This is the `zone` that this instance inhabits, e.g. the cluster/data-center the Gateway lives in. +The group ID must be the same across all the Gateways of a data-center/cluster which are also sharing the same Redis instance. This ID should also be unique per cluster (otherwise another Gateway cluster can pick up your keyspace events and your cluster will get zero updates). ### slave_options.call_timeout @@ -789,26 +788,26 @@ Controls which algorthm to use as a fallback when your distributed rate limiter ENV: TYK_GW_ENFORCEORGDATAAGE
    Type: `bool`
    -Allows you to dynamically configure analytics expiration on a per organisation level +Allows you to dynamically configure analytics expiration on a per organization level ### enforce_org_data_detail_logging ENV: TYK_GW_ENFORCEORGDATADETAILLOGGING
    Type: `bool`
    -Allows you to dynamically configure detailed logging on a per organisation level +Allows you to dynamically configure detailed logging on a per organization level ### enforce_org_quotas ENV: TYK_GW_ENFORCEORGQUOTAS
    Type: `bool`
    -Allows you to dynamically configure organisation quotas on a per organisation level +Allows you to dynamically configure organization quotas on a per organization level ### monitor -The monitor section is useful if you wish to enforce a global trigger limit on organisation and user quotas. +The monitor section is useful if you wish to enforce a global trigger limit on organization and user quotas. This feature will trigger a webhook event to fire when specific triggers are reached. -Triggers can be global (set in the node), by organisation (set in the organisation session object) or by key (set in the key session object) +Triggers can be global (set in the node), by organization (set in the organization session object) or by key (set in the key session object) -While Organisation-level and Key-level triggers can be tiered (e.g. trigger at 10%, trigger at 20%, trigger at 80%), in the node-level configuration only a global value can be set. +While Organization-level and Key-level triggers can be tiered (e.g. trigger at 10%, trigger at 20%, trigger at 80%), in the node-level configuration only a global value can be set. If a global value and specific trigger level are the same the trigger will only fire once: ``` @@ -881,7 +880,7 @@ Apply the monitoring subsystem to user keys. ENV: TYK_GW_MONITOR_MONITORORGKEYS
    Type: `bool`
    -Apply the monitoring subsystem to organisation keys. +Apply the monitoring subsystem to organization keys. ### max_idle_connections ENV: TYK_GW_MAXIDLECONNS
    @@ -919,7 +918,7 @@ Type: `bool`
    If AllowMasterKeys is set to true, session objects (key definitions) that do not have explicit access rights set will be allowed by Tyk. This means that keys that are created have access to ALL APIs, which in many cases is -unwanted behaviour unless you are sure about what you are doing. +unwanted behavior unless you are sure about what you are doing. ### service_discovery.default_cache_timeout ENV: TYK_GW_SERVICEDISCOVERY_DEFAULTCACHETIMEOUT
    @@ -1118,7 +1117,7 @@ Type: `bool`
    Set this value to `true` to have Tyk store the inbound request and outbound response data in HTTP Wire format as part of the Analytics data. Please note, this will greatly increase your analytics DB size and can cause performance degradation on analytics processing by the Dashboard. -This setting can be overridden with an organisation flag, enabed at an API level, or on individual Key level. +This setting can be overridden with an organization flag, enabed at an API level, or on individual Key level. ### analytics_config.enable_geo_ip ENV: TYK_GW_ANALYTICSCONFIG_ENABLEGEOIP
    @@ -1657,6 +1656,13 @@ Type: `string`
    You can now set a logging level (log_level). The following levels can be set: debug, info, warn, error. If not set or left empty, it will default to `info`. +### log_format +ENV: TYK_GW_LOGFORMAT
    +Type: `string`
    + +You can now configure the log format to be either the standard or json format +If not set or left empty, it will default to `standard`. + ### tracing Section for configuring OpenTracing support Deprecated: use OpenTelemetry instead. diff --git a/tyk-docs/content/shared/mdcb-config.md b/tyk-docs/content/shared/mdcb-config.md index 01fc4fd952..074fcb4d74 100644 --- a/tyk-docs/content/shared/mdcb-config.md +++ b/tyk-docs/content/shared/mdcb-config.md @@ -126,7 +126,7 @@ SSL certificates used by your MDCB server. A list of certificate IDs or path to ENV: TYK_MDCB_SECURITY_PRIVATECERTIFICATEENCODINGSECRET
    Type: `string`
    -Allows MDCB to use Mutual TLS. This requires to set `server_options.use_ssl` to true. See [Mutual TLS]({{< ref "basic-config-and-security/security/mutual-tls" >}}) for more details. +Allows MDCB to use Mutual TLS. This requires to set `server_options.use_ssl` to true. See [Mutual TLS]({{< ref "/api-management/authentication-authorization#enable-mutual-tls" >}}) for more details. ### security.enable_http_secure_endpoints ENV: TYK_MDCB_SECURITY_ENABLEHTTPSECUREENDPOINTS
    @@ -719,7 +719,7 @@ Specifies the group key TTL in seconds. This key is used to prevent a group of g ENV: TYK_MDCB_ENABLEOWNERSHIP
    Type: `bool`
    -Enables [API Ownership]({{< ref "tyk-dashboard/rbac#enabling-api-ownership" >}}) in MDCB. It allows the gateways in the data plane cluster to load only APIs that are accessible by the user and user group associated with the `slave_options.api_key` that is used to connect to MDCB (defined in `tyk.config` of the gateway). +Enables [API Ownership]({{< ref "product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership" >}}) in MDCB. It allows the gateways in the data plane cluster to load only APIs that are accessible by the user and user group associated with the `slave_options.api_key` that is used to connect to MDCB (defined in `tyk.config` of the gateway). This will be enforced if `enable_ownership` is also enabled in the Dashboard and your API definition has been associated with a user or user_group Defaults to `false`. diff --git a/tyk-docs/content/shared/oss-product-list-include.md b/tyk-docs/content/shared/oss-product-list-include.md index a30a91e379..26ddb4d329 100644 --- a/tyk-docs/content/shared/oss-product-list-include.md +++ b/tyk-docs/content/shared/oss-product-list-include.md @@ -7,9 +7,7 @@ The Tyk Team has created and maintains the following components, which are fully * [Tyk Gateway]({{< ref "tyk-oss-gateway" >}}) - Fully fledged API Gateway (Start here!) - {{< github_star_button "TykTechnologies" "tyk" "true" >}} * [Tyk Pump]({{< ref "tyk-pump" >}}) - Send API analytics data to your chosen backend - {{< github_star_button "TykTechnologies" "tyk-pump" "true" >}} -* [Tyk Operator]({{< ref tyk-operator >}}) - Manage your API Configurations in K8S CRDs - {{< github_star_button "TykTechnologies" "tyk-operator" "true" >}} * [Tyk Identity Broker]({{< ref "tyk-identity-broker" >}}) - Connect your third-party IdP systems - {{< github_star_button "TykTechnologies" "tyk-identity-broker" "true" >}} -* [Tyk Sync]({{< ref "/product-stack/tyk-sync/overview" >}}) - Version control your API configurations - {{< github_star_button "TykTechnologies" "tyk-sync" "true" >}} * [Tyk Helm Chart]({{< ref "/product-stack/tyk-charts/overview" >}}) - Deploy Tyk in K8S - {{< github_star_button "TykTechnologies" "tyk-charts" "true" >}} MPL is a copyleft license that is easy to comply with. You must make the source code for any of your changes available under MPL, but you can combine the MPL software with proprietary code, as long as you keep the MPL code in separate files. Version 2.0 is, by default, compatible with LGPL and GPL version 2 or greater. You can distribute binaries under a proprietary license, as long as you make the source available under MPL. This is just a brief overview of MPL, you should refer to the MPL license in full and if you are in any doubt about how this license impacts you, please contact us to discuss. diff --git a/tyk-docs/content/shared/portal-developer-analytics.md b/tyk-docs/content/shared/portal-developer-analytics.md index 713ffb9b57..eb63fab3f2 100644 --- a/tyk-docs/content/shared/portal-developer-analytics.md +++ b/tyk-docs/content/shared/portal-developer-analytics.md @@ -35,4 +35,4 @@ curl "https://admin.cloud.tyk.io/api/activity/keys/aggregate/add2b342,5f1d9603,/ ],"pages":0} ``` -In example above `add2b342,5f1d9603`, is 2 users keys. Note that this example shows [hashed key values as described here]({{< ref "basic-config-and-security/security#a-name-key-hashing-a-key-hashing" >}}). Key hashing is turned on for the Cloud, but for Multi-Cloud and Self-Managed installations you can also turn it off. Hashed keys mean that the API administrator does not have access to real user keys, but they can still use the hashed values for showing analytics. \ No newline at end of file +In example above `add2b342,5f1d9603`, is 2 users keys. Note that this example shows [hashed key values as described here]({{< ref "basic-config-and-security/security#key-hashing" >}}). Key hashing is turned on for the Cloud, but for Multi-Cloud and Self-Managed installations you can also turn it off. Hashed keys mean that the API administrator does not have access to real user keys, but they can still use the hashed values for showing analytics. \ No newline at end of file diff --git a/tyk-docs/content/shared/pump-config.md b/tyk-docs/content/shared/pump-config.md index b323bfd311..8deae7f60f 100644 --- a/tyk-docs/content/shared/pump-config.md +++ b/tyk-docs/content/shared/pump-config.md @@ -2890,7 +2890,7 @@ prevent discovery, such as with SSH tunneling. Default is false. ENV: TYK_PMP_PUMPS_MONGOAGGREGATE_META_USEMIXEDCOLLECTION
    Type: `bool`
    -If set to `true` your pump will store analytics to both your organisation defined +If set to `true` your pump will store analytics to both your organization defined collections z_tyk_analyticz_aggregate_{ORG ID} and your org-less tyk_analytics_aggregates collection. When set to 'false' your pump will only store analytics to your org defined collection. diff --git a/tyk-docs/content/shared/sql-versions-include.md b/tyk-docs/content/shared/sql-versions-include.md index 679c79d15f..823c9219f3 100644 --- a/tyk-docs/content/shared/sql-versions-include.md +++ b/tyk-docs/content/shared/sql-versions-include.md @@ -8,6 +8,7 @@ From Tyk 4.0, you can use PostgreSQL as your datastore. We support the following You can also use the following as a drop in replacement for PostgreSQL: - [Amazon RDS](https://aws.amazon.com/rds/) +- [Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) - [Azure CosmosDB for PostgreSQL](https://learn.microsoft.com/en-us/azure/cosmos-db/postgresql/introduction) {{< note success >}} diff --git a/tyk-docs/content/troubleshooting/tyk-gateway/drl-not-ready.md b/tyk-docs/content/troubleshooting/tyk-gateway/drl-not-ready.md index 4780b6ae1d..404b11969c 100644 --- a/tyk-docs/content/troubleshooting/tyk-gateway/drl-not-ready.md +++ b/tyk-docs/content/troubleshooting/tyk-gateway/drl-not-ready.md @@ -15,7 +15,7 @@ You see the following `Log Warning:` ### Cause -There can be a couple of reasons for seeing this error about the [Distributed Rate Limiter]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting#distributed-rate-limiter-drl" >}}): +There can be a couple of reasons for seeing this error about the [Distributed Rate Limiter]({{< ref "basic-config-and-security/control-limit-traffic/rate-limiting" >}}): 1. When you have more than one installation of the Gateway with one configured to use DRL, and others not. 2. When the Gateway is started and the DRL receives an event before it has finished initialising. diff --git a/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/import.md b/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/import.md index 8154feb4e0..38f3de55c0 100644 --- a/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/import.md +++ b/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/import.md @@ -24,7 +24,7 @@ In a production environment, you will need to change the default `admin_secret` #### Import Organization -The [Organization object]({{}}) is the most fundamental object in a Tyk setup, all other ownership properties hang off the relationship between an Organization and its APIs, Policies and API Tokens. +The [Organization object]({{}}) is the most fundamental object in a Tyk setup, all other ownership properties hang off the relationship between an Organization and its APIs, Policies and API Tokens. | **Property** | **Description** | | ------------ | ---------------------------- | diff --git a/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/users.md b/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/users.md index 440d8e73ff..6fb4c4baaf 100644 --- a/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/users.md +++ b/tyk-docs/content/tyk-apis/tyk-dashboard-admin-api/users.md @@ -114,7 +114,7 @@ You can also create a user without an `org_id`. This will create a "Super User", ### Update User -You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles#the-permissions-object" >}}) set to write to use **Update User**. +You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) set to write to use **Update User**. | **Property** | **Description** | | ------------ | ------------------------ | diff --git a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics.md b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics.md index 16c7f9a6c5..f2923ef179 100644 --- a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics.md +++ b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics.md @@ -46,7 +46,7 @@ Note: the field above is replacing `aggregates_ignore_tags` which is still worki {{< warning success >}} **Warning** -If you add to the tags list headers that are **unique** per request, like timestamp or [X-Request-Id]({{}}), then Tyk Gateway will essentially create an aggregation point _per request_ and the number of these tags in an hour will be equal to the number of requests. +If you add to the tags list headers that are **unique** per request, like timestamp or [X-Request-Id]({{}}), then Tyk Gateway will essentially create an aggregation point _per request_ and the number of these tags in an hour will be equal to the number of requests.
    Since there's no real value in aggregating something that has a total of 1 and also the hourly aggregation documents can grow very quickly, we recommend to always add the header name to the ignore list as follows: diff --git a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting.md b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting.md index 13ed1af349..47cd3a1c55 100644 --- a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting.md +++ b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-blacklisting.md @@ -26,4 +26,4 @@ For more details on CIDR notation, see [this Wikipedia entry](https://en.wikiped #### Tyk Operator -Please consult the Tyk Operator supporting documentation for an example of how to [configure an IP block list]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#ip-blocklist" >}}) with Tyk Operator. \ No newline at end of file +Please consult the Tyk Operator supporting documentation for an example of how to [configure an IP block list]({{< ref "/api-management/automations#ip-blocklist" >}}) with Tyk Operator. \ No newline at end of file diff --git a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting.md b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting.md index 5d105531b2..b2a1313d49 100644 --- a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting.md +++ b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/ip-whitelisting.md @@ -26,4 +26,4 @@ For more details on CIDR notation, see [this Wikipedia entry](https://en.wikiped #### Tyk Operator -Please consult the Tyk Operator supporting documentation for an example of how to [configure an IP allow list]({{< ref "product-stack/tyk-operator/advanced-configurations/client-authentication#ip-allowlist" >}}) with Tyk Operator. \ No newline at end of file +Please consult the Tyk Operator supporting documentation for an example of how to [configure an IP allow list]({{< ref "/api-management/automations#ip-allowlist" >}}) with Tyk Operator. \ No newline at end of file diff --git a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/jwt.md b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/jwt.md index 5656bfa53a..e6257883d5 100644 --- a/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/jwt.md +++ b/tyk-docs/content/tyk-apis/tyk-gateway-api/api-definition-objects/jwt.md @@ -11,7 +11,7 @@ weight: 7 * `jwt_signing_method`: Either HMAC or RSA - HMAC requires a shared secret while RSA requires a public key to use to verify against. Please see the section on JSON web tokens for more details on how to generate these. -* `jwt_source`: Must either be a base64 encoded valid RSA/HMAC key or a url to a resource serving JWK, this key will then be used to validate inbound JWT and throttle them according to the centralised JWT options and fields set in the configuration. See [Dynamic public key rotation using public JWKs URL]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens#dynamic-public-key-rotation-using-public-jwks-url" >}}) for more details on JWKs. +* `jwt_source`: Must either be a base64 encoded valid RSA/HMAC key or a url to a resource serving JWK, this key will then be used to validate inbound JWT and throttle them according to the centralised JWT options and fields set in the configuration. See [Dynamic public key rotation using public JWKs URL]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}}) for more details on JWKs. * `jwt_identity_base_field`: Identifies the user or identity to be used in the Claims of the JWT. This will fallback to `sub` if not found. This field forms the basis of a new "virtual" token that gets used after validation. It means policy attributes are carried forward through Tyk for attribution purposes. @@ -34,4 +34,4 @@ You can disable the validation check on 3 claims `IssueAt`, `ExpireAt` and `NotB "jwt_disable_not_before_validation": true ``` -See [JSON Web Tokens](docs/basic-config-and-security/security/authentication-authorization/json-web-tokens/) for more details. +See [JSON Web Tokens](/api-management/authentication-authorization#use-json-web-tokens-jwt) for more details. diff --git a/tyk-docs/content/tyk-cloud/configuration-options/using-plugins/python-code-bundle.md b/tyk-docs/content/tyk-cloud/configuration-options/using-plugins/python-code-bundle.md index b471d60fff..5b58859302 100644 --- a/tyk-docs/content/tyk-cloud/configuration-options/using-plugins/python-code-bundle.md +++ b/tyk-docs/content/tyk-cloud/configuration-options/using-plugins/python-code-bundle.md @@ -116,6 +116,6 @@ docker run \ -c '/opt/tyk-gateway/tyk bundle build -y' ``` -* A plugin bundle is a packaged version of the plugin, it may also contain a cryptographic signature of its contents. The -y flag tells the Tyk CLI tool to skip the signing process in order to simplify this tutorial. For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles.md#bundler-tool" >}}). +* A plugin bundle is a packaged version of the plugin, it may also contain a cryptographic signature of its contents. The -y flag tells the Tyk CLI tool to skip the signing process in order to simplify this tutorial. For more information on the Tyk CLI tool, see [here]({{< ref "plugins/how-to-serve-plugins/plugin-bundles.md" >}}). * You should now have a `bundle.zip` file in the plugin working directory. * Next you will configure [uploading your plugin bundle file]({{< ref "tyk-cloud/configuration-options/using-plugins/uploading-bundle" >}}) to your Amazon S3 bucket. diff --git a/tyk-docs/content/tyk-cloud/environments-deployments/hybrid-gateways.md b/tyk-docs/content/tyk-cloud/environments-deployments/hybrid-gateways.md index 220cfea6cc..5b8b29ce5c 100644 --- a/tyk-docs/content/tyk-cloud/environments-deployments/hybrid-gateways.md +++ b/tyk-docs/content/tyk-cloud/environments-deployments/hybrid-gateways.md @@ -161,7 +161,7 @@ Content-Length: 59 * [Kubernetes 1.19+](https://kubernetes.io/docs/setup/) * [Helm 3+](https://helm.sh/docs/intro/install/) -* Connection details to remote control plane from the above [section](#create-hybrid-data-plane-configuration). +* Connection details to remote control plane from the above [section](#tyk-hybrid-gateway-configuration). The following quick start guide explains how to use the [Tyk Data Plane Helm chart]({{}}) to configure Tyk Gateway that includes: - Redis for key storage @@ -171,7 +171,7 @@ At the end of this quickstart Tyk Gateway should be accessible through service ` ### 1. Set connection details -Set the below environment variables and replace values with connection details to your Tyk Cloud remote control plane. See the above [section](#create-hybrid-data-plane-configuration) on how to get the connection details. +Set the below environment variables and replace values with connection details to your Tyk Cloud remote control plane. See the above [section](#tyk-hybrid-gateway-configuration) on how to get the connection details. ```bash MDCB_UserKey=9d20907430e440655f15b851e4112345 diff --git a/tyk-docs/content/tyk-cloud/getting-started-tyk-cloud/test-api.md b/tyk-docs/content/tyk-cloud/getting-started-tyk-cloud/test-api.md index 1c5ca5fd06..17f0a1d8c3 100644 --- a/tyk-docs/content/tyk-cloud/getting-started-tyk-cloud/test-api.md +++ b/tyk-docs/content/tyk-cloud/getting-started-tyk-cloud/test-api.md @@ -19,7 +19,7 @@ Your first API has been added. What's next? Testing it! This page shows how you * **Step 1 - Access the Gateway Ingress:** From the Cloud Data Plane overview, copy the Ingress link and open it in a browser tab. You will get a 404 error. -* **Step 2 - Append the URL with your API:** You created a API named **my app** in [Task 5]({{< ref "tyk-cloud/getting-started-tyk-cloud/first-api" >}}). Add `/my-app/` to the end of the URL. You should be taken to [https://httpbin.org/](https://httpbin.org/), which you added as the **Target URL** for the API in [Task 5]({{< ref "tyk-cloud/getting-started-tyk-cloud/first-api#step-three---core-settings" >}}). +* **Step 2 - Append the URL with your API:** You created a API named **my app** in [Task 5]({{< ref "tyk-cloud/getting-started-tyk-cloud/first-api" >}}). Add `/my-app/` to the end of the URL. You should be taken to [https://httpbin.org/](https://httpbin.org/), which you added as the **Target URL** for the API in [Task 5]({{< ref "tyk-cloud/getting-started-tyk-cloud/first-api" >}}). Next you'll [view the analytics]({{< ref "tyk-cloud/getting-started-tyk-cloud/view-analytics" >}}) for your API in the Dashboard. diff --git a/tyk-docs/content/tyk-cloud/initial-portal-config.md b/tyk-docs/content/tyk-cloud/initial-portal-config.md index 355f4c6a95..da3553e7bd 100644 --- a/tyk-docs/content/tyk-cloud/initial-portal-config.md +++ b/tyk-docs/content/tyk-cloud/initial-portal-config.md @@ -20,20 +20,20 @@ Watch our video on configuring your Tyk Cloud Developer Portal. 1. From the Control Plane Dashboard, select **Pages** from the **Portal Management** menu 2. Click **Add Page** -{{< img src="/img/2.10/portal-home-page-add.png" alt="Add Portal Page" >}} +{{< img src="/img/getting-started/create-account-portal-pages.png" alt="Add Portal Page" >}} 3. In the Settings, give your page a name and slug. Below we've called it Home 4. Select **Check to make this page the Home page** 5. Select **Default Home page template** from the Page type drop-down list 6. You can leave the Registered Fields sections for now -{{< img src="/img/2.10/portal-home-page-settings.png" alt="Portal Home page settings" >}} +{{< img src="/img/getting-started/create-account-portal-pages.png" alt="Portal Home page settings" >}} 7. Click **Save**. You should now be able to access your Portal from **Open Your Portal** from the **Your Developer Portal** menu. -{{< img src="/img/2.10/portal_menu.png" alt="Portal Menu" >}} +{{< img src="/img/getting-started/portal_menu.png" alt="Portal Menu" >}} ## Further Portal Configuration diff --git a/tyk-docs/content/tyk-cloud/troubleshooting-&-support/faqs.md b/tyk-docs/content/tyk-cloud/troubleshooting-&-support/faqs.md index 43cd283a71..f5f76e3e87 100644 --- a/tyk-docs/content/tyk-cloud/troubleshooting-&-support/faqs.md +++ b/tyk-docs/content/tyk-cloud/troubleshooting-&-support/faqs.md @@ -61,7 +61,7 @@ A: When a Cloud Data Plane is deployed, the tag 'edge' and a location tag are au * Add the **edge** tag to your API to connect it to all Cloud Data Planes within the Control Plane. * Add the location tag to your API to connect it to only Cloud Data Planes with that location within the Control Plane. -To add either of the tags, see [Adding an API]({{< ref "tyk-cloud/getting-started-tyk-cloud/first-api#step-three---add-a-new-api" >}}) in the Getting Started section. +To add either of the tags, see [Adding an API]({{< ref "tyk-cloud/getting-started-tyk-cloud/first-api#steps-to-add-an-api-in-tyk-cloud" >}}) in the Getting Started section. {{< warning success >}} **Warning** diff --git a/tyk-docs/content/tyk-cloud/what-is-tyk-cloud.md b/tyk-docs/content/tyk-cloud/what-is-tyk-cloud.md index e38c85bb4e..982a3bf6f7 100644 --- a/tyk-docs/content/tyk-cloud/what-is-tyk-cloud.md +++ b/tyk-docs/content/tyk-cloud/what-is-tyk-cloud.md @@ -21,12 +21,13 @@ Tyk Cloud is a full SaaS service that enables you to run and operate Tyk using y ## Where is Tyk Cloud hosted? Tyk Cloud is currently available to auto-deploy on AWS. -Paid plans and Enterprise trials allow users to select one of 5 AWS locations as their home region as well as the locations of their Cloud Data Planes. The 5 AWS regions to choose from are: +Paid plans and Enterprise trials allow users to select one of 6 AWS locations as their home region as well as the locations of their Cloud Data Planes. The 6 AWS regions to choose from are: - aws-ap-southeast-1, Singapore - aws-eu-central-1, Frankfurt, Germany - aws-eu-west-2, London, UK - aws-us-east-1, N. Virginia, USA - aws-us-west-2, Oregon, USA +- aws-ap-southeast-2, Australia ## Why Tyk Cloud? diff --git a/tyk-docs/content/tyk-dashboard-analytics.md b/tyk-docs/content/tyk-dashboard-analytics.md index 4eb7784374..b7ad02cee7 100644 --- a/tyk-docs/content/tyk-dashboard-analytics.md +++ b/tyk-docs/content/tyk-dashboard-analytics.md @@ -13,7 +13,7 @@ The Tyk Dashboard provides a full set of analytics functions and graphs that you {{< note success >}} **Note** -In Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) we introduced [User Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) which can be used to limit the visibility of aggregate statistics to users when API Ownership is enabled. Due to the way that the analytics data are aggregated, not all statistics can be filtered by API and so may be inaccessible to users with the Owned Analytics permission. +In Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) we introduced [User Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) which can be used to limit the visibility of aggregate statistics to users when API Ownership is enabled. Due to the way that the analytics data are aggregated, not all statistics can be filtered by API and so may be inaccessible to users with the Owned Analytics permission. {{< /note >}} ## How does Tyk capture and process Traffic Analytics? diff --git a/tyk-docs/content/tyk-dashboard-analytics/error-overview.md b/tyk-docs/content/tyk-dashboard-analytics/error-overview.md index 9e2d600386..fbacfbfc83 100755 --- a/tyk-docs/content/tyk-dashboard-analytics/error-overview.md +++ b/tyk-docs/content/tyk-dashboard-analytics/error-overview.md @@ -16,6 +16,6 @@ The error overview page limits the analytics down to errors only, and gives you {{< note success >}} **Note** -From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Errors by Category data will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) permission. +From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Errors by Category data will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) permission. {{< /note >}} diff --git a/tyk-docs/content/tyk-dashboard-analytics/traffic-overview.md b/tyk-docs/content/tyk-dashboard-analytics/traffic-overview.md index 4fde97f503..2cfdadb6c7 100755 --- a/tyk-docs/content/tyk-dashboard-analytics/traffic-overview.md +++ b/tyk-docs/content/tyk-dashboard-analytics/traffic-overview.md @@ -28,6 +28,6 @@ Below the aggregate graph, you’ll see an error breakdown and endpoint populari {{< note success >}} **Note** -From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Error Breakdown and Endpoint Popularity charts will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) permission. +From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Error Breakdown and Endpoint Popularity charts will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) permission. {{< /note >}} diff --git a/tyk-docs/content/tyk-dashboard-analytics/traffic-per-api.md b/tyk-docs/content/tyk-dashboard-analytics/traffic-per-api.md index 32f49b71aa..4ccb08f2f3 100755 --- a/tyk-docs/content/tyk-dashboard-analytics/traffic-per-api.md +++ b/tyk-docs/content/tyk-dashboard-analytics/traffic-per-api.md @@ -28,6 +28,6 @@ Tyk will try to normalize endpoint metrics by identifying IDs and UUIDs in a URL {{< note success >}} **Note** -From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Error Breakdown and Endpoint Popularity charts will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) permission. +From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Error Breakdown and Endpoint Popularity charts will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) permission. {{< /note >}} diff --git a/tyk-docs/content/tyk-dashboard-analytics/traffic-per-oauth-client.md b/tyk-docs/content/tyk-dashboard-analytics/traffic-per-oauth-client.md index b54f423955..ee9682cae4 100755 --- a/tyk-docs/content/tyk-dashboard-analytics/traffic-per-oauth-client.md +++ b/tyk-docs/content/tyk-dashboard-analytics/traffic-per-oauth-client.md @@ -22,5 +22,5 @@ You can view the analytics of individual tokens generated by this Client ID in t {{< note success >}} **Note** -From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Traffic per OAuth Client ID charts will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) permission. +From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Traffic per OAuth Client ID charts will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) permission. {{< /note >}} diff --git a/tyk-docs/content/tyk-dashboard-analytics/traffic-per-token.md b/tyk-docs/content/tyk-dashboard-analytics/traffic-per-token.md index 741532df5c..85bef7e2a7 100755 --- a/tyk-docs/content/tyk-dashboard-analytics/traffic-per-token.md +++ b/tyk-docs/content/tyk-dashboard-analytics/traffic-per-token.md @@ -30,6 +30,6 @@ If you select a key, you can get a drill down view of the activity of that key, {{< note success >}} **Note** -From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Traffic per Key screen will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) permission. +From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Traffic per Key screen will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) permission. {{< /note >}} diff --git a/tyk-docs/content/tyk-dashboard-api.md b/tyk-docs/content/tyk-dashboard-api.md index c445a50dda..aa52e9c5b6 100755 --- a/tyk-docs/content/tyk-dashboard-api.md +++ b/tyk-docs/content/tyk-dashboard-api.md @@ -1,5 +1,5 @@ --- -date: 2017-03-27T12:08:14+01:00 +date: 2024-10-10T12:08:14+01:00 title: Tyk Dashboard API menu: main: diff --git a/tyk-docs/content/tyk-dashboard-api/users.md b/tyk-docs/content/tyk-dashboard-api/users.md index 6e97501c38..6885dffea5 100644 --- a/tyk-docs/content/tyk-dashboard-api/users.md +++ b/tyk-docs/content/tyk-dashboard-api/users.md @@ -114,7 +114,7 @@ authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8 You can add a user via the API without a password by leaving out the `password` field. You then use [Set User Password](#set-user-password) request to add a password. {{< /note >}} -You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles#the-permissions-object" >}}) set to write to use **Add User**. +You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) set to write to use **Add User**. If you do set a password, you need to keep a record of it, to enable the password to be reset in the future. @@ -157,7 +157,7 @@ authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8 If a user is created with a blank password, you will need to add a password in a second API call to set a password. In this scenario, the `current_password` field is not required. To change an current password, you need to know the existing password set in **Add User**. -You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles#the-permissions-object" >}}) set to **read** to use **Set User Password**. +You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) set to **read** to use **Set User Password**. | **Property** | **Description** | | ------------ | -------------------------------------| @@ -244,7 +244,7 @@ PUT -H "admin-auth: " http:///admin/users/{USER_ID}/acti ### Update User -You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles#the-permissions-object" >}}) set to write to use **Update User**. +You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) set to write to use **Update User**. | **Property** | **Description** | | ------------ | -----------------------| @@ -284,7 +284,7 @@ authorization:7a7b140f-2480-4d5a-4e78-24049e3ba7f8 This call allows you to reset a user's current Dashboard session. -You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles#the-permissions-object" >}}) set to write to use this call. +You need to have the `users` [Permission object]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) set to write to use this call. {{< note success >}} **Note** diff --git a/tyk-docs/content/tyk-dashboard/database-options.md b/tyk-docs/content/tyk-dashboard/database-options.md index 3425ab48e5..04bd69c6ca 100644 --- a/tyk-docs/content/tyk-dashboard/database-options.md +++ b/tyk-docs/content/tyk-dashboard/database-options.md @@ -24,6 +24,12 @@ Please check [here]({{< ref "planning-for-production/database-settings/mongodb.m {{< include "sql-versions-include" >}} +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + ### Configuring PostgreSQL Please check [here]({{< ref "planning-for-production/database-settings/postgresql.md" >}}) for production configurations. @@ -41,3 +47,4 @@ We recommend the following: * For PoC installations, you can use any of the following platforms (SQLite, PostgreSQL or MongoDB). * For production installations, we **only** support MongoDB or PostgreSQL + diff --git a/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/gluu-dcr.md b/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/gluu-dcr.md index 46543eee7e..072f685de9 100644 --- a/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/gluu-dcr.md +++ b/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/gluu-dcr.md @@ -98,7 +98,7 @@ Once the "Override global settings" option is toggled, scroll down to the DCR se **Providers:** Different providers might implement the standard in slightly different ways. Tyk provides a specific driver for each one. For IDPs that aren’t on the list use the "Other" option. For this guide, pick "Gluu". -**Grant Types:** The [OAuth 2.0 grant types]({{< ref "basic-config-and-security/security/authentication-authorization/oauth-2-0#option-2---use-the-tyk-oauth-flow" >}}) types that will be used by the client, see the [specification](https://openid.net/specs/openid-connect-registration-1_0.html#rfc.section.2) for more details. Set "Client Credentials". +**Grant Types:** The [OAuth 2.0 grant types]({{< ref "/api-management/authentication-authorization#set-up-oauth-20-authorization" >}}) types that will be used by the client, see the [specification](https://openid.net/specs/openid-connect-registration-1_0.html#rfc.section.2) for more details. Set "Client Credentials". **Token Endpoint Auth Method:** defines the way the client will authenticate against the token endpoint. Use "Client Secret - Post". diff --git a/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/keycloak-dcr.md b/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/keycloak-dcr.md index 12020ffe08..9a6913594f 100644 --- a/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/keycloak-dcr.md +++ b/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/keycloak-dcr.md @@ -109,7 +109,7 @@ Tyk lets you set global portal settings that apply to **all portal-listed APIs** **Providers:** Different providers might implement the standard in slightly different ways, Tyk provides a specific driver for each one. For IDPs that aren’t on the list use the **Other** option. -**Grant Types:** The [OAuth 2.0 grant types]({{< ref "basic-config-and-security/security/authentication-authorization/oauth-2-0#option-2---use-the-tyk-oauth-flow" >}}) that will be used by the client, see the [specification](https://openid.net/specs/openid-connect-registration-1_0.html#rfc.section.2) for more details. +**Grant Types:** The [OAuth 2.0 grant types]({{< ref "/api-management/authentication-authorization#set-up-oauth-20-authorization" >}}) that will be used by the client, see the [specification](https://openid.net/specs/openid-connect-registration-1_0.html#rfc.section.2) for more details. **Token Endpoint Auth Method:** defines the way the client will authenticate against the token endpoint. diff --git a/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients.md b/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients.md index 74a2fa84f2..863ace8093 100644 --- a/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients.md +++ b/tyk-docs/content/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients.md @@ -14,7 +14,7 @@ From Tyk Dashboard v1.8, you can now create and manage OAuth clients from the De ## Prerequisites -1. An API created in your Dashboard using Tyk's ability to act as a OAuth provider. You need to have [OAuth 2.0]({{< ref "basic-config-and-security/security/authentication-authorization/oauth-2-0#option-2---use-the-tyk-oauth-flow" >}}) selected as the Authentication mode. See [Create an API]({{< ref "getting-started/create-api" >}}) for more details. +1. An API created in your Dashboard using Tyk's ability to act as a OAuth provider. You need to have [OAuth 2.0]({{< ref "/api-management/authentication-authorization#set-up-oauth-20-authorization" >}}) selected as the Authentication mode. See [Create an API]({{< ref "getting-started/create-api" >}}) for more details. 2. A Policy created in your Dashboard with the API created above selected in the **Access Rights > Add access rule** drop-down. See [Create a Security Policy]({{< ref "getting-started/create-security-policy" >}}) for more details. 3. A Portal Catalog entry for the API created above with the Policy you created selected from the **Available policies** drop-down. See [Create a Portal Entry]({{< ref "getting-started/tutorials/publish-api" >}}) for more details. 4. A developer account created in your Developer Portal. @@ -52,4 +52,4 @@ From Tyk Dashboard v1.8, you can now create and manage OAuth clients from the De ## Revoke OAuth Client Tokens -See [Revoke OAuth Tokens]({{< ref "/content/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens.md" >}}) for more details. +See [Revoke OAuth Tokens]({{< ref "/api-management/authentication-authorization#revoke-oauth-tokens" >}}) for more details. diff --git a/tyk-docs/content/tyk-gateway-api.md b/tyk-docs/content/tyk-gateway-api.md index 1c7a60c107..07ffb6f1c6 100755 --- a/tyk-docs/content/tyk-gateway-api.md +++ b/tyk-docs/content/tyk-gateway-api.md @@ -1,5 +1,5 @@ --- -date: 2023-01-24 +date: 2024-10-10T12:08:14+01:00 title: Tyk Gateway API tags: ["OpenAPI Spec", "OpenAPI Specification", "OAS", "REST", "Tyk Gateway OpenAPI Spec", "Tyk Gateway OAS", "API Gateway OAS", "API Gateway REST"] menu: diff --git a/tyk-docs/content/tyk-multi-data-centre/setup-controller-data-centre.md b/tyk-docs/content/tyk-multi-data-centre/setup-controller-data-centre.md index fad4c28f17..91d1e60747 100644 --- a/tyk-docs/content/tyk-multi-data-centre/setup-controller-data-centre.md +++ b/tyk-docs/content/tyk-multi-data-centre/setup-controller-data-centre.md @@ -91,16 +91,20 @@ ADMIN_EMAIL=admin@default.com ADMIN_PASSWORD=changeit DASHBOARD_LICENSE=changeit MDCB_LICENSE=changeit +SECURITY_SECRET=changeit +OPERATOR_LICENSE=changeit kubectl create namespace $NAMESPACE kubectl create secret generic my-secrets -n $NAMESPACE \ --from-literal=APISecret=$API_SECRET \ --from-literal=AdminSecret=$ADMIN_KEY \ - --from-literal=DashLicense=$DASHBOARD_LICENSE + --from-literal=DashLicense=$DASHBOARD_LICENSE \ + --from-literal=OperatorLicense=$OPERATOR_LICENSE kubectl create secret generic mdcb-secrets -n $NAMESPACE \ - --from-literal=MDCBLicense=$MDCB_LICENSE + --from-literal=MDCBLicense=$MDCB_LICENSE \ + --from-literal=securitySecret=$SECURITY_SECRET kubectl create secret generic admin-secrets -n $NAMESPACE \ --from-literal=adminUserFirstName=Admin \ @@ -357,7 +361,7 @@ Alternatively, you can issue a request to the `/env` endpoint to return your MDC curl -H "x-tyk-authorization: " https://my-mdcb-host:8181/env ``` -## Gateway configuration +## Enabling MDCB on Organization Object on Tyk Dashboard Before a worker gateway can connect to MDCB, it is important to enable the organization that owns all the APIs to be distributed to be allowed to utilize Tyk MDCB. To do this, the organization record needs to be modified with two flags using the [Tyk Dashboard Admin API](https://tyk.io/docs/dashboard-admin-api/). diff --git a/tyk-docs/content/tyk-multi-data-centre/setup-worker-data-centres.md b/tyk-docs/content/tyk-multi-data-centre/setup-worker-data-centres.md index a5d3505ea5..ce9b6ac49c 100644 --- a/tyk-docs/content/tyk-multi-data-centre/setup-worker-data-centres.md +++ b/tyk-docs/content/tyk-multi-data-centre/setup-worker-data-centres.md @@ -41,7 +41,7 @@ Set the below environment variables and replace values with connection details t ```bash USER_API_KEY=9d20907430e440655f15b851e4112345 ORG_ID=64cadf60173be90001712345 -MDCB_CONNECTIONSTRING=mdcb-svc-tyk-control-plane-tyk-mdcb.tyk.svc:9091 +MDCB_CONNECTIONSTRING=mdcb-svc-tyk-cp-tyk-mdcb.tyk-cp.svc:9091 GROUP_ID=your-group-id MDCB_USESSL=false ``` diff --git a/tyk-docs/content/tyk-on-prem/kubernetes-ingress.md b/tyk-docs/content/tyk-on-prem/kubernetes-ingress.md index 161d4f790f..50a5cea721 100644 --- a/tyk-docs/content/tyk-on-prem/kubernetes-ingress.md +++ b/tyk-docs/content/tyk-on-prem/kubernetes-ingress.md @@ -9,10 +9,11 @@ weight: 2 aliases: - /getting-started/installation/with-tyk-on-premises/kubernetes/tyk-kubernetes-ingress-controller/ - /tyk-on-prem/kubernetes-ingress + - /tyk-oss/ce-kubernetes-ingress --- Ingress is an API object that manages external access to the services in a cluster, typically HTTP (source [kubernetes.io - ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/)). -**Tyk Operator** offers an [Ingress Controller]({{}}), which dynamically manages Tyk ApiDefinition resources as per the ingress spec. +**Tyk Operator** offers an [Ingress Controller]({{}}), which dynamically manages Tyk ApiDefinition resources as per the ingress spec. This way your **Tyk Gateway** is configured as a drop-in replacement for a standard Kubernetes Ingress. **Tyk Operator** is also the preferred way to use Tyk for users who follow GitOps standards. It enables Tyk to be used for managing API Definitions, security policies and other Tyk features. diff --git a/tyk-docs/content/tyk-on-premises/debian-ubuntu/dashboard.md b/tyk-docs/content/tyk-on-premises/debian-ubuntu/dashboard.md index 43f8b321cd..9be175ee66 100755 --- a/tyk-docs/content/tyk-on-premises/debian-ubuntu/dashboard.md +++ b/tyk-docs/content/tyk-on-premises/debian-ubuntu/dashboard.md @@ -301,7 +301,7 @@ You can now log in to the Tyk Dashboard from `127.0.0.1:3000`, using the usernam To set up your [Developer Portal]({{< ref "/content/tyk-developer-portal.md" >}}) follow our Self-Managed [tutorial on publishing an API to the Portal Catalog]({{< ref "/content/getting-started/tutorials/publish-api.md" >}}). [1]: https://packagecloud.io/tyk -[2]: /getting-started/installation/with-tyk-on-premises/on-ubuntu/#prerequisites +[2]: /getting-started/installation/with-tyk-on-premises/on-ubuntu {{< tab_end >}} diff --git a/tyk-docs/content/tyk-on-premises/installation/on-aws.md b/tyk-docs/content/tyk-on-premises/installation/on-aws.md index 0416e65cdc..c1f22eba13 100644 --- a/tyk-docs/content/tyk-on-premises/installation/on-aws.md +++ b/tyk-docs/content/tyk-on-premises/installation/on-aws.md @@ -16,111 +16,19 @@ aliases: - /tyk-on-premises/aws/ --- -To get started easily, [Tyk offers AWS Marketplace products][6] which bootstrap the entire stack, via CloudFormation templates. +Tyk offers a flexible and powerful API management solution through **Tyk Cloud** on the [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-pboluroscnqro). Tyk Cloud is an end-to-end managed API platform where both the control plane and gateways are installed on AWS for a seamless, fully cloud-hosted experience. -The AWS Marketplace products: +For those who need more deployment flexibility, Tyk Cloud also supports a [Hybrid Gateway]({{< ref "tyk-cloud/environments-deployments/hybrid-gateways" >}}) option. In this setup, the control plane remains hosted and managed by Tyk on AWS, while the gateways can be deployed on your preferred cloud provider or on-premises environment—allowing you to meet data locality and compliance needs without sacrificing control. -- use AWS Elasticache in place of Redis -- Runs Mongo OSS in HA mode in EC2 (Primary, Secondary, Arbiter) +### Available AWS Deployment Regions -## BYOL +You can deploy Tyk Cloud in the following AWS regions: -These [AWS Marketplace products][5] are delivered as CloudFormation products. You will need to bring your own license. You can choose from one of 3 fulfillment options: +- **Singapore**: `aws-ap-southeast-1` +- **Frankfurt, Germany**: `aws-eu-central-1` +- **London, UK**: `aws-eu-west-2` +- **N. Virginia, USA**: `aws-us-east-1` +- **Oregon, USA**: `aws-us-west-2` +- **Australia**: `aws-ap-southeast-2` -- PoC (1 gw node) -- High Availability (2 nodes) -- Autoscaling (3+ nodes) - -Please [contact an account manager][7] in order to get a license. - -## PAYG -There are three billed through AWS Marketplace PAYG products to get you started. The license for these products is baked into the product as an hourly cost. Please follow this video in order to get started - -- [PoC](https://aws.amazon.com/marketplace/pp/prodview-elvk5mxxlkueu?qid=1575313242174&sr=0-4&ref_=srh_res_product_title) -- [High Availability (2-node)](https://aws.amazon.com/marketplace/pp/prodview-nempvlrcr4fq4?qid=1575313242174&sr=0-3&ref_=srh_res_product_title) -- [AutoScaling (3+ node)](https://aws.amazon.com/marketplace/pp/prodview-2bgdxbpeygf5w?qid=1575313242174&sr=0-5&ref_=srh_res_product_title) - -### Installation - -You will need to create the following AWS resources in an AWS VPC before you are able to deploy the PAYG products. - -#### Prerequisites - -- 3 Subnets in 3 different Availability Zones in the AWS Region -- an Elasticache Cluster in one of the aforementioned subnets -- An EC2 Keypair for SSH into EC2 instances - -Once these 3 are setup, we can deploy the AWS Marketplace PAYG products. - -*Example:* - -| Resource | IPV4 CIDR | -|----------------------|---------------| -| VPC | 10.0.0.0 /24 | -| CF-US Subnet East 1A | 10.0.0.0 /28 | -| CF-US Subnet East 1B | 10.0.0.32 /28 | -| CF-US Subnet East 1C | 10.0.0.64 /28 | - -#### Video Walkthrough -This video will walk you through how to set up a PAYG product beginning to end on AWS, including the prerequisites. - -{{< youtube IiGyB_IHqWw >}} - -#### Logging Into Dashboard -Once the stack is running, in order to access the Dashboard, simply set up an Elastic IP to the Dashboard instance and then visit: - -`http://:3000` - -The username & password were created using the variables you gave the CloudFormation template - -username: `@.com` - -Password: `` - -1. You need to use a password that is at least 8 characters long, or you will not be able to log in. -2. If accessing the Dashboard from a public space, don't forget to add an Internet Gateway to the AWS VPC. - -The CF Template already creates Security Groups for the Dashboard with port 3000 open - -#### cURLing the GW(s) - -{{% tabs_start %}} -{{% tab_start "PoC" %}} -
    -In order to access GW, simply assign Elastic IP to the GW instance. The auto generated GW security group is already set up to allow traffic on port 8080. - -To test, cURL the following: -```{.copyWrapper} -$ curl http://:8080/hello -{"status":"pass","version":"v3.0.0","description":"Tyk GW","details":{"dashboard":{"status":"pass","componentType":"system","time":"2020-08-28T17:19:49+02:00"},"redis":{"status":"pass","componentType":"datastore","time":"2020-08-28T17:19:49+02:00"}}} -``` - -{{% tab_end %}} -{{% tab_start "High Availability / Autoscaling" %}} -
    -The CloudFormation stack sets up an Elastic Load Balancer for the Gateway cluster. - -Navigate to the AWS Load Balancing section and find the `TYKElasticLoadBalancerALB`. The Cloud Formation template sets up a public DNS entry, something like `TYKElasticLoadBalancerALB-2050138050.us-east-1.elb.amazonaws.com` - -We can check it is running by visiting -```{.copyWrapper} -$ curl http://TYKElasticLoadBalancerALB-2050138050.us-east-1.elb.amazonaws.com/hello -{"status":"pass","version":"v3.0.0","description":"Tyk GW","details":{"dashboard":{"status":"pass","componentType":"system","time":"2020-08-28T17:19:49+02:00"},"redis":{"status":"pass","componentType":"datastore","time":"2020-08-28T17:19:49+02:00"}}} -``` - -Note that ALB rules are already setup to accept traffic on port 80 and forward it to the Gateways on port 8080. -{{% tab_end %}} - -{{% tabs_end %}} - - -### Tyk Component Updates -Updates to the PAYG products can be done manually or automatically. The manual method requires SSHing into the EC2 instances and doing the updates through the CLI. To do this automatically, there is a mechanism to upgrade CloudFormation stack. The idea is to apply a new version of CloudFormation to your existing stack. We are releasing new versions of the product from time to time. When this happens, you will get a notification from AWS. - - -[2]: https://aws.amazon.com/marketplace/pp/prodview-elvk5mxxlkueu?qid=1575313242174&sr=0-4&ref_=srh_res_product_title -[3]: https://aws.amazon.com/marketplace/pp/prodview-2bgdxbpeygf5w?qid=1575313242174&sr=0-5&ref_=srh_res_product_title -[4]: https://aws.amazon.com/marketplace/pp/prodview-nempvlrcr4fq4?qid=1575313242174&sr=0-3&ref_=srh_res_product_title -[5]: https://aws.amazon.com/marketplace/pp/prodview-nphqjavwaqes6?ref_=aws-mp-console-subscription-detail-payg#pdp-pricing -[6]: https://aws.amazon.com/marketplace/seller-profile?id=432b7859-4299-4278-8eb2-f7bbe7739ec6&ref=dtl_prodview-nphqjavwaqes6 -[7]: https://pages.tyk.io/get-started-with-tyk +Getting started with Tyk Cloud via the AWS Marketplace is quick and easy. Sign up today to access Tyk’s comprehensive API management tools designed to scale with your needs. \ No newline at end of file diff --git a/tyk-docs/content/tyk-on-premises/installation/on-heroku.md b/tyk-docs/content/tyk-on-premises/installation/on-heroku.md index bb337c243c..556fbb3076 100644 --- a/tyk-docs/content/tyk-on-premises/installation/on-heroku.md +++ b/tyk-docs/content/tyk-on-premises/installation/on-heroku.md @@ -48,7 +48,7 @@ https://infinite-plains-14949.herokuapp.com/ | https://git.heroku.com/infinite-p {{< note success >}} **Note** -`--space` flag must be added to the command if the app is being created in a private space, see more details in the [section on Heroku private spaces](#private-spaces). +`--space` flag must be added to the command if the app is being created in a private space, see more details in the [section on Heroku private spaces](#heroku-private-spaces). {{< /note >}} Provision a Redis add-on (we'll use a `hobby-dev` plan for demonstration purposes but that's not suitable for production), replacing the app name with your own: diff --git a/tyk-docs/content/tyk-on-premises/kubernetes.md b/tyk-docs/content/tyk-on-premises/kubernetes.md index d6c1dcf448..e76b301e9f 100755 --- a/tyk-docs/content/tyk-on-premises/kubernetes.md +++ b/tyk-docs/content/tyk-on-premises/kubernetes.md @@ -25,4 +25,4 @@ Or go to [Tyk Stack helm chart]({{}}). +To get started go to [Tyk Operator]({{< ref "/api-management/automations#automate-api-management-in-kubernetes-environments" >}}). diff --git a/tyk-docs/content/tyk-operator.md b/tyk-docs/content/tyk-operator.md deleted file mode 100644 index 61d547c0a8..0000000000 --- a/tyk-docs/content/tyk-operator.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Tyk Operator -weight: 16 -menu: - main: - parent: "Tyk Stack" -aliases: - - /tyk-stack/tyk-operator/getting-started-tyk-operator - - /product-stack/tyk-operator/key-concepts/key-concepts ---- - -### What is Tyk Operator? -Tyk Operator is a Kubernetes Operator designed to simplify the management of Tyk API configurations both inside and outside of Kubernetes environments. With our [custom resources]({{}}), Tyk Operator simplifies the processes of deploying and configuring API resources, allowing you to focus more on application development and less on infrastructure management. It is ideal for those who like to manage configurations declaratively or with GitOps workflows via tools such as Argo CD and Flux CD. - -{{< img src="/img/operator/tyk-operator.svg" alt="Tyk Operator" width="600" >}} - -### Why use Tyk Operator? -Managing, checking, and synchronizing APIs from multiple teams across environments can be complex. Tyk Operator provides an efficient way to handle API configurations. Here’s why it matters: -- **Simple custom resource**: Tyk's Classic API Definition is a large and complex JSON document, making maintenance difficult. Operator's CRD (Custom Resource Definition) is designed to be simple and does not require you to specify default values, resulting in a document that is easy to understand and maintain. -- **Declarative configurations**: By using declarative configurations, users can store configurations in Git. Changes can then be managed via Git pull requests, making it easy to compare different API configuration versions. Automatic linting and checking can be implemented, ensuring that changes are properly reviewed and approved before merging. -- **Kubernetes integration**: Operator works natively with Kubernetes, allowing both development and operations teams to follow their usual workflows for making changes and automating deployments. You can also benefit from Kubernetes tooling support for manifest management (e.g., using Helm or Kustomize) and GitOps deployment (e.g., using ArgoCD or Flux CD). -- **Automated reconciliation**: Once you apply custom resources to your Kubernetes cluster, Operator will regularly check that the actual state at Tyk matches the target state in Kubernetes. This ensures any changes at Tyk, such as unauthorized manual updates or database corruption, can be corrected and the target state reinstated. - -### Key Features - -1. [Manage Classic API definitions]({{< ref "tyk-stack/tyk-operator/create-an-api" >}}) -2. [Manage Security policies]({{< ref "tyk-stack/tyk-operator/secure-an-api" >}}) -3. [Manage Tyk Classic Dev Portal]({{< ref "tyk-stack/tyk-operator/publish-an-api" >}}) -4. [Kubernetes Ingress Controller]({{< ref "product-stack/tyk-operator/tyk-ingress-controller">}}) - -### Do You Need Tyk Operator? - -Consider using Tyk Operator if: - -- You are running applications in a Kubernetes environment. -- You need to manage multiple Tyk API Gateway instances efficiently. -- You want to leverage Kubernetes-native automation for API management. -- You aim to streamline the operations of your API gateways with minimal manual intervention. - -### Getting Started -To get started with Tyk Operator, learn about Operator key concepts: - -- [Custom Resources]({{< ref "/product-stack/tyk-operator/key-concepts/custom-resources" >}}) -- [Operator Context]({{< ref "/product-stack/tyk-operator/key-concepts/operator-context" >}}) -- [Operator User]({{< ref "/product-stack/tyk-operator/key-concepts/operator-user" >}}) -- [Operator Reconciliation]({{< ref "/tyk-stack/tyk-operator/tyk-operator-reconciliation" >}}) - -Follow our [Installation Guide]({{}}) to set up Tyk Operator in your Kubernetes cluster. \ No newline at end of file diff --git a/tyk-docs/content/tyk-oss/ce-kubernetes-ingress.md b/tyk-docs/content/tyk-oss/ce-kubernetes-ingress.md deleted file mode 100644 index 6a637264e1..0000000000 --- a/tyk-docs/content/tyk-oss/ce-kubernetes-ingress.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "As an Ingress Controller with Tyk Operator " -tags: ["Tyk Stack", "Installation", "Kubernetes", "Ingress", "Service Mesh", "Tyk Operator"] -description: "How to install Tyk in a open source environment using Kubernetes Ingress Controller with the Tyk Operator" -menu: - main: - parent: "Kubernetes" -weight: 2 - ---- - -Ingress is an API object that manages external access to the services in a cluster, typically HTTP (source [kubernetes.io - ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/)). -**Tyk Operator** offers an [Ingress Controller]({{}}), which dynamically manages Tyk ApiDefinition resources as per the ingress spec. -This way your **Tyk Gateway** is configured as a drop-in replacement for a standard Kubernetes Ingress. - -**Tyk Operator** is also the preferred way to use Tyk for users who follow GitOps standards. It enables Tyk to be used for managing API Definitions, security policies and other Tyk features. diff --git a/tyk-docs/content/tyk-oss/ce-kubernetes.md b/tyk-docs/content/tyk-oss/ce-kubernetes.md index dabaa52f61..6d5d6731d8 100644 --- a/tyk-docs/content/tyk-oss/ce-kubernetes.md +++ b/tyk-docs/content/tyk-oss/ce-kubernetes.md @@ -15,7 +15,3 @@ We are actively working to add flexibility and more user flows to our chart. Ple to our teams on support or the cummunity forum if you have questions, requests or suggestions for improvements. Get started with our [Quick Start guide]({{}}) or go to [Tyk Open Source helm chart]({{}}) for detailed installation instructions and configuration options. - - -## Tyk Operator and Ingress -For GitOps workflow used with the *Tyk Gateway* or setting it as a Kubernetes ingress controller, Tyk Operator enables you to manage API definitions, security policies and other Tyk features using Kubernetes manifest files. To get started go to [Tyk Operator]({{< ref "/tyk-operator" >}}). diff --git a/tyk-docs/content/tyk-pump/configuration.md b/tyk-docs/content/tyk-pump/configuration.md index f8c902b0ba..47f2e50079 100755 --- a/tyk-docs/content/tyk-pump/configuration.md +++ b/tyk-docs/content/tyk-pump/configuration.md @@ -28,6 +28,12 @@ The Tyk Dashboard uses the `mongo-pump-aggregate` collection to display analytic {{< tab_end >}} {{< tab_start "SQL" >}} +{{< note success >}} +**Note** + +SQLite support will be deprecated from Tyk 5.7.0. To avoid disrupution, please transition to PostgreSQL, MongoDB or one of the listed compatible alternatives. +{{< /note >}} + In v4.0 of the Tyk Dashboard, we have added support for the following SQL platforms: - PostgreSQL - SQLite diff --git a/tyk-docs/content/tyk-stack.md b/tyk-docs/content/tyk-stack.md index b634d6a212..e3f848571b 100644 --- a/tyk-docs/content/tyk-stack.md +++ b/tyk-docs/content/tyk-stack.md @@ -17,6 +17,8 @@ The following Tyk components, created and maintained by the Tyk Team, are propri * [Tyk Developer Portal]({{< ref "tyk-developer-portal" >}}) * [Tyk Multi Data Center Bridge]({{< ref "tyk-multi-data-centre" >}}) * [Universal Data Graph]({{< ref "universal-data-graph" >}}) +* [Tyk Operator]({{< ref "/api-management/automations.md#what-is-tyk-operator" >}}) +* [Tyk Sync]({{< ref "/api-management/automations#synchronize-tyk-environment-with-github-repository" >}}) If you plan to deploy and use the above components On-premise, license keys are required. diff --git a/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration.md b/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration.md index 1ecbfc3810..3d1441842c 100644 --- a/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration.md +++ b/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration.md @@ -86,7 +86,7 @@ Navigate to the Tyk Dashboard and create two policies: one for a plan and one fo ### Create the No Operation policy and API -Tyk requires any API that uses the scope to policy mapping to have [a default policy]({{< ref "basic-config-and-security/security/authentication-authorization/json-web-tokens#step-4-set-a-default-policy" >}} ). Access rights and rate limits defined in the default policy take priority over other policies, including policies for the API Product and plan. +Tyk requires any API that uses the scope to policy mapping to have [a default policy]({{< ref "/api-management/authentication-authorization#use-json-web-tokens-jwt" >}} ). Access rights and rate limits defined in the default policy take priority over other policies, including policies for the API Product and plan. To avoid that, you need to create the No Operation API and policy that won't grant access to the APIs included in the API Product but will satisfy the requirement for a default policy. diff --git a/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates.md b/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates.md index 50ab35d8d9..84f6b2b2da 100644 --- a/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates.md +++ b/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates.md @@ -63,9 +63,9 @@ template. - [Blogs](#blogs) - [Blog Detail](#blog-detail) - [Cart Checkout](#cart-checkout) -- [Organisation User Detail](#organisation-user-detail) -- [Organisation User Edit](#organisation-user-edit) -- [Organisation Users List](#organisation-users-list) +- [Organization User Detail](#organization-user-detail) +- [Organization User Edit](#organization-user-edit) +- [Organization Users List](#organization-users-list) - [Product Detail](#product-detail) - [Product OAS Documentation](#product-oas-documentation) @@ -490,16 +490,16 @@ Accessible via `{{ range $template := $product.Templates }}` -## Organisation User Detail +## Organization User Detail **Template Path**: `themes/default/views/user_detail.tmpl` -This template is used to render the organisation user detail page. +This template is used to render the organization user detail page. ### Available Objects - `{{ .errors }}`: Map of template errors (Key: category, Value: error message) -- `{{ .user }}`: The organisation user object. +- `{{ .user }}`: The organization user object. ### User Attributes @@ -511,12 +511,12 @@ Accessible via `{{ .user }}` | `{{ .First }}` | User name | | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role | @@ -547,17 +547,17 @@ Accessible via `{{ .user }}` -## Organisation User Edit +## Organization User Edit **Template Path**: `themes/default/views/user_edit.tmpl` -This template is used to render the edit page for organisation user. +This template is used to render the edit page for organization user. ### Available Objects - `{{ .errors }}`: Map of template errors (Key: category, Value: error message) - `{{ .roles }}`: List of possible roles -- `{{ .user }}`: The organisation user object. +- `{{ .user }}`: The organization user object. ### Role Attributes @@ -578,12 +578,12 @@ Accessible via `{{ .user }}` | `{{ .First }}` | User name | | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role |
    @@ -628,11 +628,11 @@ Accessible via `{{ .user }}`
    -## Organisation Users List +## Organization Users List **Template Path**: `themes/default/views/user_list.tmpl` -This template is used to render the list of organisation users. +This template is used to render the list of organization users. ### Available Objects @@ -874,7 +874,7 @@ various operations, retrieve specific data, and create dynamic content within yo ### CanCreateOrganisation -Returns true if user can create an organisation. +Returns true if user can create an organization. #### Example Usage ``` @@ -997,12 +997,12 @@ Accessible via `{{ $user := CurrentUser req }}` | `{{ $user.First }}` | User name | | `{{ $user.Last }}` | User surname | | `{{ $user.Email }}` | User email | -| `{{ $user.OrganisationID }}` | User organisation ID | +| `{{ $user.OrganisationID }}` | User organization ID | | `{{ $user.DisplayName }}` | User complete name | | `{{ $user.IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ $user.GetOrganisationID }}` | User's organisation ID | +| `{{ $user.GetOrganisationID }}` | User's organization ID | | `{{ $user.IsAdmin }}` | true if user is an admin | -| `{{ $user.IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ $user.IsOrgAdmin }}` | true if user is an organization admin | | `{{ $user.DisplayRole }}` | User's role | #### Example Usage @@ -1015,7 +1015,7 @@ Accessible via `{{ $user := CurrentUser req }}` {{ if $user.IsAdmin }}

    You have admin privileges.

    {{ else if $user.IsOrgAdmin }} -

    You are an organisation admin.

    +

    You are an organization admin.

    {{ else }}

    Your role: {{ $user.DisplayRole }}

    {{ end }} @@ -1112,7 +1112,7 @@ Accessible via `{{ range .Catalogues }}` ### FilterUserInvites -Returns a list of users that were invited to the current user's organisation, if the user became an organisation. +Returns a list of users that were invited to the current user's organization, if the user became an organization. Expects the request as a parameter. #### User Attributes @@ -1519,7 +1519,7 @@ Returns the credential type ("oAuth2.0" or "authToken") given the credential. This section provides a detailed overview of the email template data available in the Tyk Enterprise Developer Portal. The Tyk Enterprise Developer Portal uses a variety of email templates for different purposes, such as user registration -and access request status or organisation status updates. Each template has access to specific data or functions relevant +and access request status or organization status updates. Each template has access to specific data or functions relevant to its purpose. It's important to note that while email templates can include template data or specific template functions, they do not @@ -1535,9 +1535,9 @@ for additional detail on email notifications sent by the portal. - [Access Request Submitted](#access-request-submitted) - [Activate and Deactivate](#activate-and-deactivate) - [New User Request](#new-user-request) -- [Organisation Approve](#organisation-approve) -- [Organisation Reject](#organisation-reject) -- [Organisation Request](#organisation-request) +- [Organization Approve](#organization-approve) +- [Organization Reject](#organization-reject) +- [Organization Request](#organization-request) - [Reset Password](#reset-password) - [Targeted Invite](#targeted-invite) - [Welcome User](#welcome-user) @@ -1658,14 +1658,14 @@ Accessible via `{{ .user }}` | `{{ .First }}` | User name | | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role | -| `{{ .Organisation.Name }}` | Organisation name | +| `{{ .Organisation.Name }}` | Organization name | | `{{ .Teams }}` | Array of user teams | | `{{ .Teams.ID }}` | Team ID | | `{{ .Teams.Name }}` | Team name | @@ -1696,11 +1696,11 @@ Accessible via `{{ .user }}`

    ``` -### Organisation Approve +### Organization Approve **Template Path**: `themes/default/mailers/organisation_request.tmpl` -This template is used for notifying users that their organisation creation request has been approved. +This template is used for notifying users that their organization creation request has been approved. #### Available Objects @@ -1709,16 +1709,16 @@ This template is used for notifying users that their organisation creation reque #### Example Usage ``` Hello, -The organisation registration request has been approved. You can now manage your organisation in your dashboard here: https://{{.site}}/portal/private/dashboard +The organization registration request has been approved. You can now manage your organization in your dashboard here: https://{{.site}}/portal/private/dashboard Thanks, The team ``` -### Organisation Reject +### Organization Reject **Template Path**: `themes/default/mailers/organisation_reject.tmpl` -This template is used for notifying users that their organisation creation request has been rejected. +This template is used for notifying users that their organization creation request has been rejected. #### Available Objects @@ -1727,21 +1727,21 @@ There's no data sent to this template. #### Example Usage ``` Hello, -The organisation registration request has been rejected. +The organization registration request has been rejected. Thanks, The team ``` -### Organisation Request +### Organization Request **Template Path**: `themes/default/mailers/organisation_request.tmpl` -This template is used for notifying administrators about new organisation creation requests. +This template is used for notifying administrators about new organization creation requests. #### Available Objects - `{{ .user }}`: Returns the user who made the request. -- `{{ .organisationName }}`: Returns the new organisation name. +- `{{ .organisationName }}`: Returns the new organization name. ### User Attributes @@ -1753,18 +1753,18 @@ Accessible via `{{ .user }}` | `{{ .First }}` | User name | | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role | #### Example Usage ``` -There is a new organisation registration request pending. Please approve it from the admin console. -The organisation name: {{ .organisationName }}. +There is a new organization registration request pending. Please approve it from the admin console. +The organization name: {{ .organisationName }}. The user: {{ .user.DisplayName }} ({{ .user.Email }}). ``` @@ -1790,12 +1790,12 @@ Accessible via `{{ current_user }}` | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | | `{{ .Role }}` | User role | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role | #### Example Usage @@ -1831,12 +1831,12 @@ Accessible via `{{ user }}` | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | | `{{ .Role }}` | User role | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role | #### Example Usage @@ -1870,14 +1870,14 @@ Accessible via `{{ .user }}` | `{{ .First }}` | User name | | `{{ .Last }}` | User surname | | `{{ .Email }}` | User email | -| `{{ .OrganisationID }}` | User organisation ID | +| `{{ .OrganisationID }}` | User organization ID | | `{{ .DisplayName }}` | User complete name | | `{{ .IdentityProvider }}` | User provider (Portal or Tyk Identity Broker) | -| `{{ .GetOrganisationID }}` | User's organisation ID | +| `{{ .GetOrganisationID }}` | User's organization ID | | `{{ .IsAdmin }}` | true if user is an admin | -| `{{ .IsOrgAdmin }}` | true if user is an organisation admin | +| `{{ .IsOrgAdmin }}` | true if user is an organization admin | | `{{ .DisplayRole }}` | User's role | -| `{{ .Organisation.Name }}` | Organisation name | +| `{{ .Organisation.Name }}` | organization name | | `{{ .Teams }}` | Array of user teams | | `{{ .Teams.ID }}` | Team ID | | `{{ .Teams.Name }}` | Team name | diff --git a/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso.md b/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso.md index 4a68853fa6..706232b521 100644 --- a/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso.md +++ b/tyk-docs/content/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso.md @@ -33,7 +33,7 @@ In this section, you’ll learn how to enable single sign-on for admin users and Configuration on the portal side is quite straightforward. You need to specify the portal SSO API secret that acts as a credential for the APIs that are used by TIB for communication with the portal within Single Sign-On flow. You can use any value for the portal SSO API secret, but it should be consistent with [TIB configuration]({{< ref "tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/enable-sso#configure-tyk-identity-broker-to-work-with-tyk-enterprise-developer-portal" >}}). -To specify the portal SSO API secret, add the `PORTAL_API_SECRET` variable to [the portal .env file]({{< ref "product-stack/tyk-enterprise-developer-portal/deploy/configuration#env-file" >}}): +To specify the portal SSO API secret, add the `PORTAL_API_SECRET` variable to [the portal .env file]({{< ref "product-stack/tyk-enterprise-developer-portal/deploy/configuration#sample-env-file" >}}): ```.ini PORTAL_API_SECRET=your-portal-api-secret ``` diff --git a/tyk-docs/content/tyk-stack/tyk-gateway/important-prerequisites.md b/tyk-docs/content/tyk-stack/tyk-gateway/important-prerequisites.md index 2903b1e6d7..f932f85f2b 100755 --- a/tyk-docs/content/tyk-stack/tyk-gateway/important-prerequisites.md +++ b/tyk-docs/content/tyk-stack/tyk-gateway/important-prerequisites.md @@ -1,10 +1,6 @@ --- date: 2020-02-18T15:08:55Z -Title: Important Prerequisites -menu: - main: - parent: Tyk Gateway -weight: 6 +Title: Useful Configurations when Getting started aliases: - /getting-started/tutorials/important-prerequisites/ --- @@ -18,7 +14,7 @@ These are some common settings that you need before proceeding with other parts You may need to explicitly define the path in your Tyk config to the directory where you will add the API definitions for Tyk to serve. -``` +```yaml ... "app_path": "/opt/tyk-gateway/apps", ... @@ -28,7 +24,7 @@ the API definitions for Tyk to serve. You need to explicitly set the path to your Policies JSON file in your Tyk config. -``` +```yaml ... "policies": { "policy_source": "file", @@ -43,7 +39,7 @@ Some config options for the Community Edition are not compatible with the Dashbo version, which requires a license. So, **remove** any section in your Tyk config which starts with: -``` +```yaml ... "db_app_conf_options" { ... @@ -51,19 +47,10 @@ starts with: ... ``` -## Files vs API - -For Community Edition, note that you will need to know when to use the Tyk API -endpoint and when mere placing files will do. So far: +## Hot reload is critical in Tyk CE -- Files: Policies, API Definitions -- Tyk API: API key generation +Each time you add an API definition in Tyk CE, you need to make a hot reload API call as follows: -## Hot reload is critical - -Each time you add an API definition to Tyk, you need to request a hot reload call to the Tyk reload -API endpoint. - -``` +```curl curl -H "x-tyk-authorization: {your-secret}" -s https://{your-tyk-host}:{port}/tyk/reload/group | python -mjson.tool ``` diff --git a/tyk-docs/content/tyk-stack/tyk-manager/analytics/geographic-distribution.md b/tyk-docs/content/tyk-stack/tyk-manager/analytics/geographic-distribution.md index 051c7fb03f..ec156e2d7b 100755 --- a/tyk-docs/content/tyk-stack/tyk-manager/analytics/geographic-distribution.md +++ b/tyk-docs/content/tyk-stack/tyk-manager/analytics/geographic-distribution.md @@ -18,10 +18,10 @@ You can view the overview of what the traffic breakdown looks like per country, {{< note success >}} **Note** -From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Geographic Distribution screen will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles#user-owned-analytics" >}}) permission. +From Tyk v5.1 (and LTS patches v4.0.14 and v5.0.3) the Geographic Distribution screen will not be visible to a user if they are assigned the [Owned Analytics]({{< ref "basic-config-and-security/security/dashboard/user-roles" >}}) permission. {{< /note >}} ### MaxMind Settings -To use a MaxMind database, see [MaxMind Database Settings]({{< ref "tyk-oss-gateway/configuration#a-name-enable-geo-ip-a-enable-geo-ip" >}}) in the Tyk Gateway Configuration Options. +To use a MaxMind database, see [MaxMind Database Settings]({{< ref "tyk-oss-gateway/configuration#analytics_configenable_geo_ip" >}}) in the Tyk Gateway Configuration Options. diff --git a/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso.md b/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso.md index dcc9ca9cb3..da015ab37f 100644 --- a/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso.md +++ b/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso.md @@ -13,7 +13,7 @@ This is an end-to-end worked example of how you can use [AzureAD](https://azure. ) to log in to your Dashboard. This guide assumes the following: -You already have authorized access to Tyk's Dashboard. If you haven't, get the authorization key by following this [guide]({{< ref "basic-config-and-security/security/dashboard/create-users#create-a-dashboard-user-with-the-api">}}). +You already have authorized access to Tyk's Dashboard. If you haven't, get the authorization key by following this [guide]({{< ref "basic-config-and-security/security/dashboard/create-users#creating-a-dashboard-user-using-the-dashboard-api">}}). ## Azures's side 1. Access your Azure Portal and navigate to the Azure Active Directory page. @@ -67,7 +67,7 @@ As illustrated in the screen below the following information must be provided: - Identity provider role - Tyk User Group: This can be created from the User Groups section of the dashboard (reference a link to a page in tyk docs here to show how to create a user group). When creating your User Group, one can also select and adjust the permissions for each group. -For more information on how to set and change user permissions, head to this [guide]({{< ref "basic-config-and-security/security/dashboard/create-user-groups#set-user-group-permissions">}}) +For more information on how to set and change user permissions, head to this [guide]({{< ref "basic-config-and-security/security/dashboard/create-user-groups#step-4-set-user-group-permissions">}}) {{< img src="/img/azureAD/raw-editor.png" alt="Profile Configuration - Raw-editor" >}} diff --git a/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib.md b/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib.md index dd50058712..4999faf37f 100644 --- a/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib.md +++ b/tyk-docs/content/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib.md @@ -15,7 +15,7 @@ This is an end-to-end worked example of how you can use [Okta](https://www.okta. ) to log in to your Dashboard. This guide assumes the following: -* You already have authorized access to Tyk's Dashboard. If you haven't, [get the authorization key by following this doc]({{< ref "basic-config-and-security/security/dashboard/create-users#a-name-with-api-a-create-a-dashboard-user-with-the-api" >}}). +* You already have authorized access to Tyk's Dashboard. If you haven't, [get the authorization key by following this doc]({{< ref "basic-config-and-security/security/dashboard/create-users#creating-a-dashboard-user-using-the-dashboard-api" >}}). * For simplicity, you are running TIB locally on port 3010 * You are able to edit TIB's configuration file. @@ -78,7 +78,7 @@ This guide assumes the following: 7. Start TIB by running the binary (`profiles.json` is in the same CWD) - See [Install TIB]({{< ref "advanced-configuration/integrate/3rd-party-identity-providers#tib" >}}) for detailed instructions on how to install TIB + See [Install TIB]({{< ref "advanced-configuration/integrate/3rd-party-identity-providers#tyk-identity-broker-tib-overview" >}}) for detailed instructions on how to install TIB 8. Test that it works: From the broswer call `http://localhost:3010/auth/{PROFILE-NAME-IN-TIB}/openid-connect` - If it's working you'll be redirected to Okta's web page and will be asked to enter your Okta user name and password. diff --git a/tyk-docs/content/tyk-stack/tyk-operator/access-an-api.md b/tyk-docs/content/tyk-stack/tyk-operator/access-an-api.md deleted file mode 100644 index 9daf4a0883..0000000000 --- a/tyk-docs/content/tyk-stack/tyk-operator/access-an-api.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Secure an API with Auth token -weight: 3 ---- - -### Tutorial: Update an API to require a key - -You might already have realized that our `httpbin` API is keyless. If you check the APIDefinition's specification, the `use_keyless` field is set to `true`. -Tyk keyless access represents completely open access for your API and causes Tyk to bypass any session-based middleware (middleware that requires access to token-related metadata). Keyless access will enable all requests through. -You can disable keyless access by setting `use_keyless` to false. - -#### Step 1: Update your `httpbin.yaml` file as follows: - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: httpbin -spec: - name: httpbin - use_keyless: false - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true -``` - -#### Step 2: Apply the changes: - -```bash -kubectl apply -f httpbin.yaml -``` - -Or, if you don’t have the manifest with you, you can run the following command: - -```yaml -cat <}} - -**Note** - - - -Tyk Operator supported authentication types are listed in the [API Definition features]({{}}) page. - -{{< /note >}} - -### Tutorial: Create an API key - -You need to generate a key to access the `httpbin` API now. Follow [this guide](https://tyk.io/docs/getting-started/create-api-key/) to see how to create an API key for your installation. If you’re using Tyk Open Source, you will need to obtain the API name and API ID that you grant the key access to first. - -You can obtain the API name and API ID of our example `httpbin` API by following command: - -```yaml -kubectl describe tykapis httpbin -Name: httpbin -Namespace: default -Labels: -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" -} -``` - -Since you have provided a valid key along with your request, you do not get a `HTTP 401 Unauthorized` response. diff --git a/tyk-docs/content/tyk-stack/tyk-operator/create-an-api.md b/tyk-docs/content/tyk-stack/tyk-operator/create-an-api.md deleted file mode 100644 index 6fb439ed10..0000000000 --- a/tyk-docs/content/tyk-stack/tyk-operator/create-an-api.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Create an API with Tyk Operator -weight: 2 -menu: - main: - parent: "Getting started with Tyk Operator" ---- - -### Tutorial: Create an API with 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. - -#### Step 1: 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`. - -#### Step 2: 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 <}}) page to see all the latest API Definitions fields and features we support. - -### Configure Kubernetes service as an upstream target - -Tyk Gateway deployed in your Kubernetes cluster (Open source, Self managed, or Hybrid) can easily access other Kubernetes services as an upstream proxy target. -In the ApiDefinition manifest, set the `proxy.target_url` as a Kubernetes Service following [DNS for Services and Pods guideline](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/), so that the requests will be proxied to your service. -In general, Kubernetes Services have a `.`.svc.cluster.local DNS entry once they are created. -For example, if you have a service called `httpbin` in `default` namespace, you can contact `httpbin` service with `httpbin.default.svc` DNS record in the cluster, instead of IP addresses. -Please visit the official [Kubernetes documentation](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/) for more details. -Suppose you want to create a Deployment of [httpbin](https://hub.docker.com/r/kennethreitz/httpbin/) service using [ci/upstreams/httpbin.yaml](https://github.com/TykTechnologies/tyk-operator/blob/master/ci/upstreams/httpbin.yaml) file. You are going to expose the application through port `8000` as described under the Service [specification](https://github.com/TykTechnologies/tyk-operator/blob/master/ci/upstreams/httpbin.yaml#L10). -You can create Service and Deployment by either applying the manifest defined in our repository: - -```console -$ kubectl apply -f ci/upstreams/httpbin.yaml -``` - -Or, if you don’t have the manifest with you, you can run the following command: - -```yaml -cat <` namespace as follows: - -```console -$ kubectl get service -n -``` - -You can update your `httpbin` as follows: - -```yaml -cat <..svc:`). -Now, if you send your request to the `/httpbin` endpoint of the Tyk Gateway, the request will be proxied to the `httpbin Service`: - -```curl -curl -sS http://localhost:8080/httpbin/headers -{ - "headers": { - "Accept": "*/*", - "Accept-Encoding": "gzip", - "Host": "httpbin.default.svc:8000", - "User-Agent": "curl/7.68.0" - } -} -``` - -As you can see from the response, the host that your request should be proxied to is `httpbin.default.svc:8000`. - - diff --git a/tyk-docs/content/tyk-stack/tyk-operator/installing-tyk-operator.md b/tyk-docs/content/tyk-stack/tyk-operator/installing-tyk-operator.md deleted file mode 100644 index 8097194104..0000000000 --- a/tyk-docs/content/tyk-stack/tyk-operator/installing-tyk-operator.md +++ /dev/null @@ -1,200 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Installing Tyk Operator -weight: 1 -menu: - main: - parent: "Getting started with Tyk Operator" ---- -Follow this guide to install and configure Tyk Operator using [Helm](https://helm.sh/docs/) to manage API resources on one Tyk Gateway or Dashboard. Since Tyk Operator is a cluster-scoped resource, it should be deployed once for a cluster only. For advanced usage where you need to connect to multiple Tyk installations or Organizations, see [Managing Multiple Organizations with Operator Context]({{}}). - -## Prerequisites - -- [Kubernetes v1.19+](https://kubernetes.io/docs/setup/) -- [Helm 3+](https://helm.sh/docs/intro/install/) -- Kubernetes Cluster Admin rights for installing [CustomResourceDefinitions](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/) -- [cert-manager v1.8+](https://cert-manager.io/docs/installation/kubectl/). Check [cert-manager installation guide](#installing-cert-manager) if you do not have it. -- Tyk Gateway or Tyk Dashboard v3+. Check [Required Tyk configurations](#configuring-tyk) for necessary configurations. - -{{< note success >}} -**Note** - -Tyk Operator supports any Tyk installation whether it is on Tyk Cloud, Hybrid, or self-managed. You only need to make sure that the control plane URL is accessible by Tyk Operator. -{{< /note >}} - -### Configuring Tyk - -We assume you have already installed Tyk. If you don’t have it, check out [Tyk Cloud]({{}}) or [Tyk Self Managed]({{}}) page. [Tyk Helm Chart]({{}}) is the preferred (and easiest) way to install Tyk on Kubernetes. - -In order for policy ID matching to work correctly, Dashboard must have `allow_explicit_policy_id` and `enable_duplicate_slugs` set to `true` and Gateway must have `policies.allow_explicit_policy_id` set to `true`. - -Tyk Operator needs a [user credential]({{}}) to connect with Tyk Dashboard. The Operator user should have write access to the resources it is going to manage, e.g. APIs, Certificates, Policies, and Portal. It is the recommended practice to turn off write access for other users for the above resources. See [Using Tyk Operator to enable GitOps with Tyk]({{< ref "getting-started/key-concepts/gitops-with-tyk" >}}) about maintaining a single source of truth for your API configurations. - -### Installing cert-manager - -Tyk Operator uses cert-manager to provision certificates for the webhook server. If you don't have cert-manager installed, you can follow this command to install it: - -```console -$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.8.0/cert-manager.yaml -``` - -Since Tyk Operator supports Kubernetes v1.19+, the minimum cert-manager version you can use is v1.8. -If you run into the cert-manager related errors, please ensure that the desired version of Kubernetes version works with the chosen version of cert-manager by checking [supported releases page](https://cert-manager.io/docs/installation/supported-releases/) and [cert-manager documentation](https://cert-manager.io/docs/installation/supported-releases/). - -Please wait for the cert-manager to become available before continuing with the next step. - -## Installation steps - -### Option 1: Installing Tyk Operator via Tyk's Umbrella Helm Charts - -If you are using [Tyk Stack]({{}}), [Tyk Control Plane]({{}}), or [Tyk Open Source Chart]({{}}), you can install Tyk Operator alongside other Tyk components by setting value `global.components.operator` to `true`. - -### Option 2: Installing Tyk Operator via stand-alone Helm Chart - -If you prefer to install Tyk Operator separately, following this section to install Tyk Operator using Helm. - -#### Step 1: Create tyk-operator-conf secret - -Tyk Operator configurations are set via a Kubernetes secret. The default K8s secret name is `tyk-operator-conf`. If you want to use another name, configure it through Helm Chart [envFrom](#helm-configurations) value. - -The secret should contain the following keys: - -{{< tabs_start >}} - -{{< tab_start "Open Source" >}} - -| Key | Mandatory | Example Value | Description | -|:-----|:-----|:----------------|:-------------| -| TYK_MODE | Yes | ce | “ce” for Tyk Open Source mode, “pro” for Tyk licensed mode. | -| TYK_URL | Yes | http://gateway-svc-tyk-ce-tyk-gateway.tyk.svc:8080 | Management URL of Tyk Gateway (Open Source) or Tyk Dashboard | -| TYK_AUTH | Yes | myapisecret | Operator user API key. | -| TYK_ORG | Yes | myorgid | Operator user ORG ID. | -| TYK_TLS_INSECURE_SKIP_VERIFY | No | true | Set to `“true”` if the Tyk URL is HTTPS and has a self-signed certificate. If it isn't set, the default value is `false`.| -| WATCH_NAMESPACE | No | foo,bar | Comma separated list of namespaces for Operator to operate on. The default is to operate on all namespaces if not specified.| -| WATCH_INGRESS_CLASS | No | customclass | Define the ingress class Tyk Operator should watch. Default is `tyk`| -| TYK_HTTPS_INGRESS_PORT | No | 8443 | Define the ListenPort for HTTPS ingress. Default is `8443`.| -| TYK_HTTP_INGRESS_PORT | No | 8080 | Define the ListenPort for HTTP ingress. Default is `8080`.| - -{{< tab_end >}} - -{{< tab_start "Licensed mode (Self-managed or Tyk Cloud)" >}} - -| Key | Mandatory | Example Value | Description | -|:-----|:-----|:----------------|:-------------| -| TYK_MODE | Yes | pro | “ce” for Tyk Open Source mode, “pro” for Tyk licensed mode. | -| TYK_URL | Yes | http://dashboard-svc-tyk-tyk-dashboard.tyk.svc:3000 | Management URL of Tyk Gateway (Open Source) or Tyk Dashboard | -| TYK_AUTH | Yes | 2d095c2155774fe36d77e5cbe3ac963b | Operator user API key. | -| TYK_ORG | Yes | 5e9d9544a1dcd60001d0ed20 | Operator user ORG ID. | -| TYK_TLS_INSECURE_SKIP_VERIFY | No | true | Set to `“true”` if the Tyk URL is HTTPS and has a self-signed certificate. If it isn't set, the default value is `false`.| -| WATCH_NAMESPACE | No | foo,bar | Comma separated list of namespaces for Operator to operate on. The default is to operate on all namespaces if not specified.| -| WATCH_INGRESS_CLASS | No | customclass | Define the ingress class Tyk Operator should watch. Default is `tyk`| -| TYK_HTTPS_INGRESS_PORT | No | 8443 | Define the ListenPort for HTTPS ingress. Default is `8443`.| -| TYK_HTTP_INGRESS_PORT | No | 8080 | Define the ListenPort for HTTP ingress. Default is `8080`.| - -{{< tab_end >}} -{{< tabs_end >}} - -##### Connection to Tyk Gateway or Dashboard -If you install Tyk using Helm Chart, `tyk-operator-conf` will have been created with the following keys: `TYK_AUTH, TYK_MODE, TYK_ORG`, and `TYK_URL` by default. If you didn't use Helm Chart for installation, please prepare `tyk-operator-conf` secret yourself using the commands below: - -```console -$ kubectl create namespace tyk-operator-system - -$ kubectl create secret -n tyk-operator-system generic tyk-operator-conf \ - --from-literal "TYK_AUTH=${TYK_AUTH}" \ - --from-literal "TYK_ORG=${TYK_ORG}" \ - --from-literal "TYK_MODE=${TYK_MODE}" \ - --from-literal "TYK_URL=${TYK_URL}" -``` - -{{< note success >}} -**Note** - -For open source users, user API key corresponds to Gateway's [secret]({{}}). - -For licensed users, user API key and Organization ID can be found under "Add / Edit User" page within Tyk Dashboard. `TYK_AUTH` corresponds to Tyk Dashboard API Access Credentials. `TYK_ORG` corresponds to Organization ID. -{{< /note >}} - -{{< note success >}} - **Note** - - If the credentials embedded in the `tyk-operator-conf` are ever changed or updated, the tyk-operator-controller-manager pod must be restarted to pick up these changes. -{{< /note >}} - - -##### Watching Namespaces - -Tyk Operator is installed with cluster permissions. However, you can optionally control which namespaces it watches by setting the `WATCH_NAMESPACE` through `tyk-operator-conf` secret or the environment variable to a comma separated list of k8s namespaces. For example: - -- `WATCH_NAMESPACE=""` will watch for resources across the entire cluster. -- `WATCH_NAMESPACE="foo"` will watch for resources in the `foo` namespace. -- `WATCH_NAMESPACE="foo,bar"` will watch for resources in the `foo` and `bar` namespace. - -##### Watching custom ingress class - -You can configure [Tyk Operator as Ingress Controller]({{}}) so that [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) resources can be managed by Tyk as APIs. By default, Tyk Operator looks for the value `tyk` in Ingress resources `kubernetes.io/ingress.class` annotation and will ignore all other ingress classes. If you want to override this default behavior, you may do so by setting [WATCH_INGRESS_CLASS](#step-1-create-tyk-operator-conf-secret) through `tyk-operator-conf` or the environment variable. - -#### Step 2: Installing Tyk Operator and Custom Resource Definitions (CRDs) - -You can install CRDs and Tyk Operator using the stand-alone Helm Chart by running the following command: - -```console -$ helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ -$ helm repo update - -$ helm install tyk-operator tyk-helm/tyk-operator -n tyk-operator-system -``` - -This process will deploy Tyk Operator and its required Custom Resource Definitions (CRDs) into your Kubernetes cluster in `tyk-operator-system` namespace. - -##### Helm configurations - -| Key | Type | Default | -|-----|------|---------| -| envFrom[0].secretRef.name | string | `"tyk-operator-conf"` | -| envVars[0].name | string | `"TYK_HTTPS_INGRESS_PORT"` | -| envVars[0].value | string | `"8443"` | -| envVars[1].name | string | `"TYK_HTTP_INGRESS_PORT"` | -| envVars[1].value | string | `"8080"` | -| extraVolumeMounts | list | `[]` | -| extraVolumes | list | `[]` | -| fullnameOverride | string | `""` | -| healthProbePort | int | `8081` | -| hostNetwork | bool | `false` | -| image.pullPolicy | string | `"IfNotPresent"` | -| image.repository | string | `"tykio/tyk-operator"` | -| image.tag | string | `"v0.18.0"` | -| imagePullSecrets | list | `[]` | -| metricsPort | int | `8080` | -| nameOverride | string | `""` | -| nodeSelector | object | `{}` | -| podAnnotations | object | `{}` | -| podSecurityContext.allowPrivilegeEscalation | bool | `false` | -| rbac.image.pullPolicy | string | `"IfNotPresent"` | -| rbac.image.repository | string | `"gcr.io/kubebuilder/kube-rbac-proxy"` | -| rbac.image.tag | string | `"v0.8.0"` | -| rbac.port | int | `8443` | -| rbac.resources | object | `{}` | -| replicaCount | int | `1` | -| resources | object | `{}` | -| serviceMonitor | bool | `false` | -| webhookPort | int | `9443` | - -## Upgrading Tyk Operator -You can upgrade Tyk Operator through Helm Chart by running the following command: - -```console -$ helm upgrade -n tyk-operator-system tyk-operator tyk-helm/tyk-operator --wait -``` - -[Helm does not upgrade or delete CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations) when performing an upgrade. Because of this restriction, an additional step is required when upgrading Tyk Operator with Helm. -```console -$ kubectl apply -f https://raw.githubusercontent.com/TykTechnologies/tyk-operator/master/helm/crds/crds.yaml -``` - -## Uninstalling Tyk Operator -To uninstall Tyk Operator, you need to run the following command: - -```console -$ helm delete tyk-operator -n tyk-operator-system -``` diff --git a/tyk-docs/content/tyk-stack/tyk-operator/migration.md b/tyk-docs/content/tyk-stack/tyk-operator/migration.md deleted file mode 100644 index 72ece53026..0000000000 --- a/tyk-docs/content/tyk-stack/tyk-operator/migration.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Manage existing APIs and policies -weight: 16 -menu: - main: - parent: "Tyk Operator" ---- - -If you have existing APIs and Policies running on your Tyk platform, and you want to start using Tyk Operator to manage them, you probably would not want to re-create the APIs and Policies on the platform using Operator CRDs. It is because you will lose keys, policies, and analytics linked to the APIs. You can instead link existing APIs and Policies to a CRD by specifying the API ID or Policy ID in the CRD spec. This way, Operator will update the existing API or Policy according to the CRD spec. Any keys, policies and analytics linked to the API will continue to operate the same. This is great for idempotency. - -## Export existing configurations to CRDs - -Instead of creating the API and Policy CRDs from scratch, you can try exporting them from Dashboard using a snapshot tool. You can find the detail usage guide [here](https://github.com/TykTechnologies/tyk-operator/blob/master/pkg/snapshot/README.md). This is great if you want to have a quick start. However, this is still a PoC feature so we recommend you to double check the output files before applying them to your cluster. - -## Migration of existing API - -If there are existing APIs that you want to link to a CRD, it's very easy to do so. You need to simply add the `api_id` from your API Definition to the YAML of your `ApiDefinition` type. Then, the Operator will take care of the rest. - -Example: - -1. From the existing API Definition, grab the following field: - -```json -"api_id": "5e0fac4845bb46c77543be28300fd9d7" -``` - -2. Simply add this value to your YAML, in the `spec.api_id`field: - -```yaml -apiVersion: tyk.tyk.io/v1alpha1 -kind: ApiDefinition -metadata: - name: my-existing-api -spec: - api_id: 5e0fac4845bb46c77543be28300fd9d7 - name: existing API - protocol: http - active: true - proxy: - target_url: http://httpbin.org - listen_path: /httpbin - strip_listen_path: true -``` - -3. Then apply your changes: - -```console -$ kubectl apply -f config/samples/httpbin_protected.yaml -apidefinition.tyk.tyk.io/my-existing-api created -``` - -{{< note success >}} -**Note** - -The source of truth for the API definition is now the CRD, meaning it will override any differences in your existing API definition. -{{< /note >}} - -## Migration of existing Policy -If you have existing pre-Operator policies, you can easily link them to a CRD, which will allow you to modify them through the YAML moving forward. -Simply set the id field in the SecurityPolicy YAML to the _id field in the existing Policy's JSON. This will allow the Operator to make the link. -Note that the YAML becomes the source of truth and will overwrite any changes between it and the existing Policy. - -**Example**: -1. Find out your existing Policy ID, e.g. `5f8f3933f56e1a5ffe2cd58c` - -2. Stick the policy ID `5f8f3933f56e1a5ffe2cd58c` into the YAML's `spec.id` field like below - -```yaml -my-security-policy.yaml: -apiVersion: tyk.tyk.io/v1alpha1 -kind: SecurityPolicy -metadata: - name: new-httpbin-policy -spec: - id: 5f8f3933f56e1a5ffe2cd58c - name: My New HttpBin Policy - state: active - active: true - access_rights_array: - - name: new-httpbin-api # name of your ApiDefinition object. - namespace: default # namespace of your ApiDefinition object. - versions: - - Default -``` - -The `spec.access_rights_array` field of the YAML must refer to the ApiDefinition object that the policy identified by the id will affect. - -To find available ApiDefinition objects: - -```console -$ kubectl get tykapis -A -NAMESPACE NAME DOMAIN LISTENPATH PROXY.TARGETURL ENABLED -default new-httpbin-api /httpbin http://httpbin.org true -``` - -3. And then apply this file: - -```console -$ kubectl apply -f my-security-policy.yaml -securitypolicy.tyk.tyk.io/new-httpbin-policy created -``` - -Now the changes in the YAML were applied to the existing Policy. You can now manage this policy through the CRD moving forward. -Note, if this resource is unintentionally deleted, the Operator will recreate it with the same `id` field as above, allowing keys to continue to work as before the delete event. - -## Idempotency - -Because of the ability to declaratively define the `api_id`, this gives us the ability to preserve Keys that are tied to APIs or policies which are tied to APIs. -Imagine any use case where you have keys tied to policies, and policies tied to APIs. -Now imagine that these resources are unintentionally destroyed. Our database goes down, or our cluster, or something else. -Well, using the Tyk Operator, we can easily re-generate all our resources in a non-destructive fashion. That's because the operator intelligently constructs the unique ID using the unique namespaced name of our CRD resources. For that reason. -Alternatively, if you don't explicitly state it, it will be hard-coded for you by Base64 encoding the namespaced name of the CRD. - -For example: - -1. we have keys tied to policies tied to APIs in production. -2. Our production DB gets destroyed, all our Policies and APIs are wiped -3. The Tyk Operator can resync all the changes from our CRDs into a new environment, by explicitly defining the Policy IDs and API IDs as before. -4. This allows keys to continue to work normally as Tyk resources are generated idempotently through the Operator. diff --git a/tyk-docs/content/tyk-stack/tyk-operator/publish-an-api.md b/tyk-docs/content/tyk-stack/tyk-operator/publish-an-api.md deleted file mode 100644 index 4e552404d3..0000000000 --- a/tyk-docs/content/tyk-stack/tyk-operator/publish-an-api.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -date: 2017-03-24T16:39:31Z -title: Publish an API to Dev Portal ---- - -### Introduction - -For Tyk Self Managed or Tyk Cloud, you can set up a Developer Portal to expose a facade of your APIs and then allow third-party developers to register and use your APIs. -You can make use of Tyk Operator CRDs to publish the APIs as part of your CI/CD workflow. If you have followed this Getting Started guide to create the httpbin example API, you can publish it to your Tyk Classic Developer Portal in a few steps. - -{{< note success >}} - -**Note** - - - -Currently Operator only supports publishing API to the Tyk Classic Portal. - -{{< /note >}} - -### Tutorial: Publish an API with Tyk Operator -#### Step 1: Creating a security policy - -When you publish an API to the Portal, Tyk actually publishes a way for developers to enroll in a policy, not into the API directly. Therefore, you should first set up a security policy for the developers, before proceeding with the publishing. - -To do that, you can use the following command: - -```yml -cat <}}) page to see all the latest Security Policies fields and features Tyk Operator supports. diff --git a/tyk-docs/content/tyk-stack/tyk-operator/tyk-operator-reconciliation.md b/tyk-docs/content/tyk-stack/tyk-operator/tyk-operator-reconciliation.md deleted file mode 100644 index 509a94b0ac..0000000000 --- a/tyk-docs/content/tyk-stack/tyk-operator/tyk-operator-reconciliation.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "Tyk Operator Reconciliation" -date: 2023-03-28 -tags: ["Tyk Operator", "Reconciliation", "Kubernetes"] -description: "Describes what is meant by Reconciliation in Tyk Operator. We will go over some Kubernetes concepts and then explain how reconciliation happens in Tyk Operator." -weight: 20 -menu: - main: - parent: "Tyk Operator" ---- - -This page describes what is meant by Reconciliation in Tyk Operator. We will go over some Kubernetes concepts and then explain how reconciliation happens in Tyk Operator. - -## Controllers & Operators -In Kubernetes, [controllers](https://kubernetes.io/docs/concepts/architecture/controller/) watch one or more Kubernetes resources, which can be built-in types like *Deployments* or custom resources like *ApiDefinition* - in this case, we refer to Controller as Operator. The purpose of a controller is to match the desired state by using Kubernetes APIs and external APIs. - -> A [Kubernetes operator](https://www.redhat.com/en/topics/containers/what-is-a-kubernetes-operator) is an application-specific controller that extends the functionality of the Kubernetes API to create, configure, and manage instances of complex applications on behalf of a Kubernetes user. - -## Desired State vs Observed State -Let’s start with the *Desired State*. It is defined through Kubernetes Manifests, most likely YAML or JSON, to describe what you want your system to be in. Controllers will watch the resources and try to match the actual state (the observed state) with the desired state for Kubernetes Objects. For example, you may want to create a Deployment that is intended to run three replicas. So, you can define this desired state in the manifests, and Controllers will perform necessary operations to make it happen. - -How about *Observed State*? Although the details of the observed state may change controller by controller, usually controllers update the status field of Kubernetes objects to store the observed state. For example, in Tyk Operator, we update the status to include *api_id*, so that Tyk Operator can understand that the object was successfully created on Tyk. - -## Reconciliation -Reconciliation is a special design paradigm used in Kubernetes controllers. Tyk Operator also uses the same paradigm, which is responsible for keeping our Kubernetes objects in sync with the underlying external APIs - which is Tyk in our case. - -### When would reconciliation happen? -Before diving into Tyk Operator reconciliation, let's briefly mention some technical details about how and when reconciliation happens. Reconciliation only happens when certain events happen on your cluster or objects. Therefore, Reconciliation will **NOT** be triggered when there is an update or modification on Tyk’s side. It only watches certain Kubernetes events and is triggered based on them. Usually, the reconciliation happens when you modify a Kubernetes object or when the cache used by the controller expires - side note, controllers, in general, use cached objects to reduce the load in the Kube API server. Typically, caches expire in ~10 hours or so but the expiration time might change based on Operator configurations. - -So, in order to trigger Reconciliation, you can either -- modify an object, which will trigger reconciliation over this modified object or, -- restart Tyk Operator pod, which will trigger reconciliation over each of the objects watched by Tyk Operator. - -### What happens during Reconciliation? -Tyk Operator will compare desired state of the Kubernetes object with the observed state in Tyk. If there is a drift, Tyk Operator will update the actual state on Tyk with the desired state. In the reconciliation, Tyk Operator mainly controls three operations; DELETE, CREATE, and UPDATE. - -- **CREATE** - an object is created in Kubernetes but not exists in Tyk -- **UPDATE** - an object is in different in Kubernetes and Tyk (we compare that by hash) -- **DELETE** - an object is deleted in Kubernetes but exists in Tyk - -### Drift Detection -If human operators or any other system delete or modify ApiDefinition from Tyk Gateway or Dashboard, Tyk Operator will restore the desired state back to Tyk during reconciliation. This is called Drift Detection. It can protect your systems from unauthorized or accidental modifications. It is a best practice to limit user access rights on production environment to read-only in order to prevent accidental updates through API Manager directly. - -### Start using Tyk Operator -If you are already running Tyk for your APIs, you can convert existing APIs and Policies into CRDs and let Tyk Operator manages the state of it going forward. Check out our [Migration Guide]({{< ref "tyk-stack/tyk-operator/migration" >}}). - -It is also useful to set up your CI/CD pipeline to automate changes of API Definitions in Git to be published to Tyk. See [Using Tyk Operator to enable GitOps with Tyk]({{< ref "getting-started/key-concepts/gitops-with-tyk" >}}) for the key concepts behind it. diff --git a/tyk-docs/content/universal-data-graph/udg-examples.md b/tyk-docs/content/universal-data-graph/udg-examples.md index b0ad90bb7f..15accee722 100644 --- a/tyk-docs/content/universal-data-graph/udg-examples.md +++ b/tyk-docs/content/universal-data-graph/udg-examples.md @@ -12,13 +12,13 @@ aliases: It is possible to import various UDG examples from the [official Tyk examples repository](https://github.com/TykTechnologies/tyk-examples). We offer 3 ways of importing an example into Tyk: - - Using [tyk-sync]({{< ref "/product-stack/tyk-sync/overview" >}}) + - Using [tyk-sync]({{< ref "/api-management/automations#synchronize-api-configurations-with-github-actions" >}}) - Manually import via [Dashboard API Import]({{< ref "getting-started/import-apis" >}}) - Using Tyk Dashboard to browse and import the examples directly ## Import via tyk-sync -Please follow the [tyk-sync documentation]({{< ref "/product-stack/tyk-sync/commands/sync-examples#import-tyk-example-into-dashboard" >}}) to learn more about this approach. +Please follow the [tyk-sync documentation]({{< ref "/api-management/automations#examples-publish-command" >}}) to learn more about this approach. ## Import via Tyk Dashboard API Import diff --git a/tyk-docs/data/alias.json b/tyk-docs/data/alias.json new file mode 100644 index 0000000000..607978d539 --- /dev/null +++ b/tyk-docs/data/alias.json @@ -0,0 +1,99 @@ +{ + "advanced-configuration/integrate/api-auth-mode/json-web-tokens": "#use-json-web-tokens-jwt", + "advanced-configuration/integrate/api-auth-mode/oidc-auth0-example": "#redirect-the-user-to-a-login-page", + "advanced-configuration/integrate/api-auth-mode/open-id-connect": "#use-openid-connect", + "basic-config-and-security/security/authentication--authorization": "#introduction", + "basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant": "#use-authorization-code-grant", + "basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant": "#use-client-credentials-grant", + "basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant": "#use-refresh-token-grant", + "basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant": "#use-username-and-password-grant", + "basic-config-and-security/security/authentication-authorization/": "#introduction", + "basic-config-and-security/security/authentication-authorization/basic-auth": "#use-basic-authentication", + "basic-config-and-security/security/authentication-authorization/bearer-tokens": "#use-bearer-tokens", + "basic-config-and-security/security/authentication-authorization/ext-oauth-middleware": "#integrate-external-oauth-middleware", + "basic-config-and-security/security/authentication-authorization/go-plugin-authentication": "#authenticate-using-go-plugins", + "basic-config-and-security/security/authentication-authorization/hmac-signatures": "#sign-requests-with-hmac", + "basic-config-and-security/security/authentication-authorization/json-web-tokens": "#use-json-web-tokens-jwt", + "basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0": "#jwt-and-auth0-with-tyk", + "basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak": "#jwt-and-keycloak-with-tyk", + "basic-config-and-security/security/authentication-authorization/json-web-tokens/split-token": "#split-token", + "basic-config-and-security/security/authentication-authorization/multiple-auth": "#combine-authentication-methods", + "basic-config-and-security/security/authentication-authorization/oauth-2-0": "#set-up-oauth-20-authorization", + "basic-config-and-security/security/authentication-authorization/open-keyless": "#use-open-keyless-authentication", + "basic-config-and-security/security/authentication-authorization/openid-connect": "#use-openid-connect", + "basic-config-and-security/security/authentication-authorization/physical-key-expiry": "#set-physical-key-expiry-and-deletion", + "basic-config-and-security/security/authentication-authorization/python-etc-plugin-authentication": "#use-python-coprocess-and-jsvm-plugin-authentication", + "basic-config-and-security/security/authentication-&-authorization": "#introduction", + "basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant": "#use-authorization-code-grant", + "basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant": "#use-client-credentials-grant", + "basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant": "#use-refresh-token-grant", + "basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant": "#use-username-and-password-grant", + "basic-config-and-security/security/mutual-tls": "#enable-mutual-tls", + "basic-config-and-security/security/mutual-tls/client-mtls": "#client-mtls", + "basic-config-and-security/security/mutual-tls/concepts": "#concepts", + "basic-config-and-security/security/mutual-tls/upstream-mtls": "#upstream-mtls", + "basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens": "#revoke-oauth-tokens", + "security/your-apis/bearer-tokens": "#use-bearer-tokens", + "security/your-apis/json-web-tokens": "#use-json-web-tokens-jwt", + "security/your-apis/openid-connect": "#use-openid-connect", + "tyk-apis/tyk-gateway-api/api-definition-objects/jwt/docs/basic-config-and-security/security/authentication-authorization/json-web-tokens": "#use-json-web-tokens-jwt", + "basic-config-and-security/security/authentication-authorization/oauth2-0/auth-code-grant": "#use-authorization-code-grant", + "basic-config-and-security/security/authentication-authorization/oauth2-0/client-credentials-grant": "#use-client-credentials-grant", + "basic-config-and-security/security/authentication-authorization/oauth2-0/refresh-token-grant": "#use-refresh-token-grant", + "basic-config-and-security/security/authentication-authorization/oauth2-0/username-password-grant": "#use-username-and-password-grant", + "basic-config-and-security/security/authentication-authorization/oauth2.0/auth-code-grant": "#use-authorization-code-grant", + "basic-config-and-security/security/authentication-authorization/physical-token-expiry": "#set-physical-key-expiry-and-deletion", + "basic-config-and-security/security/tls-and-ssl/mutual-tls": "#enable-mutual-tls", + "basic-config-and-security/security/your-apis/oauth2.0/revoke-oauth-tokens": "#revoke-oauth-tokens", + "security/tls-and-ssl/mutual-tls": "#enable-mutual-tls", + "security/your-apis/oauth-2-0": "#introduction", + "advanced-configuration/manage-multiple-environments/tyk-sync": "#synchronize-tyk-environment-with-github-repository", + "product-stack/tyk-operator/advanced-configurations/api-categories": "#api-categories", + "product-stack/tyk-operator/advanced-configurations/api-versioning": "#api-versioning", + "product-stack/tyk-operator/advanced-configurations/client-authentication": "#set-up-tyk-classic-api-authentication", + "product-stack/tyk-operator/advanced-configurations/internal-looping": "#internal-looping-with-tyk-operator", + "product-stack/tyk-operator/advanced-configurations/management-of-api": "#manage-api-metadata", + "product-stack/tyk-operator/advanced-configurations/tls-certificate": "#tls-certificates", + "product-stack/tyk-operator/getting-started/create-an-api-overview": "#set-up-oas-api", + "product-stack/tyk-operator/getting-started/create-an-oas-api": "#set-up-oas-api", + "product-stack/tyk-operator/getting-started/example-tyk-oas-api": "#set-up-oas-api", + "product-stack/tyk-operator/getting-started/quick-start-graphql": "#set-up-manifest-for-graphql", + "product-stack/tyk-operator/getting-started/quick-start-http": "#set-up-manifest-for-http", + "product-stack/tyk-operator/getting-started/quick-start-tcp": "#set-up-manifest-for-tcp", + "product-stack/tyk-operator/getting-started/quick-start-udg": "#set-up-manifest-for-udg", + "product-stack/tyk-operator/getting-started/secure-an-api-overview": "#secure-your-oas-api", + "product-stack/tyk-operator/getting-started/secure-an-oas-api": "#secure-your-oas-api", + "product-stack/tyk-operator/getting-started/security-policy-example": "#add-a-security-policy-to-your-api", + "product-stack/tyk-operator/getting-started/tyk-operator-api-ownership": "#api-ownership", + "product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations": "#multi-organization-management-with-tyk-operator", + "product-stack/tyk-operator/key-concepts/custom-resources": "#custom-resources-in-tyk", + "product-stack/tyk-operator/key-concepts/key-concepts": "#key-concepts", + "product-stack/tyk-operator/key-concepts/operator-context": "#define-operatorcontext-for-multi-tenant-api-management", + "product-stack/tyk-operator/key-concepts/operator-user": "#operator-user", + "product-stack/tyk-operator/reference/api-definition": "#update-api-definitions-locally", + "product-stack/tyk-operator/reference/security-policy": "#security-policy-crd", + "product-stack/tyk-operator/reference/tyk-oas-api-definition": "#tykoasapidefinition-crd", + "product-stack/tyk-operator/reference/version-compatibility": "#version-compatability", + "product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied": "#tyk-operator-changes-not-applied", + "product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting": "#reconcilation-with-tyk-operator", + "product-stack/tyk-operator/tyk-ingress-controller": "#control-kubernetes-ingress-resources", + "product-stack/tyk-sync/commands/sync-dump": "#dump-command", + "product-stack/tyk-sync/commands/sync-examples": "#examples-command", + "product-stack/tyk-sync/commands/sync-publish": "#publish-command", + "product-stack/tyk-sync/commands/sync-sync": "#sync-command", + "product-stack/tyk-sync/commands/sync-update": "#update-command", + "product-stack/tyk-sync/installing-tyk-sync": "#installation", + "product-stack/tyk-sync/overview": "#synchronize-tyk-environment-with-github-repository", + "product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations": "#backup-api-configurations-with-github-actions", + "product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations": "#synchronize-api-configurations-with-github-actions", + "product-stack/tyk-sync/tutorials/tutorial-update-api-configurations": "#update-api-definitions-locally", + "tyk-operator": "#automate-api-management-in-kubernetes-environments", + "tyk-stack/tyk-operator/access-an-api": "#update-your-api-to-require-a-key", + "tyk-stack/tyk-operator/create-an-api": "#create-an-api-key", + "tyk-stack/tyk-operator/installing-tyk-operator": "#install-and-configure-tyk-operator", + "tyk-stack/tyk-operator/migration": "#migration-of-existing-api", + "tyk-stack/tyk-operator/publish-an-api": "#publish-your-api-to-dev-portal", + "tyk-stack/tyk-operator/secure-an-api": "#secure-your-oas-api", + "tyk-stack/tyk-operator/tyk-operator-reconciliation": "#reconciliation", + "tyk-sync": "#synchronize-tyk-environment-with-github-repository" +} \ No newline at end of file diff --git a/tyk-docs/data/menu.yaml b/tyk-docs/data/menu.yaml index 171914abfa..ef8cc880c4 100644 --- a/tyk-docs/data/menu.yaml +++ b/tyk-docs/data/menu.yaml @@ -3,5040 +3,4804 @@ menu: - title: "Home" path: / - category: Tab + category: Label show: True - menu: - - title: "Tyk API Gateway Documentation" - path: / - category: Page - show: True - - title: "Deployment and Operations" - path: /apim - category: Tab + - title: "Getting Started" + path: / + category: Label show: True menu: - - title: "Overview" - path: /apim - category: Page - show: True - - title: "Tyk Open Source API Gateway" - category: Directory - show: True - menu: - - title: "Overview" - path: /apim/open-source + - title: "Create Account" + path: /getting-started/create-account category: Page show: True - - title: "Quick start" - path: /deployment-and-operations/tyk-open-source-api-gateway/quick-start + - title: "Configure Your First API" + path: /getting-started/configure-first-api category: Page show: True - - title: "Other installation options" - category: Directory - show: True - menu: - - title: "Overview" - path: /apim/open-source/installation - category: Page - show: True - - title: "Docker" - path: /tyk-oss/ce-docker - category: Page - show: True - - title: "Kubernetes" - 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 - 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 + - title: "Using Tyk Dashboard" + path: /getting-started/using-tyk-dashboard 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 + - title: "Deployment and Operations" + path: /apim + category: Label + show: True + menu: + - title: "Overview" + path: /apim category: Page show: True - - title: "Deployment lifecycle" + - title: "Open Source API Gateway" category: Directory show: True menu: - - title: "Planning phase" - category: Directory - show: True - menu: - - title: "Getting started" - category: Directory + - title: "Overview" + path: /apim/open-source + category: Page 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: "Quick start" + path: /deployment-and-operations/tyk-open-source-api-gateway/quick-start 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: "Other installation options" 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 - 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" + - title: "Overview" + path: /apim/open-source/installation + category: Page + show: True + - title: "Docker" + path: /tyk-oss/ce-docker + category: Page + show: True + - title: "Kubernetes" + 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: "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: "Initial portal configuration" - path: /tyk-cloud/initial-portal-config + - title: "Tyk Cloud" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-cloud 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" - category: Page - show: False - - title: "Deploy hybrid gateways" - path: /tyk-cloud/environments-deployments/hybrid-gateways - category: Page + - title: "What Is Tyk Cloud?" + path: /tyk-cloud/what-is-tyk-cloud show: True - - title: "Securing your APIs" - path: /tyk-cloud/securing-your-apis + - title: "Free Trial" + path: /deployment-and-operations/tyk-cloud-platform/quick-start category: Page show: True - - title: "Using custom domains" - path: /tyk-cloud/using-custom-domains - category: Page + - title: "Deployment lifecycle" + category: Directory show: True - - title: "Deploy hybrid gateways using legacy helm chart" - path: /tyk-cloud/environments-deployments/hybrid-gateways-helm + 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" + 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" + 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 + 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: False + - title: "Initial portal configuration" + path: /tyk-cloud/initial-portal-config + 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" + category: Page + show: False + - title: "Deploy hybrid gateways" + path: /tyk-cloud/environments-deployments/hybrid-gateways + category: Page + show: True + - title: "Securing your APIs" + path: /tyk-cloud/securing-your-apis + category: Page + show: True + - title: "Using custom domains" + path: /tyk-cloud/using-custom-domains + category: Page + show: True + - title: "Deploy hybrid gateways using legacy helm chart" + path: /tyk-cloud/environments-deployments/hybrid-gateways-helm + category: Page + show: True + - title: "Operations and BAU" + 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" + 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 + 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 + 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 + 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 + 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: "Self Managed" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-on-premises category: Page show: True - - title: "Operations and BAU" - category: Directory - show: True - menu: - - title: "Manage, audit and govern cloud infrastructure" - category: Page - show: False - - title: "Observability of cloud Data" + - title: "Quick Start" + path: /getting-started/quick-start category: Page - show: False - - title: "Using plugins" - 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 - 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" + - title: "Demos & PoCs" category: Directory show: True 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" + - 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 + category: Page + show: True + - title: "Quick start - Docker Compose" + path: /tyk-on-premises/docker/docker-pro-demo + category: Page + show: True + - title: "Quick start - Windows" + category: Directory + show: True + menu: + - title: "Docker Compose on Windows" + path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows + category: Page + show: True + - title: "Docker Compose Linux on Windows" + path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl + category: Page + show: True + - title: "Deployment lifecycle" 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 - category: Page - show: True - - title: "Troubleshooting and support" - category: Directory + - title: "Planning phase" + category: Directory + show: True + menu: + - title: "Licensing and deployment models" + path: /tyk-on-premises/licensing + category: Page + show: True + - title: "Design for CI/CD" + category: Page + show: False + - title: "Single Sign On (SSO)" + category: Directory + show: True + 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: 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" + category: Directory + show: True + menu: + - title: "Overview" + path: /tyk-self-managed/install + category: Page + show: True + - title: "Kubernetes" + category: Directory + show: True + 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 Self Manage Helm chart" + path: /tyk-self-managed/tyk-helm-chart + category: Page + show: True + - title: "Red Hat (RHEL / CentOS)" + category: Directory + show: True + 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: "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 + 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" + category: Directory + show: True + menu: + - title: "AWS Marketplace" + path: /tyk-on-premises/installation/on-aws + category: Page + show: True + - title: "EC2 Installation" + path: /tyk-on-premises/on-aws/ec2 + 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" + category: Directory + show: True + menu: + - title: "Ensure High Availability" + path: /planning-for-production/ensure-high-availability + category: Page + show: True + - 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 setting" + path: /product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas + category: Page + show: True + - title: "Tyk Classic setting" + 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: "Load Balancing" + path: /planning-for-production/ensure-high-availability/load-balancing + category: Page + show: True + - 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/database-settings + category: Page + show: True + - title: "MongoDB Sizing" + path: /planning-for-production/database-settings/mongodb-sizing + category: Page + show: True + - 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: "Set-up GitOps" + category: Page + 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 + 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: "Benchmarks" + path: /planning-for-production/benchmarks + category: Page + show: True + - title: "Redis" + path: /planning-for-production/redis + category: Page + show: True + - title: "Operations and BAU" + category: Directory + show: True + menu: + - title: "Observability & Monitoring" + path: /planning-for-production/monitoring + category: Page + show: True + - title: "Monitor Tyk Stack" + path: /planning-for-production/monitoring/tyk-components + category: Page + show: True + - title: "GitOps with Tyk Operator" + path: /getting-started/key-concepts/gitops-with-tyk + category: Page + show: True + - title: "Monitoring upstream services" + category: Page + show: False + - title: "Scaling up and down depending on usage/performance" + category: Page + 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 - 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: "API Management" + path: /getting-started + category: Label + show: True + menu: - title: "Overview" - path: /tyk-on-premises + path: /getting-started category: Page show: True - - title: "Quick Start" - path: /getting-started/quick-start + - title: "Authentication and Authorization" + path: /api-management/authentication-authorization category: Page show: True - - title: "Tyk Demos & PoCs" - category: Directory + - title: "Automations" + path: /api-management/automations + category: Page 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 - category: Page - show: True - - title: "Quick start - Docker Compose" - path: /tyk-on-premises/docker/docker-pro-demo - category: Page - show: True - - title: "Quick start - Windows" - category: Directory - show: True - menu: - - title: "Docker Compose on Windows" - path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows - category: Page - show: True - - title: "Docker Compose Linux on Windows" - path: /tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl - category: Page - show: True - - title: "Deployment lifecycle" + - title: "Manage APIs" category: Directory show: True menu: - - title: "Planning phase" - category: Directory - show: True - menu: - - title: "Licensing and deployment models" - path: /tyk-on-premises/licensing - category: Page - show: True - - title: "Design for CI/CD" - category: Page - show: False - - title: "Single Sign On (SSO)" - category: Directory - show: True - 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: 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" - category: Directory - show: True - menu: - title: "Overview" - path: /tyk-self-managed/install - category: Page - show: True - - title: "Kubernetes" - category: Directory - show: True - 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 - 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 - 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 + show: False 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: "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: "Tyk Classic APIs" category: Directory show: True menu: - - title: "Ensure High Availability" - path: /planning-for-production/ensure-high-availability - category: Page - show: True - - title: "Circuit Breakers" - category: Directory - show: True - menu: - - title: "Overview" - path: /planning-for-production/ensure-high-availability/circuit-breakers + - title: "Plan and define APIs" + category: Page + show: False + - title: "Useful Configurations" + path: /tyk-stack/tyk-gateway/important-prerequisites + category: Page + show: True + - 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: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas + - title: "Import an API" + path: /getting-started/import-apis category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic + - title: "Secure an API" + path: /getting-started/create-security-policy 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: "Load Balancing" - path: /planning-for-production/ensure-high-availability/load-balancing - category: Page - show: True - - 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" + - title: "Access an API" + path: /getting-started/create-api-key + category: Page + show: True + - title: "API Operations" category: Directory show: False menu: - - title: "Deploy Tyk components and their dependencies" - category: Page - show: False - - title: "Database settings" + - 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" category: Directory show: True menu: - - title: "Overview" - path: /planning-for-production/database-settings - category: Page - show: True - - title: "MongoDB Sizing" - path: /planning-for-production/database-settings/mongodb-sizing - category: Page - show: True - - 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: "Set-up GitOps" - category: Page - 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" + - 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 + 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 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: "Benchmarks" - path: /planning-for-production/benchmarks - category: Page - show: True - - title: "Redis" - path: /planning-for-production/redis - category: Page - show: True - - title: "Operations and BAU" - category: Directory - show: True - menu: - - title: "Observability & Monitoring" - path: /planning-for-production/monitoring - category: Page - show: True - - title: "Monitor Tyk Stack" - path: /planning-for-production/monitoring/tyk-components - category: Page - show: True - - title: "GitOps with Tyk Operator" - path: /getting-started/key-concepts/gitops-with-tyk - category: Page - show: True - - title: "Monitoring upstream services" - category: Page - show: False - - title: "Scaling up and down depending on usage/performance" + - 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: False - - title: "Manage plug-ins (install, monitor, update, configure)" + 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 - - title: "Manage third party integrations (API observability, observability, ...)" - category: Page + menu: + - title: "Getting started" + 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 + show: True + - title: "Design Data Graphs" + category: Directory show: False - - title: "Maintain Tyk configuration" - category: Page + menu: + - title: "Design data graph schema APIs" + category: Page + show: False + - title: "Connect data sources" + category: Page + show: False + - title: "Define access to data graph APIs" + category: Page + show: False + - title: "Deploy Data Graphs" + category: Directory show: False - - title: "Upgrade Tyk components and their dependencies" - category: Page + menu: + - title: "Test data graphs" + category: Page + show: False + - title: "Persisted queries" + category: Page + show: False + - title: "Data Graph operations" + category: Directory 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 - show: True - - title: "Secure an API" - path: /getting-started/create-security-policy - category: Page - show: True - - title: "Access an API" - path: /getting-started/create-api-key - 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" - 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 - 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" + menu: + - title: "Version data graphs" + category: Page + show: False + - title: "Publish APIs" category: Directory show: True menu: - - title: "Create a GraphQL API" - path: /graphql/creating-gql-api - category: Page - show: True - - title: "Introspection" + - title: "Overview" + category: Directory + show: False + menu: + - title: "Getting started" category: Directory show: True menu: - title: "Overview" - path: /graphql/introspection + path: /product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal category: Page show: True - - title: "Introspection queries" - path: /graphql/introspection/introspection-queries + - 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: "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 + - 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: True + menu: + - title: "Capabilities" category: Page + path: /api-management/async-apis/use-cases show: True - - title: "GraphQL playground" - path: /graphql/graphql-playground + - title: "Advanced Use Cases" category: Page + path: /api-management/async-apis/advanced-use-cases 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" + - title: "AI Management" 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 - show: True - - title: "Design Data Graphs" - category: Directory - show: False - menu: - - title: "Design data graph schema APIs" - category: Page - show: False - - title: "Connect data sources" - category: Page - show: False - - title: "Define access to data graph APIs" - category: Page - 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" + - title: "Overview" + category: Page + path: /api-management/ai-management/overview + 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: "Version data graphs" - category: Page - show: False - - title: "Publish APIs" - category: Directory - show: True - menu: + - title: "Product Stack" + path: /tyk-stack + category: Label + 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: /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 + path: /tyk-oss-gateway 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: 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: "AI Management" - category: Directory - show: True - menu: - - title: "Overview" - category: Page - path: /api-management/ai-management/overview - 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 - show: True - - title: "GraphQL" - category: Directory - show: True - 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: "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: "Gateway Sharding" - path: /advanced-configuration/manage-multiple-environments/with-tyk-multi-cloud - category: Page - show: True - - title: "Tyk Self-Managed" - path: /advanced-configuration/manage-multiple-environments/with-tyk-on-premises - 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 URL path matching?" - path: /getting-started/key-concepts/url-matching - 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" - category: Directory - show: True - menu: - - title: "Authentication and authorization" - category: Directory - show: True - menu: - - title: "Overview" - path: /basic-config-and-security/security/authentication--authorization - category: Page - show: True - - title: "Authorization Code Grant Type" - path: /basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant - category: Page - show: True - - title: "Client Credentials Grant Type" - path: /basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant - category: Page - show: True - - title: "Refresh Token Grant Type" - path: /basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant - category: Page - show: True - - title: "Username and Password Grant Type" - path: /basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant - category: Page - show: True - - title: "Basic Authentication" - path: /basic-config-and-security/security/authentication-authorization/basic-auth - category: Page - show: True - - title: "Bearer Tokens" - path: /basic-config-and-security/security/authentication-authorization/bearer-tokens - category: Page - show: True - - title: "External OAuth Middleware" - path: /basic-config-and-security/security/authentication-authorization/ext-oauth-middleware - category: Page - show: True - - title: "Go Plugin Authentication" - path: /basic-config-and-security/security/authentication-authorization/go-plugin-authentication - category: Page - show: True - - title: "HMAC Signatures" - path: /basic-config-and-security/security/authentication-authorization/hmac-signatures - category: Page - show: True - - title: "JSON Web Tokens" - path: /basic-config-and-security/security/authentication-authorization/json-web-tokens - category: Page - show: True - - title: "JWT and Auth0 with Tyk" - path: /basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0 - category: Page - show: True - - title: "Split Token" - path: /basic-config-and-security/security/authentication-authorization/json-web-tokens/split-token - category: Page - show: True - - title: "Multiple Auth" - path: /basic-config-and-security/security/authentication-authorization/multiple-auth - category: Page - show: True - - title: "OAuth 2.0" - path: /basic-config-and-security/security/authentication-authorization/oauth-2-0 - category: Page - show: True - - title: "Open (Keyless)" - path: /basic-config-and-security/security/authentication-authorization/open-keyless - category: Page - show: True - - title: "OpenID Connect" - path: /basic-config-and-security/security/authentication-authorization/openid-connect - category: Page - show: True - - title: "Key Expiry and Deletion" - path: /basic-config-and-security/security/authentication-authorization/physical-key-expiry - category: Page - show: True - - title: "Python CoProcess and JSVM Plugin Authentication" - path: /basic-config-and-security/security/authentication-authorization/python-etc-plugin-authentication - category: Page - show: True - - title: "Revoke OAuth Tokens" - path: /basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens - category: Page - show: True - - title: "JWT and Keycloak with Tyk" - path: /basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak - category: Page - show: True - - title: "MTLS" - category: Directory - show: True - menu: - - title: "Concepts" - path: /basic-config-and-security/security/mutual-tls/concepts - category: Page - show: True - - title: "Mutual TLS" - path: /basic-config-and-security/security/mutual-tls - category: Page - show: True - - title: "Client mTLS" - path: /basic-config-and-security/security/mutual-tls/client-mtls - category: Page - show: True - - title: "Upstream mTLS" - path: /basic-config-and-security/security/mutual-tls/upstream-mtls - category: Page - show: True - - title: "Security policies" - category: Directory + - title: "Key concepts" + 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: "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: "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 + show: True + - title: "GraphQL" + category: Directory + show: True + 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: "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: "Gateway Sharding" + path: /advanced-configuration/manage-multiple-environments/with-tyk-multi-cloud + category: Page + show: True + - title: "Tyk Self-Managed" + path: /advanced-configuration/manage-multiple-environments/with-tyk-on-premises + 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 URL path matching?" + path: /getting-started/key-concepts/url-matching + 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/control-limit-traffic/request-size-limits - category: Page - show: True - - title: "Tyk OAS configuration" - 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/request-size-limit-tyk-classic - 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" + - title: "Overview" + path: /basic-config-and-security + category: Page + show: True + - title: "Security" + category: Directory + show: True + menu: + - title: "oauth" + category: page + show: False + path: /basic-config-and-security/security/authentication-authorization/ext-oauth-middleware + - 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: "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" + category: Directory + show: True + menu: + - title: "Overview" + 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/request-size-limit-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic + 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" + 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/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" + category: Directory + show: True + 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: /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 + 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: /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/ + 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" + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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: "Overview" + path: /advanced-configuration/transform-traffic/response-body + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/response-body-tyk-oas + category: Page + 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: /advanced-configuration/transform-traffic/response-headers + category: Page + show: True + - title: "Tyk OAS configuration" + path: /product-stack/tyk-gateway/middleware/response-header-tyk-oas + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/middleware/response-header-tyk-classic + category: Page + 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" + category: Directory + show: True + 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: "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" + category: Directory + show: True + menu: + - title: "Overview" + path: /plugins/tutorials/quick-starts/go/quickstart + category: Page + show: True + - title: "Dashboard" + path: /plugins/tutorials/quick-starts/go/dashboard + category: Page + show: True + - title: "Open source" + path: /plugins/tutorials/quick-starts/go/open-source + 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 + 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 + 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: "Plugin bundles" + 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 + category: Page + show: True + - title: "Tyk Classic configuration" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic + category: Page + show: True + - title: "Bundle CLI tool" + path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli + category: Page + show: True + - title: "Supported Languages" + category: Directory + show: True + menu: + - 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: "Rich Plugins - How do They work?" + path: /plugins/supported-languages/rich-plugins/rich-plugins-work + category: Page + show: True + - title: "Rich Plugins - Data Structures" + path: /plugins/supported-languages/rich-plugins/rich-plugins-data-structures + category: Page + show: True + - 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: "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: "Error Templates" + path: /advanced-configuration/error-templates category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas + - 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: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic + - title: "Securing System Payloads" + path: /tyk-configuration-reference/securing-system-payloads 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/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" - category: Directory - show: True - 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: /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 - 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" - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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: "Overview" - path: /advanced-configuration/transform-traffic/response-body - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/response-body-tyk-oas - category: Page - 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: /advanced-configuration/transform-traffic/response-headers - category: Page - show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/response-header-tyk-oas - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/response-header-tyk-classic - category: Page - 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 + - title: "API documentation" + 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" - category: Directory - show: True - 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: "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" - category: Directory - show: True - menu: - - title: "Overview" - path: /plugins/tutorials/quick-starts/go/quickstart + - title: "Gateway API Overview" + path: /getting-started/key-concepts/gateway-api category: Page show: True - - title: "Dashboard" - path: /plugins/tutorials/quick-starts/go/dashboard + - title: "Tyk Gateway Open API Documentation" + path: /tyk-gateway-api category: Page show: True - - title: "Open source" - path: /plugins/tutorials/quick-starts/go/open-source - 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 - 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 - 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 + - title: "Tyk OAS API Definition Object" + path: /tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc category: Page show: True - - title: "Tyk OAS configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas + - title: "Tyk Classic API Definition Object" + path: /tyk-gateway-api/api-definition-objects category: Page show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic + - title: "Token Session Object" + path: /tyk-apis/tyk-gateway-api/token-session-object-details category: Page show: True - - title: "Plugin bundles" + - title: "Environment variables" 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 - category: Page - show: True - - title: "Tyk Classic configuration" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic - category: Page - show: True - - title: "Bundle CLI tool" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli - category: Page - show: True - - title: "Supported Languages" + - title: "Tyk Gateway configuration options" + path: /tyk-oss-gateway/configuration + category: Page + show: True + - title: "Troubleshooting" category: Directory show: True menu: - - 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 + - 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: "Loading Go Plugins" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins + - title: "API definition URL case sensitive" + path: /frequently-asked-questions/api-definition-url-case-sensitive category: Page show: True - - title: "Go Plugin Examples" - path: /product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples + - title: "How to change the logging output location" + path: /frequently-asked-questions/change-logging-output-location category: Page show: True - - title: "Javascript" - category: Directory - show: True - menu: - - title: "Overview" - path: /plugins/supported-languages/javascript-middleware + - title: "How to Check Your Gateway Version" + path: /frequently-asked-questions/check-current-gateway-version category: Page show: True - - title: "JS Scripting Guide" - path: /plugins/supported-languages/javascript-middleware/middleware-scripting-guide + - title: "How to clear / invalidate API cache" + path: /frequently-asked-questions/clear-api-cache category: Page show: True - - title: "JavaScript API" - path: /plugins/supported-languages/javascript-middleware/javascript-api + - title: "How to find the Gateway logging output" + path: /frequently-asked-questions/find-gateway-logging-output category: Page show: True - - title: "Using JS plugins with Tyk Self-Managed" - path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro + - title: "How to import existing keys into Tyk CE" + path: /frequently-asked-questions/import-existing-keys-tyk category: Page show: True - - title: "Using JS plugins with Tyk Hybrid" - path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid + - title: "Redis persistence using containers" + path: /frequently-asked-questions/redis-persistence-using-containers category: Page show: True - - title: "Using JS plugins with Tyk OSS" - path: /plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce + - title: "499 Errors" + path: /troubleshooting/tyk-gateway/499-errors category: Page show: True - - title: "WAF (OSS) ModSecurity Plugin example" - path: /plugins/supported-languages/javascript-middleware/waf-js-plugin + - title: "502 error in Tyk Gateway" + path: /troubleshooting/tyk-gateway/502-error-tyk-gateway category: Page show: True - - title: "Rich Plugins" - path: /plugins/supported-languages/rich-plugins - category: Page - show: True - - title: "Rich Plugins - How do They work?" - path: /plugins/supported-languages/rich-plugins/rich-plugins-work - category: Page - show: True - - title: "Rich Plugins - Data Structures" - path: /plugins/supported-languages/rich-plugins/rich-plugins-data-structures - category: Page - show: True - - title: "Rich Plugin - Python" - category: Directory - show: True - menu: - - title: "Overview" - path: /plugins/supported-languages/rich-plugins/python/python + - title: "proxy error: context canceled" + path: /troubleshooting/tyk-gateway/context-canceled category: Page show: True - - title: "Tutorial- Custom Authentication Plugin" - path: /plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial + - title: "DRL not ready, skipping this notification" + path: /troubleshooting/tyk-gateway/drl-not-ready category: Page show: True - - title: "Tutorial - Add Python Plugin To Your Gateway" - path: /plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api + - title: "“Index out of range“ error in logs" + path: /troubleshooting/tyk-gateway/index-range-error-logs category: Page show: True - - title: "Tyk Python API methods" - path: /plugins/supported-languages/rich-plugins/python/tyk-python-api-methods + - 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: "Performance" - path: /plugins/supported-languages/rich-plugins/python/performance + - 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: "Rich Plugin - gRPC" - category: Directory - show: True - menu: - - title: "Overview" - path: /plugins/supported-languages/rich-plugins/grpc + - title: "“There was a problem proxying the request“" + path: /troubleshooting/tyk-gateway/problem-proxying-request category: Page show: True - - title: "Key Concepts" - path: /plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin + - title: "Tyk Gateway Profiling" + path: /troubleshooting/tyk-gateway/profiling category: Page show: True - - title: "Getting Started" - path: /plugins/supported-languages/rich-plugins/grpc/getting-started-python + - title: "Support Information" + path: /troubleshooting/tyk-gateway/support-information 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: "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: "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: "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 - show: True - - 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: "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: "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" - category: Directory - show: True - 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 - 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: "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" - 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: "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" - category: Directory - show: True - menu: - - 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: "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 - show: True - - title: "Events and Notifications" - path: /tyk-developer-portal/tyk-portal-classic/portal-events-notifications - category: Page - show: True - - title: "Outbound Email Configuration" - path: /configure/outbound-email-configuration - category: Page - show: True - - title: "Portal customisation" - 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 - 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 - 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 - 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 + - 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 - - 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: "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 - show: True - - title: "Concepts - Arguments" - path: /universal-data-graph/concepts/arguments - category: Page - show: True - - title: "Concepts - Field Mappings" - path: /universal-data-graph/concepts/field_mappings - category: Page - show: True - - title: "Concepts - Reusing response fields" - path: /universal-data-graph/concepts/reusing_response_fields - category: Page - show: True - - title: "Concepts - Header management" - path: /universal-data-graph/concepts/header_management - category: Page - show: True - - title: "Connect Data Sources" - 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 - category: Page - show: True - - title: "Kafka Datasource" - path: /universal-data-graph/datasources/kafka - category: Page - show: True - - title: "REST Datasource" - path: /universal-data-graph/datasources/rest - category: Page - show: True - - 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" + 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.6" + path: /product-stack/tyk-gateway/release-notes/version-5.6 + 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 + show: True + - 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: "Tyk Dashboard" 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 + path: /tyk-dashboard 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: "Tyk Classic Endpoint Designer" + path: /advanced-configuration/transform-traffic/endpoint-designer 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 + - title: "Advanced configurations" + category: Directory show: True - - title: "Legacy helm chart" - path: /product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm - category: Page + menu: + - 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: "Dashboard audit logs" + path: /product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log + category: Page + show: True + - title: "API documentation" + category: Directory 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 + menu: + - title: "Dashboard API" + category: Directory + show: True + 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 + 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 - - 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: "Tyk Enterprise Portal Concepts" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts - 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 - show: True - - 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: "Customize API Products' and plans' appearance" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans - category: Page - show: True - - 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: "Customize the sign-up form" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form - category: Page - show: True - - title: "Setup email notifications" - path: /product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications - category: Page - show: True - - title: "Manage API consumers" - 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 - 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 - 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" - category: Directory - show: True - menu: - - title: "Quick Customisation" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation - category: Page + menu: + - title: "Tyk Dashboard Configuration Options" + path: /tyk-dashboard/configuration + category: Page + show: True + - title: "Troubleshooting" + category: Directory show: True - - title: "Complete customisation" + 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" - 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 + path: /product-stack/tyk-dashboard/release-notes/overview + show: True + - title: "Tyk Dashboard v5.6" + path: /product-stack/tyk-dashboard/release-notes/version-5.6 + category: Page + 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: "File Structure and Concepts" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/file-structure-concepts + - title: "Tyk Dashboard v4.2" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-4.2 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: "Tyk Dashboard v4.1" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-4.1 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: "Tyk Dashboard v4.0" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-4.0 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: "Tyk Dashboard v3.2" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-3.2 show: True - - title: "Menus Customisation" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/menus-customisation + - title: "Tyk Dashboard v3.1" category: Page + path: /product-stack/tyk-dashboard/release-notes/version-3.1 show: True - - title: "Upgrade the portal theme" - path: /product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades - category: Page - show: True - - title: "Templates" - path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates - 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.11.0" - path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0 - category: Page - show: True - - 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 - 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" + - 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: "Version 1.9.0" - path: /product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints + - title: "Overview" + path: /tyk-developer-portal/tyk-portal-classic 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 - 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 - 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 - 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 - 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: "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 - category: Page - show: True - - title: "Pump v1.8" - path: /release-notes/pump-1.8 - category: Page - show: True - - title: "Tyk Operator" - 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 - category: Page - show: True - - 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: "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" - category: Directory - show: True - menu: - - title: "Create an API with Tyk Operator" - path: /tyk-stack/tyk-operator/create-an-api - category: Page - show: True - - title: "HTTP Proxy example" - path: /product-stack/tyk-operator/getting-started/quick-start-http - category: Page - show: True - - title: "TCP Proxy example" - path: /product-stack/tyk-operator/getting-started/quick-start-tcp - category: Page - show: True - - title: "GraphQL Proxy example" - path: /product-stack/tyk-operator/getting-started/quick-start-graphql - category: Page - show: True - - title: "UDG example" - path: /product-stack/tyk-operator/getting-started/quick-start-udg - category: Page - show: True - - title: "Secure an API" - category: Directory - show: True - menu: - - title: "Secure an API with Auth token" - path: /tyk-stack/tyk-operator/access-an-api - category: Page - show: True - - title: "Authentication types" - path: /product-stack/tyk-operator/advanced-configurations/client-authentication - category: Page - show: True - - title: "Protect an API with Policy" - category: Page - show: True - path: /tyk-stack/tyk-operator/secure-an-api - - title: "Publish an API to Dev Portal" - path: /tyk-stack/tyk-operator/publish-an-api - category: Page - show: True - - title: "Advanced configurations" - category: Directory - show: True - menu: - - title: "Management of APIs" - path: /product-stack/tyk-operator/advanced-configurations/management-of-api - category: Page - show: True - - title: "Manage existing APIs and policies" - path: /tyk-stack/tyk-operator/migration - category: Page - show: True - - title: "Kubernetes Ingress Controller" - path: /product-stack/tyk-operator/tyk-ingress-controller - category: Page - show: True - - title: "Manage multiple organisations" - path: /product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations - category: Page - show: True - - title: "Manage API Ownership" - path: /product-stack/tyk-operator/getting-started/tyk-operator-api-ownership - category: Page - show: True - - title: "GraphQL Federation" - path: /product-stack/tyk-operator/advanced-configurations/graphql-federation - category: Page - show: True - - title: "Custom Plugins" - path: /product-stack/tyk-operator/advanced-configurations/custom-plugins - category: Page - show: True - - title: "Looping" - path: /product-stack/tyk-operator/advanced-configurations/internal-looping - 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 - category: Page - show: True - - title: "Understanding reconciliation status" - path: /product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting - category: Page - show: True - - title: "Reference" + - 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" + category: Directory + show: True + menu: + - 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: "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 + show: True + - title: "Events and Notifications" + path: /tyk-developer-portal/tyk-portal-classic/portal-events-notifications + category: Page + show: True + - title: "Outbound Email Configuration" + path: /configure/outbound-email-configuration + category: Page + show: True + - title: "Portal customisation" + 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 + 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 + 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 + 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: "API Definition features" - path: /product-stack/tyk-operator/reference/api-definition - category: Page - show: True - - title: "Security Policy features" - path: /product-stack/tyk-operator/reference/security-policy - category: Page - show: True - - title: "Version compatibility" - path: /product-stack/tyk-operator/reference/version-compatibility - category: Page - show: True - - title: "Release notes" + - 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 + show: True + - title: "Concepts - Arguments" + path: /universal-data-graph/concepts/arguments + category: Page + show: True + - title: "Concepts - Field Mappings" + path: /universal-data-graph/concepts/field_mappings + category: Page + show: True + - title: "Concepts - Reusing response fields" + path: /universal-data-graph/concepts/reusing_response_fields + category: Page + show: True + - title: "Concepts - Header management" + path: /universal-data-graph/concepts/header_management + category: Page + show: True + - title: "Connect Data Sources" + 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 + category: Page + show: True + - title: "Kafka Datasource" + path: /universal-data-graph/datasources/kafka + category: Page + show: True + - title: "REST Datasource" + path: /universal-data-graph/datasources/rest + category: Page + show: True + - 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: /product-stack/tyk-operator/release-notes/overview + path: /tyk-developer-portal/tyk-enterprise-developer-portal category: Page show: True - - title: "Tyk Operator v0.18" - path: /product-stack/tyk-operator/release-notes/operator-0.18 - category: Page + - title: "Deploy" + category: Directory show: True - - title: "Tyk Operator v0.17" - path: /product-stack/tyk-operator/release-notes/operator-0.17 - category: Page + 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 - - title: "Tyk Operator v0.16" - path: /product-stack/tyk-operator/release-notes/operator-0.16 - category: Page + menu: + - title: "Tyk Enterprise Portal Concepts" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts + 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 + show: True + - 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: "Customize API Products' and plans' appearance" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans + category: Page + show: True + - 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: "Customize the sign-up form" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form + category: Page + show: True + - title: "Setup email notifications" + path: /product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications + category: Page + show: True + - title: "Manage API consumers" + category: Directory show: True - - title: "Tyk Streams" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-streaming/overview - category: Page - show: True - - title: "Glossary" - path: /product-stack/tyk-streaming/glossary - category: Page - show: True - - title: "Key Concepts" - path: /product-stack/tyk-streaming/key-concepts - category: Page - show: True - - title: "Quick Start" - path: /product-stack/tyk-streaming/getting-started - category: Page - show: false - - title: "Configuration" + 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 + 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" + 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: "Templates" + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates + 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.12.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.12.0 + category: Page + show: True + - title: "Version 1.11.0" + path: /product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0 + category: Page + show: True + - 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 + 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: "Overview" - path: /product-stack/tyk-streaming/configuration/overview - category: Page - show: True - - title: "Inputs" - category: Directory - show: True - menu: - title: "Overview" - path: /product-stack/tyk-streaming/configuration/inputs/overview + path: /tyk-multi-data-centre category: Page show: True - - title: "Amqp_0_9" - path: /product-stack/tyk-streaming/configuration/inputs/amqp-0-9 - category: Page + - title: "Getting started" + category: Directory show: True - - title: "Amqp_1" - path: /product-stack/tyk-streaming/configuration/inputs/amqp-1 - 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: "Broker" - path: /product-stack/tyk-streaming/configuration/inputs/broker - 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 + 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 - - title: "Generate" - path: /product-stack/tyk-streaming/configuration/inputs/generate + 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: "Http Client" - path: /product-stack/tyk-streaming/configuration/inputs/http-client - category: Page + - title: "Getting started" + category: Directory show: True - - title: "Http Server" - path: /product-stack/tyk-streaming/configuration/inputs/http-server - 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: "Kafka" - path: /product-stack/tyk-streaming/configuration/inputs/kafka - 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: "Kafka Franz" - path: /product-stack/tyk-streaming/configuration/inputs/kafka-franz - 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: "MQTT" - path: /product-stack/tyk-streaming/configuration/inputs/mqtt + 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: "Nats" - path: /product-stack/tyk-streaming/configuration/inputs/nats - category: Page + - title: "Release notes" + category: Directory show: True - - title: "NSQ" - path: /product-stack/tyk-streaming/configuration/inputs/nsq - category: Page + 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" + category: Directory + show: True + menu: + - title: "Advanced configurations" + category: Directory show: True - - title: "Redis PubSub" - path: /product-stack/tyk-streaming/configuration/inputs/redis-pubsub - category: Page + menu: + - title: "GraphQL Federation" + path: /product-stack/tyk-operator/advanced-configurations/graphql-federation + category: Page + show: True + - title: "Custom Plugins" + path: /product-stack/tyk-operator/advanced-configurations/custom-plugins + category: Page + show: True + - title: "Release notes" + category: Directory show: True - - title: "Outputs" - category: Directory - show: True - menu: + menu: + - title: "Overview" + path: /product-stack/tyk-operator/release-notes/overview + category: Page + show: True + - title: "Tyk Operator v1.0" + path: /product-stack/tyk-operator/release-notes/operator-1.0 + 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/configuration/outputs/overview - category: Page - show: True - - 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 + path: /product-stack/tyk-streaming/overview category: Page show: True - - title: "Http Server" - path: /product-stack/tyk-streaming/configuration/outputs/http-server + - title: "Glossary" + path: /product-stack/tyk-streaming/glossary category: Page show: True - - title: "Kafka" - path: /product-stack/tyk-streaming/configuration/outputs/kafka + - title: "Key Concepts" + path: /product-stack/tyk-streaming/key-concepts category: Page show: True - - title: "Kafka Franz" - path: /product-stack/tyk-streaming/configuration/outputs/kafka-franz + - title: "Quick Start" + path: /product-stack/tyk-streaming/getting-started category: Page + show: false + - title: "Configuration" + category: Directory show: True - - title: "Nats" - path: /product-stack/tyk-streaming/configuration/outputs/nats - category: Page + menu: + - title: "Overview" + path: /product-stack/tyk-streaming/configuration/overview + category: Page + show: True + - title: "Inputs" + category: Directory + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-streaming/configuration/inputs/overview + category: Page + show: True + - 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 + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-streaming/configuration/outputs/overview + category: Page + show: True + - 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: "Reject" + path: /product-stack/tyk-streaming/configuration/outputs/reject + 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: "Switch" + path: /product-stack/tyk-streaming/configuration/outputs/switch + category: Page + show: True + - title: "Sync Response" + path: /product-stack/tyk-streaming/configuration/outputs/sync-response + category: Page + show: True + - title: "Processors" + category: "Directory" + show: True + menu: + - title: "Overview" + path: /product-stack/tyk-streaming/configuration/processors/overview + category: Page + show: True + - 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 + 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 + 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" + category: Directory show: True - - title: "NSQ" - path: /product-stack/tyk-streaming/configuration/outputs/nsq + menu: + - title: "Bloblang" + 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" + 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: "/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" + category: Page + show: True + - title: "Number Manipulation" + path: "/product-stack/tyk-streaming/guides/bloblang/methods/numbers" + category: Page + show: True + - 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: "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 category: Page show: True - - title: "MQTT" - path: /product-stack/tyk-streaming/configuration/outputs/mqtt - category: Page + - title: "Developer Portal Integration" + path: /product-stack/tyk-streaming/developer-portal-integration + category: true show: True - - title: "Redis PubSub" - path: /product-stack/tyk-streaming/configuration/outputs/redis-pubsub + - title: "Troubleshooting & FAQs" + path: /product-stack/tyk-streaming/troubleshooting category: Page show: True - - title: "Reject" - path: /product-stack/tyk-streaming/configuration/outputs/reject - category: Page + - title: "Tyk Sync" + category: Directory + show: True + menu: + - title: "Release notes" + category: Directory show: True - - title: "Retry" - path: /product-stack/tyk-streaming/configuration/outputs/retry + menu: + - title: "Tyk Sync v2.0" + path: /product-stack/tyk-sync/release-notes/sync-2.0 + category: Page + show: True + - 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: "Sleep" - path: /product-stack/tyk-streaming/configuration/processors/sleep - category: Page + - title: "Getting started" + category: Directory show: True - - title: "Stdout" - path: /product-stack/tyk-streaming/configuration/outputs/stdout + menu: + - title: "Getting started with TIB" + path: /tyk-identity-broker/getting-started + 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 + category: Page + show: True + - title: "TIB Profiles" + path: /tyk-stack/tyk-identity-broker/about-profiles category: Page show: True - - title: "Switch" - path: /product-stack/tyk-streaming/configuration/outputs/switch + - title: "API Documentation" + path: /tyk-identity-broker/tib-rest-api category: Page show: True - - title: "Sync Response" - path: /product-stack/tyk-streaming/configuration/outputs/sync-response - category: Page + - title: "Advanced config" + category: Directory show: True - - title: "Processors" - category: "Directory" - show: True - menu: + 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: "Overview" - path: /product-stack/tyk-streaming/configuration/processors/overview + path: /product-stack/tyk-charts/overview category: Page show: True - - title: "Avro" - path: /product-stack/tyk-streaming/configuration/processors/avro + - title: "Tyk Stack Chart" + path: /product-stack/tyk-charts/tyk-stack-chart category: Page show: True - - title: "AWS Lambda" - path: /product-stack/tyk-streaming/configuration/processors/aws-lambda + - title: "Tyk Control Plane Chart" + path: /product-stack/tyk-charts/tyk-control-plane-chart category: Page show: True - - title: "Bloblang" - path: /product-stack/tyk-streaming/configuration/processors/bloblang + - title: "Tyk Data Plane Chart" + path: /product-stack/tyk-charts/tyk-data-plane-chart category: Page show: True - - title: "Branch" - path: /product-stack/tyk-streaming/configuration/processors/branch + - title: "Tyk Open Source Chart" + path: /product-stack/tyk-charts/tyk-oss-chart category: Page show: True - - title: "Bounds Check" - path: /product-stack/tyk-streaming/configuration/processors/bounds-check - category: Page + - title: "Release Notes" + category: Directory show: True - - title: "Cache" - path: /product-stack/tyk-streaming/configuration/processors/cache + menu: + - title: "Tyk Charts 2.1" + path: /product-stack/tyk-charts/release-notes/version-2.1 + category: Page + show: True + - title: "Tyk Charts 2.0" + path: /product-stack/tyk-charts/release-notes/version-2.0 + category: Page + show: True + - title: "Tyk Charts 1.6" + path: /product-stack/tyk-charts/release-notes/version-1.6 + category: Page + show: True + - title: "Tyk Charts 1.5" + path: /product-stack/tyk-charts/release-notes/version-1.5 + category: Page + show: True + - title: "Tyk Charts 1.4" + path: /product-stack/tyk-charts/release-notes/version-1.4 + category: Page + show: True + - title: "Tyk Charts 1.3" + path: /product-stack/tyk-charts/release-notes/version-1.3 + category: Page + show: True + - title: "Developer Support" + path: /frequently-asked-questions/faq + category: Label + 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: "Cached" - path: /product-stack/tyk-streaming/configuration/processors/cached + - title: "MongoDB Debugging" + path: /debugging-series/mongodb-debugging category: Page show: True - - title: "Catch" - path: /product-stack/tyk-streaming/configuration/processors/catch + - title: "Tyk Self-Managed Debugging" + path: /developer-support/debugging-series/debugging-selfmanaged category: Page show: True - - title: "Dedupe" - path: /product-stack/tyk-streaming/configuration/processors/dedupe + - 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: "For Each" - path: /product-stack/tyk-streaming/configuration/processors/for-each + - title: "Lab Releases" + path: /developer-support/special-releases-and-features/lab-releases category: Page show: True - - title: "Group By" - path: /product-stack/tyk-streaming/configuration/processors/group-by + - title: "Early Access Features" + path: /developer-support/special-releases-and-features/early-access-features category: Page show: True - - title: "Group By Value" - path: /product-stack/tyk-streaming/configuration/processors/group-by-value + - title: "FIPS Releases" + path: /developer-support/special-releases-and-features/fips-release category: Page show: True - - title: "Http" - path: /product-stack/tyk-streaming/configuration/processors/http + - title: "Frequently Asked Questions" + category: Directory + show: True + menu: + - title: "Overview" + path: /frequently-asked-questions category: Page show: True - - title: "Insert Part" - path: /product-stack/tyk-streaming/configuration/processors/insert-part + - title: "How to backup Tyk" + path: /frequently-asked-questions/how-to-backup-tyk 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 + - title: "How to backup Tyk Cloud deployment" + path: /frequently-asked-questions/how-to-backup-tyk-cloud-deployment category: Page show: True - - title: "JSON Schema" - path: /product-stack/tyk-streaming/configuration/processors/json-schema + - 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: "Log" - path: /product-stack/tyk-streaming/configuration/processors/log - category: Page - show: True - - title: "Mapping" - path: /product-stack/tyk-streaming/configuration/processors/mapping + - 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: "Msgpack" - path: /product-stack/tyk-streaming/configuration/processors/msgpack + - title: "Support SLA Policies" + path: /frequently-asked-questions/sla-policies category: Page show: True - - title: "Mutation" - path: /product-stack/tyk-streaming/configuration/processors/mutation + - title: "“Error initialising system couldn't unmarshal config“ error" + path: /troubleshooting/tyk-installation/couldnt-unmarshal-config-error category: Page show: True - - title: "Noop" - path: /product-stack/tyk-streaming/configuration/processors/noop + - 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: "Parallel" - path: /product-stack/tyk-streaming/configuration/processors/parallel + - title: "Plugin Hub" + category: Page + show: False + - title: "Tyk Upgrade Guides" + category: Directory + show: True + menu: + - title: "Overview" + path: /upgrading-tyk category: Page show: True - - title: "Parse Log" - path: /product-stack/tyk-streaming/configuration/processors/parse-log - category: Page + - title: "Preparations" + category: Directory + show: true + menu: + - title: "Upgrade guidelines" + path: /developer-support/upgrading-tyk/preparations/upgrade-guidelines + category: Page + show: True + - title: "Upgrade strategies" + path: /developer-support/upgrading-tyk/preparations/upgrade-strategies + category: Page + show: True + - title: "Deployment model" + category: Directory show: True - - title: "Processors" - path: /product-stack/tyk-streaming/configuration/processors/processors + menu: + - title: "Tyk Cloud upgrade guide" + category: Directory + 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 + 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" + 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: "Release Notes" + category: Directory + show: True + menu: + - title: "Tyk Cloud" + path: /developer-support/release-notes/cloud + 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: "Protobuf" - path: /product-stack/tyk-streaming/configuration/processors/protobuf + - 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: "Rate Limit" - path: /product-stack/tyk-streaming/configuration/processors/rate-limit + - title: "Get started" + path: /tyk-dashboard/getting-started category: Page show: True - - title: "Redis" - path: /product-stack/tyk-streaming/configuration/processors/redis + - title: "Tyk Cloud Classic" + path: /advanced-configuration/manage-multiple-environments/with-tyk-cloud-classic category: Page show: True - - title: "Retry" - path: /product-stack/tyk-streaming/configuration/processors/retry + - title: "Tyk Developer Portal" + path: /tyk-developer-portal category: Page show: True - - title: "Schema Registry Decode" - path: /product-stack/tyk-streaming/configuration/processors/schema-registry-decode + - 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: "Schema Registry Encode" - path: /product-stack/tyk-streaming/configuration/processors/schema-registry-encode + - title: "Gateway API" + path: /api-management/oss/gateway-api category: Page show: True - - title: "Select Parts" - path: /product-stack/tyk-streaming/configuration/processors/select-parts + - title: "Cloud Classic Virtual Endpoints not working" + path: /frequently-asked-questions/cloud-classic-virtual-endpoints-not-working category: Page show: True - - title: "Split" - path: /product-stack/tyk-streaming/configuration/processors/split + - title: "How to enable websockets in Cloud" + path: /frequently-asked-questions/enable-websockets-cloud category: Page show: True - - title: "Switch" - path: /product-stack/tyk-streaming/configuration/processors/switch + - title: "Troubleshooting" + path: /troubleshooting category: Page show: True - - title: "Sync Response" - path: /product-stack/tyk-streaming/configuration/processors/sync-response + - title: "“301 Moved permanently“ error in the Dashboard API" + path: /troubleshooting/tyk-cloud-classic/301-moved-permanently category: Page show: True - - title: "Try" - path: /product-stack/tyk-streaming/configuration/processors/try + - title: "413 Request Entity Too Large" + path: /troubleshooting/tyk-cloud-classic/413-request-entity-large 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 + - title: "“504 GATEWAY_TIMEOUT“ error" + path: /troubleshooting/tyk-cloud-classic/504-gateway-timeout-error category: Page show: True - - title: "Scanners" - category: Directory - 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 + - 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: "Line" - path: /product-stack/tyk-streaming/configuration/scanners/lines + - title: "Tyk Cloud Classic" + path: /troubleshooting/tyk-cloud category: Page show: True - - title: "Regular Expression Matching" - path: /product-stack/tyk-streaming/configuration/scanners/re-match + - title: "Tyk Dashboard Troubleshooting" + path: /troubleshooting/tyk-dashboard category: Page show: True - - title: "Switch" - path: /product-stack/tyk-streaming/configuration/scanners/switch + - title: "Tyk Gateway Troubleshooting" + path: /troubleshooting/tyk-gateway category: Page show: True - - title: "Common Configurations" - category: Directory - show: True - menu: - - title: "Batching" - path: /product-stack/tyk-streaming/configuration/common-configuration/batching + - title: "Tyk Installation" + path: /troubleshooting/tyk-installation category: Page show: True - - title: "Error Handling" - path: /product-stack/tyk-streaming/configuration/common-configuration/error-handling + - title: "404 when trying to access Tyk Gateway Repo" + path: /troubleshooting/tyk-installation/404-trying-access-tyk-gateway-repo category: Page show: True - - title: "Field Paths" - path: /product-stack/tyk-streaming/configuration/common-configuration/field-paths + - 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: "Interpolation" - path: /product-stack/tyk-streaming/configuration/common-configuration/interpolation + - title: "Tyk Multi-Cloud" + path: /troubleshooting/tyk-multi-cloud category: Page show: True - - title: "Processing Pipelines" - path: /product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines + - title: "Tyk On-Premises" + path: /troubleshooting/tyk-on-premise/tyk-on-premise category: Page show: True - - title: "Resources" - path: /product-stack/tyk-streaming/configuration/common-configuration/resources + - title: "Tyk Pump Troubleshooting" + path: /troubleshooting/tyk-pump category: Page show: True - - title: "Windowed Processing" - path: /product-stack/tyk-streaming/configuration/common-configuration/windowed_processing + - title: "Configuration Options" + path: /tyk-cloud/configuration-options category: Page show: True - - title: "Guides" - category: Directory - show: True - menu: - - title: "Bloblang" - 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" - 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: "/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" - category: Page - show: True - - title: "Number Manipulation" - path: "/product-stack/tyk-streaming/guides/bloblang/methods/numbers" - category: Page - show: True - - 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: "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 - 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 - category: Page - show: True - - title: "Tyk Sync" - category: Directory - show: True - menu: - - title: "Overview" - path: /product-stack/tyk-sync/overview - category: Page - show: True - - title: "Installing and running Tyk Sync" - path: /product-stack/tyk-sync/installing-tyk-sync - category: Page - show: True - - title: "Tutorials" - category: Directory - show: True - menu: - - title: "Keeping and updating API Definitions locally" - path: /product-stack/tyk-sync/tutorials/tutorial-update-api-configurations - category: Page - show: True - - title: "Synchronising API configurations with GitHub Actions" - path: /product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations - category: Page - show: True - - title: "Backing up API configurations with Github Actions" - path: /product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations - category: Page - show: True - - title: "Commands" - category: Directory - show: True - menu: - - title: "Dump" - path: /product-stack/tyk-sync/commands/sync-dump - category: Page - show: True - - title: "Examples" - path: /product-stack/tyk-sync/commands/sync-examples - category: Page - show: True - - title: "Publish" - path: /product-stack/tyk-sync/commands/sync-publish - category: Page - show: True - - title: "Sync" - path: /product-stack/tyk-sync/commands/sync-sync - category: Page - show: True - - title: "Update" - path: /product-stack/tyk-sync/commands/sync-update - 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 + path: /tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal 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 - 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 - 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 - 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 2.0" - path: /product-stack/tyk-charts/release-notes/version-2.0 - category: Page - show: True - - title: "Tyk Charts 1.6" - path: /product-stack/tyk-charts/release-notes/version-1.6 - category: Page - show: True - - title: "Tyk Charts 1.5" - path: /product-stack/tyk-charts/release-notes/version-1.5 - category: Page - show: True - - title: "Tyk Charts 1.4" - path: /product-stack/tyk-charts/release-notes/version-1.4 - category: Page - show: True - - title: "Tyk Charts 1.3" - path: /product-stack/tyk-charts/release-notes/version-1.3 - category: Page - show: True - - title: "Developer Support" - path: /frequently-asked-questions/faq - category: Tab + - title: "APIM Best Practice" + path: /apim-best-practice/overview + category: Label 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 - category: Page - show: True - - title: "Lab Releases" - path: /developer-support/special-releases-and-features/lab-releases - category: Page - show: True - - title: "Early Access Features" - path: /developer-support/special-releases-and-features/early-access-features - category: Page - show: True - - title: "FIPS Releases" - path: /developer-support/special-releases-and-features/fips-release - 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" - category: Directory - show: True - menu: - title: "Overview" - path: /upgrading-tyk + path: /apim-best-practice/overview category: Page show: True - - title: "Preparations" - category: Directory - show: true - menu: - - title: "Upgrade guidelines" - path: /developer-support/upgrading-tyk/preparations/upgrade-guidelines - category: Page - show: True - - title: "Upgrade strategies" - path: /developer-support/upgrading-tyk/preparations/upgrade-strategies - category: Page - show: True - - title: "Deployment model" + - title: "API Security Best Practice" category: Directory show: True menu: - - title: "Tyk Cloud upgrade guide" - category: Directory - show: True - menu: - - title: "Tyk Cloud" - path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas + - title: "API Security Overview" + path: /apim-best-practice/api-security-best-practice/overview category: Page show: True - - title: "Tyk hybrid" - path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid + - title: "Authentication" + path: /apim-best-practice/api-security-best-practice/authentication category: Page show: True - - title: "Go plugin" - path: /developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin + - title: "Authorisation" + path: /apim-best-practice/api-security-best-practice/authorisation category: Page show: True - - title: "Tyk Self Managed upgrade guide" - category: Directory - show: True - menu: - - title: "Overview" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/overview + - title: "Authorisation Levels" + path: /apim-best-practice/api-security-best-practice/authorisation-levels category: Page show: True - - title: "Docker" - path: /developer-support/upgrading-tyk/deployment-model/self-managed/docker + - title: "Resource Consumption" + path: /apim-best-practice/api-security-best-practice/resource-consumption 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 + - title: "Configuration" + path: /apim-best-practice/api-security-best-practice/configuration category: Page show: True - - title: "Linux" - category: Directory + - title: "Governance" + path: /apim-best-practice/api-security-best-practice/governance + category: Page 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" - 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: "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: "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 + category: Label show: False menu: - - title: "Orphan pages" - path: /orphan/ - category: Page - show: True + - title: "Orphan pages" + path: /orphan/ + category: Page + show: True diff --git a/tyk-docs/data/page_available_since.json b/tyk-docs/data/page_available_since.json index 70f2dc9629..11e668fee5 100644 --- a/tyk-docs/data/page_available_since.json +++ b/tyk-docs/data/page_available_since.json @@ -2,7 +2,12 @@ "versions": [ { "path": "/docs/", - "name": "5.5 - Latest", + "name": "5.6 - Latest", + "branch": "release-5.6" + }, + { + "path": "/docs/5.5/", + "name": "5.5", "branch": "release-5.5" }, { @@ -89,6 +94,7 @@ }, "/advanced-configuration/compose-apis/": { "/docs/": "/advanced-configuration/compose-apis/virtual-endpoints/", + "/docs/5.5/": "/advanced-configuration/compose-apis/virtual-endpoints/", "/docs/5.4/": "/advanced-configuration/compose-apis/virtual-endpoints/", "/docs/5.3/": "/advanced-configuration/compose-apis/virtual-endpoints/", "/docs/5.2/": "/advanced-configuration/compose-apis/", @@ -108,6 +114,7 @@ }, "/advanced-configuration/compose-apis/sample-batch-funtion/": { "/docs/": "/advanced-configuration/compose-apis/demo-virtual-endpoint/", + "/docs/5.5/": "/advanced-configuration/compose-apis/demo-virtual-endpoint/", "/docs/5.4/": "/advanced-configuration/compose-apis/demo-virtual-endpoint/", "/docs/5.3/": "/advanced-configuration/compose-apis/demo-virtual-endpoint/", "/docs/5.2/": "/advanced-configuration/compose-apis/sample-batch-funtion/", @@ -127,6 +134,7 @@ }, "/advanced-configuration/distributed-tracing/jaeger/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", @@ -143,6 +151,7 @@ }, "/advanced-configuration/distributed-tracing/newrelic/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", @@ -159,6 +168,7 @@ }, "/advanced-configuration/distributed-tracing/zipkin/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", @@ -202,6 +212,7 @@ }, "/advanced-configuration/integrate/3rd-party-identity-providers/tib-rest-api/": { "/docs/": "/tyk-identity-broker/tib-rest-api/", + "/docs/5.5/": "/tyk-identity-broker/tib-rest-api/", "/docs/5.4/": "/tyk-identity-broker/tib-rest-api/", "/docs/5.3/": "/tyk-identity-broker/tib-rest-api/", "/docs/5.2/": "/tyk-identity-broker/tib-rest-api/", @@ -221,6 +232,7 @@ }, "/advanced-configuration/integrate/api-auth-mode/json-web-tokens/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", @@ -237,6 +249,7 @@ }, "/advanced-configuration/integrate/api-auth-mode/oidc-auth0-example/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", @@ -253,6 +266,7 @@ }, "/advanced-configuration/integrate/api-auth-mode/open-id-connect/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", @@ -272,6 +286,7 @@ }, "/advanced-configuration/integrate/sso/dashboard-login-azure-sso/": { "/docs/": "/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso/", + "/docs/5.5/": "/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso/", "/docs/5.4/": "/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso/", "/docs/5.3/": "/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso/", "/docs/5.2/": "/tyk-stack/tyk-manager/sso/dashboard-login-azure-sso/", @@ -288,6 +303,7 @@ }, "/advanced-configuration/integrate/sso/dashboard-login-keycloak-sso/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", "/docs/5.2/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", @@ -296,6 +312,7 @@ }, "/advanced-configuration/integrate/sso/dashboard-login-ldap-tib/": { "/docs/": "/advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib/", + "/docs/5.5/": "/advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib/", "/docs/5.4/": "/advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib/", "/docs/5.3/": "/advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib/", "/docs/5.2/": "/advanced-configuration/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib/", @@ -312,6 +329,7 @@ }, "/advanced-configuration/integrate/sso/dashboard-login-okta-tib/": { "/docs/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", + "/docs/5.5/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", "/docs/5.4/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", "/docs/5.3/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", "/docs/5.2/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", @@ -328,6 +346,7 @@ }, "/advanced-configuration/log-data/": { "/docs/": "/log-data/", + "/docs/5.5/": "/log-data/", "/docs/5.4/": "/log-data/", "/docs/5.3/": "/log-data/", "/docs/5.2/": "/log-data/", @@ -356,6 +375,7 @@ }, "/advanced-configuration/manage-multiple-environments/tyk-sync/": { "/docs/": "/product-stack/tyk-sync/overview/", + "/docs/5.5/": "/product-stack/tyk-sync/overview/", "/docs/5.4/": "/product-stack/tyk-sync/overview/", "/docs/5.3/": "/tyk-sync/", "/docs/5.2/": "/tyk-sync/", @@ -381,6 +401,7 @@ }, "/advanced-configuration/opentracing/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", @@ -400,6 +421,7 @@ }, "/advanced-configuration/sse-proxy/": { "/docs/": "/advanced-configuration/sse-proxy/", + "/docs/5.5/": "/advanced-configuration/sse-proxy/", "/docs/5.4/": "/advanced-configuration/sse-proxy/", "/docs/5.3/": "/advanced-configuration/sse-proxy/", "/docs/5.2/": "/advanced-configuration/sse-proxy/", @@ -422,6 +444,7 @@ }, "/advanced-configuration/transform-traffic/request-body/": { "/docs/": "/transform-traffic/request-body/", + "/docs/5.5/": "/transform-traffic/request-body/", "/docs/5.4/": "/transform-traffic/request-body/", "/docs/5.3/": "/transform-traffic/request-body/", "/docs/5.2/": "/transform-traffic/request-body/", @@ -438,6 +461,7 @@ }, "/advanced-configuration/transform-traffic/request-headers/": { "/docs/": "/transform-traffic/request-headers/", + "/docs/5.5/": "/transform-traffic/request-headers/", "/docs/5.4/": "/transform-traffic/request-headers/", "/docs/5.3/": "/transform-traffic/request-headers/", "/docs/5.2/": "/transform-traffic/request-headers/", @@ -466,6 +490,7 @@ }, "/advanced-configuration/transform-traffic/url-rewriting/": { "/docs/": "/transform-traffic/url-rewriting/", + "/docs/5.5/": "/transform-traffic/url-rewriting/", "/docs/5.4/": "/transform-traffic/url-rewriting/", "/docs/5.3/": "/transform-traffic/url-rewriting/", "/docs/5.2/": "/transform-traffic/url-rewriting/", @@ -482,6 +507,7 @@ }, "/advanced-configuration/transform-traffic/validate-json/": { "/docs/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", "/docs/5.2/": "/advanced-configuration/transform-traffic/validate-json/", @@ -501,6 +527,7 @@ }, "/analyse/": { "/docs/": "/tyk-dashboard-analytics/", + "/docs/5.5/": "/tyk-dashboard-analytics/", "/docs/5.4/": "/tyk-dashboard-analytics/", "/docs/5.3/": "/tyk-dashboard-analytics/", "/docs/5.2/": "/tyk-dashboard-analytics/", @@ -511,6 +538,7 @@ }, "/analyse/other-data-stores/": { "/docs/": "/tyk-stack/tyk-pump/other-data-stores/", + "/docs/5.5/": "/tyk-stack/tyk-pump/other-data-stores/", "/docs/5.4/": "/tyk-stack/tyk-pump/other-data-stores/", "/docs/5.3/": "/tyk-stack/tyk-pump/other-data-stores/", "/docs/5.2/": "/tyk-stack/tyk-pump/other-data-stores/", @@ -521,6 +549,7 @@ }, "/analyse/redis-mongodb-sizing/": { "/docs/": "/planning-for-production/database-settings/", + "/docs/5.5/": "/planning-for-production/database-settings/", "/docs/5.4/": "/planning-for-production/database-settings/", "/docs/5.3/": "/planning-for-production/database-settings/", "/docs/5.2/": "/planning-for-production/database-settings/", @@ -537,6 +566,7 @@ }, "/analytics-and-reporting/": { "/docs/": "/tyk-pump/", + "/docs/5.5/": "/tyk-pump/", "/docs/5.4/": "/tyk-pump/", "/docs/5.3/": "/tyk-pump/", "/docs/5.2/": "/tyk-pump/", @@ -553,6 +583,7 @@ }, "/analytics-and-reporting/capping-analytics-data-storage/": { "/docs/": "/tyk-stack/tyk-manager/analytics/capping-analytics-data-storage/", + "/docs/5.5/": "/tyk-stack/tyk-manager/analytics/capping-analytics-data-storage/", "/docs/5.4/": "/tyk-stack/tyk-manager/analytics/capping-analytics-data-storage/", "/docs/5.3/": "/tyk-stack/tyk-manager/analytics/capping-analytics-data-storage/", "/docs/5.2/": "/tyk-stack/tyk-manager/analytics/capping-analytics-data-storage/", @@ -569,6 +600,7 @@ }, "/analytics-and-reporting/error-overview/": { "/docs/": "/tyk-dashboard-analytics/error-overview/", + "/docs/5.5/": "/tyk-dashboard-analytics/error-overview/", "/docs/5.4/": "/tyk-dashboard-analytics/error-overview/", "/docs/5.3/": "/tyk-dashboard-analytics/error-overview/", "/docs/5.2/": "/tyk-dashboard-analytics/error-overview/", @@ -585,6 +617,7 @@ }, "/analytics-and-reporting/geographic-distribution/": { "/docs/": "/tyk-stack/tyk-manager/analytics/geographic-distribution/", + "/docs/5.5/": "/tyk-stack/tyk-manager/analytics/geographic-distribution/", "/docs/5.4/": "/tyk-stack/tyk-manager/analytics/geographic-distribution/", "/docs/5.3/": "/tyk-stack/tyk-manager/analytics/geographic-distribution/", "/docs/5.2/": "/tyk-stack/tyk-manager/analytics/geographic-distribution/", @@ -601,6 +634,7 @@ }, "/analytics-and-reporting/log-browser/": { "/docs/": "/tyk-stack/tyk-manager/analytics/log-browser/", + "/docs/5.5/": "/tyk-stack/tyk-manager/analytics/log-browser/", "/docs/5.4/": "/tyk-stack/tyk-manager/analytics/log-browser/", "/docs/5.3/": "/tyk-stack/tyk-manager/analytics/log-browser/", "/docs/5.2/": "/tyk-stack/tyk-manager/analytics/log-browser/", @@ -617,6 +651,7 @@ }, "/analytics-and-reporting/other-data-stores/": { "/docs/": "/tyk-stack/tyk-pump/other-data-stores/", + "/docs/5.5/": "/tyk-stack/tyk-pump/other-data-stores/", "/docs/5.4/": "/tyk-stack/tyk-pump/other-data-stores/", "/docs/5.3/": "/tyk-stack/tyk-pump/other-data-stores/", "/docs/5.2/": "/tyk-stack/tyk-pump/other-data-stores/", @@ -633,6 +668,7 @@ }, "/analytics-and-reporting/redis-mongodb-sizing/": { "/docs/": "/planning-for-production/database-settings/", + "/docs/5.5/": "/planning-for-production/database-settings/", "/docs/5.4/": "/planning-for-production/database-settings/", "/docs/5.3/": "/planning-for-production/database-settings/", "/docs/5.2/": "/planning-for-production/database-settings/", @@ -649,6 +685,7 @@ }, "/analytics-and-reporting/separated-analytics-storage/": { "/docs/": "/tyk-stack/tyk-pump/separated-analytics-storage/", + "/docs/5.5/": "/tyk-stack/tyk-pump/separated-analytics-storage/", "/docs/5.4/": "/tyk-stack/tyk-pump/separated-analytics-storage/", "/docs/5.3/": "/tyk-stack/tyk-pump/separated-analytics-storage/", "/docs/5.2/": "/tyk-stack/tyk-pump/separated-analytics-storage/", @@ -665,6 +702,7 @@ }, "/analytics-and-reporting/traffic-overview/": { "/docs/": "/tyk-dashboard-analytics/traffic-overview/", + "/docs/5.5/": "/tyk-dashboard-analytics/traffic-overview/", "/docs/5.4/": "/tyk-dashboard-analytics/traffic-overview/", "/docs/5.3/": "/tyk-dashboard-analytics/traffic-overview/", "/docs/5.2/": "/tyk-dashboard-analytics/traffic-overview/", @@ -681,6 +719,7 @@ }, "/analytics-and-reporting/traffic-per-api/": { "/docs/": "/tyk-dashboard-analytics/traffic-per-api/", + "/docs/5.5/": "/tyk-dashboard-analytics/traffic-per-api/", "/docs/5.4/": "/tyk-dashboard-analytics/traffic-per-api/", "/docs/5.3/": "/tyk-dashboard-analytics/traffic-per-api/", "/docs/5.2/": "/tyk-dashboard-analytics/traffic-per-api/", @@ -697,6 +736,7 @@ }, "/analytics-and-reporting/traffic-per-oauth-client/": { "/docs/": "/tyk-dashboard-analytics/traffic-per-oauth-client/", + "/docs/5.5/": "/tyk-dashboard-analytics/traffic-per-oauth-client/", "/docs/5.4/": "/tyk-dashboard-analytics/traffic-per-oauth-client/", "/docs/5.3/": "/tyk-dashboard-analytics/traffic-per-oauth-client/", "/docs/5.2/": "/tyk-dashboard-analytics/traffic-per-oauth-client/", @@ -713,6 +753,7 @@ }, "/analytics-and-reporting/traffic-per-token/": { "/docs/": "/tyk-dashboard-analytics/traffic-per-token/", + "/docs/5.5/": "/tyk-dashboard-analytics/traffic-per-token/", "/docs/5.4/": "/tyk-dashboard-analytics/traffic-per-token/", "/docs/5.3/": "/tyk-dashboard-analytics/traffic-per-token/", "/docs/5.2/": "/tyk-dashboard-analytics/traffic-per-token/", @@ -729,6 +770,7 @@ }, "/analytics-and-reporting/tyk-analytics-fields/": { "/docs/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", + "/docs/5.5/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", "/docs/5.4/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", "/docs/5.3/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", "/docs/5.2/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", @@ -739,6 +781,7 @@ }, "/analytics-and-reporting/useful-debug-modes/": { "/docs/": "/tyk-stack/tyk-pump/useful-debug-modes/", + "/docs/5.5/": "/tyk-stack/tyk-pump/useful-debug-modes/", "/docs/5.4/": "/tyk-stack/tyk-pump/useful-debug-modes/", "/docs/5.3/": "/tyk-stack/tyk-pump/useful-debug-modes/", "/docs/5.2/": "/tyk-stack/tyk-pump/useful-debug-modes/", @@ -755,23 +798,27 @@ }, "/api-management/ai-management/overview/": { "/docs/": "/api-management/ai-management/overview/", + "/docs/5.5/": "/api-management/ai-management/overview/", "/docs/5.4/": "/api-management/ai-management/overview/", "/docs/nightly/": "/api-management/ai-management/overview/" }, "/api-management/async-apis/advanced-use-cases/": { "/docs/": "/api-management/async-apis/advanced-use-cases/", + "/docs/5.5/": "/api-management/async-apis/advanced-use-cases/", "/docs/5.4/": "/api-management/async-apis/advanced-use-cases/", "/docs/5.3/": "/api-management/async-apis/advanced-use-cases/", "/docs/nightly/": "/api-management/async-apis/advanced-use-cases/" }, "/api-management/async-apis/use-cases/": { "/docs/": "/api-management/async-apis/use-cases/", + "/docs/5.5/": "/api-management/async-apis/use-cases/", "/docs/5.4/": "/api-management/async-apis/use-cases/", "/docs/5.3/": "/api-management/async-apis/use-cases/", "/docs/nightly/": "/api-management/async-apis/use-cases/" }, "/api-management/manage-apis/api-operations/api-observability/": { "/docs/": "/api-management/manage-apis/api-operations/api-observability/", + "/docs/5.5/": "/api-management/manage-apis/api-operations/api-observability/", "/docs/5.4/": "/api-management/manage-apis/api-operations/api-observability/", "/docs/5.3/": "/api-management/manage-apis/api-operations/api-observability/", "/docs/5.2/": "/api-management/manage-apis/api-operations/api-observability/", @@ -779,6 +826,7 @@ }, "/api-management/manage-apis/deploy-apis/deploy-apis-overview/": { "/docs/": "/api-management/manage-apis/deploy-apis/deploy-apis-overview/", + "/docs/5.5/": "/api-management/manage-apis/deploy-apis/deploy-apis-overview/", "/docs/5.4/": "/api-management/manage-apis/deploy-apis/deploy-apis-overview/", "/docs/5.3/": "/api-management/manage-apis/deploy-apis/deploy-apis-overview/", "/docs/5.2/": "/api-management/manage-apis/deploy-apis/deploy-apis-overview/", @@ -787,6 +835,7 @@ }, "/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware/": { "/docs/": "/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware/", + "/docs/5.5/": "/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware/", "/docs/5.4/": "/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware/", "/docs/5.3/": "/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware/", "/docs/5.2/": "/api-management/manage-apis/tyk-oas-api-definition/tyk-oas-middleware/", @@ -798,6 +847,7 @@ }, "/apim-best-practice/api-security-best-practice/authentication/": { "/docs/": "/apim-best-practice/api-security-best-practice/authentication/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/authentication/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/authentication/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/authentication/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/authentication/", @@ -806,6 +856,7 @@ }, "/apim-best-practice/api-security-best-practice/authorisation-levels/": { "/docs/": "/apim-best-practice/api-security-best-practice/authorisation-levels/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/authorisation-levels/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/authorisation-levels/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/authorisation-levels/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/authorisation-levels/", @@ -814,6 +865,7 @@ }, "/apim-best-practice/api-security-best-practice/authorisation/": { "/docs/": "/apim-best-practice/api-security-best-practice/authorisation/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/authorisation/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/authorisation/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/authorisation/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/authorisation/", @@ -822,6 +874,7 @@ }, "/apim-best-practice/api-security-best-practice/configuration/": { "/docs/": "/apim-best-practice/api-security-best-practice/configuration/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/configuration/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/configuration/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/configuration/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/configuration/", @@ -830,6 +883,7 @@ }, "/apim-best-practice/api-security-best-practice/governance/": { "/docs/": "/apim-best-practice/api-security-best-practice/governance/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/governance/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/governance/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/governance/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/governance/", @@ -838,6 +892,7 @@ }, "/apim-best-practice/api-security-best-practice/overview/": { "/docs/": "/apim-best-practice/api-security-best-practice/overview/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/overview/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/overview/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/overview/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/overview/", @@ -846,6 +901,7 @@ }, "/apim-best-practice/api-security-best-practice/resource-consumption/": { "/docs/": "/apim-best-practice/api-security-best-practice/resource-consumption/", + "/docs/5.5/": "/apim-best-practice/api-security-best-practice/resource-consumption/", "/docs/5.4/": "/apim-best-practice/api-security-best-practice/resource-consumption/", "/docs/5.3/": "/apim-best-practice/api-security-best-practice/resource-consumption/", "/docs/5.2/": "/apim-best-practice/api-security-best-practice/resource-consumption/", @@ -854,6 +910,7 @@ }, "/apim-best-practice/overview/": { "/docs/": "/apim-best-practice/overview/", + "/docs/5.5/": "/apim-best-practice/overview/", "/docs/5.4/": "/apim-best-practice/overview/", "/docs/5.3/": "/apim-best-practice/overview/", "/docs/5.2/": "/apim-best-practice/overview/", @@ -868,6 +925,7 @@ }, "/apim/open-source/getting-started/": { "/docs/": "/apim/open-source/", + "/docs/5.5/": "/apim/open-source/", "/docs/5.4/": "/apim/open-source/", "/docs/5.3/": "/apim/open-source/", "/docs/5.2/": "/apim/open-source/", @@ -908,6 +966,7 @@ }, "/basic-config-and-security/reduce-latency/caching/advanced-cache/": { "/docs/": "/basic-config-and-security/reduce-latency/caching/advanced-cache/", + "/docs/5.5/": "/basic-config-and-security/reduce-latency/caching/advanced-cache/", "/docs/5.4/": "/basic-config-and-security/reduce-latency/caching/advanced-cache/", "/docs/5.3/": "/basic-config-and-security/reduce-latency/caching/advanced-cache/", "/docs/5.2/": "/basic-config-and-security/reduce-latency/caching/advanced-cache/", @@ -917,6 +976,7 @@ }, "/basic-config-and-security/reduce-latency/caching/global-cache/": { "/docs/": "/basic-config-and-security/reduce-latency/caching/global-cache/", + "/docs/5.5/": "/basic-config-and-security/reduce-latency/caching/global-cache/", "/docs/5.4/": "/basic-config-and-security/reduce-latency/caching/global-cache/", "/docs/5.3/": "/basic-config-and-security/reduce-latency/caching/global-cache/", "/docs/5.2/": "/basic-config-and-security/reduce-latency/caching/global-cache/", @@ -926,6 +986,7 @@ }, "/basic-config-and-security/reduce-latency/caching/invalidate-cache/": { "/docs/": "/basic-config-and-security/reduce-latency/caching/invalidate-cache/", + "/docs/5.5/": "/basic-config-and-security/reduce-latency/caching/invalidate-cache/", "/docs/5.4/": "/basic-config-and-security/reduce-latency/caching/invalidate-cache/", "/docs/5.3/": "/basic-config-and-security/reduce-latency/caching/invalidate-cache/", "/docs/5.2/": "/basic-config-and-security/reduce-latency/caching/invalidate-cache/", @@ -935,6 +996,7 @@ }, "/basic-config-and-security/reduce-latency/caching/optimise-cache/": { "/docs/": "/basic-config-and-security/reduce-latency/caching/optimise-cache/", + "/docs/5.5/": "/basic-config-and-security/reduce-latency/caching/optimise-cache/", "/docs/5.4/": "/basic-config-and-security/reduce-latency/caching/optimise-cache/", "/docs/5.3/": "/basic-config-and-security/reduce-latency/caching/optimise-cache/", "/docs/5.2/": "/basic-config-and-security/reduce-latency/caching/optimise-cache/", @@ -944,6 +1006,7 @@ }, "/basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/": { "/docs/": "/basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/", + "/docs/5.5/": "/basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/", "/docs/5.4/": "/basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/", "/docs/5.3/": "/basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/", "/docs/5.2/": "/basic-config-and-security/reduce-latency/caching/upstream-controlled-cache/", @@ -977,6 +1040,7 @@ }, "/basic-config-and-security/security/authentication-&-authorization/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/", @@ -993,6 +1057,7 @@ }, "/basic-config-and-security/security/authentication-&-authorization/oauth2-0/auth-code-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", @@ -1009,6 +1074,7 @@ }, "/basic-config-and-security/security/authentication-&-authorization/oauth2-0/client-credentials-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", @@ -1025,6 +1091,7 @@ }, "/basic-config-and-security/security/authentication-&-authorization/oauth2-0/refresh-token-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", @@ -1041,6 +1108,7 @@ }, "/basic-config-and-security/security/authentication-&-authorization/oauth2-0/username-password-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", @@ -1057,6 +1125,7 @@ }, "/basic-config-and-security/security/authentication--authorization/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/", @@ -1073,6 +1142,7 @@ }, "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", @@ -1089,6 +1159,7 @@ }, "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", @@ -1105,6 +1176,7 @@ }, "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", @@ -1121,6 +1193,7 @@ }, "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", @@ -1137,6 +1210,7 @@ }, "/basic-config-and-security/security/authentication-authorization/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/", @@ -1156,6 +1230,7 @@ }, "/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/ext-oauth-middleware/", @@ -1175,6 +1250,7 @@ }, "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-auth0/", @@ -1187,6 +1263,7 @@ }, "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/jwt-keycloak/", @@ -1205,6 +1282,7 @@ }, "/basic-config-and-security/security/authentication-authorization/oauth2-0/auth-code-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", @@ -1218,6 +1296,7 @@ }, "/basic-config-and-security/security/authentication-authorization/oauth2-0/client-credentials-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/client-credentials-grant/", @@ -1231,6 +1310,7 @@ }, "/basic-config-and-security/security/authentication-authorization/oauth2-0/refresh-token-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/refresh-token-grant/", @@ -1241,6 +1321,7 @@ }, "/basic-config-and-security/security/authentication-authorization/oauth2-0/username-password-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/username-password-grant/", @@ -1254,6 +1335,7 @@ }, "/basic-config-and-security/security/authentication-authorization/oauth2.0/auth-code-grant/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/oauth2-0/auth-code-grant/", @@ -1273,6 +1355,7 @@ }, "/basic-config-and-security/security/authentication-authorization/physical-token-expiry/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/physical-key-expiry/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/physical-key-expiry/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/physical-key-expiry/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/physical-key-expiry/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/physical-key-expiry/", @@ -1292,6 +1375,7 @@ }, "/basic-config-and-security/security/certificate-pinning/": { "/docs/": "/security/certificate-pinning/", + "/docs/5.5/": "/security/certificate-pinning/", "/docs/5.4/": "/security/certificate-pinning/", "/docs/5.3/": "/security/certificate-pinning/", "/docs/5.2/": "/security/certificate-pinning/", @@ -1320,6 +1404,7 @@ }, "/basic-config-and-security/security/dashboard/dashboard-api-security/": { "/docs/": "/basic-config-and-security/security/dashboard/dashboard-admin-api/", + "/docs/5.5/": "/basic-config-and-security/security/dashboard/dashboard-admin-api/", "/docs/5.4/": "/basic-config-and-security/security/dashboard/dashboard-admin-api/", "/docs/5.3/": "/basic-config-and-security/security/dashboard/dashboard-admin-api/", "/docs/5.2/": "/basic-config-and-security/security/dashboard/dashboard-api-security/", @@ -1381,6 +1466,7 @@ }, "/basic-config-and-security/security/security-policies/secure-apis-method-path/": { "/docs/": "/security/security-policies/secure-apis-method-path/", + "/docs/5.5/": "/security/security-policies/secure-apis-method-path/", "/docs/5.4/": "/security/security-policies/secure-apis-method-path/", "/docs/5.3/": "/security/security-policies/secure-apis-method-path/", "/docs/5.2/": "/security/security-policies/secure-apis-method-path/", @@ -1400,6 +1486,7 @@ }, "/basic-config-and-security/security/tls-and-ssl/mutual-tls/": { "/docs/": "/basic-config-and-security/security/mutual-tls/", + "/docs/5.5/": "/basic-config-and-security/security/mutual-tls/", "/docs/5.4/": "/basic-config-and-security/security/mutual-tls/", "/docs/5.3/": "/basic-config-and-security/security/mutual-tls/", "/docs/5.2/": "/basic-config-and-security/security/mutual-tls/", @@ -1416,6 +1503,7 @@ }, "/basic-config-and-security/security/your-apis/oauth2.0/revoke-oauth-tokens/": { "/docs/": "/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens/", + "/docs/5.5/": "/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens/", "/docs/5.4/": "/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens/", "/docs/5.3/": "/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens/", "/docs/5.2/": "/basic-config-and-security/security/your-apis/oauth20/revoke-oauth-tokens/", @@ -1429,6 +1517,7 @@ }, "/compose-apis/virtual-endpoints/": { "/docs/": "/advanced-configuration/compose-apis/virtual-endpoints/", + "/docs/5.5/": "/advanced-configuration/compose-apis/virtual-endpoints/", "/docs/5.4/": "/advanced-configuration/compose-apis/virtual-endpoints/", "/docs/5.3/": "/advanced-configuration/compose-apis/virtual-endpoints/", "/docs/5.2/": "/advanced-configuration/compose-apis/virtual-endpoints/", @@ -1445,6 +1534,7 @@ }, "/concepts/api-catalogue/": { "/docs/": "/getting-started/key-concepts/api-catalogue/", + "/docs/5.5/": "/getting-started/key-concepts/api-catalogue/", "/docs/5.4/": "/getting-started/key-concepts/api-catalogue/", "/docs/5.3/": "/getting-started/key-concepts/api-catalogue/", "/docs/5.2/": "/getting-started/key-concepts/api-catalogue/", @@ -1455,6 +1545,7 @@ }, "/concepts/context-variables/": { "/docs/": "/context-variables/", + "/docs/5.5/": "/context-variables/", "/docs/5.4/": "/context-variables/", "/docs/5.3/": "/context-variables/", "/docs/5.2/": "/context-variables/", @@ -1471,6 +1562,7 @@ }, "/concepts/gateway-api/": { "/docs/": "/getting-started/key-concepts/gateway-api/", + "/docs/5.5/": "/getting-started/key-concepts/gateway-api/", "/docs/5.4/": "/getting-started/key-concepts/gateway-api/", "/docs/5.3/": "/getting-started/key-concepts/gateway-api/", "/docs/5.2/": "/getting-started/key-concepts/gateway-api/", @@ -1481,6 +1573,7 @@ }, "/concepts/graphql-proxy-only/": { "/docs/": "/graphql-proxy-only/", + "/docs/5.5/": "/graphql-proxy-only/", "/docs/5.4/": "/graphql-proxy-only/", "/docs/5.3/": "/graphql-proxy-only/", "/docs/5.2/": "/graphql-proxy-only/", @@ -1497,6 +1590,7 @@ }, "/concepts/session-meta-data/": { "/docs/": "/getting-started/key-concepts/what-is-a-session-object/", + "/docs/5.5/": "/getting-started/key-concepts/what-is-a-session-object/", "/docs/5.4/": "/getting-started/key-concepts/what-is-a-session-object/", "/docs/5.3/": "/getting-started/key-concepts/what-is-a-session-object/", "/docs/5.2/": "/getting-started/key-concepts/what-is-a-session-object/", @@ -1507,6 +1601,7 @@ }, "/concepts/tyk-components/dashboard/": { "/docs/": "/tyk-dashboard/", + "/docs/5.5/": "/tyk-dashboard/", "/docs/5.4/": "/tyk-dashboard/", "/docs/5.3/": "/tyk-dashboard/", "/docs/5.2/": "/tyk-dashboard/", @@ -1517,6 +1612,7 @@ }, "/concepts/tyk-components/developer-portal/": { "/docs/": "/tyk-developer-portal/", + "/docs/5.5/": "/tyk-developer-portal/", "/docs/5.4/": "/tyk-developer-portal/", "/docs/5.3/": "/tyk-developer-portal/", "/docs/5.2/": "/tyk-developer-portal/", @@ -1527,6 +1623,7 @@ }, "/concepts/tyk-components/gateway/": { "/docs/": "/tyk-oss-gateway/", + "/docs/5.5/": "/tyk-oss-gateway/", "/docs/5.4/": "/tyk-oss-gateway/", "/docs/5.3/": "/tyk-oss-gateway/", "/docs/5.2/": "/tyk-oss-gateway/", @@ -1543,6 +1640,7 @@ }, "/concepts/tyk-components/identity-broker/": { "/docs/": "/tyk-identity-broker/", + "/docs/5.5/": "/tyk-identity-broker/", "/docs/5.4/": "/tyk-identity-broker/", "/docs/5.3/": "/tyk-identity-broker/", "/docs/5.2/": "/tyk-identity-broker/", @@ -1559,6 +1657,7 @@ }, "/concepts/tyk-components/identity-broker/rel=/": { "/docs/": "/tyk-identity-broker/", + "/docs/5.5/": "/tyk-identity-broker/", "/docs/5.4/": "/tyk-identity-broker/", "/docs/5.3/": "/tyk-identity-broker/", "/docs/5.2/": "/tyk-identity-broker/", @@ -1569,6 +1668,7 @@ }, "/concepts/tyk-components/pump/": { "/docs/": "/tyk-pump/", + "/docs/5.5/": "/tyk-pump/", "/docs/5.4/": "/tyk-pump/", "/docs/5.3/": "/tyk-pump/", "/docs/5.2/": "/tyk-pump/", @@ -1579,6 +1679,7 @@ }, "/concepts/what-is-a-session-object/": { "/docs/": "/getting-started/key-concepts/what-is-a-session-object/", + "/docs/5.5/": "/getting-started/key-concepts/what-is-a-session-object/", "/docs/5.4/": "/getting-started/key-concepts/what-is-a-session-object/", "/docs/5.3/": "/getting-started/key-concepts/what-is-a-session-object/", "/docs/5.2/": "/getting-started/key-concepts/what-is-a-session-object/", @@ -1587,6 +1688,7 @@ }, "/configure/dashboard-env-variables/": { "/docs/": "/tyk-dashboard/configuration/", + "/docs/5.5/": "/tyk-dashboard/configuration/", "/docs/5.4/": "/tyk-dashboard/configuration/", "/docs/5.3/": "/tyk-dashboard/configuration/", "/docs/5.2/": "/tyk-dashboard/configuration/", @@ -1597,6 +1699,7 @@ }, "/configure/environment-variables/": { "/docs/": "/tyk-environment-variables/", + "/docs/5.5/": "/tyk-environment-variables/", "/docs/5.4/": "/tyk-environment-variables/", "/docs/5.3/": "/tyk-environment-variables/", "/docs/5.2/": "/tyk-environment-variables/", @@ -1616,6 +1719,7 @@ }, "/configure/tyk-dashboard-configuration-options/": { "/docs/": "/tyk-dashboard/configuration/", + "/docs/5.5/": "/tyk-dashboard/configuration/", "/docs/5.4/": "/tyk-dashboard/configuration/", "/docs/5.3/": "/tyk-dashboard/configuration/", "/docs/5.2/": "/tyk-dashboard/configuration/", @@ -1632,6 +1736,7 @@ }, "/configure/tyk-gateway-configuration-options/": { "/docs/": "/tyk-oss-gateway/configuration/", + "/docs/5.5/": "/tyk-oss-gateway/configuration/", "/docs/5.4/": "/tyk-oss-gateway/configuration/", "/docs/5.3/": "/tyk-oss-gateway/configuration/", "/docs/5.2/": "/tyk-oss-gateway/configuration/", @@ -1648,6 +1753,7 @@ }, "/configure/tyk-pump-configuration/": { "/docs/": "/tyk-pump/configuration/", + "/docs/5.5/": "/tyk-pump/configuration/", "/docs/5.4/": "/tyk-pump/configuration/", "/docs/5.3/": "/tyk-pump/configuration/", "/docs/5.2/": "/tyk-pump/configuration/", @@ -1670,6 +1776,7 @@ }, "/control-limit-traffic/rate-limiting/": { "/docs/": "/basic-config-and-security/control-limit-traffic/rate-limiting/", + "/docs/5.5/": "/basic-config-and-security/control-limit-traffic/rate-limiting/", "/docs/5.4/": "/basic-config-and-security/control-limit-traffic/rate-limiting/", "/docs/5.3/": "/basic-config-and-security/control-limit-traffic/rate-limiting/", "/docs/5.2/": "/basic-config-and-security/control-limit-traffic/rate-limiting/", @@ -1680,6 +1787,7 @@ }, "/control-limit-traffic/request-quotas/": { "/docs/": "/basic-config-and-security/control-limit-traffic/request-quotas/", + "/docs/5.5/": "/basic-config-and-security/control-limit-traffic/request-quotas/", "/docs/5.4/": "/basic-config-and-security/control-limit-traffic/request-quotas/", "/docs/5.3/": "/basic-config-and-security/control-limit-traffic/request-quotas/", "/docs/5.2/": "/basic-config-and-security/control-limit-traffic/request-quotas/", @@ -1690,6 +1798,7 @@ }, "/customise-tyk/plugins/": { "/docs/": "/plugins/", + "/docs/5.5/": "/plugins/", "/docs/5.4/": "/plugins/", "/docs/5.3/": "/plugins/", "/docs/5.2/": "/plugins/", @@ -1706,6 +1815,7 @@ }, "/customise-tyk/plugins/golang-plugins/golang-plugins/": { "/docs/": "/plugins/supported-languages/golang/", + "/docs/5.5/": "/plugins/supported-languages/golang/", "/docs/5.4/": "/plugins/supported-languages/golang/", "/docs/5.3/": "/plugins/supported-languages/golang/", "/docs/5.2/": "/plugins/supported-languages/golang/", @@ -1722,6 +1832,7 @@ }, "/customise-tyk/plugins/javascript-middleware/": { "/docs/": "/plugins/supported-languages/javascript-middleware/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/", @@ -1732,6 +1843,7 @@ }, "/customise-tyk/plugins/javascript-middleware/javascript-api/": { "/docs/": "/plugins/supported-languages/javascript-middleware/javascript-api/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/javascript-api/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/javascript-api/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/javascript-api/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/javascript-api/", @@ -1742,6 +1854,7 @@ }, "/customise-tyk/plugins/javascript-middleware/middleware-execution-order/": { "/docs/": "/plugins/supported-languages/javascript-middleware/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/", @@ -1752,6 +1865,7 @@ }, "/customise-tyk/plugins/rich-plugins/grpc/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/", @@ -1762,6 +1876,7 @@ }, "/customise-tyk/plugins/rich-plugins/grpc/custom-auth-dot-net/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", @@ -1772,6 +1887,7 @@ }, "/customise-tyk/plugins/rich-plugins/id-extractor/": { "/docs/": "/plugins/plugin-types/auth-plugins/id-extractor/", + "/docs/5.5/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.4/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.3/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.2/": "/plugins/plugin-types/auth-plugins/id-extractor/", @@ -1782,6 +1898,7 @@ }, "/customise-tyk/plugins/rich-plugins/python/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/python/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/python/", @@ -1792,6 +1909,7 @@ }, "/customise-tyk/plugins/rich-plugins/python/custom-auth-python-tutorial/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", @@ -1802,6 +1920,7 @@ }, "/customise-tyk/plugins/rich-plugins/python/tutorial-add-demo-plugin-api/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", @@ -1812,6 +1931,7 @@ }, "/customise-tyk/plugins/rich-plugins/rich-plugins-work/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/python/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/python/", @@ -1828,6 +1948,7 @@ }, "/debugging-series/": { "/docs/": "/debugging-series/debugging-series/", + "/docs/5.5/": "/debugging-series/debugging-series/", "/docs/5.4/": "/debugging-series/debugging-series/", "/docs/5.3/": "/debugging-series/debugging-series/", "/docs/5.2/": "/debugging-series/debugging-series/", @@ -1838,6 +1959,7 @@ }, "/debugging-series/debugging-series/": { "/docs/": "/debugging-series/debugging-series/", + "/docs/5.5/": "/debugging-series/debugging-series/", "/docs/5.4/": "/debugging-series/debugging-series/", "/docs/5.3/": "/debugging-series/debugging-series/", "/docs/5.2/": "/debugging-series/debugging-series/", @@ -1848,6 +1970,7 @@ }, "/debugging-series/mongodb-debugging/": { "/docs/": "/debugging-series/mongodb-debugging/", + "/docs/5.5/": "/debugging-series/mongodb-debugging/", "/docs/5.4/": "/debugging-series/mongodb-debugging/", "/docs/5.3/": "/debugging-series/mongodb-debugging/", "/docs/5.2/": "/debugging-series/mongodb-debugging/", @@ -1858,6 +1981,7 @@ }, "/deploy-tyk-premise-production/": { "/docs/": "/planning-for-production/", + "/docs/5.5/": "/planning-for-production/", "/docs/5.4/": "/planning-for-production/", "/docs/5.3/": "/planning-for-production/", "/docs/5.2/": "/planning-for-production/", @@ -1868,6 +1992,7 @@ }, "/deployment-and-operations/tyk-cloud-platform/quick-start/": { "/docs/": "/deployment-and-operations/tyk-cloud-platform/quick-start/", + "/docs/5.5/": "/deployment-and-operations/tyk-cloud-platform/quick-start/", "/docs/5.4/": "/deployment-and-operations/tyk-cloud-platform/quick-start/", "/docs/5.3/": "/deployment-and-operations/tyk-cloud-platform/quick-start/", "/docs/5.2/": "/deployment-and-operations/tyk-cloud-platform/quick-start/", @@ -1877,6 +2002,7 @@ }, "/deployment-and-operations/tyk-open-source-api-gateway/quick-start/": { "/docs/": "/deployment-and-operations/tyk-open-source-api-gateway/quick-start/", + "/docs/5.5/": "/deployment-and-operations/tyk-open-source-api-gateway/quick-start/", "/docs/5.4/": "/deployment-and-operations/tyk-open-source-api-gateway/quick-start/", "/docs/5.3/": "/deployment-and-operations/tyk-open-source-api-gateway/quick-start/", "/docs/5.2/": "/deployment-and-operations/tyk-open-source-api-gateway/quick-start/", @@ -1885,6 +2011,7 @@ }, "/deployment-and-operations/tyk-open-source-api-gateway/setup-multiple-gateways/": { "/docs/": "/tyk-cloud/environments-deployments/hybrid-gateways/", + "/docs/5.5/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.4/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.3/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.2/": "/tyk-cloud/environments-deployments/hybrid-gateways/", @@ -1894,18 +2021,21 @@ }, "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul/": { "/docs/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul/", + "/docs/5.5/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul/", "/docs/5.4/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul/", "/docs/5.3/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul/", "/docs/nightly/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/consul/" }, "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault/": { "/docs/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault/", + "/docs/5.5/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault/", "/docs/5.4/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault/", "/docs/5.3/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault/", "/docs/nightly/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/deployment-to-production/key-value-storage/vault/" }, "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb/": { "/docs/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb/", + "/docs/5.5/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb/", "/docs/5.4/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb/", "/docs/5.3/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb/", "/docs/5.2/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-mongodb/", @@ -1914,6 +2044,7 @@ }, "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql/": { "/docs/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql/", + "/docs/5.5/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql/", "/docs/5.4/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql/", "/docs/5.3/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql/", "/docs/5.2/": "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack-postgresql/", @@ -1922,6 +2053,7 @@ }, "/deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack/": { "/docs/": "/product-stack/tyk-charts/tyk-stack-chart/", + "/docs/5.5/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.4/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.3/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.2/": "/product-stack/tyk-charts/tyk-stack-chart/", @@ -1930,6 +2062,7 @@ }, "/deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview/": { "/docs/": "/deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview/", + "/docs/5.5/": "/deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview/", "/docs/5.4/": "/deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview/", "/docs/5.3/": "/deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview/", "/docs/5.2/": "/deployment-and-operations/tyk-self-managed/tyk-demos-and-pocs/overview/", @@ -1938,6 +2071,7 @@ }, "/developer-support/": { "/docs/": "/frequently-asked-questions/faq/", + "/docs/5.5/": "/frequently-asked-questions/faq/", "/docs/5.4/": "/frequently-asked-questions/faq/", "/docs/5.3/": "/frequently-asked-questions/faq/", "/docs/5.2/": "/frequently-asked-questions/faq/", @@ -1948,18 +2082,21 @@ }, "/developer-support/backups/backup-apis-and-policies/": { "/docs/": "/developer-support/backups/backup-apis-and-policies/", + "/docs/5.5/": "/developer-support/backups/backup-apis-and-policies/", "/docs/5.4/": "/developer-support/backups/backup-apis-and-policies/", "/docs/5.3/": "/developer-support/backups/backup-apis-and-policies/", "/docs/nightly/": "/developer-support/backups/backup-apis-and-policies/" }, "/developer-support/cloud-saas/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/" }, "/developer-support/debugging-series/debugging-selfmanaged/": { "/docs/": "/developer-support/debugging-series/debugging-selfmanaged/", + "/docs/5.5/": "/developer-support/debugging-series/debugging-selfmanaged/", "/docs/5.4/": "/developer-support/debugging-series/debugging-selfmanaged/", "/docs/5.3/": "/developer-support/debugging-series/debugging-selfmanaged/", "/docs/5.2/": "/developer-support/debugging-series/debugging-selfmanaged/", @@ -1969,11 +2106,13 @@ }, "/developer-support/documentation-projects/inclusive-naming/": { "/docs/": "/developer-support/documentation-projects/inclusive-naming/", + "/docs/5.5/": "/developer-support/documentation-projects/inclusive-naming/", "/docs/5.4/": "/developer-support/documentation-projects/inclusive-naming/", "/docs/nightly/": "/developer-support/documentation-projects/inclusive-naming/" }, "/developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster/": { "/docs/": "/developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster/", + "/docs/5.5/": "/developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster/", "/docs/5.4/": "/developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster/", "/docs/5.3/": "/developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster/", "/docs/5.2/": "/developer-support/frequently-asked-questions/how-to-reduce-cpu-usage-in-a-redis-cluster/", @@ -1982,6 +2121,7 @@ }, "/developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics/": { "/docs/": "/developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics/", + "/docs/5.5/": "/developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics/", "/docs/5.4/": "/developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics/", "/docs/5.3/": "/developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics/", "/docs/5.2/": "/developer-support/frequently-asked-questions/what_is_the_performance_impact_of_analytics/", @@ -1990,6 +2130,7 @@ }, "/developer-support/long-term-support-releases/": { "/docs/": "/developer-support/special-releases-and-features/long-term-support-releases/", + "/docs/5.5/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.4/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.3/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.2/": "/developer-support/long-term-support-releases/", @@ -2006,6 +2147,7 @@ }, "/developer-support/special-releases-and-features/early-access-features/": { "/docs/": "/developer-support/special-releases-and-features/early-access-features/", + "/docs/5.5/": "/developer-support/special-releases-and-features/early-access-features/", "/docs/5.4/": "/developer-support/special-releases-and-features/early-access-features/", "/docs/5.3/": "/developer-support/special-releases-and-features/early-access-features/", "/docs/nightly/": "/developer-support/special-releases-and-features/early-access-features/", @@ -2018,18 +2160,21 @@ }, "/developer-support/special-releases-and-features/fips-release/": { "/docs/": "/developer-support/special-releases-and-features/fips-release/", + "/docs/5.5/": "/developer-support/special-releases-and-features/fips-release/", "/docs/5.4/": "/developer-support/special-releases-and-features/fips-release/", "/docs/5.3/": "/developer-support/special-releases-and-features/fips-release/", "/docs/nightly/": "/developer-support/special-releases-and-features/fips-release/" }, "/developer-support/special-releases-and-features/lab-releases/": { "/docs/": "/developer-support/special-releases-and-features/lab-releases/", + "/docs/5.5/": "/developer-support/special-releases-and-features/lab-releases/", "/docs/5.4/": "/developer-support/special-releases-and-features/lab-releases/", "/docs/5.3/": "/developer-support/special-releases-and-features/lab-releases/", "/docs/nightly/": "/developer-support/special-releases-and-features/lab-releases/" }, "/developer-support/special-releases-and-features/long-term-support-releases/": { "/docs/": "/developer-support/special-releases-and-features/long-term-support-releases/", + "/docs/5.5/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.4/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.3/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/nightly/": "/developer-support/special-releases-and-features/long-term-support-releases/", @@ -2046,6 +2191,7 @@ }, "/developer-support/tyk-release-summary/overview/": { "/docs/": "/developer-support/tyk-release-summary/overview/", + "/docs/5.5/": "/developer-support/tyk-release-summary/overview/", "/docs/5.4/": "/developer-support/tyk-release-summary/overview/", "/docs/5.3/": "/developer-support/tyk-release-summary/overview/", "/docs/5.2/": "/developer-support/tyk-release-summary/overview/", @@ -2062,96 +2208,112 @@ }, "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-cloud-saas/" }, "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-go-plugin/" }, "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/cloud/upgrade-hybrid/" }, "/developer-support/upgrading-tyk/deployment-model/open-source/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/open-source/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/open-source/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/open-source/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/open-source/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/open-source/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/docker/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/docker/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/docker/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/docker/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/docker/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/docker/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/go-plugins/": { "/docs/": "/developer-support/upgrading-tyk/go-plugins/", + "/docs/5.5/": "/developer-support/upgrading-tyk/go-plugins/", "/docs/5.4/": "/developer-support/upgrading-tyk/go-plugins/", "/docs/5.3/": "/developer-support/upgrading-tyk/go-plugins/", "/docs/nightly/": "/developer-support/upgrading-tyk/go-plugins/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/helm/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/helm/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/helm/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/helm/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/helm/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/helm/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/kubernetes/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-deb/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/linux-distributions/self-managed-rpm/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/mdcb/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/" }, "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/": { "/docs/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", + "/docs/5.5/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", "/docs/5.4/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", "/docs/5.3/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/", "/docs/nightly/": "/developer-support/upgrading-tyk/deployment-model/self-managed/overview/" }, "/developer-support/upgrading-tyk/go-plugins/": { "/docs/": "/developer-support/upgrading-tyk/go-plugins/", + "/docs/5.5/": "/developer-support/upgrading-tyk/go-plugins/", "/docs/5.4/": "/developer-support/upgrading-tyk/go-plugins/", "/docs/5.3/": "/developer-support/upgrading-tyk/go-plugins/", "/docs/nightly/": "/developer-support/upgrading-tyk/go-plugins/" }, "/developer-support/upgrading-tyk/preparations/upgrade-guidelines/": { "/docs/": "/developer-support/upgrading-tyk/preparations/upgrade-guidelines/", + "/docs/5.5/": "/developer-support/upgrading-tyk/preparations/upgrade-guidelines/", "/docs/5.4/": "/developer-support/upgrading-tyk/preparations/upgrade-guidelines/", "/docs/5.3/": "/developer-support/upgrading-tyk/preparations/upgrade-guidelines/", "/docs/nightly/": "/developer-support/upgrading-tyk/preparations/upgrade-guidelines/" }, "/developer-support/upgrading-tyk/preparations/upgrade-strategies/": { "/docs/": "/developer-support/upgrading-tyk/preparations/upgrade-strategies/", + "/docs/5.5/": "/developer-support/upgrading-tyk/preparations/upgrade-strategies/", "/docs/5.4/": "/developer-support/upgrading-tyk/preparations/upgrade-strategies/", "/docs/5.3/": "/developer-support/upgrading-tyk/preparations/upgrade-strategies/", "/docs/nightly/": "/developer-support/upgrading-tyk/preparations/upgrade-strategies/" }, "/ensure-high-availability/circuit-breakers/": { "/docs/": "/planning-for-production/ensure-high-availability/circuit-breakers/", + "/docs/5.5/": "/planning-for-production/ensure-high-availability/circuit-breakers/", "/docs/5.4/": "/planning-for-production/ensure-high-availability/circuit-breakers/", "/docs/5.3/": "/planning-for-production/ensure-high-availability/circuit-breakers/", "/docs/5.2/": "/planning-for-production/ensure-high-availability/circuit-breakers/", @@ -2162,6 +2324,7 @@ }, "/ensure-high-availability/load-balancing/": { "/docs/": "/planning-for-production/ensure-high-availability/load-balancing/", + "/docs/5.5/": "/planning-for-production/ensure-high-availability/load-balancing/", "/docs/5.4/": "/planning-for-production/ensure-high-availability/load-balancing/", "/docs/5.3/": "/planning-for-production/ensure-high-availability/load-balancing/", "/docs/5.2/": "/planning-for-production/ensure-high-availability/load-balancing/", @@ -2178,6 +2341,7 @@ }, "/error-response-codes/": { "/docs/": "/error-response-codes/", + "/docs/5.5/": "/error-response-codes/", "/docs/5.4/": "/error-response-codes/", "/docs/5.3/": "/error-response-codes/", "/docs/5.2/": "/error-response-codes/", @@ -2220,6 +2384,7 @@ }, "/frequently-asked-questions/custom-domain-for-portal-cloud-multi-cloud/": { "/docs/": "/tyk-cloud/using-custom-domains/", + "/docs/5.5/": "/tyk-cloud/using-custom-domains/", "/docs/5.4/": "/tyk-cloud/using-custom-domains/", "/docs/5.3/": "/tyk-cloud/using-custom-domains/", "/docs/5.2/": "/tyk-cloud/using-custom-domains/", @@ -2237,6 +2402,7 @@ }, "/frequently-asked-questions/datadog-logs-showup-as-errors/": { "/docs/": "/frequently-asked-questions/datadog-logs-showup-as-errors/", + "/docs/5.5/": "/frequently-asked-questions/datadog-logs-showup-as-errors/", "/docs/5.4/": "/frequently-asked-questions/datadog-logs-showup-as-errors/", "/docs/5.3/": "/frequently-asked-questions/datadog-logs-showup-as-errors/", "/docs/5.2/": "/frequently-asked-questions/datadog-logs-showup-as-errors/", @@ -2261,6 +2427,7 @@ }, "/frequently-asked-questions/how-to-backup-tyk-cloud-deployment/": { "/docs/": "/frequently-asked-questions/how-to-backup-tyk-cloud-deployment/", + "/docs/5.5/": "/frequently-asked-questions/how-to-backup-tyk-cloud-deployment/", "/docs/5.4/": "/frequently-asked-questions/how-to-backup-tyk-cloud-deployment/", "/docs/5.3/": "/frequently-asked-questions/how-to-backup-tyk-cloud-deployment/", "/docs/5.2/": "/frequently-asked-questions/how-to-backup-tyk-cloud-deployment/", @@ -2283,6 +2450,7 @@ }, "/frequently-asked-questions/long-term-support-releases/": { "/docs/": "/developer-support/special-releases-and-features/long-term-support-releases/", + "/docs/5.5/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.4/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.3/": "/developer-support/special-releases-and-features/long-term-support-releases/", "/docs/5.2/": "/developer-support/long-term-support-releases/", @@ -2311,6 +2479,7 @@ }, "/frequently-asked-questions/sla-policies/": { "/docs/": "/frequently-asked-questions/sla-policies/", + "/docs/5.5/": "/frequently-asked-questions/sla-policies/", "/docs/5.4/": "/frequently-asked-questions/sla-policies/", "/docs/5.3/": "/frequently-asked-questions/sla-policies/", "/docs/5.2/": "/frequently-asked-questions/sla-policies/", @@ -2326,6 +2495,7 @@ }, "/frequently-asked-questions/using-early-access-features/": { "/docs/": "/developer-support/special-releases-and-features/early-access-features/", + "/docs/5.5/": "/developer-support/special-releases-and-features/early-access-features/", "/docs/5.4/": "/developer-support/special-releases-and-features/early-access-features/", "/docs/5.3/": "/developer-support/special-releases-and-features/early-access-features/", "/docs/5.2/": "/frequently-asked-questions/using-early-access-features/", @@ -2338,6 +2508,7 @@ }, "/get-started/with-tyk-cloud/tutorials/create-api-token/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", @@ -2348,6 +2519,7 @@ }, "/get-started/with-tyk-hybrid/": { "/docs/": "/tyk-cloud/", + "/docs/5.5/": "/tyk-cloud/", "/docs/5.4/": "/tyk-cloud/", "/docs/5.3/": "/tyk-cloud/", "/docs/5.2/": "/tyk-cloud/", @@ -2358,6 +2530,7 @@ }, "/get-started/with-tyk-multi-cloud/tutorials/create-api-token/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", @@ -2368,6 +2541,7 @@ }, "/get-started/with-tyk-multi-cloud/tutorials/create-api/": { "/docs/": "/getting-started/create-api/", + "/docs/5.5/": "/getting-started/create-api/", "/docs/5.4/": "/getting-started/create-api/", "/docs/5.3/": "/getting-started/create-api/", "/docs/5.2/": "/getting-started/create-api/", @@ -2378,6 +2552,7 @@ }, "/get-started/with-tyk-multi-cloud/tutorials/installation-on-aws/": { "/docs/": "/tyk-on-premises/installation/on-aws/", + "/docs/5.5/": "/tyk-on-premises/installation/on-aws/", "/docs/5.4/": "/tyk-on-premises/installation/on-aws/", "/docs/5.3/": "/tyk-on-premises/installation/on-aws/", "/docs/5.2/": "/tyk-on-premises/installation/on-aws/", @@ -2388,6 +2563,7 @@ }, "/get-started/with-tyk-on-premise/": { "/docs/": "/tyk-on-premises/", + "/docs/5.5/": "/tyk-on-premises/", "/docs/5.4/": "/tyk-on-premises/", "/docs/5.3/": "/tyk-on-premises/", "/docs/5.2/": "/tyk-on-premises/", @@ -2398,6 +2574,7 @@ }, "/get-started/with-tyk-on-premise/installation/": { "/docs/": "/tyk-self-managed/install/", + "/docs/5.5/": "/tyk-self-managed/install/", "/docs/5.4/": "/tyk-self-managed/install/", "/docs/5.3/": "/tyk-self-managed/install/", "/docs/5.2/": "/tyk-self-managed/install/", @@ -2414,6 +2591,7 @@ }, "/get-started/with-tyk-on-premise/installation/docker/": { "/docs/": "/tyk-on-premises/docker/", + "/docs/5.5/": "/tyk-on-premises/docker/", "/docs/5.4/": "/tyk-on-premises/docker/", "/docs/5.3/": "/tyk-on-premises/docker/", "/docs/5.2/": "/tyk-on-premises/docker/", @@ -2424,6 +2602,7 @@ }, "/get-started/with-tyk-on-premise/installation/docker/docker-quickstart/": { "/docs/": "/tyk-on-premises/docker/", + "/docs/5.5/": "/tyk-on-premises/docker/", "/docs/5.4/": "/tyk-on-premises/docker/", "/docs/5.3/": "/tyk-on-premises/docker/", "/docs/5.2/": "/tyk-on-premises/docker/", @@ -2434,6 +2613,7 @@ }, "/get-started/with-tyk-on-premise/installation/on-aws/": { "/docs/": "/tyk-on-premises/installation/on-aws/", + "/docs/5.5/": "/tyk-on-premises/installation/on-aws/", "/docs/5.4/": "/tyk-on-premises/installation/on-aws/", "/docs/5.3/": "/tyk-on-premises/installation/on-aws/", "/docs/5.2/": "/tyk-on-premises/installation/on-aws/", @@ -2444,6 +2624,7 @@ }, "/get-started/with-tyk-on-premise/installation/on-ubuntu/gateway/": { "/docs/": "/tyk-on-premises/debian-ubuntu/gateway/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/gateway/", @@ -2454,6 +2635,7 @@ }, "/get-started/with-tyk-on-premise/installation/redhat-rhel-centos/dashboard/": { "/docs/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", + "/docs/5.5/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", "/docs/5.4/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", "/docs/5.3/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", "/docs/5.2/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", @@ -2464,6 +2646,7 @@ }, "/get-started/with-tyk-on-premise/tutorials/tyk-on-premise-pro/": { "/docs/": "/getting-started/", + "/docs/5.5/": "/getting-started/", "/docs/5.4/": "/getting-started/", "/docs/5.3/": "/getting-started/", "/docs/5.2/": "/getting-started/", @@ -2474,6 +2657,7 @@ }, "/get-started/with-tyk-on-premise/tutorials/tyk-on-premise-pro/create-api-token/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", @@ -2484,6 +2668,7 @@ }, "/get-started/with-tyk-on-premise/tutorials/tyk-on-premise-pro/create-api/": { "/docs/": "/getting-started/create-api/", + "/docs/5.5/": "/getting-started/create-api/", "/docs/5.4/": "/getting-started/create-api/", "/docs/5.3/": "/getting-started/create-api/", "/docs/5.2/": "/getting-started/create-api/", @@ -2506,6 +2691,7 @@ }, "/getting-started/deployment-options/": { "/docs/": "/apim/", + "/docs/5.5/": "/apim/", "/docs/5.4/": "/apim/", "/docs/5.3/": "/apim/", "/docs/5.2/": "/apim/", @@ -2528,6 +2714,7 @@ }, "/getting-started/installation/tutorials/create-security-policy/": { "/docs/": "/getting-started/create-security-policy/", + "/docs/5.5/": "/getting-started/create-security-policy/", "/docs/5.4/": "/getting-started/create-security-policy/", "/docs/5.3/": "/getting-started/create-security-policy/", "/docs/5.2/": "/getting-started/create-security-policy/", @@ -2544,6 +2731,7 @@ }, "/getting-started/installation/tutorials/tutorials/": { "/docs/": "/getting-started/", + "/docs/5.5/": "/getting-started/", "/docs/5.4/": "/getting-started/", "/docs/5.3/": "/getting-started/", "/docs/5.2/": "/getting-started/", @@ -2560,6 +2748,7 @@ }, "/getting-started/installation/tyk-on-premises/on-ubuntu/": { "/docs/": "/tyk-on-premises/debian-ubuntu/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/", @@ -2576,6 +2765,7 @@ }, "/getting-started/installation/with-tyk-multi-cloud/create-an-account/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", @@ -2586,6 +2776,7 @@ }, "/getting-started/installation/with-tyk-multi-cloud/installation-on-aws/": { "/docs/": "/tyk-on-premises/installation/on-aws/", + "/docs/5.5/": "/tyk-on-premises/installation/on-aws/", "/docs/5.4/": "/tyk-on-premises/installation/on-aws/", "/docs/5.3/": "/tyk-on-premises/installation/on-aws/", "/docs/5.2/": "/tyk-on-premises/installation/on-aws/", @@ -2596,6 +2787,7 @@ }, "/getting-started/installation/with-tyk-on-premises/": { "/docs/": "/tyk-self-managed/install/", + "/docs/5.5/": "/tyk-self-managed/install/", "/docs/5.4/": "/tyk-self-managed/install/", "/docs/5.3/": "/tyk-self-managed/install/", "/docs/5.2/": "/tyk-self-managed/install/", @@ -2612,6 +2804,7 @@ }, "/getting-started/installation/with-tyk-on-premises/bootstrapper-cli/": { "/docs/": "/tyk-on-premises/bootstrapper-cli/", + "/docs/5.5/": "/tyk-on-premises/bootstrapper-cli/", "/docs/5.4/": "/tyk-on-premises/bootstrapper-cli/", "/docs/5.3/": "/tyk-on-premises/bootstrapper-cli/", "/docs/5.2/": "/tyk-on-premises/bootstrapper-cli/", @@ -2628,6 +2821,7 @@ }, "/getting-started/installation/with-tyk-on-premises/debian-ubuntu/analytics-pump/": { "/docs/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", @@ -2644,6 +2838,7 @@ }, "/getting-started/installation/with-tyk-on-premises/debian-ubuntu/dashboard/": { "/docs/": "/tyk-on-premises/debian-ubuntu/dashboard/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/dashboard/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/dashboard/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/dashboard/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/dashboard/", @@ -2660,6 +2855,7 @@ }, "/getting-started/installation/with-tyk-on-premises/debian-ubuntu/gateway/": { "/docs/": "/tyk-on-premises/debian-ubuntu/gateway/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/gateway/", @@ -2676,6 +2872,7 @@ }, "/getting-started/installation/with-tyk-on-premises/docker/": { "/docs/": "/tyk-on-premises/docker/", + "/docs/5.5/": "/tyk-on-premises/docker/", "/docs/5.4/": "/tyk-on-premises/docker/", "/docs/5.3/": "/tyk-on-premises/docker/", "/docs/5.2/": "/tyk-on-premises/docker/", @@ -2692,6 +2889,7 @@ }, "/getting-started/installation/with-tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows/": { "/docs/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows/", + "/docs/5.5/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows/", "/docs/5.4/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows/", "/docs/5.3/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows/", "/docs/5.2/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-demo-windows/", @@ -2708,6 +2906,7 @@ }, "/getting-started/installation/with-tyk-on-premises/docker/docker-pro-demo/docker-pro-demo/": { "/docs/": "/tyk-on-premises/docker/docker-pro-demo/", + "/docs/5.5/": "/tyk-on-premises/docker/docker-pro-demo/", "/docs/5.4/": "/tyk-on-premises/docker/docker-pro-demo/", "/docs/5.3/": "/tyk-on-premises/docker/docker-pro-demo/", "/docs/5.2/": "/tyk-on-premises/docker/docker-pro-demo/", @@ -2721,6 +2920,7 @@ }, "/getting-started/installation/with-tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl/": { "/docs/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl/", + "/docs/5.5/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl/", "/docs/5.4/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl/", "/docs/5.3/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl/", "/docs/5.2/": "/tyk-on-premises/docker/docker-pro-demo/docker-pro-wsl/", @@ -2737,6 +2937,7 @@ }, "/getting-started/installation/with-tyk-on-premises/install-tyk-google-cloud/": { "/docs/": "/tyk-on-premises/google-cloud/", + "/docs/5.5/": "/tyk-on-premises/google-cloud/", "/docs/5.4/": "/tyk-on-premises/google-cloud/", "/docs/5.3/": "/tyk-on-premises/google-cloud/", "/docs/5.2/": "/tyk-on-premises/google-cloud/", @@ -2745,6 +2946,7 @@ }, "/getting-started/installation/with-tyk-on-premises/install-tyk-microsoft-azure/": { "/docs/": "/tyk-on-premises/microsoft-azure/", + "/docs/5.5/": "/tyk-on-premises/microsoft-azure/", "/docs/5.4/": "/tyk-on-premises/microsoft-azure/", "/docs/5.3/": "/tyk-on-premises/microsoft-azure/", "/docs/5.2/": "/tyk-on-premises/microsoft-azure/", @@ -2761,6 +2963,7 @@ }, "/getting-started/installation/with-tyk-on-premises/kubernetes/": { "/docs/": "/tyk-on-premises/kubernetes/", + "/docs/5.5/": "/tyk-on-premises/kubernetes/", "/docs/5.4/": "/tyk-on-premises/kubernetes/", "/docs/5.3/": "/tyk-on-premises/kubernetes/", "/docs/5.2/": "/tyk-on-premises/kubernetes/", @@ -2777,6 +2980,7 @@ }, "/getting-started/installation/with-tyk-on-premises/kubernetes/k8s-docker-pro-wsl/": { "/docs/": "/tyk-on-prem/kubernetes-on-windows/", + "/docs/5.5/": "/tyk-on-prem/kubernetes-on-windows/", "/docs/5.4/": "/tyk-on-prem/kubernetes-on-windows/", "/docs/5.3/": "/tyk-on-prem/kubernetes-on-windows/", "/docs/5.2/": "/tyk-on-prem/kubernetes-on-windows/", @@ -2793,6 +2997,7 @@ }, "/getting-started/installation/with-tyk-on-premises/kubernetes/tyk-kubernetes-ingress-controller/": { "/docs/": "/tyk-on-prem/kubernetes-ingress/", + "/docs/5.5/": "/tyk-on-prem/kubernetes-ingress/", "/docs/5.4/": "/tyk-on-prem/kubernetes-ingress/", "/docs/5.3/": "/tyk-on-prem/kubernetes-ingress/", "/docs/5.2/": "/tyk-on-prem/kubernetes-ingress/", @@ -2809,6 +3014,7 @@ }, "/getting-started/installation/with-tyk-on-premises/on-ubuntu/": { "/docs/": "/tyk-on-premises/debian-ubuntu/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/", @@ -2825,6 +3031,7 @@ }, "/getting-started/installation/with-tyk-on-premises/on-ubuntu/analytics-pump/": { "/docs/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/analytics-pump/", @@ -2841,6 +3048,7 @@ }, "/getting-started/installation/with-tyk-on-premises/on-ubuntu/dashboard/": { "/docs/": "/tyk-on-premises/debian-ubuntu/dashboard/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/dashboard/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/dashboard/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/dashboard/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/dashboard/", @@ -2857,6 +3065,7 @@ }, "/getting-started/installation/with-tyk-on-premises/on-ubuntu/gateway/": { "/docs/": "/tyk-on-premises/debian-ubuntu/gateway/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/gateway/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/gateway/", @@ -2873,6 +3082,7 @@ }, "/getting-started/installation/with-tyk-on-premises/redhat-rhel-centos/": { "/docs/": "/tyk-on-premises/redhat-rhel-centos/", + "/docs/5.5/": "/tyk-on-premises/redhat-rhel-centos/", "/docs/5.4/": "/tyk-on-premises/redhat-rhel-centos/", "/docs/5.3/": "/tyk-on-premises/redhat-rhel-centos/", "/docs/5.2/": "/tyk-on-premises/redhat-rhel-centos/", @@ -2889,6 +3099,7 @@ }, "/getting-started/installation/with-tyk-on-premises/redhat-rhel-centos/analytics-pump/": { "/docs/": "/tyk-on-prem/installation/redhat-rhel-centos/analytics-pump/", + "/docs/5.5/": "/tyk-on-prem/installation/redhat-rhel-centos/analytics-pump/", "/docs/5.4/": "/tyk-on-prem/installation/redhat-rhel-centos/analytics-pump/", "/docs/5.3/": "/tyk-on-prem/installation/redhat-rhel-centos/analytics-pump/", "/docs/5.2/": "/tyk-on-prem/installation/redhat-rhel-centos/analytics-pump/", @@ -2905,6 +3116,7 @@ }, "/getting-started/installation/with-tyk-on-premises/redhat-rhel-centos/dashboard/": { "/docs/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", + "/docs/5.5/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", "/docs/5.4/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", "/docs/5.3/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", "/docs/5.2/": "/tyk-on-prem/installation/redhat-rhel-centos/dashboard/", @@ -2921,6 +3133,7 @@ }, "/getting-started/installation/with-tyk-on-premises/redhat-rhel-centos/gateway/": { "/docs/": "/tyk-on-prem/installation/redhat-rhel-centos/gateway/", + "/docs/5.5/": "/tyk-on-prem/installation/redhat-rhel-centos/gateway/", "/docs/5.4/": "/tyk-on-prem/installation/redhat-rhel-centos/gateway/", "/docs/5.3/": "/tyk-on-prem/installation/redhat-rhel-centos/gateway/", "/docs/5.2/": "/tyk-on-prem/installation/redhat-rhel-centos/gateway/", @@ -2943,6 +3156,7 @@ }, "/getting-started/key-concepts/authentication/": { "/docs/": "/getting-started/key-concepts/authentication/", + "/docs/5.5/": "/getting-started/key-concepts/authentication/", "/docs/5.4/": "/getting-started/key-concepts/authentication/", "/docs/5.3/": "/getting-started/key-concepts/authentication/", "/docs/5.2/": "/getting-started/key-concepts/authentication/", @@ -2956,6 +3170,7 @@ }, "/getting-started/key-concepts/context-variables/": { "/docs/": "/context-variables/", + "/docs/5.5/": "/context-variables/", "/docs/5.4/": "/context-variables/", "/docs/5.3/": "/context-variables/", "/docs/5.2/": "/context-variables/", @@ -2972,6 +3187,7 @@ }, "/getting-started/key-concepts/creating-a-subgraph/": { "/docs/": "/getting-started/key-concepts/graphql-federation/", + "/docs/5.5/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.4/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.3/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.2/": "/getting-started/key-concepts/graphql-federation/", @@ -2990,6 +3206,7 @@ }, "/getting-started/key-concepts/graphql-entities/": { "/docs/": "/getting-started/key-concepts/graphql-entities/", + "/docs/5.5/": "/getting-started/key-concepts/graphql-entities/", "/docs/5.4/": "/getting-started/key-concepts/graphql-entities/", "/docs/5.3/": "/getting-started/key-concepts/graphql-entities/", "/docs/5.2/": "/getting-started/key-concepts/graphql-entities/", @@ -2999,6 +3216,7 @@ }, "/getting-started/key-concepts/graphql-federation/": { "/docs/": "/getting-started/key-concepts/graphql-federation/", + "/docs/5.5/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.4/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.3/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.2/": "/getting-started/key-concepts/graphql-federation/", @@ -3012,6 +3230,7 @@ }, "/getting-started/key-concepts/graphql-overview/": { "/docs/": "/getting-started/key-concepts/graphql-federation/", + "/docs/5.5/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.4/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.3/": "/getting-started/key-concepts/graphql-federation/", "/docs/5.2/": "/getting-started/key-concepts/graphql-federation/", @@ -3021,6 +3240,7 @@ }, "/getting-started/key-concepts/graphql-proxy-only/": { "/docs/": "/graphql-proxy-only/", + "/docs/5.5/": "/graphql-proxy-only/", "/docs/5.4/": "/graphql-proxy-only/", "/docs/5.3/": "/graphql-proxy-only/", "/docs/5.2/": "/graphql-proxy-only/", @@ -3034,6 +3254,7 @@ }, "/getting-started/key-concepts/graphql-subgraphs/": { "/docs/": "/getting-started/key-concepts/graphql-subgraphs/", + "/docs/5.5/": "/getting-started/key-concepts/graphql-subgraphs/", "/docs/5.4/": "/getting-started/key-concepts/graphql-subgraphs/", "/docs/5.3/": "/getting-started/key-concepts/graphql-subgraphs/", "/docs/5.2/": "/getting-started/key-concepts/graphql-subgraphs/", @@ -3043,6 +3264,7 @@ }, "/getting-started/key-concepts/graphql-subscriptions/": { "/docs/": "/getting-started/key-concepts/graphql-subscriptions/", + "/docs/5.5/": "/getting-started/key-concepts/graphql-subscriptions/", "/docs/5.4/": "/getting-started/key-concepts/graphql-subscriptions/", "/docs/5.3/": "/getting-started/key-concepts/graphql-subscriptions/", "/docs/5.2/": "/getting-started/key-concepts/graphql-subscriptions/", @@ -3056,6 +3278,7 @@ }, "/getting-started/key-concepts/high-level-concepts/": { "/docs/": "/getting-started/key-concepts/high-level-concepts/", + "/docs/5.5/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.4/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.3/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.2/": "/getting-started/key-concepts/high-level-concepts/", @@ -3069,6 +3292,7 @@ }, "/getting-started/key-concepts/low-level-concepts/": { "/docs/": "/getting-started/key-concepts/openapi-specification/", + "/docs/5.5/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.4/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.3/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.2/": "/getting-started/key-concepts/low-level-concepts/", @@ -3082,6 +3306,7 @@ }, "/getting-started/key-concepts/oas-api-definitions/": { "/docs/": "/getting-started/key-concepts/openapi-specification/", + "/docs/5.5/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.4/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.3/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.2/": "/getting-started/key-concepts/openapi-specification/", @@ -3093,6 +3318,7 @@ }, "/getting-started/key-concepts/oas-versioning/": { "/docs/": "/getting-started/key-concepts/oas-versioning/", + "/docs/5.5/": "/getting-started/key-concepts/oas-versioning/", "/docs/5.4/": "/getting-started/key-concepts/oas-versioning/", "/docs/5.3/": "/getting-started/key-concepts/oas-versioning/", "/docs/5.2/": "/getting-started/key-concepts/oas-versioning/", @@ -3106,6 +3332,7 @@ }, "/getting-started/key-concepts/openapi-specification/": { "/docs/": "/getting-started/key-concepts/openapi-specification/", + "/docs/5.5/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.4/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.3/": "/getting-started/key-concepts/openapi-specification/", "/docs/5.2/": "/getting-started/key-concepts/openapi-specification/", @@ -3119,6 +3346,7 @@ }, "/getting-started/key-concepts/paths/": { "/docs/": "/getting-started/key-concepts/paths/", + "/docs/5.5/": "/getting-started/key-concepts/paths/", "/docs/5.4/": "/getting-started/key-concepts/paths/", "/docs/5.3/": "/getting-started/key-concepts/paths/", "/docs/5.2/": "/getting-started/key-concepts/paths/", @@ -3135,6 +3363,7 @@ }, "/getting-started/key-concepts/rbac/": { "/docs/": "/tyk-dashboard/rbac/", + "/docs/5.5/": "/tyk-dashboard/rbac/", "/docs/5.4/": "/tyk-dashboard/rbac/", "/docs/5.3/": "/tyk-dashboard/rbac/", "/docs/5.2/": "/tyk-dashboard/rbac/", @@ -3151,6 +3380,7 @@ }, "/getting-started/key-concepts/request-validation/": { "/docs/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.2/": "/getting-started/key-concepts/request-validation/", @@ -3164,6 +3394,7 @@ }, "/getting-started/key-concepts/servers/": { "/docs/": "/getting-started/key-concepts/servers/", + "/docs/5.5/": "/getting-started/key-concepts/servers/", "/docs/5.4/": "/getting-started/key-concepts/servers/", "/docs/5.3/": "/getting-started/key-concepts/servers/", "/docs/5.2/": "/getting-started/key-concepts/servers/", @@ -3180,6 +3411,7 @@ }, "/getting-started/key-concepts/tyk-components/identity-broker/": { "/docs/": "/tyk-identity-broker/", + "/docs/5.5/": "/tyk-identity-broker/", "/docs/5.4/": "/tyk-identity-broker/", "/docs/5.3/": "/tyk-identity-broker/", "/docs/5.2/": "/tyk-identity-broker/", @@ -3196,6 +3428,7 @@ }, "/getting-started/key-concepts/url-matching/": { "/docs/": "/getting-started/key-concepts/url-matching/", + "/docs/5.5/": "/getting-started/key-concepts/url-matching/", "/docs/5.3/": "/getting-started/key-concepts/url-matching/", "/docs/nightly/": "/getting-started/key-concepts/url-matching/" }, @@ -3213,6 +3446,7 @@ }, "/getting-started/licencing/": { "/docs/": "/tyk-on-premises/licensing/", + "/docs/5.5/": "/tyk-on-premises/licensing/", "/docs/5.4/": "/tyk-on-premises/licensing/", "/docs/5.3/": "/tyk-on-premises/licensing/", "/docs/5.2/": "/tyk-on-premises/licensing/", @@ -3229,6 +3463,7 @@ }, "/getting-started/licensing/": { "/docs/": "/tyk-on-premises/licensing/", + "/docs/5.5/": "/tyk-on-premises/licensing/", "/docs/5.4/": "/tyk-on-premises/licensing/", "/docs/5.3/": "/tyk-on-premises/licensing/", "/docs/5.2/": "/tyk-on-premises/licensing/", @@ -3245,6 +3480,7 @@ }, "/getting-started/quick-start/": { "/docs/": "/getting-started/quick-start/", + "/docs/5.5/": "/getting-started/quick-start/", "/docs/5.4/": "/getting-started/quick-start/", "/docs/5.3/": "/getting-started/quick-start/", "/docs/5.2/": "/getting-started/quick-start/", @@ -3255,6 +3491,7 @@ }, "/getting-started/quick-start/tyk-demo/": { "/docs/": "/getting-started/quick-start/tyk-demo/", + "/docs/5.5/": "/getting-started/quick-start/tyk-demo/", "/docs/5.4/": "/getting-started/quick-start/tyk-demo/", "/docs/5.3/": "/getting-started/quick-start/tyk-demo/", "/docs/5.2/": "/getting-started/quick-start/tyk-demo/", @@ -3265,6 +3502,7 @@ }, "/getting-started/quick-start/tyk-k8s-demo/": { "/docs/": "/getting-started/quick-start/tyk-k8s-demo/", + "/docs/5.5/": "/getting-started/quick-start/tyk-k8s-demo/", "/docs/5.4/": "/getting-started/quick-start/tyk-k8s-demo/", "/docs/5.3/": "/getting-started/quick-start/tyk-k8s-demo/", "/docs/5.2/": "/getting-started/quick-start/tyk-k8s-demo/", @@ -3275,6 +3513,7 @@ }, "/getting-started/tutorials/": { "/docs/": "/getting-started/", + "/docs/5.5/": "/getting-started/", "/docs/5.4/": "/getting-started/", "/docs/5.3/": "/getting-started/", "/docs/5.2/": "/getting-started/", @@ -3291,6 +3530,7 @@ }, "/getting-started/tutorials/auth-user-for-api-access-github-oauth/": { "/docs/": "/tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth/", + "/docs/5.5/": "/tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth/", "/docs/5.4/": "/tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth/", "/docs/5.3/": "/tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth/", "/docs/5.2/": "/tyk-stack/tyk-identity-broker/auth-user-for-api-access-github-oauth/", @@ -3307,6 +3547,7 @@ }, "/getting-started/tutorials/create-api-key/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", @@ -3323,6 +3564,7 @@ }, "/getting-started/tutorials/create-api/": { "/docs/": "/getting-started/create-api/", + "/docs/5.5/": "/getting-started/create-api/", "/docs/5.4/": "/getting-started/create-api/", "/docs/5.3/": "/getting-started/create-api/", "/docs/5.2/": "/getting-started/create-api/", @@ -3339,6 +3581,7 @@ }, "/getting-started/tutorials/create-portal-entry/": { "/docs/": "/getting-started/tutorials/publish-api/", + "/docs/5.5/": "/getting-started/tutorials/publish-api/", "/docs/5.4/": "/getting-started/tutorials/publish-api/", "/docs/5.3/": "/getting-started/tutorials/publish-api/", "/docs/5.2/": "/getting-started/tutorials/publish-api/", @@ -3355,6 +3598,7 @@ }, "/getting-started/tutorials/create-security-policy/": { "/docs/": "/getting-started/create-security-policy/", + "/docs/5.5/": "/getting-started/create-security-policy/", "/docs/5.4/": "/getting-started/create-security-policy/", "/docs/5.3/": "/getting-started/create-security-policy/", "/docs/5.2/": "/getting-started/create-security-policy/", @@ -3371,6 +3615,7 @@ }, "/getting-started/tutorials/important-prerequisites/": { "/docs/": "/tyk-stack/tyk-gateway/important-prerequisites/", + "/docs/5.5/": "/tyk-stack/tyk-gateway/important-prerequisites/", "/docs/5.4/": "/tyk-stack/tyk-gateway/important-prerequisites/", "/docs/5.3/": "/tyk-stack/tyk-gateway/important-prerequisites/", "/docs/5.2/": "/tyk-stack/tyk-gateway/important-prerequisites/", @@ -3390,6 +3635,7 @@ }, "/getting-started/tyk-components/": { "/docs/": "/tyk-stack/", + "/docs/5.5/": "/tyk-stack/", "/docs/5.4/": "/tyk-stack/", "/docs/5.3/": "/tyk-stack/", "/docs/5.2/": "/tyk-stack/", @@ -3406,6 +3652,7 @@ }, "/getting-started/tyk-components/dashboard/": { "/docs/": "/tyk-dashboard/", + "/docs/5.5/": "/tyk-dashboard/", "/docs/5.4/": "/tyk-dashboard/", "/docs/5.3/": "/tyk-dashboard/", "/docs/5.2/": "/tyk-dashboard/", @@ -3422,6 +3669,7 @@ }, "/getting-started/tyk-components/developer-portal/": { "/docs/": "/tyk-developer-portal/", + "/docs/5.5/": "/tyk-developer-portal/", "/docs/5.4/": "/tyk-developer-portal/", "/docs/5.3/": "/tyk-developer-portal/", "/docs/5.2/": "/tyk-developer-portal/", @@ -3438,6 +3686,7 @@ }, "/getting-started/tyk-components/gateway/": { "/docs/": "/tyk-oss-gateway/", + "/docs/5.5/": "/tyk-oss-gateway/", "/docs/5.4/": "/tyk-oss-gateway/", "/docs/5.3/": "/tyk-oss-gateway/", "/docs/5.2/": "/tyk-oss-gateway/", @@ -3454,6 +3703,7 @@ }, "/getting-started/tyk-components/identity-broker/": { "/docs/": "/tyk-identity-broker/", + "/docs/5.5/": "/tyk-identity-broker/", "/docs/5.4/": "/tyk-identity-broker/", "/docs/5.3/": "/tyk-identity-broker/", "/docs/5.2/": "/tyk-identity-broker/", @@ -3470,6 +3720,7 @@ }, "/getting-started/tyk-components/mdcb/": { "/docs/": "/tyk-multi-data-centre/", + "/docs/5.5/": "/tyk-multi-data-centre/", "/docs/5.4/": "/tyk-multi-data-centre/", "/docs/5.3/": "/tyk-multi-data-centre/", "/docs/5.2/": "/tyk-multi-data-centre/", @@ -3486,6 +3737,7 @@ }, "/getting-started/tyk-components/pump/": { "/docs/": "/tyk-pump/", + "/docs/5.5/": "/tyk-pump/", "/docs/5.4/": "/tyk-pump/", "/docs/5.3/": "/tyk-pump/", "/docs/5.2/": "/tyk-pump/", @@ -3502,6 +3754,7 @@ }, "/getting-started/tyk-components/tyk-identity-broker/getting-started/": { "/docs/": "/tyk-identity-broker/getting-started/", + "/docs/5.5/": "/tyk-identity-broker/getting-started/", "/docs/5.4/": "/tyk-identity-broker/getting-started/", "/docs/5.3/": "/tyk-identity-broker/getting-started/", "/docs/5.2/": "/tyk-identity-broker/getting-started/", @@ -3518,6 +3771,7 @@ }, "/getting-started/tyk-components/tyk-identity-broker/profiles/": { "/docs/": "/tyk-stack/tyk-identity-broker/about-profiles/", + "/docs/5.5/": "/tyk-stack/tyk-identity-broker/about-profiles/", "/docs/5.4/": "/tyk-stack/tyk-identity-broker/about-profiles/", "/docs/5.3/": "/tyk-stack/tyk-identity-broker/about-profiles/", "/docs/5.2/": "/tyk-stack/tyk-identity-broker/about-profiles/", @@ -3534,6 +3788,7 @@ }, "/getting-started/using-oas-definitions/": { "/docs/": "/getting-started/key-concepts/high-level-concepts/", + "/docs/5.5/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.4/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.3/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.2/": "/getting-started/using-oas-definitions/", @@ -3547,6 +3802,7 @@ }, "/getting-started/using-oas-definitions/create-an-oas-api/": { "/docs/": "/getting-started/using-oas-definitions/create-an-oas-api/", + "/docs/5.5/": "/getting-started/using-oas-definitions/create-an-oas-api/", "/docs/5.4/": "/getting-started/using-oas-definitions/create-an-oas-api/", "/docs/5.3/": "/getting-started/using-oas-definitions/create-an-oas-api/", "/docs/5.2/": "/getting-started/using-oas-definitions/create-an-oas-api/", @@ -3560,6 +3816,7 @@ }, "/getting-started/using-oas-definitions/export-an-oas-api/": { "/docs/": "/getting-started/using-oas-definitions/export-an-oas-api/", + "/docs/5.5/": "/getting-started/using-oas-definitions/export-an-oas-api/", "/docs/5.4/": "/getting-started/using-oas-definitions/export-an-oas-api/", "/docs/5.3/": "/getting-started/using-oas-definitions/export-an-oas-api/", "/docs/5.2/": "/getting-started/using-oas-definitions/export-an-oas-api/", @@ -3573,6 +3830,7 @@ }, "/getting-started/using-oas-definitions/get-started-oas/": { "/docs/": "/getting-started/key-concepts/high-level-concepts/", + "/docs/5.5/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.4/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.3/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.2/": "/getting-started/using-oas-definitions/get-started-oas/", @@ -3586,6 +3844,7 @@ }, "/getting-started/using-oas-definitions/import-an-oas-api/": { "/docs/": "/getting-started/using-oas-definitions/import-an-oas-api/", + "/docs/5.5/": "/getting-started/using-oas-definitions/import-an-oas-api/", "/docs/5.4/": "/getting-started/using-oas-definitions/import-an-oas-api/", "/docs/5.3/": "/getting-started/using-oas-definitions/import-an-oas-api/", "/docs/5.2/": "/getting-started/using-oas-definitions/import-an-oas-api/", @@ -3599,6 +3858,7 @@ }, "/getting-started/using-oas-definitions/mock-response/": { "/docs/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", "/docs/5.2/": "/getting-started/using-oas-definitions/mock-response/", @@ -3609,6 +3869,7 @@ }, "/getting-started/using-oas-definitions/moving-to-oas/": { "/docs/": "/getting-started/key-concepts/high-level-concepts/", + "/docs/5.5/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.4/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.3/": "/getting-started/key-concepts/high-level-concepts/", "/docs/5.2/": "/getting-started/using-oas-definitions/moving-to-oas/", @@ -3620,6 +3881,7 @@ }, "/getting-started/using-oas-definitions/oas-glossary/": { "/docs/": "/getting-started/using-oas-definitions/oas-glossary/", + "/docs/5.5/": "/getting-started/using-oas-definitions/oas-glossary/", "/docs/5.4/": "/getting-started/using-oas-definitions/oas-glossary/", "/docs/5.3/": "/getting-started/using-oas-definitions/oas-glossary/", "/docs/5.2/": "/getting-started/using-oas-definitions/oas-glossary/", @@ -3633,6 +3895,7 @@ }, "/getting-started/using-oas-definitions/oas-reference/": { "/docs/": "/getting-started/using-oas-definitions/oas-reference/", + "/docs/5.5/": "/getting-started/using-oas-definitions/oas-reference/", "/docs/5.4/": "/getting-started/using-oas-definitions/oas-reference/", "/docs/5.3/": "/getting-started/using-oas-definitions/oas-reference/", "/docs/5.2/": "/getting-started/using-oas-definitions/oas-reference/", @@ -3646,6 +3909,7 @@ }, "/getting-started/using-oas-definitions/update-an-oas-api/": { "/docs/": "/getting-started/using-oas-definitions/update-an-oas-api/", + "/docs/5.5/": "/getting-started/using-oas-definitions/update-an-oas-api/", "/docs/5.4/": "/getting-started/using-oas-definitions/update-an-oas-api/", "/docs/5.3/": "/getting-started/using-oas-definitions/update-an-oas-api/", "/docs/5.2/": "/getting-started/using-oas-definitions/update-an-oas-api/", @@ -3659,6 +3923,7 @@ }, "/getting-started/using-oas-definitions/update-api-with-oas/": { "/docs/": "/getting-started/using-oas-definitions/update-an-oas-api/", + "/docs/5.5/": "/getting-started/using-oas-definitions/update-an-oas-api/", "/docs/5.4/": "/getting-started/using-oas-definitions/update-an-oas-api/", "/docs/5.3/": "/getting-started/using-oas-definitions/update-an-oas-api/", "/docs/5.2/": "/getting-started/using-oas-definitions/update-api-with-oas/", @@ -3672,6 +3937,7 @@ }, "/getting-started/using-oas-definitions/versioning-an-oas-api/": { "/docs/": "/getting-started/using-oas-definitions/versioning-an-oas-api/", + "/docs/5.5/": "/getting-started/using-oas-definitions/versioning-an-oas-api/", "/docs/5.4/": "/getting-started/using-oas-definitions/versioning-an-oas-api/", "/docs/5.3/": "/getting-started/using-oas-definitions/versioning-an-oas-api/", "/docs/5.2/": "/getting-started/using-oas-definitions/versioning-an-oas-api/", @@ -3685,6 +3951,7 @@ }, "/getting-started/with-tyk-on-premises/installation/on-aws/": { "/docs/": "/tyk-on-premises/installation/on-aws/", + "/docs/5.5/": "/tyk-on-premises/installation/on-aws/", "/docs/5.4/": "/tyk-on-premises/installation/on-aws/", "/docs/5.3/": "/tyk-on-premises/installation/on-aws/", "/docs/5.2/": "/tyk-on-premises/installation/on-aws/", @@ -3701,6 +3968,7 @@ }, "/getting-started/with-tyk-on-premises/installation/on-aws/ec2/": { "/docs/": "/tyk-on-premises/on-aws/ec2/", + "/docs/5.5/": "/tyk-on-premises/on-aws/ec2/", "/docs/5.4/": "/tyk-on-premises/on-aws/ec2/", "/docs/5.3/": "/tyk-on-premises/on-aws/ec2/", "/docs/5.2/": "/tyk-on-premises/on-aws/ec2/", @@ -3717,6 +3985,7 @@ }, "/getting-started/with-tyk-on-premises/installation/on-heroku/": { "/docs/": "/tyk-on-premises/installation/on-heroku/", + "/docs/5.5/": "/tyk-on-premises/installation/on-heroku/", "/docs/5.4/": "/tyk-on-premises/installation/on-heroku/", "/docs/5.3/": "/tyk-on-premises/installation/on-heroku/", "/docs/5.2/": "/tyk-on-premises/installation/on-heroku/", @@ -3733,6 +4002,7 @@ }, "/graphql-proxy-only/": { "/docs/": "/graphql-proxy-only/", + "/docs/5.5/": "/graphql-proxy-only/", "/docs/5.4/": "/graphql-proxy-only/", "/docs/5.3/": "/graphql-proxy-only/", "/docs/5.2/": "/graphql-proxy-only/", @@ -3752,6 +4022,7 @@ }, "/graphql/creating-gql-api/": { "/docs/": "/graphql/creating-gql-api/", + "/docs/5.5/": "/graphql/creating-gql-api/", "/docs/5.4/": "/graphql/creating-gql-api/", "/docs/5.3/": "/graphql/creating-gql-api/", "/docs/5.2/": "/graphql/creating-gql-api/", @@ -3764,6 +4035,7 @@ }, "/graphql/gql-headers/": { "/docs/": "/graphql/gql-headers/", + "/docs/5.5/": "/graphql/gql-headers/", "/docs/5.4/": "/graphql/gql-headers/", "/docs/5.3/": "/graphql/gql-headers/", "/docs/5.2/": "/graphql/gql-headers/", @@ -3779,6 +4051,7 @@ }, "/graphql/headers/": { "/docs/": "/graphql/gql-headers/", + "/docs/5.5/": "/graphql/gql-headers/", "/docs/5.4/": "/graphql/gql-headers/", "/docs/5.3/": "/graphql/gql-headers/", "/docs/5.2/": "/graphql/gql-headers/", @@ -3791,6 +4064,7 @@ }, "/graphql/introspection/introspection-queries/": { "/docs/": "/graphql/introspection/introspection-queries/", + "/docs/5.5/": "/graphql/introspection/introspection-queries/", "/docs/5.4/": "/graphql/introspection/introspection-queries/", "/docs/5.3/": "/graphql/introspection/introspection-queries/", "/docs/5.2/": "/graphql/introspection/introspection-queries/", @@ -3803,6 +4077,7 @@ }, "/graphql/migration/": { "/docs/": "/graphql/migration-guide/", + "/docs/5.5/": "/graphql/migration-guide/", "/docs/5.4/": "/graphql/migration-guide/", "/docs/5.3/": "/graphql/migration-guide/", "/docs/5.2/": "/graphql/migration-guide/", @@ -3819,6 +4094,7 @@ }, "/graphql/persist-query/": { "/docs/": "/graphql/persisted-queries/", + "/docs/5.5/": "/graphql/persisted-queries/", "/docs/5.4/": "/graphql/persisted-queries/", "/docs/5.3/": "/graphql/persisted-queries/", "/docs/5.2/": "/graphql/persisted-queries/", @@ -3829,6 +4105,7 @@ }, "/graphql/persisted-queries/": { "/docs/": "/graphql/persisted-queries/", + "/docs/5.5/": "/graphql/persisted-queries/", "/docs/5.4/": "/graphql/persisted-queries/", "/docs/5.3/": "/graphql/persisted-queries/", "/docs/5.2/": "/graphql/persisted-queries/", @@ -3839,6 +4116,7 @@ }, "/graphql/sync-schema/": { "/docs/": "/graphql/syncing-schema/", + "/docs/5.5/": "/graphql/syncing-schema/", "/docs/5.4/": "/graphql/syncing-schema/", "/docs/5.3/": "/graphql/syncing-schema/", "/docs/5.2/": "/graphql/syncing-schema/", @@ -3861,6 +4139,7 @@ }, "/graphql/websockets/": { "/docs/": "/graphql/graphql-websockets/", + "/docs/5.5/": "/graphql/graphql-websockets/", "/docs/5.4/": "/graphql/graphql-websockets/", "/docs/5.3/": "/graphql/graphql-websockets/", "/docs/5.2/": "/graphql/graphql-websockets/", @@ -3877,6 +4156,7 @@ }, "/integrate/3rd-party-identity-providers/": { "/docs/": "/advanced-configuration/integrate/3rd-party-identity-providers/", + "/docs/5.5/": "/advanced-configuration/integrate/3rd-party-identity-providers/", "/docs/5.4/": "/advanced-configuration/integrate/3rd-party-identity-providers/", "/docs/5.3/": "/advanced-configuration/integrate/3rd-party-identity-providers/", "/docs/5.2/": "/advanced-configuration/integrate/3rd-party-identity-providers/", @@ -3887,6 +4167,7 @@ }, "/integrate/3rd-party-identity-providers/dashboard-login-ldap-tib/": { "/docs/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", + "/docs/5.5/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", "/docs/5.4/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", "/docs/5.3/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", "/docs/5.2/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", @@ -3897,6 +4178,7 @@ }, "/integrate/3rd-party-identity-providers/openldap/": { "/docs/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", + "/docs/5.5/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", "/docs/5.4/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", "/docs/5.3/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", "/docs/5.2/": "/advanced-configuration/integrate/3rd-party-identity-providers/ldap/", @@ -3907,6 +4189,7 @@ }, "/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus/": { "/docs/": "/advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus/", + "/docs/5.5/": "/advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus/", "/docs/5.4/": "/advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus/", "/docs/5.3/": "/advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus/", "/docs/5.2/": "/advanced-configuration/integrate/3rd-party-identity-providers/social/dashboard-login-with-gplus/", @@ -3917,6 +4200,7 @@ }, "/integrate/3rd-party-identity-providers/tib-rest-api/": { "/docs/": "/tyk-identity-broker/tib-rest-api/", + "/docs/5.5/": "/tyk-identity-broker/tib-rest-api/", "/docs/5.4/": "/tyk-identity-broker/tib-rest-api/", "/docs/5.3/": "/tyk-identity-broker/tib-rest-api/", "/docs/5.2/": "/tyk-identity-broker/tib-rest-api/", @@ -3933,6 +4217,7 @@ }, "/integrate/sso/dashboard-login-okta-tib/": { "/docs/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", + "/docs/5.5/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", "/docs/5.4/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", "/docs/5.3/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", "/docs/5.2/": "/tyk-stack/tyk-manager/sso/dashboard-login-okta-tib/", @@ -3952,6 +4237,7 @@ }, "/manage-multiple-environments/": { "/docs/": "/advanced-configuration/manage-multiple-environments/", + "/docs/5.5/": "/advanced-configuration/manage-multiple-environments/", "/docs/5.4/": "/advanced-configuration/manage-multiple-environments/", "/docs/5.3/": "/advanced-configuration/manage-multiple-environments/", "/docs/5.2/": "/advanced-configuration/manage-multiple-environments/", @@ -3962,6 +4248,7 @@ }, "/orphan/": { "/docs/": "/orphan/", + "/docs/5.5/": "/orphan/", "/docs/5.4/": "/orphan/", "/docs/5.3/": "/orphan/", "/docs/5.2/": "/orphan/", @@ -3976,6 +4263,7 @@ }, "/planning-for-production/database-settings/": { "/docs/": "/planning-for-production/database-settings/", + "/docs/5.5/": "/planning-for-production/database-settings/", "/docs/5.4/": "/planning-for-production/database-settings/", "/docs/5.3/": "/planning-for-production/database-settings/", "/docs/5.2/": "/planning-for-production/database-settings/", @@ -3992,6 +4280,7 @@ }, "/planning-for-production/database-settings/mongodb-sizing/": { "/docs/": "/planning-for-production/database-settings/mongodb-sizing/", + "/docs/5.5/": "/planning-for-production/database-settings/mongodb-sizing/", "/docs/5.4/": "/planning-for-production/database-settings/mongodb-sizing/", "/docs/5.3/": "/planning-for-production/database-settings/mongodb-sizing/", "/docs/5.2/": "/planning-for-production/database-settings/mongodb-sizing/", @@ -4005,6 +4294,7 @@ }, "/planning-for-production/database-settings/mongodb/": { "/docs/": "/planning-for-production/database-settings/mongodb/", + "/docs/5.5/": "/planning-for-production/database-settings/mongodb/", "/docs/5.4/": "/planning-for-production/database-settings/mongodb/", "/docs/5.3/": "/planning-for-production/database-settings/mongodb/", "/docs/5.2/": "/planning-for-production/database-settings/mongodb/", @@ -4018,6 +4308,7 @@ }, "/planning-for-production/database-settings/postgresql/": { "/docs/": "/planning-for-production/database-settings/postgresql/", + "/docs/5.5/": "/planning-for-production/database-settings/postgresql/", "/docs/5.4/": "/planning-for-production/database-settings/postgresql/", "/docs/5.3/": "/planning-for-production/database-settings/postgresql/", "/docs/5.2/": "/planning-for-production/database-settings/postgresql/", @@ -4031,6 +4322,7 @@ }, "/planning-for-production/database-settings/sql/": { "/docs/": "/planning-for-production/database-settings/postgresql/", + "/docs/5.5/": "/planning-for-production/database-settings/postgresql/", "/docs/5.4/": "/planning-for-production/database-settings/postgresql/", "/docs/5.3/": "/planning-for-production/database-settings/postgresql/", "/docs/5.2/": "/planning-for-production/database-settings/postgresql/", @@ -4065,6 +4357,7 @@ }, "/planning-for-production/monitoring/": { "/docs/": "/planning-for-production/monitoring/", + "/docs/5.5/": "/planning-for-production/monitoring/", "/docs/5.4/": "/planning-for-production/monitoring/", "/docs/5.3/": "/planning-for-production/monitoring/", "/docs/5.2/": "/planning-for-production/monitoring/", @@ -4075,6 +4368,7 @@ }, "/planning-for-production/monitoring/tyk-components/": { "/docs/": "/planning-for-production/monitoring/tyk-components/", + "/docs/5.5/": "/planning-for-production/monitoring/tyk-components/", "/docs/5.4/": "/planning-for-production/monitoring/tyk-components/", "/docs/5.3/": "/planning-for-production/monitoring/tyk-components/", "/docs/5.2/": "/planning-for-production/monitoring/tyk-components/", @@ -4085,6 +4379,7 @@ }, "/planning-for-production/redis-mongodb-sizing/": { "/docs/": "/planning-for-production/database-settings/", + "/docs/5.5/": "/planning-for-production/database-settings/", "/docs/5.4/": "/planning-for-production/database-settings/", "/docs/5.3/": "/planning-for-production/database-settings/", "/docs/5.2/": "/planning-for-production/database-settings/", @@ -4098,6 +4393,7 @@ }, "/planning-for-production/redis-mongodb/": { "/docs/": "/planning-for-production/database-settings/", + "/docs/5.5/": "/planning-for-production/database-settings/", "/docs/5.4/": "/planning-for-production/database-settings/", "/docs/5.3/": "/planning-for-production/database-settings/", "/docs/5.2/": "/planning-for-production/database-settings/", @@ -4111,6 +4407,7 @@ }, "/planning-for-production/redis-sizing/": { "/docs/": "/planning-for-production/redis-sizing/", + "/docs/5.5/": "/planning-for-production/redis-sizing/", "/docs/5.4/": "/planning-for-production/redis-sizing/", "/docs/5.3/": "/planning-for-production/redis-sizing/", "/docs/5.2/": "/planning-for-production/redis-sizing/", @@ -4124,6 +4421,7 @@ }, "/planning-for-production/redis/": { "/docs/": "/planning-for-production/redis/", + "/docs/5.5/": "/planning-for-production/redis/", "/docs/5.4/": "/planning-for-production/redis/", "/docs/5.3/": "/planning-for-production/redis/", "/docs/5.2/": "/planning-for-production/redis/", @@ -4140,6 +4438,7 @@ }, "/plugins/analytics-plugins/": { "/docs/": "/plugins/plugin-types/analytics-plugins/", + "/docs/5.5/": "/plugins/plugin-types/analytics-plugins/", "/docs/5.4/": "/plugins/plugin-types/analytics-plugins/", "/docs/5.3/": "/plugins/plugin-types/analytics-plugins/", "/docs/5.2/": "/plugins/plugin-types/analytics-plugins/", @@ -4153,6 +4452,7 @@ }, "/plugins/auth-plugins/": { "/docs/": "/plugins/plugin-types/auth-plugins/auth-plugins/", + "/docs/5.5/": "/plugins/plugin-types/auth-plugins/auth-plugins/", "/docs/5.4/": "/plugins/plugin-types/auth-plugins/auth-plugins/", "/docs/5.3/": "/plugins/plugin-types/auth-plugins/auth-plugins/", "/docs/5.2/": "/plugins/plugin-types/auth-plugins/auth-plugins/", @@ -4169,6 +4469,7 @@ }, "/plugins/auth-plugins/id-extractor/": { "/docs/": "/plugins/plugin-types/auth-plugins/id-extractor/", + "/docs/5.5/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.4/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.3/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.2/": "/plugins/plugin-types/auth-plugins/id-extractor/", @@ -4185,6 +4486,7 @@ }, "/plugins/get-started-plugins/": { "/docs/": "/plugins/tutorials/quick-starts/go/quickstart/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/quickstart/", @@ -4195,6 +4497,7 @@ }, "/plugins/get-started-selfmanaged/deploy-plugins/": { "/docs/": "/plugins/get-started-selfmanaged/deploy-plugins/", + "/docs/5.5/": "/plugins/get-started-selfmanaged/deploy-plugins/", "/docs/5.4/": "/plugins/get-started-selfmanaged/deploy-plugins/", "/docs/5.3/": "/plugins/get-started-selfmanaged/deploy-plugins/", "/docs/5.2/": "/plugins/get-started-selfmanaged/deploy-plugins/", @@ -4205,6 +4508,7 @@ }, "/plugins/get-started-selfmanaged/deploy/": { "/docs/": "/plugins/tutorials/quick-starts/go/quickstart/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/quickstart/", @@ -4215,6 +4519,7 @@ }, "/plugins/get-started-selfmanaged/get-started/": { "/docs/": "/plugins/tutorials/quick-starts/go/quickstart/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/quickstart/", @@ -4225,6 +4530,7 @@ }, "/plugins/get-started-selfmanaged/run/": { "/docs/": "/plugins/tutorials/quick-starts/go/quickstart/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/quickstart/", @@ -4235,6 +4541,7 @@ }, "/plugins/get-started-selfmanaged/test/": { "/docs/": "/plugins/tutorials/quick-starts/go/quickstart/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/quickstart/", @@ -4245,6 +4552,7 @@ }, "/plugins/golang-plugins/golang-plugins/": { "/docs/": "/plugins/supported-languages/golang/", + "/docs/5.5/": "/plugins/supported-languages/golang/", "/docs/5.4/": "/plugins/supported-languages/golang/", "/docs/5.3/": "/plugins/supported-languages/golang/", "/docs/5.2/": "/plugins/supported-languages/golang/", @@ -4267,6 +4575,7 @@ }, "/plugins/how-to-serve/": { "/docs/": "/plugins/how-to-serve-plugins/", + "/docs/5.5/": "/plugins/how-to-serve-plugins/", "/docs/5.4/": "/plugins/how-to-serve-plugins/", "/docs/5.3/": "/plugins/how-to-serve-plugins/", "/docs/5.2/": "/plugins/how-to-serve-plugins/", @@ -4283,6 +4592,7 @@ }, "/plugins/how-to-serve/plugin-bundles/": { "/docs/": "/plugins/how-to-serve-plugins/plugin-bundles/", + "/docs/5.5/": "/plugins/how-to-serve-plugins/plugin-bundles/", "/docs/5.4/": "/plugins/how-to-serve-plugins/plugin-bundles/", "/docs/5.3/": "/plugins/how-to-serve-plugins/plugin-bundles/", "/docs/5.2/": "/plugins/how-to-serve-plugins/plugin-bundles/", @@ -4299,6 +4609,7 @@ }, "/plugins/javascript-middleware/": { "/docs/": "/plugins/supported-languages/javascript-middleware/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/", @@ -4315,6 +4626,7 @@ }, "/plugins/javascript-middleware/install-middleware/": { "/docs/": "/plugins/supported-languages/javascript-middleware/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/install-middleware/install-middleware/", @@ -4331,6 +4643,7 @@ }, "/plugins/javascript-middleware/install-middleware/tyk-ce/": { "/docs/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-ce/", @@ -4347,6 +4660,7 @@ }, "/plugins/javascript-middleware/install-middleware/tyk-hybrid/": { "/docs/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-hybrid/", @@ -4363,6 +4677,7 @@ }, "/plugins/javascript-middleware/install-middleware/tyk-pro/": { "/docs/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/install-middleware/tyk-pro/", @@ -4379,6 +4694,7 @@ }, "/plugins/javascript-middleware/javascript-api/": { "/docs/": "/plugins/supported-languages/javascript-middleware/javascript-api/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/javascript-api/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/javascript-api/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/javascript-api/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/javascript-api/", @@ -4395,6 +4711,7 @@ }, "/plugins/javascript-middleware/middleware-scripting-guide/": { "/docs/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", @@ -4411,6 +4728,7 @@ }, "/plugins/plugin-hub/": { "/docs/": "/plugins/plugin-hub/", + "/docs/5.5/": "/plugins/plugin-hub/", "/docs/5.4/": "/plugins/plugin-hub/", "/docs/5.3/": "/plugins/plugin-hub/", "/docs/5.2/": "/plugins/plugin-hub/", @@ -4420,6 +4738,7 @@ }, "/plugins/plugin-types/analytics-plugins/": { "/docs/": "/plugins/plugin-types/analytics-plugins/", + "/docs/5.5/": "/plugins/plugin-types/analytics-plugins/", "/docs/5.4/": "/plugins/plugin-types/analytics-plugins/", "/docs/5.3/": "/plugins/plugin-types/analytics-plugins/", "/docs/5.2/": "/plugins/plugin-types/analytics-plugins/", @@ -4433,6 +4752,7 @@ }, "/plugins/plugin-types/auth-plugins/auth-plugins/": { "/docs/": "/plugins/plugin-types/auth-plugins/auth-plugins/", + "/docs/5.5/": "/plugins/plugin-types/auth-plugins/auth-plugins/", "/docs/5.4/": "/plugins/plugin-types/auth-plugins/auth-plugins/", "/docs/5.3/": "/plugins/plugin-types/auth-plugins/auth-plugins/", "/docs/5.2/": "/plugins/plugin-types/auth-plugins/auth-plugins/", @@ -4449,6 +4769,7 @@ }, "/plugins/plugin-types/auth-plugins/id-extractor/": { "/docs/": "/plugins/plugin-types/auth-plugins/id-extractor/", + "/docs/5.5/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.4/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.3/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.2/": "/plugins/plugin-types/auth-plugins/id-extractor/", @@ -4465,6 +4786,7 @@ }, "/plugins/plugin-types/plugintypes/": { "/docs/": "/plugins/plugin-types/plugintypes/", + "/docs/5.5/": "/plugins/plugin-types/plugintypes/", "/docs/5.4/": "/plugins/plugin-types/plugintypes/", "/docs/5.3/": "/plugins/plugin-types/plugintypes/", "/docs/5.2/": "/plugins/plugin-types/plugintypes/", @@ -4475,6 +4797,7 @@ }, "/plugins/plugin-types/request-plugins/": { "/docs/": "/plugins/plugin-types/request-plugins/", + "/docs/5.5/": "/plugins/plugin-types/request-plugins/", "/docs/5.4/": "/plugins/plugin-types/request-plugins/", "/docs/5.3/": "/plugins/plugin-types/request-plugins/", "/docs/5.2/": "/plugins/plugin-types/request-plugins/", @@ -4491,6 +4814,7 @@ }, "/plugins/plugin-types/response-plugins/": { "/docs/": "/plugins/plugin-types/response-plugins/", + "/docs/5.5/": "/plugins/plugin-types/response-plugins/", "/docs/5.4/": "/plugins/plugin-types/response-plugins/", "/docs/5.3/": "/plugins/plugin-types/response-plugins/", "/docs/5.2/": "/plugins/plugin-types/response-plugins/", @@ -4507,6 +4831,7 @@ }, "/plugins/request-plugins/": { "/docs/": "/plugins/plugin-types/request-plugins/", + "/docs/5.5/": "/plugins/plugin-types/request-plugins/", "/docs/5.4/": "/plugins/plugin-types/request-plugins/", "/docs/5.3/": "/plugins/plugin-types/request-plugins/", "/docs/5.2/": "/plugins/plugin-types/request-plugins/", @@ -4523,6 +4848,7 @@ }, "/plugins/response-plugins/": { "/docs/": "/plugins/plugin-types/response-plugins/", + "/docs/5.5/": "/plugins/plugin-types/response-plugins/", "/docs/5.4/": "/plugins/plugin-types/response-plugins/", "/docs/5.3/": "/plugins/plugin-types/response-plugins/", "/docs/5.2/": "/plugins/plugin-types/response-plugins/", @@ -4539,6 +4865,7 @@ }, "/plugins/rich-plugins/": { "/docs/": "/plugins/supported-languages/rich-plugins/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/", @@ -4555,6 +4882,7 @@ }, "/plugins/rich-plugins/grpc/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/", @@ -4571,6 +4899,7 @@ }, "/plugins/rich-plugins/grpc/custom-auth-dot-net/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-dot-net/", @@ -4587,6 +4916,7 @@ }, "/plugins/rich-plugins/grpc/custom-auth-nodejs/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-nodejs/", @@ -4603,6 +4933,7 @@ }, "/plugins/rich-plugins/grpc/grpc-plugins-tyk/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/", @@ -4619,6 +4950,7 @@ }, "/plugins/rich-plugins/grpc/performance/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/performance/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/performance/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/performance/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/performance/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/performance/", @@ -4635,6 +4967,7 @@ }, "/plugins/rich-plugins/grpc/request-transformation-java/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/request-transformation-java/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/request-transformation-java/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/request-transformation-java/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/request-transformation-java/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/request-transformation-java/", @@ -4651,6 +4984,7 @@ }, "/plugins/rich-plugins/grpc/tutorial-add-grpc-plugin-api/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", @@ -4667,6 +5001,7 @@ }, "/plugins/rich-plugins/grpc/write-grpc-plugin/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", @@ -4683,6 +5018,7 @@ }, "/plugins/rich-plugins/id-extractor/": { "/docs/": "/plugins/plugin-types/auth-plugins/id-extractor/", + "/docs/5.5/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.4/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.3/": "/plugins/plugin-types/auth-plugins/id-extractor/", "/docs/5.2/": "/plugins/plugin-types/auth-plugins/id-extractor/", @@ -4699,6 +5035,7 @@ }, "/plugins/rich-plugins/luajit/": { "/docs/": "/plugins/supported-languages/rich-plugins/luajit/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/luajit/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/luajit/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/luajit/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/luajit/", @@ -4715,6 +5052,7 @@ }, "/plugins/rich-plugins/luajit/requirements/": { "/docs/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", @@ -4731,6 +5069,7 @@ }, "/plugins/rich-plugins/luajit/tutorial-add-demo-plugin-api/": { "/docs/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", @@ -4747,6 +5086,7 @@ }, "/plugins/rich-plugins/plugin-bundles/": { "/docs/": "/plugins/how-to-serve-plugins/plugin-bundles/", + "/docs/5.5/": "/plugins/how-to-serve-plugins/plugin-bundles/", "/docs/5.4/": "/plugins/how-to-serve-plugins/plugin-bundles/", "/docs/5.3/": "/plugins/how-to-serve-plugins/plugin-bundles/", "/docs/5.2/": "/plugins/how-to-serve-plugins/plugin-bundles/", @@ -4763,6 +5103,7 @@ }, "/plugins/rich-plugins/python/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/python/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/python/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/python/", @@ -4779,6 +5120,7 @@ }, "/plugins/rich-plugins/python/custom-auth-python-tutorial/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/custom-auth-python-tutorial/", @@ -4795,6 +5137,7 @@ }, "/plugins/rich-plugins/python/performance/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/performance/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/performance/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/performance/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/performance/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/performance/", @@ -4811,6 +5154,7 @@ }, "/plugins/rich-plugins/python/tutorial-add-demo-plugin-api/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/tutorial-add-demo-plugin-api/", @@ -4827,6 +5171,7 @@ }, "/plugins/rich-plugins/python/tyk-python-api-methods/": { "/docs/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/python/tyk-python-api-methods/", @@ -4843,6 +5188,7 @@ }, "/plugins/rich-plugins/rich-plugins-data-structures/": { "/docs/": "/plugins/supported-languages/rich-plugins/rich-plugins-data-structures/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/rich-plugins-data-structures/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/rich-plugins-data-structures/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/rich-plugins-data-structures/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/rich-plugins-data-structures/", @@ -4859,6 +5205,7 @@ }, "/plugins/rich-plugins/rich-plugins-work/": { "/docs/": "/plugins/supported-languages/rich-plugins/rich-plugins-work/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/rich-plugins-work/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/rich-plugins-work/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/rich-plugins-work/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/rich-plugins-work/", @@ -4884,6 +5231,7 @@ }, "/plugins/supported-languages/javascript-middleware/install-middleware/install-middleware/": { "/docs/": "/plugins/supported-languages/javascript-middleware/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/install-middleware/install-middleware/", @@ -4930,6 +5278,7 @@ }, "/plugins/supported-languages/rich-plugins/grpc/custom-auth-python/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-python/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-python/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-python/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-python/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/custom-auth-python/", @@ -4938,6 +5287,7 @@ }, "/plugins/supported-languages/rich-plugins/grpc/getting-started-python/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/getting-started-python/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/getting-started-python/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/getting-started-python/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/getting-started-python/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/getting-started-python/", @@ -4956,6 +5306,7 @@ }, "/plugins/supported-languages/rich-plugins/grpc/tutorial-add-grpc-plugin-api/": { "/docs/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/grpc/write-grpc-plugin/", @@ -4984,6 +5335,7 @@ }, "/plugins/supported-languages/rich-plugins/luajitrequirements/": { "/docs/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/luajit/requirements/", @@ -4994,6 +5346,7 @@ }, "/plugins/supported-languages/rich-plugins/luajittutorial-add-demo-plugin-api/": { "/docs/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", + "/docs/5.5/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", "/docs/5.4/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", "/docs/5.3/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", "/docs/5.2/": "/plugins/supported-languages/rich-plugins/luajit/tutorial-add-demo-plugin-api/", @@ -5025,6 +5378,7 @@ }, "/plugins/tutorials/quick-starts/go/dashboard/": { "/docs/": "/plugins/tutorials/quick-starts/go/dashboard/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/dashboard/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/dashboard/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/dashboard/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/dashboard/", @@ -5033,6 +5387,7 @@ }, "/plugins/tutorials/quick-starts/go/open-source/": { "/docs/": "/plugins/tutorials/quick-starts/go/open-source/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/open-source/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/open-source/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/open-source/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/open-source/", @@ -5041,6 +5396,7 @@ }, "/plugins/tutorials/quick-starts/go/quickstart/": { "/docs/": "/plugins/tutorials/quick-starts/go/quickstart/", + "/docs/5.5/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.4/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.3/": "/plugins/tutorials/quick-starts/go/quickstart/", "/docs/5.2/": "/plugins/tutorials/quick-starts/go/quickstart/", @@ -5051,6 +5407,7 @@ }, "/product-stack/tyk-charts/overview/": { "/docs/": "/product-stack/tyk-charts/overview/", + "/docs/5.5/": "/product-stack/tyk-charts/overview/", "/docs/5.4/": "/product-stack/tyk-charts/overview/", "/docs/5.3/": "/product-stack/tyk-charts/overview/", "/docs/5.2/": "/product-stack/tyk-charts/overview/", @@ -5059,6 +5416,7 @@ }, "/product-stack/tyk-charts/release-notes/version-1.3/": { "/docs/": "/product-stack/tyk-charts/release-notes/version-1.3/", + "/docs/5.5/": "/product-stack/tyk-charts/release-notes/version-1.3/", "/docs/5.4/": "/product-stack/tyk-charts/release-notes/version-1.3/", "/docs/5.3/": "/product-stack/tyk-charts/release-notes/version-1.3/", "/docs/5.2/": "/product-stack/tyk-charts/release-notes/version-1.3/", @@ -5067,28 +5425,37 @@ }, "/product-stack/tyk-charts/release-notes/version-1.4/": { "/docs/": "/product-stack/tyk-charts/release-notes/version-1.4/", + "/docs/5.5/": "/product-stack/tyk-charts/release-notes/version-1.4/", "/docs/5.4/": "/product-stack/tyk-charts/release-notes/version-1.4/", "/docs/5.3/": "/product-stack/tyk-charts/release-notes/version-1.4/", "/docs/nightly/": "/product-stack/tyk-charts/release-notes/version-1.4/" }, "/product-stack/tyk-charts/release-notes/version-1.5/": { "/docs/": "/product-stack/tyk-charts/release-notes/version-1.5/", + "/docs/5.5/": "/product-stack/tyk-charts/release-notes/version-1.5/", "/docs/5.4/": "/product-stack/tyk-charts/release-notes/version-1.5/", "/docs/5.3/": "/product-stack/tyk-charts/release-notes/version-1.5/", "/docs/nightly/": "/product-stack/tyk-charts/release-notes/version-1.5/" }, "/product-stack/tyk-charts/release-notes/version-1.6/": { "/docs/": "/product-stack/tyk-charts/release-notes/version-1.6/", + "/docs/5.5/": "/product-stack/tyk-charts/release-notes/version-1.6/", "/docs/5.3/": "/product-stack/tyk-charts/release-notes/version-1.6/", "/docs/nightly/": "/product-stack/tyk-charts/release-notes/version-1.6/" }, "/product-stack/tyk-charts/release-notes/version-2.0/": { "/docs/": "/product-stack/tyk-charts/release-notes/version-2.0/", + "/docs/5.5/": "/product-stack/tyk-charts/release-notes/version-2.0/", "/docs/5.3/": "/product-stack/tyk-charts/release-notes/version-2.0/", "/docs/nightly/": "/product-stack/tyk-charts/release-notes/version-2.0/" }, + "/product-stack/tyk-charts/release-notes/version-2.1/": { + "/docs/": "/product-stack/tyk-charts/release-notes/version-2.1/", + "/docs/nightly/": "/product-stack/tyk-charts/release-notes/version-2.1/" + }, "/product-stack/tyk-charts/tyk-control-plane-chart/": { "/docs/": "/product-stack/tyk-charts/tyk-control-plane-chart/", + "/docs/5.5/": "/product-stack/tyk-charts/tyk-control-plane-chart/", "/docs/5.4/": "/product-stack/tyk-charts/tyk-control-plane-chart/", "/docs/5.3/": "/product-stack/tyk-charts/tyk-control-plane-chart/", "/docs/5.2/": "/product-stack/tyk-charts/tyk-control-plane-chart/", @@ -5097,6 +5464,7 @@ }, "/product-stack/tyk-charts/tyk-data-plane-chart/": { "/docs/": "/product-stack/tyk-charts/tyk-data-plane-chart/", + "/docs/5.5/": "/product-stack/tyk-charts/tyk-data-plane-chart/", "/docs/5.4/": "/product-stack/tyk-charts/tyk-data-plane-chart/", "/docs/5.3/": "/product-stack/tyk-charts/tyk-data-plane-chart/", "/docs/5.2/": "/product-stack/tyk-charts/tyk-data-plane-chart/", @@ -5105,6 +5473,7 @@ }, "/product-stack/tyk-charts/tyk-oss-chart/": { "/docs/": "/product-stack/tyk-charts/tyk-oss-chart/", + "/docs/5.5/": "/product-stack/tyk-charts/tyk-oss-chart/", "/docs/5.4/": "/product-stack/tyk-charts/tyk-oss-chart/", "/docs/5.3/": "/product-stack/tyk-charts/tyk-oss-chart/", "/docs/5.2/": "/product-stack/tyk-charts/tyk-oss-chart/", @@ -5113,6 +5482,7 @@ }, "/product-stack/tyk-charts/tyk-stack-chart/": { "/docs/": "/product-stack/tyk-charts/tyk-stack-chart/", + "/docs/5.5/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.4/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.3/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.2/": "/product-stack/tyk-charts/tyk-stack-chart/", @@ -5122,12 +5492,14 @@ }, "/product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint/", "/docs/nightly/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/activity-by-endpoint/" }, "/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log/", "/docs/5.2/": "/product-stack/tyk-dashboard/advanced-configurations/analytics/audit-log/", @@ -5136,12 +5508,14 @@ }, "/product-stack/tyk-dashboard/advanced-configurations/api-categories/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/api-categories/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/api-categories/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/api-categories/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/api-categories/", "/docs/nightly/": "/product-stack/tyk-dashboard/advanced-configurations/api-categories/" }, "/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration/", "/docs/5.2/": "/product-stack/tyk-dashboard/advanced-configurations/data-storage-configuration/", @@ -5149,6 +5523,7 @@ }, "/product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example/", "/docs/5.2/": "/product-stack/tyk-dashboard/advanced-configurations/open-policy-agent/opa-permissions-example/", @@ -5157,6 +5532,7 @@ }, "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", "/docs/5.2/": "/product-stack/tyk-dashboard/advanced-configurations/sso/dashboard-login-keycloak-sso/", @@ -5165,30 +5541,35 @@ }, "/product-stack/tyk-dashboard/advanced-configurations/templates/template-api/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-api/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-api/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-api/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-api/", "/docs/nightly/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-api/" }, "/product-stack/tyk-dashboard/advanced-configurations/templates/template-designer/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-designer/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-designer/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-designer/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-designer/", "/docs/nightly/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-designer/" }, "/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/", "/docs/nightly/": "/product-stack/tyk-dashboard/advanced-configurations/templates/template-overview/" }, "/product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership/": { "/docs/": "/product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership/", + "/docs/5.5/": "/product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership/", "/docs/5.4/": "/product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership/", "/docs/5.3/": "/product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership/", "/docs/nightly/": "/product-stack/tyk-dashboard/advanced-configurations/user-management/api-ownership/" }, "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", @@ -5197,6 +5578,7 @@ }, "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", @@ -5205,6 +5587,7 @@ }, "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", @@ -5213,6 +5596,7 @@ }, "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", @@ -5221,6 +5605,7 @@ }, "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", @@ -5229,6 +5614,7 @@ }, "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", @@ -5237,6 +5623,7 @@ }, "/product-stack/tyk-dashboard/release-notes/old-releases/version-2.4/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.4/", @@ -5245,6 +5632,7 @@ }, "/product-stack/tyk-dashboard/release-notes/old-releases/version-2.5/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.5/", @@ -5253,6 +5641,7 @@ }, "/product-stack/tyk-dashboard/release-notes/old-releases/version-2.6/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.6/", @@ -5261,6 +5650,7 @@ }, "/product-stack/tyk-dashboard/release-notes/old-releases/version-2.7/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.7/", @@ -5269,6 +5659,7 @@ }, "/product-stack/tyk-dashboard/release-notes/old-releases/version-2.8/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.8/", @@ -5277,6 +5668,7 @@ }, "/product-stack/tyk-dashboard/release-notes/old-releases/version-2.9/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/archived-releases/version-2.9/", @@ -5285,6 +5677,7 @@ }, "/product-stack/tyk-dashboard/release-notes/overview/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/overview/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/overview/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/overview/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/overview/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/overview/", @@ -5293,6 +5686,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-3.0/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-3.0/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-3.0/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-3.0/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-3.0/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-3.0/", @@ -5301,6 +5695,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-3.1/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-3.1/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-3.1/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-3.1/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-3.1/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-3.1/", @@ -5309,6 +5704,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-3.2/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-3.2/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-3.2/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-3.2/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-3.2/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-3.2/", @@ -5317,6 +5713,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-4.0/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-4.0/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-4.0/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-4.0/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-4.0/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-4.0/", @@ -5325,6 +5722,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-4.1/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-4.1/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-4.1/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-4.1/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-4.1/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-4.1/", @@ -5333,6 +5731,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-4.2/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-4.2/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-4.2/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-4.2/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-4.2/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-4.2/", @@ -5341,6 +5740,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-4.3/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-4.3/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-4.3/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-4.3/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-4.3/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-4.3/", @@ -5349,6 +5749,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-5.0/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.0/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-5.0/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-5.0/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-5.0/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-5.0/", @@ -5357,6 +5758,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-5.1/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.1/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-5.1/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-5.1/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-5.1/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-5.1/", @@ -5365,6 +5767,7 @@ }, "/product-stack/tyk-dashboard/release-notes/version-5.2/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.2/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-5.2/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-5.2/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-5.2/", "/docs/5.2/": "/product-stack/tyk-dashboard/release-notes/version-5.2/", @@ -5372,21 +5775,29 @@ }, "/product-stack/tyk-dashboard/release-notes/version-5.3/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.3/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-5.3/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-5.3/", "/docs/5.3/": "/product-stack/tyk-dashboard/release-notes/version-5.3/", "/docs/nightly/": "/product-stack/tyk-dashboard/release-notes/version-5.3/" }, "/product-stack/tyk-dashboard/release-notes/version-5.4/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.4/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-5.4/", "/docs/5.4/": "/product-stack/tyk-dashboard/release-notes/version-5.4/", "/docs/nightly/": "/product-stack/tyk-dashboard/release-notes/version-5.4/" }, "/product-stack/tyk-dashboard/release-notes/version-5.5/": { "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.5/", + "/docs/5.5/": "/product-stack/tyk-dashboard/release-notes/version-5.5/", "/docs/nightly/": "/product-stack/tyk-dashboard/release-notes/version-5.5/" }, + "/product-stack/tyk-dashboard/release-notes/version-5.6/": { + "/docs/": "/product-stack/tyk-dashboard/release-notes/version-5.6/", + "/docs/nightly/": "/product-stack/tyk-dashboard/release-notes/version-5.6/" + }, "/product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/list-of-endpoints/portal-1.9.0-list-of-endpoints/", @@ -5395,6 +5806,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api/", @@ -5403,6 +5815,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", @@ -5412,6 +5825,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", @@ -5421,12 +5835,13 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.1/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/nightly/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", - "/docs/5.0/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/", + "/docs/5.0/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal/", "/docs/4.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/", "/docs/4.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/", "/docs/4.1/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/", @@ -5434,15 +5849,17 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.1/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/nightly/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", - "/docs/5.0/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal-with-postgresql/" + "/docs/5.0/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal-with-mysql/" }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker/", @@ -5451,6 +5868,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", @@ -5460,6 +5878,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-new-helm/", @@ -5468,6 +5887,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-rpm/", @@ -5476,6 +5896,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/overview/", @@ -5484,6 +5905,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-api-product-and-plan/", @@ -5492,6 +5914,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/create-orgs-and-catalogs/", @@ -5500,6 +5923,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-products-and-plans/", @@ -5508,6 +5932,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/customize-sign-up-form/", @@ -5516,6 +5941,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", @@ -5529,6 +5955,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", @@ -5545,6 +5972,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", @@ -5555,6 +5983,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/with-tyk-self-managed-as-provider/", @@ -5563,6 +5992,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/configure-webhooks/", @@ -5571,6 +6001,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/portal-customisation/customise-user-model/", @@ -5579,6 +6010,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.1.0/", @@ -5587,16 +6019,19 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0/", "/docs/nightly/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.10.0/" }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0/", "/docs/nightly/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0/" }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.2.0/", @@ -5605,6 +6040,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.3.0/", @@ -5613,6 +6049,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.4.0/", @@ -5621,6 +6058,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.5.0/", @@ -5629,6 +6067,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.6.0/", @@ -5637,6 +6076,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.7.0/", @@ -5645,6 +6085,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.0/", @@ -5653,6 +6094,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.1/", @@ -5661,6 +6103,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.2/", @@ -5669,6 +6112,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.3/", @@ -5677,6 +6121,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.4/", @@ -5685,6 +6130,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.8.5/", @@ -5693,6 +6139,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.9.0/", @@ -5701,6 +6148,7 @@ }, "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/upgrading/theme-upgrades/", @@ -5709,6 +6157,7 @@ }, "/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser/", "/docs/5.3/": "/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser/", "/docs/5.2/": "/product-stack/tyk-enterprise-mdcb/advanced-configurations/synchroniser/", @@ -5717,6 +6166,7 @@ }, "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", "/docs/5.3/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", "/docs/5.2/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", @@ -5725,25 +6175,30 @@ }, "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", "/docs/5.3/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", "/docs/nightly/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/" }, "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/", "/docs/nightly/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/" }, "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7/", "/docs/nightly/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.7/" }, "/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/api-versioning/api-versioning/" }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/distributed-tracing-overview/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/distributed-tracing-overview/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/distributed-tracing-overview/", @@ -5751,6 +6206,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/observability/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/distributed-tracing-overview/", @@ -5758,6 +6214,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/", @@ -5765,6 +6222,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_datadog/", @@ -5772,6 +6230,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_dynatrace/", @@ -5779,6 +6238,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_elastic/", @@ -5786,6 +6246,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger/", @@ -5793,6 +6254,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_jaeger_k8s/", @@ -5800,6 +6262,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/otel_new_relic/", @@ -5807,6 +6270,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/jaeger/", @@ -5823,6 +6287,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/newrelic/", @@ -5839,6 +6304,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/open-tracing-overview/", @@ -5855,6 +6321,7 @@ }, "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-tracing/zipkin/", @@ -5871,72 +6338,84 @@ }, "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/classic/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/oas/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/api-config/overview/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/bundle-cli/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/classic/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/bundles/oas/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-development-flow/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-compiler/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/go-plugin-examples/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/loading-go-plugins/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins/", "/docs/nightly/": "/product-stack/tyk-gateway/advanced-configurations/plugins/golang/writing-go-plugins/" }, "/product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins/": { "/docs/": "/product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins/", + "/docs/5.5/": "/product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins/", "/docs/5.4/": "/product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins/", "/docs/5.3/": "/product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins/", "/docs/5.2/": "/product-stack/tyk-gateway/advanced-configurations/plugins/otel-plugins/", @@ -5944,185 +6423,217 @@ }, "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording/": { "/docs/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording/", + "/docs/5.5/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording/", "/docs/5.4/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording/", "/docs/5.3/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording/", "/docs/nightly/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/detailed-recording/" }, "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic/": { "/docs/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic/", + "/docs/5.5/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic/", "/docs/5.4/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic/", "/docs/5.3/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic/", "/docs/nightly/": "/product-stack/tyk-gateway/basic-config-and-security/logging-api-traffic/logging-api-traffic/" }, "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-classic/" }, "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/" }, "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers/": { "/docs/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers/", + "/docs/5.5/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers/", "/docs/5.4/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers/", "/docs/nightly/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/log-handlers/" }, "/product-stack/tyk-gateway/middleware/allow-list-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/allow-list-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/allow-list-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/allow-list-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/allow-list-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/allow-list-middleware/" }, "/product-stack/tyk-gateway/middleware/allow-list-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/allow-list-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/allow-list-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/block-list-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/block-list-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/block-list-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/block-list-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/block-list-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/block-list-middleware/" }, "/product-stack/tyk-gateway/middleware/block-list-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/block-list-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/block-list-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/block-list-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/block-list-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/block-list-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/block-list-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/block-list-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/block-list-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/block-list-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/block-list-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/block-list-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/circuit-breaker-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/do-not-track-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/do-not-track-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/do-not-track-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/do-not-track-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/do-not-track-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/do-not-track-middleware/" }, "/product-stack/tyk-gateway/middleware/do-not-track-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/do-not-track-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-cache-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-plugin-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/endpoint-plugin/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-plugin/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-plugin/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/endpoint-plugin/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/endpoint-plugin/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-plugin/" }, "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-classic/" }, "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/endpoint-rate-limit-oas/" }, "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/enforced-timeout-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/ignore-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/ignore-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/ignore-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/ignore-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/ignore-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/ignore-middleware/" }, "/product-stack/tyk-gateway/middleware/ignore-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/ignore-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/ignore-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/ignore-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/ignore-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/ignore-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/ignore-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/ignore-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/ignore-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/ignore-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/ignore-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/ignore-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/internal-endpoint-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/internal-endpoint-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/internal-endpoint-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/internal-endpoint-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/internal-endpoint-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/internal-endpoint-middleware/" }, "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/internal-endpoint-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/mock-response-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/mock-response-middleware/", "/docs/5.0/": "/getting-started/using-oas-definitions/mock-response/", @@ -6133,114 +6644,133 @@ }, "/product-stack/tyk-gateway/middleware/mock-response-openapi/": { "/docs/": "/product-stack/tyk-gateway/middleware/mock-response-openapi/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/mock-response-openapi/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/mock-response-openapi/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/mock-response-openapi/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/mock-response-openapi/" }, "/product-stack/tyk-gateway/middleware/mock-response-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/mock-response-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/mock-response-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/request-body-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-body-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-body-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-body-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-body-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-body-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/request-body-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-body-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-body-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-body-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-body-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-body-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/request-header-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-header-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-header-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-header-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-header-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-header-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/request-header-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-header-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-header-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-header-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-header-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-header-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/request-method-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-method-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-method-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-method-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-method-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-method-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/request-method-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-method-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-method-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-method-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-method-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-method-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/request-size-limit-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/response-body-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/response-body-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/response-body-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/response-body-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/response-body-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/response-body-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/response-body-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/response-body-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/response-body-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/response-body-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/response-body-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/response-body-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/response-header-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/response-header-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/response-header-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/response-header-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/response-header-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/response-header-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/response-header-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/response-header-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/response-header-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/response-header-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/response-header-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/response-header-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/url-rewrite-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/url-rewrite-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/url-rewrite-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/url-rewrite-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/url-rewrite-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/url-rewrite-middleware/" }, "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/url-rewrite-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/validate-request-middleware/": { "/docs/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", @@ -6254,6 +6784,7 @@ }, "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-classic/", @@ -6270,30 +6801,35 @@ }, "/product-stack/tyk-gateway/middleware/validate-request-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/validate-request-tyk-oas/" }, "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic/": { "/docs/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-classic/" }, "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas/": { "/docs/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/middleware/virtual-endpoint-tyk-oas/" }, "/product-stack/tyk-gateway/references/go-templates/": { "/docs/": "/product-stack/tyk-gateway/references/go-templates/", + "/docs/5.5/": "/product-stack/tyk-gateway/references/go-templates/", "/docs/5.4/": "/product-stack/tyk-gateway/references/go-templates/", "/docs/5.3/": "/product-stack/tyk-gateway/references/go-templates/", "/docs/nightly/": "/product-stack/tyk-gateway/references/go-templates/" }, "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", @@ -6310,6 +6846,7 @@ }, "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", @@ -6326,6 +6863,7 @@ }, "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", @@ -6342,6 +6880,7 @@ }, "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", @@ -6358,6 +6897,7 @@ }, "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", @@ -6374,6 +6914,7 @@ }, "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", @@ -6390,6 +6931,7 @@ }, "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", @@ -6406,6 +6948,7 @@ }, "/product-stack/tyk-gateway/release-notes/overview/": { "/docs/": "/product-stack/tyk-gateway/release-notes/overview/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/overview/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/overview/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/overview/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/overview/", @@ -6414,6 +6957,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-3.0/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-3.0/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-3.0/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-3.0/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-3.0/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-3.0/", @@ -6430,6 +6974,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-3.1/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-3.1/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-3.1/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-3.1/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-3.1/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-3.1/", @@ -6446,6 +6991,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-3.2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-3.2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-3.2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-3.2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-3.2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-3.2/", @@ -6462,6 +7008,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-4.0/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.0/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.0/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.0/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.0/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.0/", @@ -6475,6 +7022,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-4.1/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.1/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.1/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.1/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.1/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.1/", @@ -6487,6 +7035,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-4.2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.2/", @@ -6498,6 +7047,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-4.3/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.3/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.3/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.3/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.3/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.3/", @@ -6508,6 +7058,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-5.0/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.0/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.0/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.0/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-5.0/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-5.0/", @@ -6517,6 +7068,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-5.1/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.1/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.1/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.1/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-5.1/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-5.1/", @@ -6525,6 +7077,7 @@ }, "/product-stack/tyk-gateway/release-notes/version-5.2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-5.2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-5.2/", @@ -6532,100 +7085,166 @@ }, "/product-stack/tyk-gateway/release-notes/version-5.3/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.3/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.3/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.3/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-5.3/", "/docs/nightly/": "/product-stack/tyk-gateway/release-notes/version-5.3/" }, "/product-stack/tyk-gateway/release-notes/version-5.4/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.4/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.4/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.4/", "/docs/nightly/": "/product-stack/tyk-gateway/release-notes/version-5.4/" }, "/product-stack/tyk-gateway/release-notes/version-5.5/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.5/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.5/", "/docs/nightly/": "/product-stack/tyk-gateway/release-notes/version-5.5/" }, + "/product-stack/tyk-gateway/release-notes/version-5.6/": { + "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.6/", + "/docs/nightly/": "/product-stack/tyk-gateway/release-notes/version-5.6/" + }, + "/product-stack/tyk-operator/advanced-configurations/api-categories/": { + "/docs/": "/product-stack/tyk-operator/advanced-configurations/api-categories/", + "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/api-categories/" + }, + "/product-stack/tyk-operator/advanced-configurations/api-versioning/": { + "/docs/": "/product-stack/tyk-operator/advanced-configurations/api-versioning/", + "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/api-versioning/" + }, "/product-stack/tyk-operator/advanced-configurations/client-authentication/": { "/docs/": "/product-stack/tyk-operator/advanced-configurations/client-authentication/", + "/docs/5.5/": "/product-stack/tyk-operator/advanced-configurations/client-authentication/", "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/client-authentication/" }, "/product-stack/tyk-operator/advanced-configurations/custom-plugins/": { "/docs/": "/product-stack/tyk-operator/advanced-configurations/custom-plugins/", + "/docs/5.5/": "/product-stack/tyk-operator/advanced-configurations/custom-plugins/", "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/custom-plugins/" }, "/product-stack/tyk-operator/advanced-configurations/graphql-federation/": { "/docs/": "/product-stack/tyk-operator/advanced-configurations/graphql-federation/", + "/docs/5.5/": "/product-stack/tyk-operator/advanced-configurations/graphql-federation/", "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/graphql-federation/" }, "/product-stack/tyk-operator/advanced-configurations/internal-looping/": { "/docs/": "/product-stack/tyk-operator/advanced-configurations/internal-looping/", + "/docs/5.5/": "/product-stack/tyk-operator/advanced-configurations/internal-looping/", "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/internal-looping/" }, "/product-stack/tyk-operator/advanced-configurations/management-of-api/": { "/docs/": "/product-stack/tyk-operator/advanced-configurations/management-of-api/", + "/docs/5.5/": "/product-stack/tyk-operator/advanced-configurations/management-of-api/", "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/management-of-api/" }, + "/product-stack/tyk-operator/advanced-configurations/tls-certificate/": { + "/docs/": "/product-stack/tyk-operator/advanced-configurations/tls-certificate/", + "/docs/nightly/": "/product-stack/tyk-operator/advanced-configurations/tls-certificate/" + }, + "/product-stack/tyk-operator/getting-started/create-an-api-overview/": { + "/docs/": "/product-stack/tyk-operator/getting-started/create-an-api-overview/", + "/docs/nightly/": "/product-stack/tyk-operator/getting-started/create-an-api-overview/" + }, + "/product-stack/tyk-operator/getting-started/create-an-oas-api/": { + "/docs/": "/product-stack/tyk-operator/getting-started/create-an-oas-api/", + "/docs/nightly/": "/product-stack/tyk-operator/getting-started/create-an-oas-api/" + }, + "/product-stack/tyk-operator/getting-started/example-tyk-oas-api/": { + "/docs/": "/product-stack/tyk-operator/getting-started/example-tyk-oas-api/", + "/docs/nightly/": "/product-stack/tyk-operator/getting-started/example-tyk-oas-api/" + }, "/product-stack/tyk-operator/getting-started/quick-start-graphql/": { "/docs/": "/product-stack/tyk-operator/getting-started/quick-start-graphql/", + "/docs/5.5/": "/product-stack/tyk-operator/getting-started/quick-start-graphql/", "/docs/nightly/": "/product-stack/tyk-operator/getting-started/quick-start-graphql/" }, "/product-stack/tyk-operator/getting-started/quick-start-http/": { "/docs/": "/product-stack/tyk-operator/getting-started/quick-start-http/", + "/docs/5.5/": "/product-stack/tyk-operator/getting-started/quick-start-http/", "/docs/nightly/": "/product-stack/tyk-operator/getting-started/quick-start-http/" }, "/product-stack/tyk-operator/getting-started/quick-start-tcp/": { "/docs/": "/product-stack/tyk-operator/getting-started/quick-start-tcp/", + "/docs/5.5/": "/product-stack/tyk-operator/getting-started/quick-start-tcp/", "/docs/nightly/": "/product-stack/tyk-operator/getting-started/quick-start-tcp/" }, "/product-stack/tyk-operator/getting-started/quick-start-udg/": { "/docs/": "/product-stack/tyk-operator/getting-started/quick-start-udg/", + "/docs/5.5/": "/product-stack/tyk-operator/getting-started/quick-start-udg/", "/docs/nightly/": "/product-stack/tyk-operator/getting-started/quick-start-udg/" }, + "/product-stack/tyk-operator/getting-started/secure-an-api-overview/": { + "/docs/": "/product-stack/tyk-operator/getting-started/secure-an-api-overview/", + "/docs/nightly/": "/product-stack/tyk-operator/getting-started/secure-an-api-overview/" + }, + "/product-stack/tyk-operator/getting-started/secure-an-oas-api/": { + "/docs/": "/product-stack/tyk-operator/getting-started/secure-an-oas-api/", + "/docs/nightly/": "/product-stack/tyk-operator/getting-started/secure-an-oas-api/" + }, + "/product-stack/tyk-operator/getting-started/security-policy-example/": { + "/docs/": "/product-stack/tyk-operator/getting-started/security-policy-example/", + "/docs/nightly/": "/product-stack/tyk-operator/getting-started/security-policy-example/" + }, "/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership/": { "/docs/": "/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership/", + "/docs/5.5/": "/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership/", "/docs/5.4/": "/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership/", "/docs/nightly/": "/product-stack/tyk-operator/getting-started/tyk-operator-api-ownership/" }, "/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations/": { "/docs/": "/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations/", + "/docs/5.5/": "/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations/", "/docs/5.4/": "/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations/", "/docs/nightly/": "/product-stack/tyk-operator/getting-started/tyk-operator-multiple-organisations/" }, "/product-stack/tyk-operator/key-concepts/custom-resources/": { "/docs/": "/product-stack/tyk-operator/key-concepts/custom-resources/", + "/docs/5.5/": "/product-stack/tyk-operator/key-concepts/custom-resources/", "/docs/5.4/": "/product-stack/tyk-operator/key-concepts/custom-resources/", "/docs/nightly/": "/product-stack/tyk-operator/key-concepts/custom-resources/" }, "/product-stack/tyk-operator/key-concepts/key-concepts/": { "/docs/": "/tyk-operator/", + "/docs/5.5/": "/tyk-operator/", "/docs/5.4/": "/tyk-operator/", "/docs/nightly/": "/tyk-operator/" }, "/product-stack/tyk-operator/key-concepts/operator-context/": { "/docs/": "/product-stack/tyk-operator/key-concepts/operator-context/", + "/docs/5.5/": "/product-stack/tyk-operator/key-concepts/operator-context/", "/docs/5.4/": "/product-stack/tyk-operator/key-concepts/operator-context/", "/docs/nightly/": "/product-stack/tyk-operator/key-concepts/operator-context/" }, "/product-stack/tyk-operator/key-concepts/operator-user/": { "/docs/": "/product-stack/tyk-operator/key-concepts/operator-user/", + "/docs/5.5/": "/product-stack/tyk-operator/key-concepts/operator-user/", "/docs/5.4/": "/product-stack/tyk-operator/key-concepts/operator-user/", "/docs/nightly/": "/product-stack/tyk-operator/key-concepts/operator-user/" }, "/product-stack/tyk-operator/reference/api-definition/": { "/docs/": "/product-stack/tyk-operator/reference/api-definition/", + "/docs/5.5/": "/product-stack/tyk-operator/reference/api-definition/", "/docs/nightly/": "/product-stack/tyk-operator/reference/api-definition/" }, "/product-stack/tyk-operator/reference/security-policy/": { "/docs/": "/product-stack/tyk-operator/reference/security-policy/", + "/docs/5.5/": "/product-stack/tyk-operator/reference/security-policy/", "/docs/nightly/": "/product-stack/tyk-operator/reference/security-policy/" }, + "/product-stack/tyk-operator/reference/tyk-oas-api-definition/": { + "/docs/": "/product-stack/tyk-operator/reference/tyk-oas-api-definition/", + "/docs/nightly/": "/product-stack/tyk-operator/reference/tyk-oas-api-definition/" + }, "/product-stack/tyk-operator/reference/version-compatibility/": { "/docs/": "/product-stack/tyk-operator/reference/version-compatibility/", + "/docs/5.5/": "/product-stack/tyk-operator/reference/version-compatibility/", "/docs/5.4/": "/product-stack/tyk-operator/reference/version-compatibility/", "/docs/nightly/": "/product-stack/tyk-operator/reference/version-compatibility/" }, "/product-stack/tyk-operator/release-notes/operator-0.16/": { "/docs/": "/product-stack/tyk-operator/release-notes/operator-0.16/", + "/docs/5.5/": "/product-stack/tyk-operator/release-notes/operator-0.16/", "/docs/5.4/": "/product-stack/tyk-operator/release-notes/operator-0.16/", "/docs/5.3/": "/product-stack/tyk-operator/release-notes/operator-0.16/", "/docs/5.2/": "/product-stack/tyk-operator/release-notes/operator-0.16/", @@ -6634,26 +7253,35 @@ }, "/product-stack/tyk-operator/release-notes/operator-0.17/": { "/docs/": "/product-stack/tyk-operator/release-notes/operator-0.17/", + "/docs/5.5/": "/product-stack/tyk-operator/release-notes/operator-0.17/", "/docs/5.4/": "/product-stack/tyk-operator/release-notes/operator-0.17/", "/docs/5.3/": "/product-stack/tyk-operator/release-notes/operator-0.17/", "/docs/nightly/": "/product-stack/tyk-operator/release-notes/operator-0.17/" }, "/product-stack/tyk-operator/release-notes/operator-0.18/": { "/docs/": "/product-stack/tyk-operator/release-notes/operator-0.18/", + "/docs/5.5/": "/product-stack/tyk-operator/release-notes/operator-0.18/", "/docs/5.4/": "/product-stack/tyk-operator/release-notes/operator-0.18/", "/docs/nightly/": "/product-stack/tyk-operator/release-notes/operator-0.18/" }, + "/product-stack/tyk-operator/release-notes/operator-1.0/": { + "/docs/": "/product-stack/tyk-operator/release-notes/operator-1.0/", + "/docs/nightly/": "/product-stack/tyk-operator/release-notes/operator-1.0/" + }, "/product-stack/tyk-operator/release-notes/overview/": { "/docs/": "/product-stack/tyk-operator/release-notes/overview/", + "/docs/5.5/": "/product-stack/tyk-operator/release-notes/overview/", "/docs/5.4/": "/product-stack/tyk-operator/release-notes/overview/", "/docs/nightly/": "/product-stack/tyk-operator/release-notes/overview/" }, "/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied/": { "/docs/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied/", + "/docs/5.5/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied/", "/docs/nightly/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-changes-not-applied/" }, "/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting/": { "/docs/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting/", + "/docs/5.5/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting/", "/docs/5.4/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting/", "/docs/5.3/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting/", "/docs/5.2/": "/product-stack/tyk-operator/troubleshooting/tyk-operator-reconciliation-troubleshooting/", @@ -6662,14 +7290,24 @@ }, "/product-stack/tyk-operator/tyk-ingress-controller/": { "/docs/": "/product-stack/tyk-operator/tyk-ingress-controller/", + "/docs/5.5/": "/product-stack/tyk-operator/tyk-ingress-controller/", "/docs/5.4/": "/product-stack/tyk-operator/tyk-ingress-controller/", "/docs/5.3/": "/product-stack/tyk-operator/tyk-ingress-controller/", "/docs/5.2/": "/product-stack/tyk-operator/tyk-ingress-controller/", "/docs/5.1/": "/product-stack/tyk-operator/tyk-ingress-controller/", - "/docs/nightly/": "/product-stack/tyk-operator/tyk-ingress-controller/" + "/docs/nightly/": "/product-stack/tyk-operator/tyk-ingress-controller/", + "/docs/5.0/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.3/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.2/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.1/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.0/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/3.2/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/3.1/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/3-lts/": "/tyk-oss/ce-kubernetes-ingress/" }, "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv/": { "/docs/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv/", + "/docs/5.5/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv/", "/docs/5.4/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv/", "/docs/5.3/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv/", "/docs/5.2/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/csv/", @@ -6677,6 +7315,7 @@ }, "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch/": { "/docs/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch/", + "/docs/5.5/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch/", "/docs/5.4/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch/", "/docs/5.3/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch/", "/docs/5.2/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/elasticsearch/", @@ -6684,6 +7323,7 @@ }, "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio/": { "/docs/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio/", + "/docs/5.5/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio/", "/docs/5.4/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio/", "/docs/5.3/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio/", "/docs/5.2/": "/product-stack/tyk-pump/advanced-configurations/configure-data-sinks/logzio/", @@ -6691,6 +7331,7 @@ }, "/product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump/": { "/docs/": "/product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump/", + "/docs/5.5/": "/product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump/", "/docs/5.4/": "/product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump/", "/docs/5.3/": "/product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump/", "/docs/5.2/": "/product-stack/tyk-pump/advanced-configurations/setup-prometheus-pump/", @@ -6700,15 +7341,18 @@ }, "/product-stack/tyk-pump/release-notes/pump-1.10/": { "/docs/": "/product-stack/tyk-pump/release-notes/pump-1.10/", + "/docs/5.5/": "/product-stack/tyk-pump/release-notes/pump-1.10/", "/docs/5.4/": "/product-stack/tyk-pump/release-notes/pump-1.10/", "/docs/nightly/": "/product-stack/tyk-pump/release-notes/pump-1.10/" }, "/product-stack/tyk-pump/release-notes/pump-1.11/": { "/docs/": "/product-stack/tyk-pump/release-notes/pump-1.11/", + "/docs/5.5/": "/product-stack/tyk-pump/release-notes/pump-1.11/", "/docs/nightly/": "/product-stack/tyk-pump/release-notes/pump-1.11/" }, "/product-stack/tyk-pump/release-notes/pump-1.9/": { "/docs/": "/product-stack/tyk-pump/release-notes/pump-1.9/", + "/docs/5.5/": "/product-stack/tyk-pump/release-notes/pump-1.9/", "/docs/5.4/": "/product-stack/tyk-pump/release-notes/pump-1.9/", "/docs/5.3/": "/product-stack/tyk-pump/release-notes/pump-1.9/", "/docs/5.2/": "/product-stack/tyk-pump/release-notes/pump-1.9/", @@ -6717,714 +7361,834 @@ }, "/product-stack/tyk-streaming/configuration/common-configuration/batching/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/batching/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/batching/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/batching/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/batching/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/batching/" }, "/product-stack/tyk-streaming/configuration/common-configuration/error-handling/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/error-handling/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/error-handling/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/error-handling/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/error-handling/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/error-handling/" }, "/product-stack/tyk-streaming/configuration/common-configuration/field-paths/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/field-paths/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/field-paths/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/field-paths/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/field-paths/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/field-paths/" }, "/product-stack/tyk-streaming/configuration/common-configuration/interpolation/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/interpolation/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/interpolation/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/interpolation/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/interpolation/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/interpolation/" }, "/product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/processing-pipelines/" }, "/product-stack/tyk-streaming/configuration/common-configuration/resources/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/resources/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/resources/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/resources/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/resources/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/resources/" }, "/product-stack/tyk-streaming/configuration/common-configuration/secrets/": { "/docs/": "/product-stack/tyk-streaming/configuration/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/overview/" }, "/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing/": { "/docs/": "/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/common-configuration/windowed_processing/" }, "/product-stack/tyk-streaming/configuration/inputs/amqp-0-9/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/amqp-0-9/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/amqp-0-9/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/amqp-0-9/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/amqp-0-9/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/amqp-0-9/" }, "/product-stack/tyk-streaming/configuration/inputs/amqp-1/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/amqp-1/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/amqp-1/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/amqp-1/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/amqp-1/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/amqp-1/" }, "/product-stack/tyk-streaming/configuration/inputs/broker/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/broker/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/broker/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/broker/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/broker/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/broker/" }, "/product-stack/tyk-streaming/configuration/inputs/generate/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/generate/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/generate/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/generate/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/generate/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/generate/" }, "/product-stack/tyk-streaming/configuration/inputs/http-client/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/http-client/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/http-client/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/http-client/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/http-client/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/http-client/" }, "/product-stack/tyk-streaming/configuration/inputs/http-server/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/http-server/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/http-server/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/http-server/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/http-server/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/http-server/" }, "/product-stack/tyk-streaming/configuration/inputs/kafka-franz/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/kafka-franz/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/kafka-franz/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/kafka-franz/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/kafka-franz/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/kafka-franz/" }, "/product-stack/tyk-streaming/configuration/inputs/kafka/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/kafka/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/kafka/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/kafka/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/kafka/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/kafka/" }, "/product-stack/tyk-streaming/configuration/inputs/mqtt/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/mqtt/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/mqtt/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/mqtt/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/mqtt/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/mqtt/" }, "/product-stack/tyk-streaming/configuration/inputs/nats/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/nats/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/nats/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/nats/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/nats/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/nats/" }, "/product-stack/tyk-streaming/configuration/inputs/nsq/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/nsq/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/nsq/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/nsq/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/nsq/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/nsq/" }, "/product-stack/tyk-streaming/configuration/inputs/overview/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/overview/" }, "/product-stack/tyk-streaming/configuration/inputs/redis-pubsub/": { "/docs/": "/product-stack/tyk-streaming/configuration/inputs/redis-pubsub/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/inputs/redis-pubsub/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/inputs/redis-pubsub/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/inputs/redis-pubsub/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/inputs/redis-pubsub/" }, "/product-stack/tyk-streaming/configuration/outputs/amqp-0-9/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/amqp-0-9/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/amqp-0-9/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/amqp-0-9/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/amqp-0-9/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/amqp-0-9/" }, "/product-stack/tyk-streaming/configuration/outputs/amqp-1/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/amqp-1/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/amqp-1/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/amqp-1/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/amqp-1/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/amqp-1/" }, "/product-stack/tyk-streaming/configuration/outputs/broker/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/broker/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/broker/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/broker/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/broker/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/broker/" }, "/product-stack/tyk-streaming/configuration/outputs/drop_on/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/drop_on/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/drop_on/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/drop_on/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/drop_on/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/drop_on/" }, "/product-stack/tyk-streaming/configuration/outputs/fallback/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/fallback/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/fallback/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/fallback/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/fallback/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/fallback/" }, "/product-stack/tyk-streaming/configuration/outputs/http-client/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/http-client/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/http-client/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/http-client/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/http-client/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/http-client/" }, "/product-stack/tyk-streaming/configuration/outputs/http-server/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/http-server/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/http-server/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/http-server/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/http-server/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/http-server/" }, "/product-stack/tyk-streaming/configuration/outputs/kafka-franz/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/kafka-franz/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/kafka-franz/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/kafka-franz/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/kafka-franz/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/kafka-franz/" }, "/product-stack/tyk-streaming/configuration/outputs/kafka/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/kafka/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/kafka/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/kafka/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/kafka/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/kafka/" }, "/product-stack/tyk-streaming/configuration/outputs/mqtt/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/mqtt/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/mqtt/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/mqtt/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/mqtt/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/mqtt/" }, "/product-stack/tyk-streaming/configuration/outputs/nats/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/nats/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/nats/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/nats/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/nats/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/nats/" }, "/product-stack/tyk-streaming/configuration/outputs/nsq/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/nsq/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/nsq/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/nsq/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/nsq/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/nsq/" }, "/product-stack/tyk-streaming/configuration/outputs/overview/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/overview/" }, "/product-stack/tyk-streaming/configuration/outputs/redis-pubsub/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/redis-pubsub/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/redis-pubsub/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/redis-pubsub/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/redis-pubsub/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/redis-pubsub/" }, "/product-stack/tyk-streaming/configuration/outputs/reject/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/reject/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/reject/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/reject/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/reject/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/reject/" }, "/product-stack/tyk-streaming/configuration/outputs/retry/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/retry/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/retry/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/retry/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/retry/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/retry/" }, "/product-stack/tyk-streaming/configuration/outputs/stdout/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/stdout/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/stdout/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/stdout/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/stdout/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/stdout/" }, "/product-stack/tyk-streaming/configuration/outputs/switch/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/switch/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/switch/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/switch/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/switch/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/switch/" }, "/product-stack/tyk-streaming/configuration/outputs/sync-response/": { "/docs/": "/product-stack/tyk-streaming/configuration/outputs/sync-response/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/outputs/sync-response/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/outputs/sync-response/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/outputs/sync-response/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/outputs/sync-response/" }, "/product-stack/tyk-streaming/configuration/overview/": { "/docs/": "/product-stack/tyk-streaming/configuration/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/overview/" }, "/product-stack/tyk-streaming/configuration/processors/avro/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/avro/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/avro/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/avro/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/avro/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/avro/" }, "/product-stack/tyk-streaming/configuration/processors/aws-lambda/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/aws-lambda/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/aws-lambda/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/aws-lambda/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/aws-lambda/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/aws-lambda/" }, "/product-stack/tyk-streaming/configuration/processors/bloblang/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/bloblang/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/bloblang/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/bloblang/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/bloblang/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/bloblang/" }, "/product-stack/tyk-streaming/configuration/processors/bounds-check/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/bounds-check/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/bounds-check/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/bounds-check/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/bounds-check/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/bounds-check/" }, "/product-stack/tyk-streaming/configuration/processors/branch/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/branch/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/branch/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/branch/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/branch/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/branch/" }, "/product-stack/tyk-streaming/configuration/processors/cache/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/cache/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/cache/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/cache/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/cache/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/cache/" }, "/product-stack/tyk-streaming/configuration/processors/cached/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/cached/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/cached/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/cached/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/cached/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/cached/" }, "/product-stack/tyk-streaming/configuration/processors/catch/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/catch/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/catch/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/catch/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/catch/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/catch/" }, "/product-stack/tyk-streaming/configuration/processors/dedupe/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/dedupe/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/dedupe/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/dedupe/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/dedupe/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/dedupe/" }, "/product-stack/tyk-streaming/configuration/processors/for-each/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/for-each/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/for-each/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/for-each/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/for-each/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/for-each/" }, "/product-stack/tyk-streaming/configuration/processors/group-by-value/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/group-by-value/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/group-by-value/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/group-by-value/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/group-by-value/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/group-by-value/" }, "/product-stack/tyk-streaming/configuration/processors/group-by/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/group-by/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/group-by/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/group-by/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/group-by/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/group-by/" }, "/product-stack/tyk-streaming/configuration/processors/http/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/http/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/http/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/http/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/http/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/http/" }, "/product-stack/tyk-streaming/configuration/processors/insert-part/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/insert-part/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/insert-part/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/insert-part/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/insert-part/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/insert-part/" }, "/product-stack/tyk-streaming/configuration/processors/jmes-path/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/jmes-path/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/jmes-path/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/jmes-path/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/jmes-path/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/jmes-path/" }, "/product-stack/tyk-streaming/configuration/processors/jq/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/jq/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/jq/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/jq/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/jq/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/jq/" }, "/product-stack/tyk-streaming/configuration/processors/json-schema/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/json-schema/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/json-schema/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/json-schema/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/json-schema/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/json-schema/" }, "/product-stack/tyk-streaming/configuration/processors/log/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/log/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/log/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/log/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/log/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/log/" }, "/product-stack/tyk-streaming/configuration/processors/mapping/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/mapping/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/mapping/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/mapping/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/mapping/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/mapping/" }, "/product-stack/tyk-streaming/configuration/processors/msgpack/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/msgpack/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/msgpack/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/msgpack/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/msgpack/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/msgpack/" }, "/product-stack/tyk-streaming/configuration/processors/mutation/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/mutation/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/mutation/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/mutation/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/mutation/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/mutation/" }, "/product-stack/tyk-streaming/configuration/processors/noop/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/noop/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/noop/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/noop/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/noop/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/noop/" }, "/product-stack/tyk-streaming/configuration/processors/overview/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/overview/" }, "/product-stack/tyk-streaming/configuration/processors/parallel/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/parallel/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/parallel/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/parallel/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/parallel/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/parallel/" }, "/product-stack/tyk-streaming/configuration/processors/parse-log/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/parse-log/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/parse-log/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/parse-log/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/parse-log/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/parse-log/" }, "/product-stack/tyk-streaming/configuration/processors/processors/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/processors/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/processors/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/processors/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/processors/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/processors/" }, "/product-stack/tyk-streaming/configuration/processors/protobuf/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/protobuf/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/protobuf/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/protobuf/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/protobuf/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/protobuf/" }, "/product-stack/tyk-streaming/configuration/processors/rate-limit/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/rate-limit/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/rate-limit/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/rate-limit/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/rate-limit/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/rate-limit/" }, "/product-stack/tyk-streaming/configuration/processors/redis/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/redis/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/redis/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/redis/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/redis/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/redis/" }, "/product-stack/tyk-streaming/configuration/processors/retry/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/retry/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/retry/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/retry/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/retry/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/retry/" }, "/product-stack/tyk-streaming/configuration/processors/schema-registry-decode/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-decode/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-decode/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-decode/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-decode/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-decode/" }, "/product-stack/tyk-streaming/configuration/processors/schema-registry-encode/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-encode/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-encode/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-encode/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-encode/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/schema-registry-encode/" }, "/product-stack/tyk-streaming/configuration/processors/select-parts/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/select-parts/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/select-parts/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/select-parts/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/select-parts/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/select-parts/" }, "/product-stack/tyk-streaming/configuration/processors/sleep/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/sleep/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/sleep/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/sleep/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/sleep/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/sleep/" }, "/product-stack/tyk-streaming/configuration/processors/split/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/split/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/split/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/split/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/split/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/split/" }, "/product-stack/tyk-streaming/configuration/processors/switch/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/switch/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/switch/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/switch/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/switch/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/switch/" }, "/product-stack/tyk-streaming/configuration/processors/sync-response/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/sync-response/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/sync-response/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/sync-response/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/sync-response/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/sync-response/" }, "/product-stack/tyk-streaming/configuration/processors/try/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/try/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/try/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/try/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/try/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/try/" }, "/product-stack/tyk-streaming/configuration/processors/while/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/while/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/while/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/while/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/while/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/while/" }, "/product-stack/tyk-streaming/configuration/processors/workflow/": { "/docs/": "/product-stack/tyk-streaming/configuration/processors/workflow/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/processors/workflow/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/processors/workflow/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/processors/workflow/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/processors/workflow/" }, "/product-stack/tyk-streaming/configuration/rate-limits/local/": { "/docs/": "/product-stack/tyk-streaming/configuration/rate-limits/local/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/rate-limits/local/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/rate-limits/local/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/rate-limits/local/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/rate-limits/local/" }, "/product-stack/tyk-streaming/configuration/rate-limits/overview/": { "/docs/": "/product-stack/tyk-streaming/configuration/rate-limits/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/rate-limits/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/rate-limits/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/rate-limits/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/rate-limits/overview/" }, "/product-stack/tyk-streaming/configuration/scanners/csv/": { "/docs/": "/product-stack/tyk-streaming/configuration/scanners/csv/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/scanners/csv/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/scanners/csv/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/scanners/csv/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/scanners/csv/" }, "/product-stack/tyk-streaming/configuration/scanners/lines/": { "/docs/": "/product-stack/tyk-streaming/configuration/scanners/lines/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/scanners/lines/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/scanners/lines/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/scanners/lines/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/scanners/lines/" }, "/product-stack/tyk-streaming/configuration/scanners/overview/": { "/docs/": "/product-stack/tyk-streaming/configuration/scanners/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/scanners/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/scanners/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/scanners/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/scanners/overview/" }, "/product-stack/tyk-streaming/configuration/scanners/re-match/": { "/docs/": "/product-stack/tyk-streaming/configuration/scanners/re-match/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/scanners/re-match/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/scanners/re-match/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/scanners/re-match/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/scanners/re-match/" }, "/product-stack/tyk-streaming/configuration/scanners/switch/": { "/docs/": "/product-stack/tyk-streaming/configuration/scanners/switch/", + "/docs/5.5/": "/product-stack/tyk-streaming/configuration/scanners/switch/", "/docs/5.4/": "/product-stack/tyk-streaming/configuration/scanners/switch/", "/docs/5.3/": "/product-stack/tyk-streaming/configuration/scanners/switch/", "/docs/nightly/": "/product-stack/tyk-streaming/configuration/scanners/switch/" }, "/product-stack/tyk-streaming/deployment-considerations/": { "/docs/": "/product-stack/tyk-streaming/deployment-considerations/", + "/docs/5.5/": "/product-stack/tyk-streaming/deployment-considerations/", "/docs/5.4/": "/product-stack/tyk-streaming/deployment-considerations/", "/docs/5.3/": "/product-stack/tyk-streaming/deployment-considerations/", "/docs/nightly/": "/product-stack/tyk-streaming/deployment-considerations/" }, "/product-stack/tyk-streaming/developer-portal-integration/": { "/docs/": "/product-stack/tyk-streaming/developer-portal-integration/", + "/docs/5.5/": "/product-stack/tyk-streaming/developer-portal-integration/", "/docs/5.4/": "/product-stack/tyk-streaming/developer-portal-integration/", "/docs/5.3/": "/product-stack/tyk-streaming/developer-portal-integration/", "/docs/nightly/": "/product-stack/tyk-streaming/developer-portal-integration/" }, "/product-stack/tyk-streaming/getting-started/": { "/docs/": "/product-stack/tyk-streaming/getting-started/", + "/docs/5.5/": "/product-stack/tyk-streaming/getting-started/", "/docs/5.4/": "/product-stack/tyk-streaming/getting-started/", "/docs/5.3/": "/product-stack/tyk-streaming/getting-started/", "/docs/nightly/": "/product-stack/tyk-streaming/getting-started/" }, "/product-stack/tyk-streaming/glossary/": { "/docs/": "/product-stack/tyk-streaming/glossary/", + "/docs/5.5/": "/product-stack/tyk-streaming/glossary/", "/docs/5.4/": "/product-stack/tyk-streaming/glossary/", "/docs/5.3/": "/product-stack/tyk-streaming/glossary/", "/docs/nightly/": "/product-stack/tyk-streaming/glossary/" }, "/product-stack/tyk-streaming/guides/bloblang/advanced/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/advanced/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/advanced/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/advanced/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/advanced/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/advanced/" }, "/product-stack/tyk-streaming/guides/bloblang/arithmetic/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/arithmetic/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/arithmetic/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/arithmetic/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/arithmetic/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/arithmetic/" }, "/product-stack/tyk-streaming/guides/bloblang/functions/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/functions/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/functions/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/functions/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/functions/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/functions/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/encoding-and-encryption/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/general/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/general/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/general/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/general/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/general/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/general/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/geoip/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/geoip/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/geoip/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/geoip/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/geoip/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/geoip/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/json-web-tokens/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/numbers/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/numbers/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/numbers/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/numbers/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/numbers/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/numbers/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/object-and-arrays/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/overview/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/overview/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/parsing/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/parsing/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/parsing/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/parsing/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/parsing/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/parsing/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/regular-expressions/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/strings/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/strings/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/strings/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/strings/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/strings/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/strings/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/timestamps/" }, "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/methods/type-coercion/" }, "/product-stack/tyk-streaming/guides/bloblang/overview/": { "/docs/": "/product-stack/tyk-streaming/guides/bloblang/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/bloblang/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/bloblang/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/bloblang/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/bloblang/overview/" }, "/product-stack/tyk-streaming/guides/sync-responses/": { "/docs/": "/product-stack/tyk-streaming/guides/sync-responses/", + "/docs/5.5/": "/product-stack/tyk-streaming/guides/sync-responses/", "/docs/5.4/": "/product-stack/tyk-streaming/guides/sync-responses/", "/docs/5.3/": "/product-stack/tyk-streaming/guides/sync-responses/", "/docs/nightly/": "/product-stack/tyk-streaming/guides/sync-responses/" }, "/product-stack/tyk-streaming/key-concepts/": { "/docs/": "/product-stack/tyk-streaming/key-concepts/", + "/docs/5.5/": "/product-stack/tyk-streaming/key-concepts/", "/docs/5.4/": "/product-stack/tyk-streaming/key-concepts/", "/docs/5.3/": "/product-stack/tyk-streaming/key-concepts/", "/docs/nightly/": "/product-stack/tyk-streaming/key-concepts/" }, "/product-stack/tyk-streaming/overview/": { "/docs/": "/product-stack/tyk-streaming/overview/", + "/docs/5.5/": "/product-stack/tyk-streaming/overview/", "/docs/5.4/": "/product-stack/tyk-streaming/overview/", "/docs/5.3/": "/product-stack/tyk-streaming/overview/", "/docs/nightly/": "/product-stack/tyk-streaming/overview/" }, "/product-stack/tyk-streaming/troubleshooting/": { "/docs/": "/product-stack/tyk-streaming/troubleshooting/", + "/docs/5.5/": "/product-stack/tyk-streaming/troubleshooting/", "/docs/5.4/": "/product-stack/tyk-streaming/troubleshooting/", "/docs/5.3/": "/product-stack/tyk-streaming/troubleshooting/", "/docs/nightly/": "/product-stack/tyk-streaming/troubleshooting/" }, "/product-stack/tyk-sync/commands/sync-dump/": { "/docs/": "/product-stack/tyk-sync/commands/sync-dump/", + "/docs/5.5/": "/product-stack/tyk-sync/commands/sync-dump/", "/docs/5.4/": "/product-stack/tyk-sync/commands/sync-dump/", "/docs/nightly/": "/product-stack/tyk-sync/commands/sync-dump/" }, "/product-stack/tyk-sync/commands/sync-examples/": { "/docs/": "/product-stack/tyk-sync/commands/sync-examples/", + "/docs/5.5/": "/product-stack/tyk-sync/commands/sync-examples/", "/docs/5.4/": "/product-stack/tyk-sync/commands/sync-examples/", "/docs/nightly/": "/product-stack/tyk-sync/commands/sync-examples/" }, "/product-stack/tyk-sync/commands/sync-publish/": { "/docs/": "/product-stack/tyk-sync/commands/sync-publish/", + "/docs/5.5/": "/product-stack/tyk-sync/commands/sync-publish/", "/docs/5.4/": "/product-stack/tyk-sync/commands/sync-publish/", "/docs/nightly/": "/product-stack/tyk-sync/commands/sync-publish/" }, "/product-stack/tyk-sync/commands/sync-sync/": { "/docs/": "/product-stack/tyk-sync/commands/sync-sync/", + "/docs/5.5/": "/product-stack/tyk-sync/commands/sync-sync/", "/docs/5.4/": "/product-stack/tyk-sync/commands/sync-sync/", "/docs/nightly/": "/product-stack/tyk-sync/commands/sync-sync/" }, "/product-stack/tyk-sync/commands/sync-update/": { "/docs/": "/product-stack/tyk-sync/commands/sync-update/", + "/docs/5.5/": "/product-stack/tyk-sync/commands/sync-update/", "/docs/5.4/": "/product-stack/tyk-sync/commands/sync-update/", "/docs/nightly/": "/product-stack/tyk-sync/commands/sync-update/" }, "/product-stack/tyk-sync/installing-tyk-sync/": { "/docs/": "/product-stack/tyk-sync/installing-tyk-sync/", + "/docs/5.5/": "/product-stack/tyk-sync/installing-tyk-sync/", "/docs/5.4/": "/product-stack/tyk-sync/installing-tyk-sync/", "/docs/nightly/": "/product-stack/tyk-sync/installing-tyk-sync/" }, "/product-stack/tyk-sync/overview/": { "/docs/": "/product-stack/tyk-sync/overview/", + "/docs/5.5/": "/product-stack/tyk-sync/overview/", "/docs/5.4/": "/product-stack/tyk-sync/overview/", "/docs/nightly/": "/product-stack/tyk-sync/overview/", "/docs/5.3/": "/tyk-sync/", @@ -7441,6 +8205,7 @@ }, "/product-stack/tyk-sync/release-notes/sync-1.4/": { "/docs/": "/product-stack/tyk-sync/release-notes/sync-1.4/", + "/docs/5.5/": "/product-stack/tyk-sync/release-notes/sync-1.4/", "/docs/5.4/": "/product-stack/tyk-sync/release-notes/sync-1.4/", "/docs/5.3/": "/product-stack/tyk-sync/release-notes/sync-1.4/", "/docs/5.2/": "/product-stack/tyk-sync/release-notes/sync-1.4/", @@ -7449,26 +8214,35 @@ }, "/product-stack/tyk-sync/release-notes/sync-1.5/": { "/docs/": "/product-stack/tyk-sync/release-notes/sync-1.5/", + "/docs/5.5/": "/product-stack/tyk-sync/release-notes/sync-1.5/", "/docs/5.4/": "/product-stack/tyk-sync/release-notes/sync-1.5/", "/docs/nightly/": "/product-stack/tyk-sync/release-notes/sync-1.5/" }, + "/product-stack/tyk-sync/release-notes/sync-2.0/": { + "/docs/": "/product-stack/tyk-sync/release-notes/sync-2.0/", + "/docs/nightly/": "/product-stack/tyk-sync/release-notes/sync-2.0/" + }, "/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations/": { "/docs/": "/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations/", + "/docs/5.5/": "/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations/", "/docs/5.4/": "/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations/", "/docs/nightly/": "/product-stack/tyk-sync/tutorials/tutorial-backup-api-configurations/" }, "/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations/": { "/docs/": "/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations/", + "/docs/5.5/": "/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations/", "/docs/5.4/": "/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations/", "/docs/nightly/": "/product-stack/tyk-sync/tutorials/tutorial-synchronise-api-configurations/" }, "/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations/": { "/docs/": "/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations/", + "/docs/5.5/": "/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations/", "/docs/5.4/": "/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations/", "/docs/nightly/": "/product-stack/tyk-sync/tutorials/tutorial-update-api-configurations/" }, "/python-custom-auth-plugin/api-middleware-test/": { "/docs/": "/tyk-cloud/configuration-options/using-plugins/api-test/", + "/docs/5.5/": "/tyk-cloud/configuration-options/using-plugins/api-test/", "/docs/5.4/": "/tyk-cloud/configuration-options/using-plugins/api-test/", "/docs/5.3/": "/tyk-cloud/configuration-options/using-plugins/api-test/", "/docs/5.2/": "/tyk-cloud/configuration-options/using-plugins/api-test/", @@ -7485,6 +8259,7 @@ }, "/python-custom-auth-plugin/python-code-bundle/": { "/docs/": "/tyk-cloud/configuration-options/using-plugins/python-code-bundle/", + "/docs/5.5/": "/tyk-cloud/configuration-options/using-plugins/python-code-bundle/", "/docs/5.4/": "/tyk-cloud/configuration-options/using-plugins/python-code-bundle/", "/docs/5.3/": "/tyk-cloud/configuration-options/using-plugins/python-code-bundle/", "/docs/5.2/": "/tyk-cloud/configuration-options/using-plugins/python-code-bundle/", @@ -7501,6 +8276,7 @@ }, "/python-custom-auth-plugin/setup-control-plane/": { "/docs/": "/tyk-cloud/configuration-options/using-plugins/setup-control-plane/", + "/docs/5.5/": "/tyk-cloud/configuration-options/using-plugins/setup-control-plane/", "/docs/5.4/": "/tyk-cloud/configuration-options/using-plugins/setup-control-plane/", "/docs/5.3/": "/tyk-cloud/configuration-options/using-plugins/setup-control-plane/", "/docs/5.2/": "/tyk-cloud/configuration-options/using-plugins/setup-control-plane/", @@ -7517,6 +8293,7 @@ }, "/python-custom-auth-plugin/uploading-bundle/": { "/docs/": "/tyk-cloud/configuration-options/using-plugins/uploading-bundle/", + "/docs/5.5/": "/tyk-cloud/configuration-options/using-plugins/uploading-bundle/", "/docs/5.4/": "/tyk-cloud/configuration-options/using-plugins/uploading-bundle/", "/docs/5.3/": "/tyk-cloud/configuration-options/using-plugins/uploading-bundle/", "/docs/5.2/": "/tyk-cloud/configuration-options/using-plugins/uploading-bundle/", @@ -7533,6 +8310,7 @@ }, "/reference-docs/user-roles/": { "/docs/": "/basic-config-and-security/security/dashboard/user-roles/", + "/docs/5.5/": "/basic-config-and-security/security/dashboard/user-roles/", "/docs/5.4/": "/basic-config-and-security/security/dashboard/user-roles/", "/docs/5.3/": "/basic-config-and-security/security/dashboard/user-roles/", "/docs/5.2/": "/basic-config-and-security/security/dashboard/user-roles/", @@ -7549,6 +8327,7 @@ }, "/release-notes/": { "/docs/": "/developer-support/tyk-release-summary/overview/", + "/docs/5.5/": "/developer-support/tyk-release-summary/overview/", "/docs/5.4/": "/developer-support/tyk-release-summary/overview/", "/docs/5.3/": "/developer-support/tyk-release-summary/overview/", "/docs/5.2/": "/developer-support/tyk-release-summary/overview/", @@ -7565,6 +8344,7 @@ }, "/release-notes/mdcb-2.0/": { "/docs/": "/release-notes/mdcb-2.0/", + "/docs/5.5/": "/release-notes/mdcb-2.0/", "/docs/5.4/": "/release-notes/mdcb-2.0/", "/docs/5.3/": "/release-notes/mdcb-2.0/", "/docs/5.2/": "/release-notes/mdcb-2.0/", @@ -7577,6 +8357,7 @@ }, "/release-notes/mdcb-2.1/": { "/docs/": "/release-notes/mdcb-2.1/", + "/docs/5.5/": "/release-notes/mdcb-2.1/", "/docs/5.4/": "/release-notes/mdcb-2.1/", "/docs/5.3/": "/release-notes/mdcb-2.1/", "/docs/5.2/": "/release-notes/mdcb-2.1/", @@ -7587,6 +8368,7 @@ }, "/release-notes/mdcb-2.2/": { "/docs/": "/release-notes/mdcb-2.2/", + "/docs/5.5/": "/release-notes/mdcb-2.2/", "/docs/5.4/": "/release-notes/mdcb-2.2/", "/docs/5.3/": "/release-notes/mdcb-2.2/", "/docs/5.2/": "/release-notes/mdcb-2.2/", @@ -7596,6 +8378,7 @@ }, "/release-notes/mdcb-2.3/": { "/docs/": "/release-notes/mdcb-2.3/", + "/docs/5.5/": "/release-notes/mdcb-2.3/", "/docs/5.4/": "/release-notes/mdcb-2.3/", "/docs/5.3/": "/release-notes/mdcb-2.3/", "/docs/5.2/": "/release-notes/mdcb-2.3/", @@ -7604,6 +8387,7 @@ }, "/release-notes/mdcb-2.4/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", "/docs/5.3/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", "/docs/5.2/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.4/", @@ -7612,17 +8396,20 @@ }, "/release-notes/mdcb-2.5/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", "/docs/5.3/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/", "/docs/nightly/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.5/" }, "/release-notes/mdcb-2.6/": { "/docs/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/", + "/docs/5.5/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/", "/docs/5.4/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/", "/docs/nightly/": "/product-stack/tyk-enterprise-mdcb/release-notes/version-2.6/" }, "/release-notes/mdcb/": { "/docs/": "/release-notes/mdcb-2.0/", + "/docs/5.5/": "/release-notes/mdcb-2.0/", "/docs/5.4/": "/release-notes/mdcb-2.0/", "/docs/5.3/": "/release-notes/mdcb-2.0/", "/docs/5.2/": "/release-notes/mdcb-2.0/", @@ -7635,6 +8422,7 @@ }, "/release-notes/mdcb/mdcb/": { "/docs/": "/release-notes/mdcb-2.0/", + "/docs/5.5/": "/release-notes/mdcb-2.0/", "/docs/5.4/": "/release-notes/mdcb-2.0/", "/docs/5.3/": "/release-notes/mdcb-2.0/", "/docs/5.2/": "/release-notes/mdcb-2.0/", @@ -7645,6 +8433,7 @@ }, "/release-notes/pump-1.8/": { "/docs/": "/release-notes/pump-1.8/", + "/docs/5.5/": "/release-notes/pump-1.8/", "/docs/5.4/": "/release-notes/pump-1.8/", "/docs/5.3/": "/release-notes/pump-1.8/", "/docs/5.2/": "/release-notes/pump-1.8/", @@ -7657,6 +8446,7 @@ }, "/release-notes/version-2.4/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.4/", @@ -7673,6 +8463,7 @@ }, "/release-notes/version-2.5/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.5/", @@ -7689,6 +8480,7 @@ }, "/release-notes/version-2.6/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.6/", @@ -7705,6 +8497,7 @@ }, "/release-notes/version-2.7/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.7/", @@ -7721,6 +8514,7 @@ }, "/release-notes/version-2.8/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.8/", @@ -7737,6 +8531,7 @@ }, "/release-notes/version-2.9/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/version-2.9/", @@ -7753,6 +8548,7 @@ }, "/release-notes/version-3.0/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-3.0/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-3.0/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-3.0/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-3.0/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-3.0/", @@ -7769,6 +8565,7 @@ }, "/release-notes/version-3.1/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-3.1/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-3.1/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-3.1/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-3.1/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-3.1/", @@ -7785,6 +8582,7 @@ }, "/release-notes/version-3.2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-3.2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-3.2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-3.2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-3.2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-3.2/", @@ -7801,6 +8599,7 @@ }, "/release-notes/version-4.0/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.0/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.0/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.0/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.0/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.0/", @@ -7814,6 +8613,7 @@ }, "/release-notes/version-4.1/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.1/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.1/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.1/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.1/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.1/", @@ -7826,6 +8626,7 @@ }, "/release-notes/version-4.2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.2/", @@ -7837,6 +8638,7 @@ }, "/release-notes/version-4.3/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-4.3/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-4.3/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-4.3/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-4.3/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-4.3/", @@ -7847,6 +8649,7 @@ }, "/release-notes/version-5.0/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.0/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.0/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.0/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-5.0/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-5.0/", @@ -7856,6 +8659,7 @@ }, "/release-notes/version-5.1/": { "/docs/": "/product-stack/tyk-gateway/release-notes/version-5.1/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/version-5.1/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/version-5.1/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/version-5.1/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/version-5.1/", @@ -7864,6 +8668,7 @@ }, "/report-monitor-trigger-events/": { "/docs/": "/basic-config-and-security/report-monitor-trigger-events/", + "/docs/5.5/": "/basic-config-and-security/report-monitor-trigger-events/", "/docs/5.4/": "/basic-config-and-security/report-monitor-trigger-events/", "/docs/5.3/": "/basic-config-and-security/report-monitor-trigger-events/", "/docs/5.2/": "/basic-config-and-security/report-monitor-trigger-events/", @@ -7874,6 +8679,7 @@ }, "/report-monitor-trigger-events/instrumentation/": { "/docs/": "/basic-config-and-security/report-monitor-trigger-events/instrumentation/", + "/docs/5.5/": "/basic-config-and-security/report-monitor-trigger-events/instrumentation/", "/docs/5.4/": "/basic-config-and-security/report-monitor-trigger-events/instrumentation/", "/docs/5.3/": "/basic-config-and-security/report-monitor-trigger-events/instrumentation/", "/docs/5.2/": "/basic-config-and-security/report-monitor-trigger-events/instrumentation/", @@ -7884,6 +8690,7 @@ }, "/report-monitor-trigger-events/webhooks/": { "/docs/": "/basic-config-and-security/report-monitor-trigger-events/webhooks/", + "/docs/5.5/": "/basic-config-and-security/report-monitor-trigger-events/webhooks/", "/docs/5.4/": "/basic-config-and-security/report-monitor-trigger-events/webhooks/", "/docs/5.3/": "/basic-config-and-security/report-monitor-trigger-events/webhooks/", "/docs/5.2/": "/basic-config-and-security/report-monitor-trigger-events/webhooks/", @@ -7894,6 +8701,7 @@ }, "/security/": { "/docs/": "/basic-config-and-security/security/", + "/docs/5.5/": "/basic-config-and-security/security/", "/docs/5.4/": "/basic-config-and-security/security/", "/docs/5.3/": "/basic-config-and-security/security/", "/docs/5.2/": "/basic-config-and-security/security/", @@ -7907,6 +8715,7 @@ }, "/security/security-policies/": { "/docs/": "/basic-config-and-security/security/security-policies/", + "/docs/5.5/": "/basic-config-and-security/security/security-policies/", "/docs/5.4/": "/basic-config-and-security/security/security-policies/", "/docs/5.3/": "/basic-config-and-security/security/security-policies/", "/docs/5.2/": "/basic-config-and-security/security/security-policies/", @@ -7923,6 +8732,7 @@ }, "/security/security-policies/partitioned-policies/": { "/docs/": "/basic-config-and-security/security/security-policies/partitioned-policies/", + "/docs/5.5/": "/basic-config-and-security/security/security-policies/partitioned-policies/", "/docs/5.4/": "/basic-config-and-security/security/security-policies/partitioned-policies/", "/docs/5.3/": "/basic-config-and-security/security/security-policies/partitioned-policies/", "/docs/5.2/": "/basic-config-and-security/security/security-policies/partitioned-policies/", @@ -7939,6 +8749,7 @@ }, "/security/security-policies/policies-guide/": { "/docs/": "/basic-config-and-security/security/security-policies/policies-guide/", + "/docs/5.5/": "/basic-config-and-security/security/security-policies/policies-guide/", "/docs/5.4/": "/basic-config-and-security/security/security-policies/policies-guide/", "/docs/5.3/": "/basic-config-and-security/security/security-policies/policies-guide/", "/docs/5.2/": "/basic-config-and-security/security/security-policies/policies-guide/", @@ -7952,6 +8763,7 @@ }, "/security/tls-and-ssl/": { "/docs/": "/basic-config-and-security/security/tls-and-ssl/", + "/docs/5.5/": "/basic-config-and-security/security/tls-and-ssl/", "/docs/5.4/": "/basic-config-and-security/security/tls-and-ssl/", "/docs/5.3/": "/basic-config-and-security/security/tls-and-ssl/", "/docs/5.2/": "/basic-config-and-security/security/tls-and-ssl/", @@ -7968,6 +8780,7 @@ }, "/security/tls-and-ssl/lets-encrypt/": { "/docs/": "/basic-config-and-security/security/tls-and-ssl/", + "/docs/5.5/": "/basic-config-and-security/security/tls-and-ssl/", "/docs/5.4/": "/basic-config-and-security/security/tls-and-ssl/", "/docs/5.3/": "/basic-config-and-security/security/tls-and-ssl/", "/docs/5.2/": "/basic-config-and-security/security/tls-and-ssl/", @@ -7978,6 +8791,7 @@ }, "/security/tls-and-ssl/mutual-tls/": { "/docs/": "/basic-config-and-security/security/mutual-tls/", + "/docs/5.5/": "/basic-config-and-security/security/mutual-tls/", "/docs/5.4/": "/basic-config-and-security/security/mutual-tls/", "/docs/5.3/": "/basic-config-and-security/security/mutual-tls/", "/docs/5.2/": "/basic-config-and-security/security/mutual-tls/", @@ -7994,6 +8808,7 @@ }, "/security/your-apis/": { "/docs/": "/basic-config-and-security/security/authentication--authorization/", + "/docs/5.5/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.4/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.3/": "/basic-config-and-security/security/authentication--authorization/", "/docs/5.2/": "/basic-config-and-security/security/authentication--authorization/", @@ -8004,6 +8819,7 @@ }, "/security/your-apis/bearer-tokens/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/bearer-tokens/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/bearer-tokens/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/bearer-tokens/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/bearer-tokens/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/bearer-tokens/", @@ -8014,6 +8830,7 @@ }, "/security/your-apis/json-web-tokens/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", @@ -8024,6 +8841,7 @@ }, "/security/your-apis/oauth-2-0/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/oauth-2-0/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/oauth-2-0/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/oauth-2-0/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/oauth-2-0/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/oauth-2-0/", @@ -8034,6 +8852,7 @@ }, "/security/your-apis/openid-connect/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/openid-connect/", @@ -8044,6 +8863,7 @@ }, "/transform-traffic/endpoint-designer/": { "/docs/": "/advanced-configuration/transform-traffic/", + "/docs/5.5/": "/advanced-configuration/transform-traffic/", "/docs/5.4/": "/advanced-configuration/transform-traffic/", "/docs/5.3/": "/advanced-configuration/transform-traffic/", "/docs/5.2/": "/advanced-configuration/transform-traffic/endpoint-designer/", @@ -8069,6 +8889,7 @@ }, "/transform-traffic/validate-json/": { "/docs/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", + "/docs/5.5/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.4/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.3/": "/product-stack/tyk-gateway/middleware/validate-request-middleware/", "/docs/5.2/": "/advanced-configuration/transform-traffic/validate-json/", @@ -8079,6 +8900,7 @@ }, "/troubleshooting/": { "/docs/": "/frequently-asked-questions/faq/", + "/docs/5.5/": "/frequently-asked-questions/faq/", "/docs/5.4/": "/frequently-asked-questions/faq/", "/docs/5.3/": "/frequently-asked-questions/faq/", "/docs/5.2/": "/frequently-asked-questions/faq/", @@ -8125,6 +8947,7 @@ }, "/troubleshooting/tyk-dashboard/fatal-dashboard-port.../": { "/docs/": "/troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same/", + "/docs/5.5/": "/troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same/", "/docs/5.4/": "/troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same/", "/docs/5.3/": "/troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same/", "/docs/5.2/": "/troubleshooting/tyk-dashboard/fatal-dashboard-portal-domains-same/", @@ -8144,6 +8967,7 @@ }, "/troubleshooting/tyk-dashboard/not-found-error-deve.../": { "/docs/": "/troubleshooting/tyk-dashboard/not-found-error-developer-portal/", + "/docs/5.5/": "/troubleshooting/tyk-dashboard/not-found-error-developer-portal/", "/docs/5.4/": "/troubleshooting/tyk-dashboard/not-found-error-developer-portal/", "/docs/5.3/": "/troubleshooting/tyk-dashboard/not-found-error-developer-portal/", "/docs/5.2/": "/troubleshooting/tyk-dashboard/not-found-error-developer-portal/", @@ -8247,6 +9071,7 @@ }, "/try-out-tyk/create-api-key/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", @@ -8263,6 +9088,7 @@ }, "/try-out-tyk/tutorials/create-api-key/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", @@ -8279,6 +9105,7 @@ }, "/try-out-tyk/tutorials/create-api/": { "/docs/": "/getting-started/create-api/", + "/docs/5.5/": "/getting-started/create-api/", "/docs/5.4/": "/getting-started/create-api/", "/docs/5.3/": "/getting-started/create-api/", "/docs/5.2/": "/getting-started/create-api/", @@ -8295,6 +9122,7 @@ }, "/try-out-tyk/tutorials/create-portal-entry/": { "/docs/": "/getting-started/tutorials/publish-api/", + "/docs/5.5/": "/getting-started/tutorials/publish-api/", "/docs/5.4/": "/getting-started/tutorials/publish-api/", "/docs/5.3/": "/getting-started/tutorials/publish-api/", "/docs/5.2/": "/getting-started/tutorials/publish-api/", @@ -8305,6 +9133,7 @@ }, "/try-out-tyk/tutorials/create-security-policy/": { "/docs/": "/getting-started/create-security-policy/", + "/docs/5.5/": "/getting-started/create-security-policy/", "/docs/5.4/": "/getting-started/create-security-policy/", "/docs/5.3/": "/getting-started/create-security-policy/", "/docs/5.2/": "/getting-started/create-security-policy/", @@ -8321,6 +9150,7 @@ }, "/try-out-tyk/tutorials/tutorials/": { "/docs/": "/getting-started/installation/", + "/docs/5.5/": "/getting-started/installation/", "/docs/5.4/": "/getting-started/installation/", "/docs/5.3/": "/getting-started/installation/", "/docs/5.2/": "/getting-started/", @@ -8337,6 +9167,7 @@ }, "/tyk-api-gateway-v-2-0/installation-options-setup/install-tyk-pro-edition-on-red-hat/": { "/docs/": "/tyk-on-premises/redhat-rhel-centos/", + "/docs/5.5/": "/tyk-on-premises/redhat-rhel-centos/", "/docs/5.4/": "/tyk-on-premises/redhat-rhel-centos/", "/docs/5.3/": "/tyk-on-premises/redhat-rhel-centos/", "/docs/5.2/": "/tyk-on-premises/redhat-rhel-centos/", @@ -8347,11 +9178,13 @@ }, "/tyk-api-gateway-v-3-0/api-management/events/": { "/docs/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/", + "/docs/5.5/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/", "/docs/5.4/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/", "/docs/nightly/": "/product-stack/tyk-gateway/basic-config-and-security/report-monitor-and-trigger-events/event-webhook-tyk-oas/" }, "/tyk-api-gateway-v1-9/javascript-plugins/middleware-scripting/": { "/docs/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", + "/docs/5.5/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", "/docs/5.4/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", "/docs/5.3/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", "/docs/5.2/": "/plugins/supported-languages/javascript-middleware/middleware-scripting-guide/", @@ -8362,6 +9195,7 @@ }, "/tyk-api-gateway-v1-9/setup/install-tyk-on-ubuntu/": { "/docs/": "/tyk-on-premises/debian-ubuntu/", + "/docs/5.5/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.4/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.3/": "/tyk-on-premises/debian-ubuntu/", "/docs/5.2/": "/tyk-on-premises/debian-ubuntu/", @@ -8372,6 +9206,7 @@ }, "/tyk-api-gateway-v1-9/tutorials/set-up-your-first-api/": { "/docs/": "/getting-started/create-api/", + "/docs/5.5/": "/getting-started/create-api/", "/docs/5.4/": "/getting-started/create-api/", "/docs/5.3/": "/getting-started/create-api/", "/docs/5.2/": "/getting-started/create-api/", @@ -8382,6 +9217,7 @@ }, "/tyk-api-gateway-v1-9/tutorials/set-up-your-portal/": { "/docs/": "/getting-started/tutorials/publish-api/", + "/docs/5.5/": "/getting-started/tutorials/publish-api/", "/docs/5.4/": "/getting-started/tutorials/publish-api/", "/docs/5.3/": "/getting-started/tutorials/publish-api/", "/docs/5.2/": "/getting-started/tutorials/publish-api/", @@ -8401,6 +9237,7 @@ }, "/tyk-apis/tyk-dashboard-admin-api/organisations/": { "/docs/": "/dashboard-admin-api/organisations/", + "/docs/5.5/": "/dashboard-admin-api/organisations/", "/docs/5.4/": "/dashboard-admin-api/organisations/", "/docs/5.3/": "/dashboard-admin-api/organisations/", "/docs/5.2/": "/dashboard-admin-api/organisations/", @@ -8438,6 +9275,7 @@ }, "/tyk-apis/tyk-dashboard-api/data-graphs-api/": { "/docs/": "/tyk-apis/tyk-dashboard-api/data-graphs-api/", + "/docs/5.5/": "/tyk-apis/tyk-dashboard-api/data-graphs-api/", "/docs/5.4/": "/tyk-apis/tyk-dashboard-api/data-graphs-api/", "/docs/5.3/": "/tyk-apis/tyk-dashboard-api/data-graphs-api/", "/docs/5.2/": "/tyk-apis/tyk-dashboard-api/data-graphs-api/", @@ -8453,6 +9291,7 @@ }, "/tyk-apis/tyk-dashboard-api/org/opa/": { "/docs/": "/tyk-dashboard-api/org/opa/", + "/docs/5.5/": "/tyk-dashboard-api/org/opa/", "/docs/5.4/": "/tyk-dashboard-api/org/opa/", "/docs/5.3/": "/tyk-dashboard-api/org/opa/", "/docs/5.2/": "/tyk-dashboard-api/org/opa/", @@ -8469,6 +9308,7 @@ }, "/tyk-apis/tyk-dashboard-api/org/permissions/": { "/docs/": "/tyk-dashboard-api/org/permissions/", + "/docs/5.5/": "/tyk-dashboard-api/org/permissions/", "/docs/5.4/": "/tyk-dashboard-api/org/permissions/", "/docs/5.3/": "/tyk-dashboard-api/org/permissions/", "/docs/5.2/": "/tyk-dashboard-api/org/permissions/", @@ -8497,6 +9337,7 @@ }, "/tyk-apis/tyk-dashboard-api/users/": { "/docs/": "/tyk-dashboard-api/users/", + "/docs/5.5/": "/tyk-dashboard-api/users/", "/docs/5.4/": "/tyk-dashboard-api/users/", "/docs/5.3/": "/tyk-dashboard-api/users/", "/docs/5.2/": "/tyk-dashboard-api/users/", @@ -8516,6 +9357,7 @@ }, "/tyk-apis/tyk-gateway-api/api-definition-objects/": { "/docs/": "/tyk-gateway-api/api-definition-objects/", + "/docs/5.5/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.4/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.3/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.2/": "/tyk-gateway-api/api-definition-objects/", @@ -8550,6 +9392,7 @@ }, "/tyk-apis/tyk-gateway-api/api-definition-objects/jwt/docs/basic-config-and-security/security/authentication-authorization/json-web-tokens/": { "/docs/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", + "/docs/5.5/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", "/docs/5.4/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", "/docs/5.3/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", "/docs/5.2/": "/basic-config-and-security/security/authentication-authorization/json-web-tokens/", @@ -8578,6 +9421,7 @@ }, "/tyk-apis/tyk-gateway-api/api-definition-objects/versioning-endpoint/": { "/docs/": "/getting-started/key-concepts/versioning/", + "/docs/5.5/": "/getting-started/key-concepts/versioning/", "/docs/5.4/": "/tyk-apis/tyk-gateway-api/api-definition-objects/versioning-endpoint/", "/docs/5.3/": "/tyk-apis/tyk-gateway-api/api-definition-objects/versioning-endpoint/", "/docs/5.2/": "/tyk-apis/tyk-gateway-api/api-definition-objects/versioning-endpoint/", @@ -8594,6 +9438,7 @@ }, "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc/": { "/docs/": "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc/", + "/docs/5.5/": "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc/", "/docs/5.4/": "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc/", "/docs/5.3/": "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc/", "/docs/5.2/": "/tyk-apis/tyk-gateway-api/oas/x-tyk-oas-doc/", @@ -8624,6 +9469,7 @@ }, "/tyk-cloud/account-&-billing/plans/": { "/docs/": "/tyk-cloud/account-billing/plans/", + "/docs/5.5/": "/tyk-cloud/account-billing/plans/", "/docs/5.4/": "/tyk-cloud/account-billing/plans/", "/docs/5.3/": "/tyk-cloud/account-billing/plans/", "/docs/5.2/": "/tyk-cloud/account-billing/plans/", @@ -8646,6 +9492,7 @@ "/docs/3.1/": "/tyk-cloud/account--billing/managing-billing-admins/", "/docs/3-lts/": "/tyk-cloud/account--billing/managing-billing-admins/", "/docs/": "/tyk-cloud/account-billing/managing-billing-admins/", + "/docs/5.5/": "/tyk-cloud/account-billing/managing-billing-admins/", "/docs/5.4/": "/tyk-cloud/account-billing/managing-billing-admins/", "/docs/5.3/": "/tyk-cloud/account-billing/managing-billing-admins/", "/docs/5.2/": "/tyk-cloud/account-billing/managing-billing-admins/", @@ -8656,6 +9503,7 @@ }, "/tyk-cloud/account--billing/plans/": { "/docs/": "/tyk-cloud/account-billing/plans/", + "/docs/5.5/": "/tyk-cloud/account-billing/plans/", "/docs/5.4/": "/tyk-cloud/account-billing/plans/", "/docs/5.3/": "/tyk-cloud/account-billing/plans/", "/docs/5.2/": "/tyk-cloud/account-billing/plans/", @@ -8672,6 +9520,7 @@ }, "/tyk-cloud/account--billing/retirement/": { "/docs/": "/tyk-cloud/account-billing/retirement/", + "/docs/5.5/": "/tyk-cloud/account-billing/retirement/", "/docs/5.4/": "/tyk-cloud/account-billing/retirement/", "/docs/5.3/": "/tyk-cloud/account-billing/retirement/", "/docs/5.2/": "/tyk-cloud/account-billing/retirement/", @@ -8694,6 +9543,7 @@ "/docs/3.1/": "/tyk-cloud/account--billing/upgrade-free-trial/", "/docs/3-lts/": "/tyk-cloud/account--billing/upgrade-free-trial/", "/docs/": "/tyk-cloud/account-billing/upgrade-free-trial/", + "/docs/5.5/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.4/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.3/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.2/": "/tyk-cloud/account-billing/upgrade-free-trial/", @@ -8704,6 +9554,7 @@ }, "/tyk-cloud/account-and-billing/add-payment-method/": { "/docs/": "/tyk-cloud/account-billing/add-payment-method/", + "/docs/5.5/": "/tyk-cloud/account-billing/add-payment-method/", "/docs/5.4/": "/tyk-cloud/account-billing/add-payment-method/", "/docs/5.3/": "/tyk-cloud/account-billing/add-payment-method/", "/docs/5.2/": "/tyk-cloud/account-billing/add-payment-method/", @@ -8720,6 +9571,7 @@ }, "/tyk-cloud/account-and-billing/our-plans/": { "/docs/": "/tyk-cloud/account-billing/plans/", + "/docs/5.5/": "/tyk-cloud/account-billing/plans/", "/docs/5.4/": "/tyk-cloud/account-billing/plans/", "/docs/5.3/": "/tyk-cloud/account-billing/plans/", "/docs/5.2/": "/tyk-cloud/account-billing/plans/", @@ -8736,6 +9588,7 @@ }, "/tyk-cloud/account-and-billing/retirement/": { "/docs/": "/tyk-cloud/account-billing/retirement/", + "/docs/5.5/": "/tyk-cloud/account-billing/retirement/", "/docs/5.4/": "/tyk-cloud/account-billing/retirement/", "/docs/5.3/": "/tyk-cloud/account-billing/retirement/", "/docs/5.2/": "/tyk-cloud/account-billing/retirement/", @@ -8752,6 +9605,7 @@ }, "/tyk-cloud/account-and-billing/upgrade-free-trial/": { "/docs/": "/tyk-cloud/account-billing/upgrade-free-trial/", + "/docs/5.5/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.4/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.3/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.2/": "/tyk-cloud/account-billing/upgrade-free-trial/", @@ -8771,6 +9625,7 @@ }, "/tyk-cloud/account-billing/add-payment-method/": { "/docs/": "/tyk-cloud/account-billing/add-payment-method/", + "/docs/5.5/": "/tyk-cloud/account-billing/add-payment-method/", "/docs/5.4/": "/tyk-cloud/account-billing/add-payment-method/", "/docs/5.3/": "/tyk-cloud/account-billing/add-payment-method/", "/docs/5.2/": "/tyk-cloud/account-billing/add-payment-method/", @@ -8781,6 +9636,7 @@ }, "/tyk-cloud/account-billing/managing-billing-admins/": { "/docs/": "/tyk-cloud/account-billing/managing-billing-admins/", + "/docs/5.5/": "/tyk-cloud/account-billing/managing-billing-admins/", "/docs/5.4/": "/tyk-cloud/account-billing/managing-billing-admins/", "/docs/5.3/": "/tyk-cloud/account-billing/managing-billing-admins/", "/docs/5.2/": "/tyk-cloud/account-billing/managing-billing-admins/", @@ -8797,6 +9653,7 @@ }, "/tyk-cloud/account-billing/plans/": { "/docs/": "/tyk-cloud/account-billing/plans/", + "/docs/5.5/": "/tyk-cloud/account-billing/plans/", "/docs/5.4/": "/tyk-cloud/account-billing/plans/", "/docs/5.3/": "/tyk-cloud/account-billing/plans/", "/docs/5.2/": "/tyk-cloud/account-billing/plans/", @@ -8813,6 +9670,7 @@ }, "/tyk-cloud/account-billing/retirement/": { "/docs/": "/tyk-cloud/account-billing/retirement/", + "/docs/5.5/": "/tyk-cloud/account-billing/retirement/", "/docs/5.4/": "/tyk-cloud/account-billing/retirement/", "/docs/5.3/": "/tyk-cloud/account-billing/retirement/", "/docs/5.2/": "/tyk-cloud/account-billing/retirement/", @@ -8829,6 +9687,7 @@ }, "/tyk-cloud/account-billing/upgrade-free-trial/": { "/docs/": "/tyk-cloud/account-billing/upgrade-free-trial/", + "/docs/5.5/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.4/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.3/": "/tyk-cloud/account-billing/upgrade-free-trial/", "/docs/5.2/": "/tyk-cloud/account-billing/upgrade-free-trial/", @@ -8842,6 +9701,7 @@ }, "/tyk-cloud/configuration-options/": { "/docs/": "/tyk-cloud/environments--deployments/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/", "/docs/5.4/": "/tyk-cloud/environments--deployments/", "/docs/5.3/": "/tyk-cloud/environments--deployments/", "/docs/5.2/": "/tyk-cloud/environments--deployments/", @@ -8873,6 +9733,7 @@ }, "/tyk-cloud/create-account/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/create-account/", @@ -8889,6 +9750,7 @@ }, "/tyk-cloud/create-environment/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/setup-environment/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/setup-environment/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/setup-environment/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/setup-environment/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/setup-environment/", @@ -8905,6 +9767,7 @@ }, "/tyk-cloud/environments-&-deployments/": { "/docs/": "/tyk-cloud/environments--deployments/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/", "/docs/5.4/": "/tyk-cloud/environments--deployments/", "/docs/5.3/": "/tyk-cloud/environments--deployments/", "/docs/5.2/": "/tyk-cloud/environments--deployments/", @@ -8921,6 +9784,7 @@ }, "/tyk-cloud/environments-&-deployments/hybrid-gateways/": { "/docs/": "/tyk-cloud/environments-deployments/hybrid-gateways/", + "/docs/5.5/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.4/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.3/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.2/": "/tyk-cloud/environments-deployments/hybrid-gateways/", @@ -8931,6 +9795,7 @@ }, "/tyk-cloud/environments-&-deployments/managing-apis/": { "/docs/": "/tyk-cloud/environments--deployments/managing-apis/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-apis/", @@ -8947,6 +9812,7 @@ }, "/tyk-cloud/environments-&-deployments/managing-control-planes/": { "/docs/": "/tyk-cloud/environments--deployments/managing-control-planes/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-control-planes/", @@ -8963,6 +9829,7 @@ }, "/tyk-cloud/environments-&-deployments/managing-environments/": { "/docs/": "/tyk-cloud/environments--deployments/managing-environments/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-environments/", @@ -8979,6 +9846,7 @@ }, "/tyk-cloud/environments-&-deployments/managing-gateways/": { "/docs/": "/tyk-cloud/environments--deployments/managing-gateways/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-gateways/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-gateways/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-gateways/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-gateways/", @@ -8995,6 +9863,7 @@ }, "/tyk-cloud/environments-&-deployments/managing-organisations/": { "/docs/": "/tyk-cloud/environments--deployments/managing-organisations/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-organisations/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-organisations/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-organisations/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-organisations/", @@ -9011,6 +9880,7 @@ }, "/tyk-cloud/environments-&-deployments/monitoring/": { "/docs/": "/tyk-cloud/environments--deployments/monitoring-usage/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.4/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.3/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.2/": "/tyk-cloud/environments--deployments/monitoring-usage/", @@ -9027,6 +9897,7 @@ }, "/tyk-cloud/environments--deployments/": { "/docs/": "/tyk-cloud/environments--deployments/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/", "/docs/5.4/": "/tyk-cloud/environments--deployments/", "/docs/5.3/": "/tyk-cloud/environments--deployments/", "/docs/5.2/": "/tyk-cloud/environments--deployments/", @@ -9034,15 +9905,16 @@ "/docs/5.0/": "/tyk-cloud/environments--deployments/", "/docs/4.3/": "/tyk-cloud/environments--deployments/", "/docs/nightly/": "/tyk-cloud/environments--deployments/", - "/docs/4.2/": "/tyk-cloud/environments-&-deployments/", - "/docs/4.1/": "/tyk-cloud/environments-&-deployments/", - "/docs/4.0/": "/tyk-cloud/environments-&-deployments/", - "/docs/3.2/": "/tyk-cloud/environments-&-deployments/", - "/docs/3.1/": "/tyk-cloud/environments-&-deployments/", - "/docs/3-lts/": "/tyk-cloud/environments-&-deployments/" + "/docs/4.2/": "/tyk-cloud/configuration-options/", + "/docs/4.1/": "/tyk-cloud/configuration-options/", + "/docs/4.0/": "/tyk-cloud/configuration-options/", + "/docs/3.2/": "/tyk-cloud/configuration-options/", + "/docs/3.1/": "/tyk-cloud/configuration-options/", + "/docs/3-lts/": "/tyk-cloud/configuration-options/" }, "/tyk-cloud/environments--deployments/hybrid-gateways/": { "/docs/": "/tyk-cloud/environments-deployments/hybrid-gateways/", + "/docs/5.5/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.4/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.3/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.2/": "/tyk-cloud/environments-deployments/hybrid-gateways/", @@ -9059,6 +9931,7 @@ }, "/tyk-cloud/environments--deployments/managing-apis/": { "/docs/": "/tyk-cloud/environments--deployments/managing-apis/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-apis/", @@ -9075,6 +9948,7 @@ }, "/tyk-cloud/environments--deployments/managing-control-planes/": { "/docs/": "/tyk-cloud/environments--deployments/managing-control-planes/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-control-planes/", @@ -9091,6 +9965,7 @@ }, "/tyk-cloud/environments--deployments/managing-environments/": { "/docs/": "/tyk-cloud/environments--deployments/managing-environments/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-environments/", @@ -9107,6 +9982,7 @@ }, "/tyk-cloud/environments--deployments/managing-gateways/": { "/docs/": "/tyk-cloud/environments--deployments/managing-gateways/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-gateways/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-gateways/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-gateways/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-gateways/", @@ -9123,6 +9999,7 @@ }, "/tyk-cloud/environments--deployments/managing-organisations/": { "/docs/": "/tyk-cloud/environments--deployments/managing-organisations/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-organisations/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-organisations/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-organisations/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-organisations/", @@ -9139,6 +10016,7 @@ }, "/tyk-cloud/environments--deployments/monitoring-how-it-works/": { "/docs/": "/tyk-cloud/environments--deployments/monitoring-how-it-works/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/monitoring-how-it-works/", "/docs/5.4/": "/tyk-cloud/environments--deployments/monitoring-how-it-works/", "/docs/5.3/": "/tyk-cloud/environments--deployments/monitoring-how-it-works/", "/docs/5.2/": "/tyk-cloud/environments--deployments/monitoring-how-it-works/", @@ -9148,6 +10026,7 @@ }, "/tyk-cloud/environments--deployments/monitoring-usage/": { "/docs/": "/tyk-cloud/environments--deployments/monitoring-usage/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.4/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.3/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.2/": "/tyk-cloud/environments--deployments/monitoring-usage/", @@ -9172,6 +10051,7 @@ }, "/tyk-cloud/environments-deployments/hybrid-gateways-helm/": { "/docs/": "/tyk-cloud/environments-deployments/hybrid-gateways-helm/", + "/docs/5.5/": "/tyk-cloud/environments-deployments/hybrid-gateways-helm/", "/docs/5.4/": "/tyk-cloud/environments-deployments/hybrid-gateways-helm/", "/docs/5.3/": "/tyk-cloud/environments-deployments/hybrid-gateways-helm/", "/docs/5.2/": "/tyk-cloud/environments-deployments/hybrid-gateways-helm/", @@ -9181,6 +10061,7 @@ }, "/tyk-cloud/environments-deployments/hybrid-gateways/": { "/docs/": "/tyk-cloud/environments-deployments/hybrid-gateways/", + "/docs/5.5/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.4/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.3/": "/tyk-cloud/environments-deployments/hybrid-gateways/", "/docs/5.2/": "/tyk-cloud/environments-deployments/hybrid-gateways/", @@ -9197,6 +10078,7 @@ }, "/tyk-cloud/environments-deployments/managing-apis/": { "/docs/": "/tyk-cloud/environments--deployments/managing-apis/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-apis/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-apis/", @@ -9207,6 +10089,7 @@ }, "/tyk-cloud/environments-deployments/managing-control-planes/": { "/docs/": "/tyk-cloud/environments--deployments/managing-control-planes/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-control-planes/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-control-planes/", @@ -9217,6 +10100,7 @@ }, "/tyk-cloud/environments-deployments/managing-environments/": { "/docs/": "/tyk-cloud/environments--deployments/managing-environments/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.4/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.3/": "/tyk-cloud/environments--deployments/managing-environments/", "/docs/5.2/": "/tyk-cloud/environments--deployments/managing-environments/", @@ -9231,6 +10115,7 @@ }, "/tyk-cloud/environments-deployments/monitoring/": { "/docs/": "/tyk-cloud/environments--deployments/monitoring-usage/", + "/docs/5.5/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.4/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.3/": "/tyk-cloud/environments--deployments/monitoring-usage/", "/docs/5.2/": "/tyk-cloud/environments--deployments/monitoring-usage/", @@ -9244,6 +10129,7 @@ }, "/tyk-cloud/first-api/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/first-api/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/first-api/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/first-api/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/first-api/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/first-api/", @@ -9287,6 +10173,7 @@ }, "/tyk-cloud/glossary/": { "/docs/": "/tyk-cloud/troubleshooting--support/glossary/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/glossary/", @@ -9306,6 +10193,7 @@ }, "/tyk-cloud/reference-docs/user-roles/": { "/docs/": "/tyk-cloud/teams--users/user-roles/", + "/docs/5.5/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.4/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.3/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.2/": "/tyk-cloud/teams--users/user-roles/", @@ -9325,6 +10213,7 @@ }, "/tyk-cloud/setup-org/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/setup-org/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/setup-org/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/setup-org/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/setup-org/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/setup-org/", @@ -9341,6 +10230,7 @@ }, "/tyk-cloud/setup-team/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/setup-team/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/setup-team/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/setup-team/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/setup-team/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/setup-team/", @@ -9357,6 +10247,7 @@ }, "/tyk-cloud/teams-&-users/": { "/docs/": "/tyk-cloud/teams--users/", + "/docs/5.5/": "/tyk-cloud/teams--users/", "/docs/5.4/": "/tyk-cloud/teams--users/", "/docs/5.3/": "/tyk-cloud/teams--users/", "/docs/5.2/": "/tyk-cloud/teams--users/", @@ -9373,6 +10264,7 @@ }, "/tyk-cloud/teams-&-users/managing-teams/": { "/docs/": "/tyk-cloud/teams--users/managing-teams/", + "/docs/5.5/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.4/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.3/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.2/": "/tyk-cloud/teams--users/managing-teams/", @@ -9389,6 +10281,7 @@ }, "/tyk-cloud/teams-&-users/managing-users/": { "/docs/": "/tyk-cloud/teams--users/managing-users/", + "/docs/5.5/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.4/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.3/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.2/": "/tyk-cloud/teams--users/managing-users/", @@ -9405,6 +10298,7 @@ }, "/tyk-cloud/teams-&-users/user-roles/": { "/docs/": "/tyk-cloud/teams--users/user-roles/", + "/docs/5.5/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.4/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.3/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.2/": "/tyk-cloud/teams--users/user-roles/", @@ -9421,6 +10315,7 @@ }, "/tyk-cloud/teams--users/": { "/docs/": "/tyk-cloud/teams--users/", + "/docs/5.5/": "/tyk-cloud/teams--users/", "/docs/5.4/": "/tyk-cloud/teams--users/", "/docs/5.3/": "/tyk-cloud/teams--users/", "/docs/5.2/": "/tyk-cloud/teams--users/", @@ -9437,6 +10332,7 @@ }, "/tyk-cloud/teams--users/managing-teams/": { "/docs/": "/tyk-cloud/teams--users/managing-teams/", + "/docs/5.5/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.4/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.3/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.2/": "/tyk-cloud/teams--users/managing-teams/", @@ -9453,6 +10349,7 @@ }, "/tyk-cloud/teams--users/managing-users/": { "/docs/": "/tyk-cloud/teams--users/managing-users/", + "/docs/5.5/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.4/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.3/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.2/": "/tyk-cloud/teams--users/managing-users/", @@ -9469,6 +10366,7 @@ }, "/tyk-cloud/teams--users/single-sign-on/": { "/docs/": "/tyk-cloud/teams--users/single-sign-on/", + "/docs/5.5/": "/tyk-cloud/teams--users/single-sign-on/", "/docs/5.4/": "/tyk-cloud/teams--users/single-sign-on/", "/docs/5.3/": "/tyk-cloud/teams--users/single-sign-on/", "/docs/5.2/": "/tyk-cloud/teams--users/single-sign-on/", @@ -9477,6 +10375,7 @@ }, "/tyk-cloud/teams--users/user-roles/": { "/docs/": "/tyk-cloud/teams--users/user-roles/", + "/docs/5.5/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.4/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.3/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.2/": "/tyk-cloud/teams--users/user-roles/", @@ -9493,6 +10392,7 @@ }, "/tyk-cloud/teams-users/": { "/docs/": "/tyk-cloud/teams--users/", + "/docs/5.5/": "/tyk-cloud/teams--users/", "/docs/5.4/": "/tyk-cloud/teams--users/", "/docs/5.3/": "/tyk-cloud/teams--users/", "/docs/5.2/": "/tyk-cloud/teams--users/", @@ -9505,6 +10405,7 @@ }, "/tyk-cloud/teams-users/managing-teams/": { "/docs/": "/tyk-cloud/teams--users/managing-teams/", + "/docs/5.5/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.4/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.3/": "/tyk-cloud/teams--users/managing-teams/", "/docs/5.2/": "/tyk-cloud/teams--users/managing-teams/", @@ -9515,6 +10416,7 @@ }, "/tyk-cloud/teams-users/managing-users/": { "/docs/": "/tyk-cloud/teams--users/managing-users/", + "/docs/5.5/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.4/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.3/": "/tyk-cloud/teams--users/managing-users/", "/docs/5.2/": "/tyk-cloud/teams--users/managing-users/", @@ -9528,6 +10430,7 @@ }, "/tyk-cloud/teams-users/user-roles/": { "/docs/": "/tyk-cloud/teams--users/user-roles/", + "/docs/5.5/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.4/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.3/": "/tyk-cloud/teams--users/user-roles/", "/docs/5.2/": "/tyk-cloud/teams--users/user-roles/", @@ -9538,6 +10441,7 @@ }, "/tyk-cloud/test-api/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/test-api/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/test-api/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/test-api/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/test-api/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/test-api/", @@ -9554,6 +10458,7 @@ }, "/tyk-cloud/troubleshooting-&-support/": { "/docs/": "/tyk-cloud/troubleshooting--support/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/", @@ -9570,6 +10475,7 @@ }, "/tyk-cloud/troubleshooting-&-support/faqs/": { "/docs/": "/tyk-cloud/troubleshooting--support/faqs/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/faqs/", @@ -9586,6 +10492,7 @@ }, "/tyk-cloud/troubleshooting-&-support/glossary/": { "/docs/": "/tyk-cloud/troubleshooting--support/glossary/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/glossary/", @@ -9602,6 +10509,7 @@ }, "/tyk-cloud/troubleshooting--support/": { "/docs/": "/tyk-cloud/troubleshooting--support/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/", @@ -9618,6 +10526,7 @@ }, "/tyk-cloud/troubleshooting--support/faqs/": { "/docs/": "/tyk-cloud/troubleshooting--support/faqs/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/faqs/", @@ -9634,6 +10543,7 @@ }, "/tyk-cloud/troubleshooting--support/glossary/": { "/docs/": "/tyk-cloud/troubleshooting--support/glossary/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/glossary/", @@ -9650,6 +10560,7 @@ }, "/tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions/": { "/docs/": "/tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/tyk-cloud-mdcb-supported-versions/", @@ -9658,6 +10569,7 @@ }, "/tyk-cloud/troubleshooting-support/": { "/docs/": "/tyk-cloud/troubleshooting--support/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/", @@ -9668,6 +10580,7 @@ }, "/tyk-cloud/troubleshooting-support/faqs/": { "/docs/": "/tyk-cloud/troubleshooting--support/faqs/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/faqs/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/faqs/", @@ -9678,6 +10591,7 @@ }, "/tyk-cloud/troubleshooting-support/glossary/": { "/docs/": "/tyk-cloud/troubleshooting--support/glossary/", + "/docs/5.5/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.4/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.3/": "/tyk-cloud/troubleshooting--support/glossary/", "/docs/5.2/": "/tyk-cloud/troubleshooting--support/glossary/", @@ -9694,6 +10608,7 @@ }, "/tyk-cloud/view-analytics/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/view-analytics/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/view-analytics/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/view-analytics/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/view-analytics/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/view-analytics/", @@ -9713,6 +10628,7 @@ }, "/tyk-cloud/what-we-covered/": { "/docs/": "/tyk-cloud/getting-started-tyk-cloud/to-conclude/", + "/docs/5.5/": "/tyk-cloud/getting-started-tyk-cloud/to-conclude/", "/docs/5.4/": "/tyk-cloud/getting-started-tyk-cloud/to-conclude/", "/docs/5.3/": "/tyk-cloud/getting-started-tyk-cloud/to-conclude/", "/docs/5.2/": "/tyk-cloud/getting-started-tyk-cloud/to-conclude/", @@ -9729,6 +10645,7 @@ }, "/tyk-configuration-reference/": { "/docs/": "/tyk-oss-gateway/configuration/", + "/docs/5.5/": "/tyk-oss-gateway/configuration/", "/docs/5.4/": "/tyk-oss-gateway/configuration/", "/docs/5.3/": "/tyk-oss-gateway/configuration/", "/docs/5.2/": "/tyk-oss-gateway/configuration/", @@ -9745,6 +10662,7 @@ }, "/tyk-configuration-reference/environment-variables/": { "/docs/": "/tyk-environment-variables/", + "/docs/5.5/": "/tyk-environment-variables/", "/docs/5.4/": "/tyk-environment-variables/", "/docs/5.3/": "/tyk-environment-variables/", "/docs/5.2/": "/tyk-environment-variables/", @@ -9764,6 +10682,7 @@ }, "/tyk-configuration-reference/import-apis/": { "/docs/": "/getting-started/import-apis/", + "/docs/5.5/": "/getting-started/import-apis/", "/docs/5.4/": "/getting-started/import-apis/", "/docs/5.3/": "/getting-started/import-apis/", "/docs/5.2/": "/getting-started/import-apis/", @@ -9783,6 +10702,7 @@ }, "/tyk-configuration-reference/mdcb-configuration-options/": { "/docs/": "/tyk-multi-data-centre/", + "/docs/5.5/": "/tyk-multi-data-centre/", "/docs/5.4/": "/tyk-multi-data-centre/", "/docs/5.3/": "/tyk-multi-data-centre/", "/docs/5.2/": "/tyk-multi-data-centre/", @@ -9799,6 +10719,7 @@ }, "/tyk-configuration-reference/outbound-email-configuration/": { "/docs/": "/configure/outbound-email-configuration/", + "/docs/5.5/": "/configure/outbound-email-configuration/", "/docs/5.4/": "/configure/outbound-email-configuration/", "/docs/5.3/": "/configure/outbound-email-configuration/", "/docs/5.2/": "/configure/outbound-email-configuration/", @@ -9815,6 +10736,7 @@ }, "/tyk-configuration-reference/redis-cluster-sentinel/": { "/docs/": "/tyk-stack/tyk-gateway/configuration/redis-cluster/", + "/docs/5.5/": "/tyk-stack/tyk-gateway/configuration/redis-cluster/", "/docs/5.4/": "/tyk-stack/tyk-gateway/configuration/redis-cluster/", "/docs/5.3/": "/tyk-stack/tyk-gateway/configuration/redis-cluster/", "/docs/5.2/": "/tyk-stack/tyk-gateway/configuration/redis-cluster/", @@ -9836,6 +10758,7 @@ }, "/tyk-configuration-reference/tyk-dashboard-configuration-options/": { "/docs/": "/tyk-dashboard/configuration/", + "/docs/5.5/": "/tyk-dashboard/configuration/", "/docs/5.4/": "/tyk-dashboard/configuration/", "/docs/5.3/": "/tyk-dashboard/configuration/", "/docs/5.2/": "/tyk-dashboard/configuration/", @@ -9852,6 +10775,7 @@ }, "/tyk-configuration-reference/tyk-gateway-configuration-options/": { "/docs/": "/tyk-oss-gateway/configuration/", + "/docs/5.5/": "/tyk-oss-gateway/configuration/", "/docs/5.4/": "/tyk-oss-gateway/configuration/", "/docs/5.3/": "/tyk-oss-gateway/configuration/", "/docs/5.2/": "/tyk-oss-gateway/configuration/", @@ -9868,6 +10792,7 @@ }, "/tyk-configuration-reference/tyk-gateway-configuration-options/securing-system-payloads/": { "/docs/": "/tyk-configuration-reference/securing-system-payloads/", + "/docs/5.5/": "/tyk-configuration-reference/securing-system-payloads/", "/docs/5.4/": "/tyk-configuration-reference/securing-system-payloads/", "/docs/5.3/": "/tyk-configuration-reference/securing-system-payloads/", "/docs/5.2/": "/tyk-configuration-reference/securing-system-payloads/", @@ -9887,6 +10812,7 @@ }, "/tyk-configuration-reference/tyk-pump-configuration/": { "/docs/": "/tyk-pump/configuration/", + "/docs/5.5/": "/tyk-pump/configuration/", "/docs/5.4/": "/tyk-pump/configuration/", "/docs/5.3/": "/tyk-pump/configuration/", "/docs/5.2/": "/tyk-pump/configuration/", @@ -9906,6 +10832,7 @@ }, "/tyk-configuration-reference/tyk-pump-configuration/graphpump/": { "/docs/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", + "/docs/5.5/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.4/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.3/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.2/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", @@ -9922,6 +10849,7 @@ }, "/tyk-configuration-reference/tyk-pump-configuration/tyk-pump-configuration/": { "/docs/": "/tyk-pump/", + "/docs/5.5/": "/tyk-pump/", "/docs/5.4/": "/tyk-pump/", "/docs/5.3/": "/tyk-pump/", "/docs/5.2/": "/tyk-pump/", @@ -9938,6 +10866,7 @@ }, "/tyk-configuration-reference/tyk-pump-dashboard-config/": { "/docs/": "/tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config/", + "/docs/5.5/": "/tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config/", "/docs/5.4/": "/tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config/", "/docs/5.3/": "/tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config/", "/docs/5.2/": "/tyk-pump/tyk-pump-configuration/tyk-pump-dashboard-config/", @@ -9954,6 +10883,7 @@ }, "/tyk-configuration-reference/tyk-pump-environment-variables/": { "/docs/": "/tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables/", + "/docs/5.5/": "/tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables/", "/docs/5.4/": "/tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables/", "/docs/5.3/": "/tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables/", "/docs/5.2/": "/tyk-pump/tyk-pump-configuration/tyk-pump-environment-variables/", @@ -9991,6 +10921,7 @@ }, "/tyk-dashboard-api/api-tokens/": { "/docs/": "/tyk-apis/tyk-dashboard-api/api-keys/", + "/docs/5.5/": "/tyk-apis/tyk-dashboard-api/api-keys/", "/docs/5.4/": "/tyk-apis/tyk-dashboard-api/api-keys/", "/docs/5.3/": "/tyk-apis/tyk-dashboard-api/api-keys/", "/docs/5.2/": "/tyk-apis/tyk-dashboard-api/api-keys/", @@ -10007,6 +10938,7 @@ }, "/tyk-dashboard-api/portal-developers/": { "/docs/": "/tyk-apis/tyk-portal-api/portal-developers/", + "/docs/5.5/": "/tyk-apis/tyk-portal-api/portal-developers/", "/docs/5.4/": "/tyk-apis/tyk-portal-api/portal-developers/", "/docs/5.3/": "/tyk-apis/tyk-portal-api/portal-developers/", "/docs/5.2/": "/tyk-apis/tyk-portal-api/portal-developers/", @@ -10020,6 +10952,7 @@ }, "/tyk-dashboard-oas-api/": { "/docs/": "/tyk-dashboard-api/", + "/docs/5.5/": "/tyk-dashboard-api/", "/docs/5.4/": "/tyk-dashboard-api/", "/docs/5.3/": "/tyk-dashboard-api/", "/docs/5.2/": "/tyk-dashboard-api/", @@ -10033,6 +10966,7 @@ }, "/tyk-dashboard-v1-0/api-management/": { "/docs/": "/tyk-gateway-api/api-definition-objects/", + "/docs/5.5/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.4/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.3/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.2/": "/tyk-gateway-api/api-definition-objects/", @@ -10043,6 +10977,7 @@ }, "/tyk-dashboard-v1-0/configuration/": { "/docs/": "/tyk-dashboard/configuration/", + "/docs/5.5/": "/tyk-dashboard/configuration/", "/docs/5.4/": "/tyk-dashboard/configuration/", "/docs/5.3/": "/tyk-dashboard/configuration/", "/docs/5.2/": "/tyk-dashboard/configuration/", @@ -10053,6 +10988,7 @@ }, "/tyk-dashboard-v1-0/dashboard-api/api-definitions/": { "/docs/": "/tyk-dashboard-api/", + "/docs/5.5/": "/tyk-dashboard-api/", "/docs/5.4/": "/tyk-dashboard-api/", "/docs/5.3/": "/tyk-dashboard-api/", "/docs/5.2/": "/tyk-dashboard-api/", @@ -10063,6 +10999,7 @@ }, "/tyk-dashboard-v1-0/tutorials/set-up-your-portal/": { "/docs/": "/getting-started/tutorials/publish-api/", + "/docs/5.5/": "/getting-started/tutorials/publish-api/", "/docs/5.4/": "/getting-started/tutorials/publish-api/", "/docs/5.3/": "/getting-started/tutorials/publish-api/", "/docs/5.2/": "/getting-started/tutorials/publish-api/", @@ -10079,6 +11016,7 @@ }, "/tyk-dashboard-v1-0/tyk-dashboard-configuration/": { "/docs/": "/tyk-dashboard/configuration/", + "/docs/5.5/": "/tyk-dashboard/configuration/", "/docs/5.4/": "/tyk-dashboard/configuration/", "/docs/5.3/": "/tyk-dashboard/configuration/", "/docs/5.2/": "/tyk-dashboard/configuration/", @@ -10095,6 +11033,7 @@ }, "/tyk-dashboard/database-options/": { "/docs/": "/tyk-dashboard/database-options/", + "/docs/5.5/": "/tyk-dashboard/database-options/", "/docs/5.4/": "/tyk-dashboard/database-options/", "/docs/5.3/": "/tyk-dashboard/database-options/", "/docs/5.2/": "/tyk-dashboard/database-options/", @@ -10123,6 +11062,7 @@ }, "/tyk-developer-portal/curity-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", @@ -10142,6 +11082,7 @@ }, "/tyk-developer-portal/customise/changing-the-navigation/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", @@ -10158,6 +11099,7 @@ }, "/tyk-developer-portal/customise/custom-developer-po.../": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", @@ -10168,6 +11110,7 @@ }, "/tyk-developer-portal/customise/custom-developer-portal/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", @@ -10184,6 +11127,7 @@ }, "/tyk-developer-portal/customise/customise-documentation/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", @@ -10200,6 +11144,7 @@ }, "/tyk-developer-portal/customise/customise-with-temp.../": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", @@ -10210,6 +11155,7 @@ }, "/tyk-developer-portal/customise/customise-with-templates/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", @@ -10226,6 +11172,7 @@ }, "/tyk-developer-portal/customise/customising-using-dashboard/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", @@ -10245,6 +11192,7 @@ }, "/tyk-developer-portal/customise/customize-with-jquery/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", @@ -10261,6 +11209,7 @@ }, "/tyk-developer-portal/customise/developer-meta-data/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", @@ -10277,6 +11226,7 @@ }, "/tyk-developer-portal/developer-profiles/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", @@ -10293,6 +11243,7 @@ }, "/tyk-developer-portal/dynamic-client-registration/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", @@ -10306,6 +11257,7 @@ }, "/tyk-developer-portal/gluu-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", @@ -10322,6 +11274,7 @@ }, "/tyk-developer-portal/graphql/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/graphql/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/graphql/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/graphql/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/graphql/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/graphql/", @@ -10338,6 +11291,7 @@ }, "/tyk-developer-portal/key-requests/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", @@ -10354,6 +11308,7 @@ }, "/tyk-developer-portal/keycloak-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", @@ -10370,6 +11325,7 @@ }, "/tyk-developer-portal/monetise/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/monetise/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/monetise/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/monetise/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/monetise/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/monetise/", @@ -10386,6 +11342,7 @@ }, "/tyk-developer-portal/okta-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", @@ -10402,6 +11359,7 @@ }, "/tyk-developer-portal/portal-concepts/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", @@ -10418,6 +11376,7 @@ }, "/tyk-developer-portal/portal-events-notifications/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", @@ -10434,6 +11393,7 @@ }, "/tyk-developer-portal/portal-oauth-clients/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", @@ -10450,6 +11410,7 @@ }, "/tyk-developer-portal/tutorials/": { "/docs/": "/getting-started/tutorials/publish-api/", + "/docs/5.5/": "/getting-started/tutorials/publish-api/", "/docs/5.4/": "/getting-started/tutorials/publish-api/", "/docs/5.3/": "/getting-started/tutorials/publish-api/", "/docs/5.2/": "/getting-started/tutorials/publish-api/", @@ -10466,6 +11427,7 @@ }, "/tyk-developer-portal/tyk-enterprise-developer-portal/": { "/docs/": "/tyk-developer-portal/tyk-enterprise-developer-portal/", + "/docs/5.5/": "/tyk-developer-portal/tyk-enterprise-developer-portal/", "/docs/5.4/": "/tyk-developer-portal/tyk-enterprise-developer-portal/", "/docs/5.3/": "/tyk-developer-portal/tyk-enterprise-developer-portal/", "/docs/5.2/": "/tyk-developer-portal/tyk-enterprise-developer-portal/", @@ -10479,6 +11441,7 @@ }, "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/": { "/docs/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/", + "/docs/5.5/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/", "/docs/5.4/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/", "/docs/5.3/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/", "/docs/5.2/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/", @@ -10492,6 +11455,7 @@ }, "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product/": { "/docs/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product/", + "/docs/5.5/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product/", "/docs/5.4/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product/", "/docs/5.3/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product/", "/docs/5.2/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/access-api-product/", @@ -10505,6 +11469,7 @@ }, "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal/": { "/docs/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal/", + "/docs/5.5/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal/", "/docs/5.4/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal/", "/docs/5.3/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal/", "/docs/5.2/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/register-portal/", @@ -10518,6 +11483,7 @@ }, "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password/": { "/docs/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password/", + "/docs/5.5/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password/", "/docs/5.4/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password/", "/docs/5.3/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password/", "/docs/5.2/": "/tyk-developer-portal/tyk-enterprise-developer-portal/api-consumer-portal/reset-password/", @@ -10531,6 +11497,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/", @@ -10544,6 +11511,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/curity-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/curity-dcr/", @@ -10560,6 +11528,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/": { "/docs/": "/tyk-developer-portal/customise/", + "/docs/5.5/": "/tyk-developer-portal/customise/", "/docs/5.4/": "/tyk-developer-portal/customise/", "/docs/5.3/": "/tyk-developer-portal/customise/", "/docs/5.2/": "/tyk-developer-portal/customise/", @@ -10573,6 +11542,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/changing-the-navigation/", @@ -10589,6 +11559,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/custom-developer-portal/", @@ -10605,6 +11576,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/customise-documentation/", @@ -10621,6 +11593,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/customising-using-dashboard/", @@ -10637,6 +11610,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/customize-with-jquery/", @@ -10653,6 +11627,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/customise/developer-meta-data/", @@ -10669,6 +11644,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/developer-profiles/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/developer-profiles/", @@ -10685,6 +11661,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", @@ -10701,6 +11678,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/gluu-dcr/", @@ -10717,6 +11695,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/graphql/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/graphql/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/graphql/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/graphql/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/graphql/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/graphql/", @@ -10733,6 +11712,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/key-requests/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/key-requests/", @@ -10746,6 +11726,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/keycloak-dcr/", @@ -10762,6 +11743,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/monetise/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/monetise/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/monetise/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/monetise/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/monetise/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/monetise/", @@ -10778,6 +11760,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/okta-dcr/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/okta-dcr/", @@ -10794,6 +11777,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/portal-concepts/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-concepts/", @@ -10810,6 +11794,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-events-notifications/", @@ -10826,6 +11811,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", @@ -10842,6 +11828,7 @@ }, "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", @@ -10867,6 +11854,7 @@ }, "/tyk-gateway-oas-api/": { "/docs/": "/tyk-gateway-api/", + "/docs/5.5/": "/tyk-gateway-api/", "/docs/5.4/": "/tyk-gateway-api/", "/docs/5.3/": "/tyk-gateway-api/", "/docs/5.2/": "/tyk-gateway-api/", @@ -10889,6 +11877,7 @@ }, "/tyk-mdcb-api/": { "/docs/": "/tyk-mdcb-api/", + "/docs/5.5/": "/tyk-mdcb-api/", "/docs/5.4/": "/tyk-mdcb-api/", "/docs/nightly/": "/tyk-mdcb-api/" }, @@ -10897,6 +11886,7 @@ }, "/tyk-multi-data-centre/mdcb-components/": { "/docs/": "/tyk-multi-data-centre/mdcb-components/", + "/docs/5.5/": "/tyk-multi-data-centre/mdcb-components/", "/docs/5.4/": "/tyk-multi-data-centre/mdcb-components/", "/docs/5.3/": "/tyk-multi-data-centre/mdcb-components/", "/docs/5.2/": "/tyk-multi-data-centre/mdcb-components/", @@ -10910,6 +11900,7 @@ }, "/tyk-multi-data-centre/mdcb-example-minimising-latency/": { "/docs/": "/tyk-multi-data-centre/mdcb-example-minimising-latency/", + "/docs/5.5/": "/tyk-multi-data-centre/mdcb-example-minimising-latency/", "/docs/5.4/": "/tyk-multi-data-centre/mdcb-example-minimising-latency/", "/docs/5.3/": "/tyk-multi-data-centre/mdcb-example-minimising-latency/", "/docs/5.2/": "/tyk-multi-data-centre/mdcb-example-minimising-latency/", @@ -10920,6 +11911,7 @@ }, "/tyk-multi-data-centre/setup-controller-data-centre/": { "/docs/": "/tyk-multi-data-centre/setup-controller-data-centre/", + "/docs/5.5/": "/tyk-multi-data-centre/setup-controller-data-centre/", "/docs/5.4/": "/tyk-multi-data-centre/setup-controller-data-centre/", "/docs/5.3/": "/tyk-multi-data-centre/setup-controller-data-centre/", "/docs/5.2/": "/tyk-multi-data-centre/setup-controller-data-centre/", @@ -10936,6 +11928,7 @@ }, "/tyk-multi-data-centre/setup-master-data-centre/": { "/docs/": "/tyk-multi-data-centre/setup-controller-data-centre/", + "/docs/5.5/": "/tyk-multi-data-centre/setup-controller-data-centre/", "/docs/5.4/": "/tyk-multi-data-centre/setup-controller-data-centre/", "/docs/5.3/": "/tyk-multi-data-centre/setup-controller-data-centre/", "/docs/5.2/": "/tyk-multi-data-centre/setup-controller-data-centre/", @@ -10951,6 +11944,7 @@ }, "/tyk-multi-data-centre/setup-slave-data-centres/": { "/docs/": "/tyk-multi-data-centre/setup-worker-data-centres/", + "/docs/5.5/": "/tyk-multi-data-centre/setup-worker-data-centres/", "/docs/5.4/": "/tyk-multi-data-centre/setup-worker-data-centres/", "/docs/5.3/": "/tyk-multi-data-centre/setup-worker-data-centres/", "/docs/5.2/": "/tyk-multi-data-centre/setup-worker-data-centres/", @@ -10966,6 +11960,7 @@ }, "/tyk-multi-data-centre/setup-worker-data-centres/": { "/docs/": "/tyk-multi-data-centre/setup-worker-data-centres/", + "/docs/5.5/": "/tyk-multi-data-centre/setup-worker-data-centres/", "/docs/5.4/": "/tyk-multi-data-centre/setup-worker-data-centres/", "/docs/5.3/": "/tyk-multi-data-centre/setup-worker-data-centres/", "/docs/5.2/": "/tyk-multi-data-centre/setup-worker-data-centres/", @@ -10982,6 +11977,7 @@ }, "/tyk-oas/": { "/docs/": "/tyk-apis/", + "/docs/5.5/": "/tyk-apis/", "/docs/5.4/": "/tyk-apis/", "/docs/5.3/": "/tyk-apis/", "/docs/5.2/": "/tyk-apis/", @@ -11021,6 +12017,7 @@ }, "/tyk-on-premises/aws/": { "/docs/": "/tyk-on-premises/installation/on-aws/", + "/docs/5.5/": "/tyk-on-premises/installation/on-aws/", "/docs/5.4/": "/tyk-on-premises/installation/on-aws/", "/docs/5.3/": "/tyk-on-premises/installation/on-aws/", "/docs/5.2/": "/tyk-on-premises/installation/on-aws/", @@ -11055,6 +12052,7 @@ }, "/tyk-on-premises/docker/docker-pro-demo/": { "/docs/": "/tyk-on-premises/docker/docker-pro-demo/", + "/docs/5.5/": "/tyk-on-premises/docker/docker-pro-demo/", "/docs/5.4/": "/tyk-on-premises/docker/docker-pro-demo/", "/docs/5.3/": "/tyk-on-premises/docker/docker-pro-demo/", "/docs/5.2/": "/tyk-on-premises/docker/docker-pro-demo/", @@ -11074,6 +12072,7 @@ }, "/tyk-on-premises/getting-started/": { "/docs/": "/tyk-on-premises/", + "/docs/5.5/": "/tyk-on-premises/", "/docs/5.4/": "/tyk-on-premises/", "/docs/5.3/": "/tyk-on-premises/", "/docs/5.2/": "/tyk-on-premises/", @@ -11090,6 +12089,7 @@ }, "/tyk-on-premises/google-cloud/": { "/docs/": "/tyk-on-premises/google-cloud/", + "/docs/5.5/": "/tyk-on-premises/google-cloud/", "/docs/5.4/": "/tyk-on-premises/google-cloud/", "/docs/5.3/": "/tyk-on-premises/google-cloud/", "/docs/5.2/": "/tyk-on-premises/google-cloud/", @@ -11098,6 +12098,7 @@ }, "/tyk-on-premises/heroku/": { "/docs/": "/tyk-on-premises/installation/on-heroku/", + "/docs/5.5/": "/tyk-on-premises/installation/on-heroku/", "/docs/5.4/": "/tyk-on-premises/installation/on-heroku/", "/docs/5.3/": "/tyk-on-premises/installation/on-heroku/", "/docs/5.2/": "/tyk-on-premises/installation/on-heroku/", @@ -11132,6 +12133,7 @@ }, "/tyk-on-premises/on-ubuntu/": { "/docs/": "/tyk-oss/ce-debian-ubuntu/", + "/docs/5.5/": "/tyk-oss/ce-debian-ubuntu/", "/docs/5.4/": "/tyk-oss/ce-debian-ubuntu/", "/docs/5.3/": "/tyk-oss/ce-debian-ubuntu/", "/docs/5.2/": "/tyk-oss/ce-debian-ubuntu/", @@ -11145,6 +12147,7 @@ }, "/tyk-operator/": { "/docs/": "/tyk-operator/", + "/docs/5.5/": "/tyk-operator/", "/docs/5.4/": "/tyk-operator/", "/docs/5.3/": "/tyk-operator/", "/docs/5.2/": "/tyk-operator/", @@ -11168,6 +12171,7 @@ }, "/tyk-oss/": { "/docs/": "/tyk-oss-gateway/", + "/docs/5.5/": "/tyk-oss-gateway/", "/docs/5.4/": "/tyk-oss-gateway/", "/docs/5.3/": "/tyk-oss-gateway/", "/docs/5.2/": "/tyk-oss-gateway/", @@ -11181,6 +12185,7 @@ }, "/tyk-oss/ce-centos/": { "/docs/": "/tyk-oss/ce-redhat-rhel-centos/", + "/docs/5.5/": "/tyk-oss/ce-redhat-rhel-centos/", "/docs/5.4/": "/tyk-oss/ce-redhat-rhel-centos/", "/docs/5.3/": "/tyk-oss/ce-redhat-rhel-centos/", "/docs/5.2/": "/tyk-oss/ce-redhat-rhel-centos/", @@ -11206,6 +12211,7 @@ }, "/tyk-oss/ce-helm-chart-new/": { "/docs/": "/tyk-oss/ce-helm-chart-new/", + "/docs/5.5/": "/tyk-oss/ce-helm-chart-new/", "/docs/5.4/": "/tyk-oss/ce-helm-chart-new/", "/docs/5.3/": "/tyk-oss/ce-helm-chart-new/", "/docs/5.2/": "/tyk-oss/ce-helm-chart-new/", @@ -11217,7 +12223,21 @@ "all_versions_are_similar_to_path": true }, "/tyk-oss/ce-kubernetes-ingress/": { - "all_versions_are_similar_to_path": true + "/docs/": "/product-stack/tyk-operator/tyk-ingress-controller/", + "/docs/5.5/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/5.4/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/5.3/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/5.2/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/5.1/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/5.0/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.3/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.2/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.1/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/4.0/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/3.2/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/3.1/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/3-lts/": "/tyk-oss/ce-kubernetes-ingress/", + "/docs/nightly/": "/product-stack/tyk-operator/tyk-ingress-controller/" }, "/tyk-oss/ce-kubernetes/": { "all_versions_are_similar_to_path": true @@ -11227,6 +12247,7 @@ }, "/tyk-oss/ce-redhat/": { "/docs/": "/tyk-oss/ce-redhat-rhel-centos/", + "/docs/5.5/": "/tyk-oss/ce-redhat-rhel-centos/", "/docs/5.4/": "/tyk-oss/ce-redhat-rhel-centos/", "/docs/5.3/": "/tyk-oss/ce-redhat-rhel-centos/", "/docs/5.2/": "/tyk-oss/ce-redhat-rhel-centos/", @@ -11243,6 +12264,7 @@ }, "/tyk-oss/ce-ubuntu/": { "/docs/": "/tyk-oss/ce-debian-ubuntu/", + "/docs/5.5/": "/tyk-oss/ce-debian-ubuntu/", "/docs/5.4/": "/tyk-oss/ce-debian-ubuntu/", "/docs/5.3/": "/tyk-oss/ce-debian-ubuntu/", "/docs/5.2/": "/tyk-oss/ce-debian-ubuntu/", @@ -11274,6 +12296,7 @@ }, "/tyk-rest-api/": { "/docs/": "/tyk-gateway-api/", + "/docs/5.5/": "/tyk-gateway-api/", "/docs/5.4/": "/tyk-gateway-api/", "/docs/5.3/": "/tyk-gateway-api/", "/docs/5.2/": "/tyk-gateway-api/", @@ -11290,6 +12313,7 @@ }, "/tyk-rest-api/api-definition-object-details/": { "/docs/": "/tyk-gateway-api/api-definition-objects/", + "/docs/5.5/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.4/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.3/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.2/": "/tyk-gateway-api/api-definition-objects/", @@ -11300,6 +12324,7 @@ }, "/tyk-rest-api/api-definition-objects/": { "/docs/": "/tyk-gateway-api/api-definition-objects/", + "/docs/5.5/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.4/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.3/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.2/": "/tyk-gateway-api/api-definition-objects/", @@ -11310,6 +12335,7 @@ }, "/tyk-rest-api/api-definition-objects/custom-analytics/": { "/docs/": "/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics/", + "/docs/5.5/": "/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics/", "/docs/5.4/": "/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics/", "/docs/5.3/": "/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics/", "/docs/5.2/": "/tyk-apis/tyk-gateway-api/api-definition-objects/custom-analytics/", @@ -11326,6 +12352,7 @@ }, "/tyk-rest-api/api-management/": { "/docs/": "/tyk-gateway-api/api-definition-objects/", + "/docs/5.5/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.4/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.3/": "/tyk-gateway-api/api-definition-objects/", "/docs/5.2/": "/tyk-gateway-api/api-definition-objects/", @@ -11336,6 +12363,7 @@ }, "/tyk-rest-api/health-checking/": { "/docs/": "/planning-for-production/ensure-high-availability/health-check/", + "/docs/5.5/": "/planning-for-production/ensure-high-availability/health-check/", "/docs/5.4/": "/planning-for-production/ensure-high-availability/health-check/", "/docs/5.3/": "/planning-for-production/ensure-high-availability/health-check/", "/docs/5.2/": "/planning-for-production/ensure-high-availability/health-check/", @@ -11346,6 +12374,7 @@ }, "/tyk-rest-api/hot-reload/": { "/docs/": "/tyk-configuration-reference/hot-restart-tyk-gateway-process/", + "/docs/5.5/": "/tyk-configuration-reference/hot-restart-tyk-gateway-process/", "/docs/5.4/": "/tyk-configuration-reference/hot-restart-tyk-gateway-process/", "/docs/5.3/": "/tyk-configuration-reference/hot-restart-tyk-gateway-process/", "/docs/5.2/": "/tyk-configuration-reference/hot-restart-tyk-gateway-process/", @@ -11357,6 +12386,7 @@ }, "/tyk-self-managed/istio/": { "/docs/": "/tyk-self-managed/install/", + "/docs/5.5/": "/tyk-self-managed/install/", "/docs/5.4/": "/tyk-self-managed/install/", "/docs/5.3/": "/tyk-self-managed/install/", "/docs/5.2/": "/tyk-self-managed/install/", @@ -11370,6 +12400,7 @@ }, "/tyk-self-managed/tyk-helm-chart-single-dc/": { "/docs/": "/product-stack/tyk-charts/tyk-stack-chart/", + "/docs/5.5/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.4/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.3/": "/product-stack/tyk-charts/tyk-stack-chart/", "/docs/5.2/": "/product-stack/tyk-charts/tyk-stack-chart/", @@ -11388,6 +12419,7 @@ }, "/tyk-stack/tyk-developer-portal/customise/customise-with-templates/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/tyk-portal-classic/customise/customise-with-templates/", @@ -11398,6 +12430,7 @@ }, "/tyk-stack/tyk-developer-portal/dynamic-client-registration/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/dynamic-client-registration/", @@ -11411,6 +12444,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/api-access/", @@ -11424,6 +12458,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/approve-requests/", @@ -11437,12 +12472,14 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys/", "/docs/nightly/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/configuring-custom-rate-limit-keys/" }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/api-access/dynamic-client-registration/", @@ -11456,6 +12493,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/customise-enterprise-portal/", @@ -11469,6 +12507,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/content-manager-workflow/", @@ -11482,6 +12521,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/create-new-page-template/", @@ -11495,6 +12535,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/developer-workflow/", @@ -11508,6 +12549,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/edit-manage-page-content/", @@ -11527,6 +12569,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/full-customisation/", @@ -11543,10 +12586,12 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates/", "/docs/nightly/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/full-customisation/templates/" }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/customise-enterprise-portal/quick-customisation/", @@ -11560,6 +12605,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/enterprise-portal-concepts/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/enterprise-portal-concepts/", @@ -11573,6 +12619,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/create-api-product-and-plan/", @@ -11589,6 +12636,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/getting-started-with-enterprise-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/getting-started-with-enterprise-portal/", @@ -11605,6 +12653,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/manage-get-started-guides-for-api-products/", @@ -11615,6 +12664,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/publish-api-products-and-plans/", @@ -11628,6 +12678,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/setup-email-notifications/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/getting-started/setup-email-notifications/", @@ -11638,6 +12689,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/getting-started-with-enterprise-portal/with-tyk-self-managed-as-provider/", @@ -11651,6 +12703,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", @@ -11664,6 +12717,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/bootstrapping-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/bootstrapping-portal/", @@ -11673,6 +12727,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/configuration/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/configuration/", @@ -11682,6 +12737,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal-using-helm/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-helm/", @@ -11691,6 +12747,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal-with-mysql/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", @@ -11700,6 +12757,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal-with-postgresql/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", @@ -11709,6 +12767,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal-with-sqlite/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/install-portal-using-docker-compose/", @@ -11718,6 +12777,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/install-tyk-enterprise-portal/launching-portal/launching-portal/": { "/docs/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", + "/docs/5.5/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.4/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.3/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", "/docs/5.2/": "/product-stack/tyk-enterprise-developer-portal/deploy/install-tyk-enterprise-portal/", @@ -11727,6 +12787,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/add-organisations/", @@ -11740,6 +12801,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/approve-self-registering-requests/", @@ -11756,6 +12818,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/invite-codes/", @@ -11769,6 +12832,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumer-organisations/", @@ -11779,6 +12843,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-consumers/", @@ -11792,6 +12857,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-api-users/", @@ -11805,6 +12871,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/manage-catalogues/", @@ -11818,6 +12885,7 @@ }, "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access/": { "/docs/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access/", + "/docs/5.5/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access/", "/docs/5.4/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access/", "/docs/5.3/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access/", "/docs/5.2/": "/tyk-stack/tyk-developer-portal/enterprise-developer-portal/managing-access/managing-access/", @@ -11831,6 +12899,7 @@ }, "/tyk-stack/tyk-developer-portal/key-requests/": { "/docs/": "/tyk-apis/tyk-portal-api/portal-keys/", + "/docs/5.5/": "/tyk-apis/tyk-portal-api/portal-keys/", "/docs/5.4/": "/tyk-apis/tyk-portal-api/portal-keys/", "/docs/5.3/": "/tyk-apis/tyk-portal-api/portal-keys/", "/docs/5.2/": "/tyk-apis/tyk-portal-api/portal-keys/", @@ -11844,6 +12913,7 @@ }, "/tyk-stack/tyk-developer-portal/portal-oauth-clients/": { "/docs/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", + "/docs/5.5/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.4/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.3/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", "/docs/5.2/": "/tyk-developer-portal/tyk-portal-classic/portal-oauth-clients/", @@ -11860,6 +12930,7 @@ }, "/tyk-stack/tyk-gateway/configuration/redis-sentinel/": { "/docs/": "/tyk-stack/tyk-gateway/configuration/redis-sentinel/", + "/docs/5.5/": "/tyk-stack/tyk-gateway/configuration/redis-sentinel/", "/docs/5.4/": "/tyk-stack/tyk-gateway/configuration/redis-sentinel/", "/docs/5.3/": "/tyk-stack/tyk-gateway/configuration/redis-sentinel/", "/docs/5.2/": "/tyk-stack/tyk-gateway/configuration/redis-sentinel/", @@ -11878,6 +12949,7 @@ }, "/tyk-stack/tyk-gateway/kv-store/": { "/docs/": "/tyk-configuration-reference/kv-store/", + "/docs/5.5/": "/tyk-configuration-reference/kv-store/", "/docs/5.4/": "/tyk-configuration-reference/kv-store/", "/docs/5.3/": "/tyk-configuration-reference/kv-store/", "/docs/5.2/": "/tyk-configuration-reference/kv-store/", @@ -11906,6 +12978,7 @@ }, "/tyk-stack/tyk-manager/sso/dashboard-login-ldap-tib/": { "/docs/": "/tyk-configuration-reference/tyk-identity-broker-configuration/", + "/docs/5.5/": "/tyk-configuration-reference/tyk-identity-broker-configuration/", "/docs/5.4/": "/tyk-configuration-reference/tyk-identity-broker-configuration/", "/docs/5.3/": "/tyk-configuration-reference/tyk-identity-broker-configuration/", "/docs/5.2/": "/tyk-configuration-reference/tyk-identity-broker-configuration/", @@ -11925,6 +12998,7 @@ }, "/tyk-stack/tyk-manager/sso/sso-auth0-tib/": { "/docs/": "/tyk-stack/tyk-manager/sso/sso-auth0-tib/", + "/docs/5.5/": "/tyk-stack/tyk-manager/sso/sso-auth0-tib/", "/docs/5.4/": "/tyk-stack/tyk-manager/sso/sso-auth0-tib/", "/docs/5.3/": "/tyk-stack/tyk-manager/sso/sso-auth0-tib/", "/docs/5.2/": "/tyk-stack/tyk-manager/sso/sso-auth0-tib/", @@ -11937,6 +13011,7 @@ }, "/tyk-stack/tyk-operator/access-an-api/": { "/docs/": "/tyk-stack/tyk-operator/access-an-api/", + "/docs/5.5/": "/tyk-stack/tyk-operator/access-an-api/", "/docs/5.4/": "/tyk-stack/tyk-operator/access-an-api/", "/docs/5.3/": "/tyk-stack/tyk-operator/access-an-api/", "/docs/5.2/": "/tyk-stack/tyk-operator/access-an-api/", @@ -11950,6 +13025,7 @@ }, "/tyk-stack/tyk-operator/create-an-api/": { "/docs/": "/tyk-stack/tyk-operator/create-an-api/", + "/docs/5.5/": "/tyk-stack/tyk-operator/create-an-api/", "/docs/5.4/": "/tyk-stack/tyk-operator/create-an-api/", "/docs/5.3/": "/tyk-stack/tyk-operator/create-an-api/", "/docs/5.2/": "/tyk-stack/tyk-operator/create-an-api/", @@ -11963,6 +13039,7 @@ }, "/tyk-stack/tyk-operator/getting-started-tyk-operator/": { "/docs/": "/tyk-operator/", + "/docs/5.5/": "/tyk-operator/", "/docs/5.4/": "/tyk-operator/", "/docs/5.3/": "/tyk-stack/tyk-operator/getting-started-tyk-operator/", "/docs/5.2/": "/tyk-stack/tyk-operator/getting-started-tyk-operator/", @@ -11979,6 +13056,7 @@ }, "/tyk-stack/tyk-operator/migration/": { "/docs/": "/tyk-stack/tyk-operator/migration/", + "/docs/5.5/": "/tyk-stack/tyk-operator/migration/", "/docs/5.4/": "/tyk-stack/tyk-operator/migration/", "/docs/5.3/": "/tyk-stack/tyk-operator/migration/", "/docs/5.2/": "/tyk-stack/tyk-operator/migration/", @@ -11992,6 +13070,7 @@ }, "/tyk-stack/tyk-operator/publish-an-api/": { "/docs/": "/tyk-stack/tyk-operator/publish-an-api/", + "/docs/5.5/": "/tyk-stack/tyk-operator/publish-an-api/", "/docs/5.4/": "/tyk-stack/tyk-operator/publish-an-api/", "/docs/5.3/": "/tyk-stack/tyk-operator/publish-an-api/", "/docs/5.2/": "/tyk-stack/tyk-operator/publish-an-api/", @@ -12005,6 +13084,7 @@ }, "/tyk-stack/tyk-operator/secure-an-api/": { "/docs/": "/tyk-stack/tyk-operator/secure-an-api/", + "/docs/5.5/": "/tyk-stack/tyk-operator/secure-an-api/", "/docs/5.4/": "/tyk-stack/tyk-operator/secure-an-api/", "/docs/5.3/": "/tyk-stack/tyk-operator/secure-an-api/", "/docs/5.2/": "/tyk-stack/tyk-operator/secure-an-api/", @@ -12018,6 +13098,7 @@ }, "/tyk-stack/tyk-operator/tyk-operator-reconciliation/": { "/docs/": "/tyk-stack/tyk-operator/tyk-operator-reconciliation/", + "/docs/5.5/": "/tyk-stack/tyk-operator/tyk-operator-reconciliation/", "/docs/5.4/": "/tyk-stack/tyk-operator/tyk-operator-reconciliation/", "/docs/5.3/": "/tyk-stack/tyk-operator/tyk-operator-reconciliation/", "/docs/5.2/": "/tyk-stack/tyk-operator/tyk-operator-reconciliation/", @@ -12030,6 +13111,7 @@ }, "/tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus/": { "/docs/": "/tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus/", + "/docs/5.5/": "/tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus/", "/docs/5.4/": "/tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus/", "/docs/5.3/": "/tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus/", "/docs/5.2/": "/tyk-stack/tyk-pump/other-data-stores/monitor-apis-prometheus/", @@ -12046,6 +13128,7 @@ }, "/tyk-stack/tyk-pump/tyk-analytics-record-fields/": { "/docs/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", + "/docs/5.5/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", "/docs/5.4/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", "/docs/5.3/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", "/docs/5.2/": "/tyk-stack/tyk-pump/tyk-analytics-record-fields/", @@ -12056,6 +13139,7 @@ }, "/tyk-stack/tyk-pump/tyk-dash-analytics/": { "/docs/": "/tyk-dashboard-analytics/", + "/docs/5.5/": "/tyk-dashboard-analytics/", "/docs/5.4/": "/tyk-dashboard-analytics/", "/docs/5.3/": "/tyk-dashboard-analytics/", "/docs/5.2/": "/tyk-dashboard-analytics/", @@ -12075,6 +13159,7 @@ }, "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/": { "/docs/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", + "/docs/5.5/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.4/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.3/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.2/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", @@ -12085,6 +13170,7 @@ }, "/tyk-stack/tyk-pump/tyk-pump-configuration/graph_mongo_pump/": { "/docs/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", + "/docs/5.5/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.4/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.3/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", "/docs/5.2/": "/tyk-stack/tyk-pump/tyk-pump-configuration/graph-pump/", @@ -12101,6 +13187,7 @@ }, "/tyk-sync/": { "/docs/": "/product-stack/tyk-sync/overview/", + "/docs/5.5/": "/product-stack/tyk-sync/overview/", "/docs/5.4/": "/product-stack/tyk-sync/overview/", "/docs/5.3/": "/tyk-sync/", "/docs/5.2/": "/tyk-sync/", @@ -12129,6 +13216,7 @@ }, "/universal-data-graph/concepts/header_management/": { "/docs/": "/universal-data-graph/concepts/header_management/", + "/docs/5.5/": "/universal-data-graph/concepts/header_management/", "/docs/5.4/": "/universal-data-graph/concepts/header_management/", "/docs/5.3/": "/universal-data-graph/concepts/header_management/", "/docs/5.2/": "/universal-data-graph/concepts/header_management/", @@ -12136,6 +13224,7 @@ }, "/universal-data-graph/concepts/reusing-response-fields/": { "/docs/": "/universal-data-graph/concepts/reusing_response_fields/", + "/docs/5.5/": "/universal-data-graph/concepts/reusing_response_fields/", "/docs/5.4/": "/universal-data-graph/concepts/reusing_response_fields/", "/docs/5.3/": "/universal-data-graph/concepts/reusing_response_fields/", "/docs/5.2/": "/universal-data-graph/concepts/reusing_response_fields/", @@ -12155,6 +13244,7 @@ }, "/universal-data-graph/data-sources/graphql/": { "/docs/": "/universal-data-graph/concepts/arguments/", + "/docs/5.5/": "/universal-data-graph/concepts/arguments/", "/docs/5.4/": "/universal-data-graph/concepts/arguments/", "/docs/5.3/": "/universal-data-graph/concepts/arguments/", "/docs/5.2/": "/universal-data-graph/concepts/arguments/", @@ -12171,6 +13261,7 @@ }, "/universal-data-graph/data-sources/kafka/": { "/docs/": "/universal-data-graph/datasources/kafka/", + "/docs/5.5/": "/universal-data-graph/datasources/kafka/", "/docs/5.4/": "/universal-data-graph/datasources/kafka/", "/docs/5.3/": "/universal-data-graph/datasources/kafka/", "/docs/5.2/": "/universal-data-graph/datasources/kafka/", @@ -12183,6 +13274,7 @@ }, "/universal-data-graph/data-sources/rest/": { "/docs/": "/universal-data-graph/datasources/rest/", + "/docs/5.5/": "/universal-data-graph/datasources/rest/", "/docs/5.4/": "/universal-data-graph/datasources/rest/", "/docs/5.3/": "/universal-data-graph/datasources/rest/", "/docs/5.2/": "/universal-data-graph/datasources/rest/", @@ -12199,6 +13291,7 @@ }, "/universal-data-graph/data-sources/tyk/": { "/docs/": "/universal-data-graph/datasources/tyk/", + "/docs/5.5/": "/universal-data-graph/datasources/tyk/", "/docs/5.4/": "/universal-data-graph/datasources/tyk/", "/docs/5.3/": "/universal-data-graph/datasources/tyk/", "/docs/5.2/": "/universal-data-graph/datasources/tyk/", @@ -12215,6 +13308,7 @@ }, "/universal-data-graph/datasources/": { "/docs/": "/universal-data-graph/concepts/datasources/", + "/docs/5.5/": "/universal-data-graph/concepts/datasources/", "/docs/5.4/": "/universal-data-graph/concepts/datasources/", "/docs/5.3/": "/universal-data-graph/concepts/datasources/", "/docs/5.2/": "/universal-data-graph/concepts/datasources/", @@ -12234,6 +13328,7 @@ }, "/universal-data-graph/datasources/kafka/": { "/docs/": "/universal-data-graph/datasources/kafka/", + "/docs/5.5/": "/universal-data-graph/datasources/kafka/", "/docs/5.4/": "/universal-data-graph/datasources/kafka/", "/docs/5.3/": "/universal-data-graph/datasources/kafka/", "/docs/5.2/": "/universal-data-graph/datasources/kafka/", @@ -12252,6 +13347,7 @@ }, "/universal-data-graph/examples/": { "/docs/": "/universal-data-graph/udg-examples/", + "/docs/5.5/": "/universal-data-graph/udg-examples/", "/docs/5.4/": "/universal-data-graph/udg-examples/", "/docs/5.3/": "/universal-data-graph/udg-examples/", "/docs/5.2/": "/universal-data-graph/udg-examples/", @@ -12267,6 +13363,7 @@ }, "/universal-data-graph/udg-examples/": { "/docs/": "/universal-data-graph/udg-examples/", + "/docs/5.5/": "/universal-data-graph/udg-examples/", "/docs/5.4/": "/universal-data-graph/udg-examples/", "/docs/5.3/": "/universal-data-graph/udg-examples/", "/docs/5.2/": "/universal-data-graph/udg-examples/", @@ -12297,6 +13394,7 @@ }, "/upgrading-v2-3-v2-2/": { "/docs/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", + "/docs/5.5/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", "/docs/5.4/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", "/docs/5.3/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", "/docs/5.2/": "/product-stack/tyk-gateway/release-notes/archived-releases/upgrading-v2-3-v2-2/", @@ -12313,6 +13411,7 @@ }, "/using-plugins/python-custom-auth-plugin/": { "/docs/": "/tyk-cloud/configuration-options/using-plugins/python-custom-auth/", + "/docs/5.5/": "/tyk-cloud/configuration-options/using-plugins/python-custom-auth/", "/docs/5.4/": "/tyk-cloud/configuration-options/using-plugins/python-custom-auth/", "/docs/5.3/": "/tyk-cloud/configuration-options/using-plugins/python-custom-auth/", "/docs/5.2/": "/tyk-cloud/configuration-options/using-plugins/python-custom-auth/", @@ -12329,6 +13428,7 @@ }, "/with-tyk-community-edition/tutorials/create-api-token/": { "/docs/": "/getting-started/create-api-key/", + "/docs/5.5/": "/getting-started/create-api-key/", "/docs/5.4/": "/getting-started/create-api-key/", "/docs/5.3/": "/getting-started/create-api-key/", "/docs/5.2/": "/getting-started/create-api-key/", diff --git a/tyk-docs/data/releases/dashboard.json b/tyk-docs/data/releases/dashboard.json index ad82bd8c56..824018487a 100644 --- a/tyk-docs/data/releases/dashboard.json +++ b/tyk-docs/data/releases/dashboard.json @@ -1,13 +1,29 @@ { "home": "tyk-dashboard", "licensed": true, - "latest": "5.5.1", - "lts": "5.3.5", - "releaseNotesPath": "product-stack/tyk-dashboard/release-notes/overview", + "latest": "5.6.1", + "lts": "5.3.6", + "releaseNotesPath": "product-stack/tyk-dashboard/release-notes/version-5.6", + "5.6.1": { + "date": "22/10/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=v5.6.1" + }, + "5.6.0": { + "date": "10/10/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=v5.6.0" + }, + "5.5.2": { + "date": "03/10/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=v5.5.2" + }, "5.5.1": { "date": "26/08/2024", "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=v5.5.1" }, + "5.5.0": { + "date": "12/08/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=v5.5.0" + }, "5.4.0": { "date": "02/07/2024", "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=v5.4.0" @@ -16,6 +32,10 @@ "date": "26/08/2024", "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=5.3.4" }, + "5.3.6": { + "date": "04/10/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=5.3.6" + }, "5.3.5": { "date": "26/09/2024", "docker": "https://hub.docker.com/r/tykio/tyk-dashboard/tags?page=1&name=5.3.5" diff --git a/tyk-docs/data/releases/gateway.json b/tyk-docs/data/releases/gateway.json index f5ef078137..c381828147 100644 --- a/tyk-docs/data/releases/gateway.json +++ b/tyk-docs/data/releases/gateway.json @@ -1,19 +1,44 @@ { "home": "tyk-oss-gateway", "licensed": false, - "latest": "5.5.1", - "lts": "5.3.5", - "releaseNotesPath": "product-stack/tyk-gateway/release-notes/overview", + "latest": "5.6.1", + "lts": "5.3.6", + "releaseNotesPath": "product-stack/tyk-gateway/release-notes/version-5.6", + "5.6.1": { + "date": "22/10/2024", + "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.6.1", + "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=v5.6.1" + }, + "5.6.0": { + "date": "10/10/2024", + "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.6.0", + "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=v5.6.0" + }, + "5.5.2": { + "date": "03/10/2024", + "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.5.2", + "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=v5.5.2" + }, "5.5.1": { "date": "26/08/2024", "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.5.1", "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=v5.5.1" }, + "5.5.0": { + "date": "12/08/2024", + "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.5.0", + "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=v5.5.0" + }, "5.4.0": { "date": "02/07/2024", "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.4.0", "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=v5.4.0" }, + "5.3.6": { + "date": "04/10/2024", + "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.3.6", + "docker": "https://hub.docker.com/r/tykio/tyk-gateway/tags?page=1&name=5.3.6" + }, "5.3.5": { "date": "26/09/2024", "tag": "https://github.com/TykTechnologies/tyk/releases/tag/v5.3.5", diff --git a/tyk-docs/data/releases/helm.json b/tyk-docs/data/releases/helm.json index 5b3fbfbd05..e0f6979823 100644 --- a/tyk-docs/data/releases/helm.json +++ b/tyk-docs/data/releases/helm.json @@ -1,8 +1,16 @@ { "home": "deployment-and-operations/tyk-self-managed/deployment-lifecycle/installations/kubernetes/tyk-helm-tyk-stack", "licensed": false, - "latest": "1.6.0", - "releaseNotesPath": "product-stack/tyk-charts/release-notes/version-1.6", + "latest": "2.1.0", + "releaseNotesPath": "product-stack/tyk-charts/release-notes/version-2.1", + "2.1.0": { + "date": "10/10/2024", + "tag": "https://github.com/TykTechnologies/tyk-charts/releases/tag/v2.1.0" + }, + "2.0.0": { + "date": "26/9/2024", + "tag": "https://github.com/TykTechnologies/tyk-charts/releases/tag/v2.0.0" + }, "1.6.0": { "date": "13/8/2024", "tag": "https://github.com/TykTechnologies/tyk-charts/releases/tag/v1.6.0" diff --git a/tyk-docs/data/releases/mdcb.json b/tyk-docs/data/releases/mdcb.json index 69b724cb8e..8310c5b6d1 100644 --- a/tyk-docs/data/releases/mdcb.json +++ b/tyk-docs/data/releases/mdcb.json @@ -1,8 +1,12 @@ { "home": "tyk-multi-data-centre", "licensed": true, - "latest": "2.7.0", + "latest": "2.7.1", "releaseNotesPath": "product-stack/tyk-enterprise-mdcb/release-notes/version-2.7", + "2.7.1": { + "date": "10/10/2024", + "docker":"https://hub.docker.com/r/tykio/tyk-mdcb-docker/tags?page=1&name=2.7.1" + }, "2.7.0": { "date": "13/08/2024", "docker":"https://hub.docker.com/r/tykio/tyk-mdcb-docker/tags?page=1&name=2.7.0" diff --git a/tyk-docs/data/releases/operator.json b/tyk-docs/data/releases/operator.json index cf3a0ac541..0e9c167c6f 100644 --- a/tyk-docs/data/releases/operator.json +++ b/tyk-docs/data/releases/operator.json @@ -1,8 +1,12 @@ { "home": "tyk-operator", - "licensed": false, - "latest": "0.18.0", - "releaseNotesPath": "product-stack/tyk-operator/release-notes/operator-0.18", + "licensed": true, + "latest": "1.0.0", + "releaseNotesPath": "product-stack/tyk-operator/release-notes/operator-1.0", + "1.0.0": { + "date": "10/10/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-operator/tags?page=1&name=1.0.0" + }, "0.18.0": { "date": "04/07/2024", "tag": "https://github.com/TykTechnologies/tyk-operator/releases/tag/v0.18.0", diff --git a/tyk-docs/data/releases/portal.json b/tyk-docs/data/releases/portal.json index 8b17b37551..fb78b64318 100644 --- a/tyk-docs/data/releases/portal.json +++ b/tyk-docs/data/releases/portal.json @@ -1,8 +1,12 @@ { "home": "tyk-developer-portal/tyk-enterprise-developer-portal", "licensed": true, - "latest": "1.11.0", - "releaseNotesPath": "product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.11.0", + "latest": "1.12.0", + "releaseNotesPath": "product-stack/tyk-enterprise-developer-portal/release-notes/portal-1.12.0", + "1.12.0": { + "date": "06/11/2024", + "docker":"https://hub.docker.com/r/tykio/portal/tags?page=1&name=1.12.0" + }, "1.11.0": { "date": "25/09/2024", "docker":"https://hub.docker.com/r/tykio/portal/tags?page=1&name=1.11.0" diff --git a/tyk-docs/data/releases/sync.json b/tyk-docs/data/releases/sync.json index 8c4ac353f1..b81c62fd48 100644 --- a/tyk-docs/data/releases/sync.json +++ b/tyk-docs/data/releases/sync.json @@ -1,8 +1,12 @@ { "home": "tyk-sync", - "licensed": false, - "latest": "1.5", - "releaseNotesPath": "product-stack/tyk-sync/release-notes/sync-1.5", + "licensed": true, + "latest": "2.0", + "releaseNotesPath": "product-stack/tyk-sync/release-notes/sync-2.0", + "2.0": { + "date": "10/10/2024", + "docker": "https://hub.docker.com/r/tykio/tyk-sync/tags?page=1&name=v2.0" + }, "1.5": { "date": "04/07/2024", "tag": "https://github.com/TykTechnologies/tyk-sync/tags", diff --git a/tyk-docs/data/tyk_stack.json b/tyk-docs/data/tyk_stack.json index 2400cda11d..4379e108ca 100644 --- a/tyk-docs/data/tyk_stack.json +++ b/tyk-docs/data/tyk_stack.json @@ -34,12 +34,12 @@ "path": "tyk-pump/" }, { - "title": "Tyk Operator (Open source)", + "title": "Tyk Operator", "description": "Manage your APIs on Tyk Gateway.", "path": "tyk-operator/" }, { - "title": "Tyk Sync (Open source)", + "title": "Tyk Sync", "description": "Command line tool to manage and synchronise Tyk installation.", "path": "tyk-sync/" }, diff --git a/tyk-docs/static/js/docs-table-of-contents.js b/tyk-docs/static/js/docs-table-of-contents.js index 4a24da2844..f7d4e13109 100755 --- a/tyk-docs/static/js/docs-table-of-contents.js +++ b/tyk-docs/static/js/docs-table-of-contents.js @@ -3,141 +3,156 @@ */ var buildTableOfContents = function () { - var ToCContainer = $(".documentation-table-of-contents-container"), - ToC = $(".documentation-table-of-contents"), - ToContent = $(".toc__content"), - ToClbl = $('On this page'), - contentTitles = $("h2, h3, h4, h5", "#main-content"); - - if (!ToC[0]) { - return; + var ToCContainer = $(".documentation-table-of-contents-container"), + ToC = $(".documentation-table-of-contents"), + ToContent = $(".toc__content"), + ToClbl = $('On this page'), + contentTitles = $("h2, h3, h4, h5", "#main-content"); + + if (!ToC[0]) { + return; + } + + if (contentTitles.length < 3) { + // Remove ToC if there are not enough links + //ToCContainer.remove(); + //$('.page-content__main').addClass('no-toc'); + return; + } + + ToContent.html(""); + var accordionGroup = $('
    '); + + contentTitles.each(function () { + ToC.prepend(ToClbl); + var title = $(this).text(); + + if ($(this).is("h2")) { + var h2 = $(this) + .text() + .replace(/[^a-zA-Z0-9]/g, "") + .toLowerCase(); + var accordionItem = $('
    '); + var accordionHeader = $(`${title}`); + accordionHeader.click(function () { + $(this).toggleClass("accordion-up"); + // Toggle visibility of H3 elements under this H2 + $(this).siblings(".accordion-content").toggle(); + }); + accordionItem.append(accordionHeader); + accordionGroup.append(accordionItem); } - if (contentTitles.length < 3) { - // Remove ToC if there are not enough links - ToCContainer.remove(); - $('.page-content__main').addClass('no-toc'); - return; + if ($(this).is("h3")) { + var link = $(`${title}`); + var h3 = $(this) + .text() + .replace(/[^a-zA-Z0-9]/g, "") + .toLowerCase(); + var link = $(`${title}`); + var accordionContent = $('
    ').append(link); + if (accordionGroup.find(".accordion-item:last").length) { + accordionGroup.find(".accordion-item:last").append(accordionContent); + } else { + ToContent.append(accordionContent); + } + + accordionContent.click(function () { + $(this).toggleClass("accordion-up"); + + // Toggle visibility of H4 elements under this H3 + accordionContent.siblings(".sub-accordion-content").toggle(); + }); } - ToContent.html(""); - var accordionGroup = $('
    '); - - contentTitles.each(function () { - ToC.prepend(ToClbl); - var title = $(this).text(); - - if ($(this).is('h2')) { - var h2 = $(this).text().replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); - var accordionItem = $('
    '); - var accordionHeader = $(`${title}`); - accordionHeader.click(function () { - $(this).toggleClass('accordion-up'); - // Toggle visibility of H3 elements under this H2 - $(this).siblings('.accordion-content').toggle(); - }); - accordionItem.append(accordionHeader); - accordionGroup.append(accordionItem); - } - - if ($(this).is('h3')) { - var link = $(`${title}`); - var h3 = $(this).text().replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); - var link = $(`${title}`); - var accordionContent = $('
    ').append(link); - if (accordionGroup.find('.accordion-item:last').length) { - accordionGroup.find('.accordion-item:last').append(accordionContent); - } else { - ToContent.append(accordionContent); - } - - accordionContent.click(function () { - $(this).toggleClass('accordion-up'); - - // Toggle visibility of H4 elements under this H3 - accordionContent.siblings('.sub-accordion-content').toggle(); - }); - - } - - if ($(this).is('h4')) { - var h4 = $(this).text().replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); - var subLink = $(`${title}`); - var subAccordionContent = $('
    ').append(subLink); - if (accordionGroup.find('.accordion-item:last .accordion-content:last').length) { - accordionGroup.find('.accordion-item:last .accordion-content:last').append(subAccordionContent); - } - subAccordionContent.click(function () { - $(this).parent().toggleClass('accordion-up'); - // Toggle visibility of H5 elements under this H4 - $(this).toggleClass('sub-accordion'); - - //subAccordionContent.find('.sub-sub-accordion-content').toggleClass('sub-accordion'); - }); - } - - if ($(this).is('h5')) { - var h5 = $(this).text().replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); - var subSubLink = $(`${title}`); - var subSubAccordionContent = $('
    ').append(subSubLink); - if (accordionGroup.find('.accordion-item:last .accordion-content:last .sub-accordion-content:last').length) { - accordionGroup.find('.accordion-item:last .accordion-content:last .sub-accordion-content:last').append(subSubAccordionContent); - } - subSubAccordionContent.click(function () { - $(this).parent().toggleClass('sub-accordion'); - subSubAccordionContent.find('.sub-sub-accordion-content').toggleClass('accordion-up'); - // You can add further logic if needed for H5 content - }); - } - }); - - ToContent.append(accordionGroup); - - activeTocToggle(); - - var pageContent = $('.page-content'); - pageContent.on("scroll", highlightAnchor); + if ($(this).is("h4")) { + var h4 = $(this) + .text() + .replace(/[^a-zA-Z0-9]/g, "") + .toLowerCase(); + var subLink = $(`${title}`); + var subAccordionContent = $('
    ').append(subLink); + if (accordionGroup.find(".accordion-item:last .accordion-content:last").length) { + accordionGroup.find(".accordion-item:last .accordion-content:last").append(subAccordionContent); + } + subAccordionContent.click(function () { + $(this).parent().toggleClass("accordion-up"); + // Toggle visibility of H5 elements under this H4 + $(this).toggleClass("sub-accordion"); + + //subAccordionContent.find('.sub-sub-accordion-content').toggleClass('sub-accordion'); + }); + } - $('.accordion-item').each(function () { - var accordionContent = $(this).find('.accordion-content'); - if (accordionContent.length) { - // Do something if there is accordion content - } else { - $(this).find('a.toc__item').addClass('accordionHolder'); - } - }); + if ($(this).is("h5")) { + var h5 = $(this) + .text() + .replace(/[^a-zA-Z0-9]/g, "") + .toLowerCase(); + var subSubLink = $( + `${title}`, + ); + var subSubAccordionContent = $('
    ').append(subSubLink); + if (accordionGroup.find(".accordion-item:last .accordion-content:last .sub-accordion-content:last").length) { + accordionGroup + .find(".accordion-item:last .accordion-content:last .sub-accordion-content:last") + .append(subSubAccordionContent); + } + subSubAccordionContent.click(function () { + $(this).parent().toggleClass("sub-accordion"); + subSubAccordionContent.find(".sub-sub-accordion-content").toggleClass("accordion-up"); + // You can add further logic if needed for H5 content + }); + } + }); - $('.accordion-content').each(function () { - var accordionContent = $(this).find('.sub-accordion-content'); - if (accordionContent.length) { - // Do something if there is accordion content - $(this).find('a.sub_toc__item').addClass('sub-accordionHolder'); - } else { + ToContent.append(accordionGroup); - } - }); + activeTocToggle(); - $('.sub-accordion-content').each(function () { - var accordionContent = $(this).find('.sub-sub-accordion-content'); - if (accordionContent.length) { - // Do something if there is accordion content - $(this).find('a.sub-sub-toc-item').addClass('sub-accordionHolder'); - } else { + var pageContent = $(".page-content"); + pageContent.on("scroll", highlightAnchor); - } - }); + $(".accordion-item").each(function () { + var accordionContent = $(this).find(".accordion-content"); + if (accordionContent.length) { + // Do something if there is accordion content + } else { + $(this).find("a.toc__item").addClass("accordionHolder"); + } + }); + + $(".accordion-content").each(function () { + var accordionContent = $(this).find(".sub-accordion-content"); + if (accordionContent.length) { + // Do something if there is accordion content + $(this).find("a.sub_toc__item").addClass("sub-accordionHolder"); + } else { + } + }); + + $(".sub-accordion-content").each(function () { + var accordionContent = $(this).find(".sub-sub-accordion-content"); + if (accordionContent.length) { + // Do something if there is accordion content + $(this).find("a.sub-sub-toc-item").addClass("sub-accordionHolder"); + } else { + } + }); - var currentUrl = window.location.href; - var idArray = []; + var currentUrl = window.location.href; + var idArray = []; - $('.accordion-item:last,.accordion-content:last,.sub-accordion-content:last').find('a[href^="#"]').each(function() { - idArray.push($(this).attr('href')); + $(".accordion-item:last,.accordion-content:last,.sub-accordion-content:last") + .find('a[href^="#"]') + .each(function () { + idArray.push($(this).attr("href")); }); - console.log(idArray); - if (idArray.some(value => currentUrl.includes(value))) { - var lastAccordionItem = $('div.accordion-item:last,.accordion-content:last,.sub-accordion-content:last'); - lastAccordionItem.children('div').css('display', 'block'); - } + console.log(idArray); + if (idArray.some((value) => currentUrl.includes(value))) { + var lastAccordionItem = $("div.accordion-item:last,.accordion-content:last,.sub-accordion-content:last"); + lastAccordionItem.children("div").css("display", "block"); + } }; // Call the function to build the table of contents with accordion functionality @@ -148,29 +163,29 @@ $(document).on("turbolinks:load", buildTableOfContents); */ function activeTocToggle() { - var tocLabel = $('.toc__label'); - var tocItems = $('.toc__item'); - var pageContent = $('.page-content__container, .header'); - - tocLabel.on('click', function (e) { - if (window.innerWidth < 1024) { - $(e.currentTarget).toggleClass('js-open'); - } else { - $(e.currentTarget).removeClass('js-open'); - } - }); + var tocLabel = $(".toc__label"); + var tocItems = $(".toc__item"); + var pageContent = $(".page-content__container, .header"); + + tocLabel.on("click", function (e) { + if (window.innerWidth < 1024) { + $(e.currentTarget).toggleClass("js-open"); + } else { + $(e.currentTarget).removeClass("js-open"); + } + }); - /* tocItems.on('click', function(e) { + /* tocItems.on('click', function(e) { if (window.innerWidth < 1024) { tocLabel.removeClass('js-open'); } }); */ - pageContent.on('click', function () { - if (tocLabel.hasClass('js-open')) { - tocLabel.removeClass('js-open'); - } - }); + pageContent.on("click", function () { + if (tocLabel.hasClass("js-open")) { + tocLabel.removeClass("js-open"); + } + }); } // function throttle(fn, wait) { @@ -184,29 +199,30 @@ function activeTocToggle() { // } // } - function highlightAnchor() { - const contentTitles = $("h2, h3, h4, h5"); - - contentTitles.each(function () { - const sectionPosition = $(this).offset().top; - const currentSectionId = $(this).attr("id"); - - if (sectionPosition > 120 && sectionPosition < 120 + $(this).outerHeight() * 2) { - $(".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() { - $(this).siblings('.accordion-content').show(); - $(this).siblings('.sub-accordion-content').show(); - }); - - return false; - } - $('.sub_toc__item.accordion-up').click(function() { - $(this).siblings('.sub-accordion-content').hide(); - }); + const contentTitles = $("h2, h3, h4, h5"); + + contentTitles.each(function () { + const sectionPosition = $(this).offset().top; + const currentSectionId = $(this).attr("id"); + + if (sectionPosition > 120 && sectionPosition < 120 + $(this).outerHeight() * 2) { + $(".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 () { + $(this).siblings(".accordion-content").show(); + $(this).siblings(".sub-accordion-content").show(); + }); + + return false; + } + $(".sub_toc__item.accordion-up").click(function () { + $(this).siblings(".sub-accordion-content").hide(); }); + }); } /** @@ -274,4 +290,4 @@ function highlightAnchor() { // checkScrollStatus(); // highlightAnchor(); // }); -// } \ No newline at end of file +// } diff --git a/tyk-docs/themes/tykio/layouts/_default/baseof.html b/tyk-docs/themes/tykio/layouts/_default/baseof.html index 58949cab8c..007646de66 100755 --- a/tyk-docs/themes/tykio/layouts/_default/baseof.html +++ b/tyk-docs/themes/tykio/layouts/_default/baseof.html @@ -1,85 +1,134 @@ - - - - {{ .Title }} - - - - - {{ partial "google_search_console_metadata.html" . }} - {{ partial "site_schema.html" . }} - - - - - - {{ $canonicalLink := replace .Permalink .Site.BaseURL .Site.Params.CanonicalBaseUrl }} - - - - - - - - - - - - - {{ if .HasShortcode "github_star_button" }} - - {{ end }} - - {{ partial "head_tracking.html" . }} - - {{ $scss := resources.Get "scss/main.scss" }} - {{ $options := (dict "outputStyle" "compressed" "enableSourceMap" (eq hugo.Environment "development")) }} - {{ $css := $scss | resources.ToCSS $options }} - - - - - - + + + + + {{ .Title }} + + + + + {{ partial "google_search_console_metadata.html" . }} + {{ partial "site_schema.html" . }} + + + + + + + {{ $canonicalLink := replace .Permalink .Site.BaseURL .Site.Params.CanonicalBaseUrl }} + + + + + + + + + + + + + {{ if .HasShortcode "github_star_button" }} + + {{ end }} + + {{ partial "head_tracking.html" . }} + + {{ $scss := resources.Get "scss/main.scss" }} + {{ $options := (dict "outputStyle" "compressed" "enableSourceMap" (eq hugo.Environment "development")) }} + {{ $css := $scss | resources.ToCSS $options }} + + + + + + - - {{ partial "header.html" . }} + + {{ partial "header.html" . }} + - -
    - + +
    + -
    +
    - {{ if .Params.diffTitle }} - {{if .Params.diffTitleName}} -

    {{ .Params.diffTitleName }}

    + {{ if .Params.diffTitleName }} +

    {{ .Params.diffTitleName }}

    {{ end }} - {{else}} -

    {{.Title}}

    + {{ else }} +

    {{ .Title }}

    {{ end }} {{- partial "page_metadata.html" . -}} +
    {{ block "content" . }} {{ .Content }} @@ -88,7 +137,7 @@

    {{.Title}}

    {{- partial "related_posts.html" . -}} {{- if not .Params.landingPage -}} {{- partial "contribute_data.html" . -}} -
    +
    + + {{ partial "footer_scripts.html" . }} -
    - - - {{ partial "footer_scripts.html" . }} - - - {{ partial "cookie_notice.html" . }} - + + {{ partial "cookie_notice.html" . }} + diff --git a/tyk-docs/themes/tykio/layouts/alias.html b/tyk-docs/themes/tykio/layouts/alias.html new file mode 100644 index 0000000000..f3aad3631a --- /dev/null +++ b/tyk-docs/themes/tykio/layouts/alias.html @@ -0,0 +1,34 @@ + + + + {{ .Permalink }} + + + + + + diff --git a/tyk-docs/themes/tykio/layouts/developer-support/release-summary.html b/tyk-docs/themes/tykio/layouts/developer-support/release-summary.html index 2e59ded3d7..805a173f57 100644 --- a/tyk-docs/themes/tykio/layouts/developer-support/release-summary.html +++ b/tyk-docs/themes/tykio/layouts/developer-support/release-summary.html @@ -40,13 +40,13 @@

    {{- $openSource = $openSource| append (dict "name" "Tyk Gateway" "data" $gateway) -}} {{ end }} {{- with $operator -}} - {{- $openSource = $openSource | append (dict "name" "Tyk Operator" "data" $operator) -}} + {{- $licensed = $licensed | append (dict "name" "Tyk Operator" "data" $operator) -}} {{ end }} {{- with $pump -}} {{- $openSource = $openSource| append (dict "name" "Tyk Pump" "data" $pump) -}} {{ end }} {{- with $sync -}} - {{- $openSource = $openSource| append (dict "name" "Tyk Sync" "data" $sync) -}} + {{- $licensed = $licensed | append (dict "name" "Tyk Sync" "data" $sync) -}} {{ end }} {{- with $tib -}} {{- $openSource = $openSource| append (dict "name" "Tyk Identity Broker" "data" $tib) -}} diff --git a/tyk-docs/themes/tykio/layouts/index.html b/tyk-docs/themes/tykio/layouts/index.html index 31f1ec0a7a..df50250501 100644 --- a/tyk-docs/themes/tykio/layouts/index.html +++ b/tyk-docs/themes/tykio/layouts/index.html @@ -1,148 +1,129 @@ -{{define "content"}} - + \ No newline at end of file diff --git a/tyk-docs/themes/tykio/layouts/shortcodes/tabs_end.html b/tyk-docs/themes/tykio/layouts/shortcodes/tabs_end.html index f2183b96b8..49df9db339 100644 --- a/tyk-docs/themes/tykio/layouts/shortcodes/tabs_end.html +++ b/tyk-docs/themes/tykio/layouts/shortcodes/tabs_end.html @@ -61,4 +61,4 @@ }); }, 0, tabsBontainer) - + \ No newline at end of file diff --git a/verions.json b/verions.json index 9e80d0a00e..9fd2478a21 100644 --- a/verions.json +++ b/verions.json @@ -1,13 +1,13 @@ [ - { - "name": "4.3", - "branch": "release-4.3", - "url": "https://release-4.3--tyk-docs.netlify.app/docs/" - "stable": true - }, - { - "name": "3.1", - "branch": "release-3.1", - "url": "https://release-3-1--tyk-docs.netlify.app/docs/" - } + { + "name": "4.3", + "branch": "release-4.3", + "url": "https://release-4.3--tyk-docs.netlify.app/docs/", + "stable": true + }, + { + "name": "3.1", + "branch": "release-3.1", + "url": "https://release-3-1--tyk-docs.netlify.app/docs/" + } ]