Kestrel
tcp/443 tcp/80
Exposing Swagger/OpenAPI documentation is primarily a risk if your API has underlying security flaws, as it gives attackers a precise roadmap to find them.
Those detail every endpoint, parameter, and data model, making it easier to discover and exploit vulnerabilities like broken access control or injection points.
While a perfectly secure API mitigates the danger, protecting your documentation is a critical layer of defense that forces attackers to work without a map.
Severity: info
Fingerprint: 5733ddf49ff49cd1f5e22fb40e9964ec472beb3a9e126c7a1d0dc43a70f93a52
Public Swagger UI/API detected at path: /api/swagger.json - sample paths:
GET /api/AntiForgery/token
GET /api/Consultants
GET /api/GrowthStages
GET /api/Products
GET /api/Products/sprayplan
GET /api/Products/used
GET /api/Products/user
GET /api/Products/user/{id}
GET /api/SprayplanApplicationProducts/{id}
GET /api/SprayplanApplications/{id}
GET /api/SprayplanApplications/{id}/images
GET /api/SprayplanGrowthStageProducts/{id}
GET /api/SprayplanGrowthStages/{id}
GET /api/Sprayplans
GET /api/Sprayplans/suggested
GET /api/Sprayplans/user
GET /api/Sprayplans/user/exists
GET /api/Sprayplans/user/years
GET /api/Sprayplans/user/{id}
GET /api/Sprayplans/{id}
GET /api/Users
GET /api/Users/current
GET /api/Users/email
GET /api/Users/settings
GET /api/Varieties
GET /api/Varieties/cultures
GET /api/Varieties/template
GET /api/Varieties/used
GET /api/users/login
GET /api/users/login-internal
GET /api/users/logout
POST /api/Products/own
POST /api/Reports/ProductList
POST /api/Reports/Sprayplan
POST /api/SprayplanApplications/{id}/product
POST /api/SprayplanGrowthStages/{id}/products
POST /api/Sprayplans/user/{id}/application
POST /api/Sprayplans/user/{id}/duplicate
POST /api/Sprayplans/user/{id}/send
POST /api/Sprayplans/{id}/duplicate
POST /api/Sprayplans/{id}/growth-stage
POST /api/Stations
PUT /api/Products/user/purchase-amount
PUT /api/SprayplanApplicationProducts/{id}/reset
PUT /api/SprayplanApplications/{id}/active
PUT /api/SprayplanApplications/{id}/done
PUT /api/SprayplanApplications/{id}/leafwallHeight
PUT /api/SprayplanApplications/{id}/reset
PUT /api/SprayplanApplications/{id}/waterAmount
PUT /api/SprayplanGrowthStageProducts/{id}/dosage
PUT /api/SprayplanGrowthStages/{id}/leafwall-height
PUT /api/SprayplanGrowthStages/{id}/recommended
PUT /api/SprayplanGrowthStages/{id}/water-amount
PUT /api/Sprayplans/exists
PUT /api/Sprayplans/{id}/active
Severity: info
Fingerprint: 5733ddf49ff49cd1f5e22fb40e9964ec472beb3a9e126c7a1d0dc43a92298376
Public Swagger UI/API detected at path: /api/swagger.json - sample paths:
GET /api/AntiForgery/token
GET /api/Consultants
GET /api/GrowthStages
GET /api/Products
GET /api/Products/sprayplan
GET /api/Products/used
GET /api/Products/user
GET /api/Products/user/{id}
GET /api/SprayplanApplicationProducts/{id}
GET /api/SprayplanApplications/{id}
GET /api/SprayplanApplications/{id}/images
GET /api/SprayplanGrowthStageProducts/{id}
GET /api/SprayplanGrowthStages/{id}
GET /api/Sprayplans
GET /api/Sprayplans/suggested
GET /api/Sprayplans/user
GET /api/Sprayplans/user/exists
GET /api/Sprayplans/user/years
GET /api/Sprayplans/user/{id}
GET /api/Sprayplans/{id}
GET /api/Users
GET /api/Users/current
GET /api/Users/email
GET /api/Users/settings
GET /api/Varieties
GET /api/Varieties/cultures
GET /api/Varieties/template
GET /api/Varieties/used
GET /api/users/login
GET /api/users/login-internal
GET /api/users/logout
POST /api/Products/own
POST /api/Reports/ProductList
POST /api/Reports/Sprayplan
POST /api/SprayplanApplications/{id}/product
POST /api/SprayplanGrowthStages/{id}/products
POST /api/Sprayplans/user/{id}/application
POST /api/Sprayplans/user/{id}/duplicate
POST /api/Sprayplans/user/{id}/send
POST /api/Sprayplans/{id}/duplicate
POST /api/Sprayplans/{id}/growth-stage
POST /api/Stations
PUT /api/Products/user/purchase-amount
PUT /api/SprayplanApplicationProducts/{id}/reset
PUT /api/SprayplanApplications/{id}/active
PUT /api/SprayplanApplications/{id}/done
PUT /api/SprayplanApplications/{id}/leafwallHeight
PUT /api/SprayplanApplications/{id}/reset
PUT /api/SprayplanApplications/{id}/waterAmount
PUT /api/SprayplanGrowthStageProducts/{id}/dosage
PUT /api/SprayplanGrowthStages/{id}/leafwall-height
PUT /api/SprayplanGrowthStages/{id}/recommended
PUT /api/Sprayplans/exists
PUT /api/Sprayplans/{id}/active
Exposing Swagger/OpenAPI documentation is primarily a risk if your API has underlying security flaws, as it gives attackers a precise roadmap to find them.
Those detail every endpoint, parameter, and data model, making it easier to discover and exploit vulnerabilities like broken access control or injection points.
While a perfectly secure API mitigates the danger, protecting your documentation is a critical layer of defense that forces attackers to work without a map.
Severity: info
Fingerprint: 5733ddf49ff49cd1f5e22fb40e9964ec472beb3a9e126c7a1d0dc43a92298376
Public Swagger UI/API detected at path: /api/swagger.json - sample paths:
GET /api/AntiForgery/token
GET /api/Consultants
GET /api/GrowthStages
GET /api/Products
GET /api/Products/sprayplan
GET /api/Products/used
GET /api/Products/user
GET /api/Products/user/{id}
GET /api/SprayplanApplicationProducts/{id}
GET /api/SprayplanApplications/{id}
GET /api/SprayplanApplications/{id}/images
GET /api/SprayplanGrowthStageProducts/{id}
GET /api/SprayplanGrowthStages/{id}
GET /api/Sprayplans
GET /api/Sprayplans/suggested
GET /api/Sprayplans/user
GET /api/Sprayplans/user/exists
GET /api/Sprayplans/user/years
GET /api/Sprayplans/user/{id}
GET /api/Sprayplans/{id}
GET /api/Users
GET /api/Users/current
GET /api/Users/email
GET /api/Users/settings
GET /api/Varieties
GET /api/Varieties/cultures
GET /api/Varieties/template
GET /api/Varieties/used
GET /api/users/login
GET /api/users/login-internal
GET /api/users/logout
POST /api/Products/own
POST /api/Reports/ProductList
POST /api/Reports/Sprayplan
POST /api/SprayplanApplications/{id}/product
POST /api/SprayplanGrowthStages/{id}/products
POST /api/Sprayplans/user/{id}/application
POST /api/Sprayplans/user/{id}/duplicate
POST /api/Sprayplans/user/{id}/send
POST /api/Sprayplans/{id}/duplicate
POST /api/Sprayplans/{id}/growth-stage
POST /api/Stations
PUT /api/Products/user/purchase-amount
PUT /api/SprayplanApplicationProducts/{id}/reset
PUT /api/SprayplanApplications/{id}/active
PUT /api/SprayplanApplications/{id}/done
PUT /api/SprayplanApplications/{id}/leafwallHeight
PUT /api/SprayplanApplications/{id}/reset
PUT /api/SprayplanApplications/{id}/waterAmount
PUT /api/SprayplanGrowthStageProducts/{id}/dosage
PUT /api/SprayplanGrowthStages/{id}/leafwall-height
PUT /api/SprayplanGrowthStages/{id}/recommended
PUT /api/Sprayplans/exists
PUT /api/Sprayplans/{id}/active
Open service 13.69.68.4:80 · planner.kx-digital.com
2026-01-23 06:36
HTTP/1.1 200 OK
Content-Length: 51557
Connection: close
Content-Type: text/html
Date: Fri, 23 Jan 2026 06:37:23 GMT
Server: Kestrel
Accept-Ranges: bytes
ETag: "1dc81652368ba65"
Last-Modified: Fri, 09 Jan 2026 12:40:30 GMT
Set-Cookie: ARRAffinity=b87c761429bc30e309d58973173f72a619e2726193f23653cc3d7ef8f7e13e40;Path=/;HttpOnly;Domain=planner.kx-digital.com
x-ms-middleware-request-id: 00000000-0000-0000-0000-000000000000
Request-Context: appId=cid-v1:76cb3bd7-8d9b-43fb-ba0b-eb893e752f42
Page title: KX Planner
<!doctype html>
<html lang="de-AT" translate="no" dir="ltr" data-critters-container>
<head>
<meta charset="utf-8">
<title>KX Planner</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon2.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>@font-face{font-family:'Jost';font-style:normal;font-weight:300 700;font-display:swap;src:url(https://fonts.gstatic.com/s/jost/v20/92zatBhPNqw73oDd4iYl.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Jost';font-style:normal;font-weight:300 700;font-display:swap;src:url(https://fonts.gstatic.com/s/jost/v20/92zatBhPNqw73ord4iYl.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Jost';font-style:normal;font-weight:300 700;font-display:swap;src:url(https://fonts.gstatic.com/s/jost/v20/92zatBhPNqw73oTd4g.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
<style>@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialicons/v145/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');}.material-icons{font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="icon2.svg">
<link rel="manifest" href="manifest.json">
<!-- Google tag (gtag.js) -->
<!-- G-DEFAULT loads the gtag-library but does not set the tracking ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DEFAULT"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
</script>
<style>@tailwind utilities;html{--mat-app-background-color:#faf9f9;--mat-app-text-color:#00160F;--mat-app-elevation-shadow-level-0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-2:0px 3px 1px -2px rgba(0, 0, 0, .2), 0px 2px 2px 0px rgba(0, 0, 0, .14), 0px 1px 5px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-3:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-4:0px 2px 4px -1px rgba(0, 0, 0, .2), 0px 4px 5px 0px rgba(0, 0, 0, .14), 0px 1px 10px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-5:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 5px 8px 0px rgba(0, 0, 0, .14), 0px 1px 14px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-6:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-7:0px 4px 5px -2px rgba(0, 0, 0, .2), 0px 7px 10px 1px rgba(0, 0, 0, .14), 0px 2px 16px 1px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-8:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-9:0px 5px 6px -3px rgba(0, 0, 0, .2), 0px 9px 12px 1px rgba(0, 0, 0, .14), 0px 3px 16px 2px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-10:0px 6px 6px -3px rgba(0, 0, 0, .2), 0px 10px 14px 1px rg
Open service 13.69.68.4:443 · planner.kx-digital.com
2026-01-22 23:00
HTTP/1.1 200 OK
Content-Length: 51557
Connection: close
Content-Type: text/html
Date: Thu, 22 Jan 2026 23:01:18 GMT
Server: Kestrel
Accept-Ranges: bytes
ETag: "1dc81652368ba65"
Last-Modified: Fri, 09 Jan 2026 12:40:30 GMT
Set-Cookie: ARRAffinity=b87c761429bc30e309d58973173f72a619e2726193f23653cc3d7ef8f7e13e40;Path=/;HttpOnly;Secure;Domain=planner.kx-digital.com
Set-Cookie: ARRAffinitySameSite=b87c761429bc30e309d58973173f72a619e2726193f23653cc3d7ef8f7e13e40;Path=/;HttpOnly;SameSite=None;Secure;Domain=planner.kx-digital.com
Strict-Transport-Security: max-age=2592000
x-ms-middleware-request-id: 00000000-0000-0000-0000-000000000000
Request-Context: appId=cid-v1:76cb3bd7-8d9b-43fb-ba0b-eb893e752f42
Page title: KX Planner
<!doctype html>
<html lang="de-AT" translate="no" dir="ltr" data-critters-container>
<head>
<meta charset="utf-8">
<title>KX Planner</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon2.ico">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>@font-face{font-family:'Jost';font-style:normal;font-weight:300 700;font-display:swap;src:url(https://fonts.gstatic.com/s/jost/v20/92zatBhPNqw73oDd4iYl.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Jost';font-style:normal;font-weight:300 700;font-display:swap;src:url(https://fonts.gstatic.com/s/jost/v20/92zatBhPNqw73ord4iYl.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Jost';font-style:normal;font-weight:300 700;font-display:swap;src:url(https://fonts.gstatic.com/s/jost/v20/92zatBhPNqw73oTd4g.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
<style>@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialicons/v145/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');}.material-icons{font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<link rel="icon" type="image/svg+xml" href="icon2.svg">
<link rel="manifest" href="manifest.json">
<!-- Google tag (gtag.js) -->
<!-- G-DEFAULT loads the gtag-library but does not set the tracking ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DEFAULT"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
</script>
<style>@tailwind utilities;html{--mat-app-background-color:#faf9f9;--mat-app-text-color:#00160F;--mat-app-elevation-shadow-level-0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-2:0px 3px 1px -2px rgba(0, 0, 0, .2), 0px 2px 2px 0px rgba(0, 0, 0, .14), 0px 1px 5px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-3:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-4:0px 2px 4px -1px rgba(0, 0, 0, .2), 0px 4px 5px 0px rgba(0, 0, 0, .14), 0px 1px 10px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-5:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 5px 8px 0px rgba(0, 0, 0, .14), 0px 1px 14px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-6:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-7:0px 4px 5px -2px rgba(0, 0, 0, .2), 0px 7px 10px 1px rgba(0, 0, 0, .14), 0px 2px 16px 1px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-8:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-9:0px 5px 6px -3px rgba(0, 0, 0, .2), 0px 9px 12px 1px rgba(0, 0, 0, .14), 0px 3px 16px 2px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-10:0px 6px 6px -3px rgba(0, 0, 0, .2), 0px 10px 14px 1px rg