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: 5733ddf49ff49cd1b885ff43cd82e3ce200145873788f116a84acd5db869aa34
Public Swagger UI/API detected at path: /swagger.json - sample paths:
DELETE /apexrest/msf/api/absence/DeleteAbsence
DELETE /apexrest/msf/api/addressChange/DeleteAddressChange
DELETE /apexrest/msf/api/candidate/DeleteReference
DELETE /apexrest/msf/api/document/DeleteDocument
DELETE /apexrest/msf/api/document/v2/DeleteDocument
DELETE /apexrest/msf/api/education/DeleteEducation
DELETE /apexrest/msf/api/job/DeleteAccountJob
DELETE /apexrest/msf/api/job/DeleteAccountJobDocument
DELETE /apexrest/msf/api/sidelineactivity/DeleteSidelineActivity
DELETE /apexrest/msf/api/workexperience/DeleteWorkExperience
GET /apexrest/msf/api/absence/GetAbsence
GET /apexrest/msf/api/absence/GetAbsenceRegistrationConfiguration
GET /apexrest/msf/api/addresschange/GetAddressChange
GET /apexrest/msf/api/addresschange/GetAddressChangesConfiguration
GET /apexrest/msf/api/base/GetCandidateReferenceConfiguration
GET /apexrest/msf/api/base/GetImage
GET /apexrest/msf/api/base/GetJobAlertConfiguration
GET /apexrest/msf/api/base/GetJobApplicationConfiguration
GET /apexrest/msf/api/base/GetPersonalInformationConfiguration
GET /apexrest/msf/api/base/GetPortalConfiguration
GET /apexrest/msf/api/candidate/AccountExists
GET /apexrest/msf/api/candidate/Authenticate
GET /apexrest/msf/api/candidate/GetChecklist
GET /apexrest/msf/api/candidate/GetChecklistSummary
GET /apexrest/msf/api/candidate/GetJobAlertSubscription
GET /apexrest/msf/api/candidate/GetReference
GET /apexrest/msf/api/candidate/GetSummaryInfo
GET /apexrest/msf/api/course/DownloadDocument
GET /apexrest/msf/api/course/GetCourse
GET /apexrest/msf/api/course/GetCourseCategories
GET /apexrest/msf/api/course/GetCourseConfiguration
GET /apexrest/msf/api/course/GetCourseRegistration
GET /apexrest/msf/api/course/GetCourseRegistrationConfiguration
GET /apexrest/msf/api/customer/DownloadJobDocument
GET /apexrest/msf/api/customer/GetCompany
GET /apexrest/msf/api/customer/getJob
GET /apexrest/msf/api/customer/getJobApplications
GET /apexrest/msf/api/document/Download
GET /apexrest/msf/api/document/Get
GET /apexrest/msf/api/document/GetTypes
GET /apexrest/msf/api/document/v2/Download
GET /apexrest/msf/api/dossier/DownloadDocument
GET /apexrest/msf/api/dossier/GenerateApproveURL
GET /apexrest/msf/api/dossier/Get
GET /apexrest/msf/api/dossier/GetDossierConfiguration
GET /apexrest/msf/api/dossier/GetDossierCount
GET /apexrest/msf/api/education/GetEducation
GET /apexrest/msf/api/education/GetEducationConfiguration
GET /apexrest/msf/api/event/DownloadDocument
GET /apexrest/msf/api/event/GetEvent
GET /apexrest/msf/api/event/GetEventCategories
GET /apexrest/msf/api/event/GetEventConfiguration
GET /apexrest/msf/api/event/GetEventRegistration
GET /apexrest/msf/api/event/GetEventRegistrationConfiguration
GET /apexrest/msf/api/internalJob/Get
GET /apexrest/msf/api/job/DownloadAccountJobApplicationDocument
GET /apexrest/msf/api/job/DownloadAccountJobDocument
GET /apexrest/msf/api/job/Get
GET /apexrest/msf/api/job/GetAccountJob
GET /apexrest/msf/api/job/GetAccountJobApplication
GET /apexrest/msf/api/job/GetAccountJobConfiguration
GET /apexrest/msf/api/job/GetKnockoutQuestions
GET /apexrest/msf/api/portalwizard/GetOnboardingWizard
GET /apexrest/msf/api/searchcandidate/DownloadDocument
GET /apexrest/msf/api/searchcandidate/GetCandidate
GET /apexrest/msf/api/searchcandidate/GetFavoriteCandidates
GET /apexrest/msf/api/searchcandidate/GetFavoriteCandidatesCount
GET /apexrest/msf/api/searchcandidate/GetRecentCandidates
GET /apexrest/msf/api/searchcandidate/GetRecentCandidatesCount
GET /apexrest/msf/api/searchcandidate/GetSearchCandidateConfiguration
GET /apexrest/msf/api/sidelineactivity/GetSidelineActivity
GET /apexrest/msf/api/sidelineactivity/GetSidelineActivityConfiguration
GET /apexrest/msf/api/workexperience/GetWorkExperience
GET /apexrest/msf/api/workexperience/GetWorkexperienceConfiguration
GET /apextest/msf/api/document/GetV2
POST /apexrest/msf/api/absence/PostAbsence
POST /apexrest/msf/api/addressChange/PostAddressChange
POST /apexrest/msf/api/candidate/AcceptUserAgreement
POST /apexrest/msf/api/candidate/AuthenticateTrusted
POST /apexrest/msf/api/candidate/CreateLoginToken
POST /apexrest/msf/api/candidate/GetLoginTokenForBusinessCentral
POST /apexrest/msf/api/candidate/PostJobAlertSubscription
POST /apexrest/msf/api/candidate/PostReference
POST /apexrest/msf/api/candidate/Register
POST /apexrest/msf/api/candidate/RejectUserAgreement
POST /apexrest/msf/api/candidate/RequestAuthenticationTOTP
POST /apexrest/msf/api/candidate/UnsubscribeJobAlert
POST /apexrest/msf/api/candidate/VerifyJobAlertEmailAddress
POST /apexrest/msf/api/course/PostCourseRegistration
POST /apexrest/msf/api/course/PostCourseRegistrationStatus
POST /apexrest/msf/api/customer/Authenticate
POST /apexrest/msf/api/customer/AuthenticateTrusted
POST /apexrest/msf/api/customer/CreateLoginToken
POST /apexrest/msf/api/customer/PostCompany
POST /apexrest/msf/api/customer/RequestAuthenticationTOTP
POST /apexrest/msf/api/document/Post
POST /apexrest/msf/api/document/PostV2
POST /apexrest/msf/api/document/parse/{contactId}
POST /apexrest/msf/api/education/PostEducation
POST /apexrest/msf/api/event/PostEventRegistration
POST /apexrest/msf/api/event/PostEventRegistrationStatus
POST /apexrest/msf/api/job/Apply
POST /apexrest/msf/api/job/ParseCv
POST /apexrest/msf/api/job/PostAccountJob
POST /apexrest/msf/api/portalwizard/PostOnboardingWizardCompleteStep
POST /apexrest/msf/api/portalwizard/PostOnboardingWizardCurrentStep
POST /apexrest/msf/api/searchcandidate/ChangeFavoriteCandidate
POST /apexrest/msf/api/searchcandidate/SaveRemarkCandidate
POST /apexrest/msf/api/searchcandidate/SearchCandidate
POST /apexrest/msf/api/sidelineactivity/PostSidelineActivity
POST /apexrest/msf/api/workexperience/PostWorkExperience
Open service 20.101.2.157:443 · swagger.mysolution.nl
2026-01-10 02:31
HTTP/1.1 200 OK
Content-Length: 1826
Connection: close
Content-Type: text/html
Date: Sat, 10 Jan 2026 02:32:51 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "56395599"
Last-Modified: Wed, 12 Nov 2025 14:13:01 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: Mysolution Swagger
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mysolution Swagger</title>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="robots" content="noindex, nofollow" />
<link rel="stylesheet" type="text/css" href="./swagger-ui.css">
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
<style>
html {
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
background: #fafafa;
}
.topbar {
display: none;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./swagger-ui-bundle.js"> </script>
<script src="./swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
// Begin Swagger UI call region
var urlParams = new URLSearchParams(window.location.search);
var urlDef = urlParams.get('def') || "swagger.json";
const ui = SwaggerUIBundle({
url: urlDef,
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
</script>
</body>
</html>
Open service 20.101.2.157:443 · swagger.mysolution.nl
2026-01-02 23:01
HTTP/1.1 200 OK
Content-Length: 1826
Connection: close
Content-Type: text/html
Date: Fri, 02 Jan 2026 23:01:07 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "56395599"
Last-Modified: Wed, 12 Nov 2025 14:13:01 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: Mysolution Swagger
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mysolution Swagger</title>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="robots" content="noindex, nofollow" />
<link rel="stylesheet" type="text/css" href="./swagger-ui.css">
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
<style>
html {
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
background: #fafafa;
}
.topbar {
display: none;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./swagger-ui-bundle.js"> </script>
<script src="./swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
// Begin Swagger UI call region
var urlParams = new URLSearchParams(window.location.search);
var urlDef = urlParams.get('def') || "swagger.json";
const ui = SwaggerUIBundle({
url: urlDef,
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
</script>
</body>
</html>
Open service 20.101.2.157:443 · swagger.mysolution.nl
2025-12-23 07:56
HTTP/1.1 200 OK
Content-Length: 1826
Connection: close
Content-Type: text/html
Date: Tue, 23 Dec 2025 07:56:29 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "56395599"
Last-Modified: Wed, 12 Nov 2025 14:13:01 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: Mysolution Swagger
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mysolution Swagger</title>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="robots" content="noindex, nofollow" />
<link rel="stylesheet" type="text/css" href="./swagger-ui.css">
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
<style>
html {
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
background: #fafafa;
}
.topbar {
display: none;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./swagger-ui-bundle.js"> </script>
<script src="./swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
// Begin Swagger UI call region
var urlParams = new URLSearchParams(window.location.search);
var urlDef = urlParams.get('def') || "swagger.json";
const ui = SwaggerUIBundle({
url: urlDef,
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
</script>
</body>
</html>
Open service 20.101.2.157:443 · swagger.mysolution.nl
2025-12-20 21:09
HTTP/1.1 200 OK
Content-Length: 1826
Connection: close
Content-Type: text/html
Date: Sat, 20 Dec 2025 21:09:33 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "56395599"
Last-Modified: Wed, 12 Nov 2025 14:13:01 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: Mysolution Swagger
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Mysolution Swagger</title>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta name="robots" content="noindex, nofollow" />
<link rel="stylesheet" type="text/css" href="./swagger-ui.css">
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
<style>
html {
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
background: #fafafa;
}
.topbar {
display: none;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./swagger-ui-bundle.js"> </script>
<script src="./swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
// Begin Swagger UI call region
var urlParams = new URLSearchParams(window.location.search);
var urlDef = urlParams.get('def') || "swagger.json";
const ui = SwaggerUIBundle({
url: urlDef,
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
// End Swagger UI call region
window.ui = ui
}
</script>
</body>
</html>