diff --git a/api-reference/leaks/export-leaks.mdx b/api-reference/leaks/export-leaks.mdx
index ffa9b9ee..f410b322 100644
--- a/api-reference/leaks/export-leaks.mdx
+++ b/api-reference/leaks/export-leaks.mdx
@@ -4,7 +4,11 @@ openapi: post /v1/leaks/export
## Overview
-Export leaked credentials data with the same filtering capabilities as the main leaks endpoint. Supports both JSON and CSV formats for easy integration with external tools and reporting systems.
+Export leaked credentials data with filtering by type, domain, email, date range, and more. Supports both JSON and CSV formats for easy integration with external tools and reporting systems.
+
+
+**Password Unmasking**: Passwords are displayed unmasked after [domain verification](/cloud/credential-monitoring#domain-verification). Without verification, passwords appear as `***MASKED***`.
+
## Export Formats
@@ -120,9 +124,9 @@ curl -X POST "https://api.projectdiscovery.io/v1/leaks/export" \
- CSV format is more efficient for large datasets
### Security Considerations
-- Exported data may contain sensitive information
+- Exported data may contain sensitive information including unmasked passwords
- Ensure secure handling and storage of exported files
-- Password unmasking follows the same ACL rules as the main leaks endpoint
+- Passwords are unmasked after [domain verification](/cloud/credential-monitoring#domain-verification)
### Performance Tips
- Use specific filters to reduce export size
diff --git a/api-reference/leaks/get-all-leaks.mdx b/api-reference/leaks/get-all-leaks.mdx
deleted file mode 100644
index d91ad5bf..00000000
--- a/api-reference/leaks/get-all-leaks.mdx
+++ /dev/null
@@ -1,140 +0,0 @@
----
-openapi: get /v1/leaks
----
-
-
-This is the **new consolidated leaks endpoint** that replaces the deprecated individual endpoints (`/v1/leaks/domain`, `/v1/leaks/email`, `/v1/leaks/domain/customers`).
-
-It returns all types of leaks (personal, employee, customer) with optional filtering by type.
-
-
-## Overview
-
-The consolidated leaks endpoint provides access to all leaked credentials associated with your account:
-
-- **Personal leaks**: Leaks associated with your personal email address
-- **Employee leaks**: Leaks from employees of your verified domains, classified as:
- - `organization_leaks`: Leaks on organization systems (login URL domain matches email domain)
- - `external_vendor_leaks`: Leaks on external vendor systems (login URL domain differs from email domain)
-- **Customer leaks**: Leaks from customers using your verified domains
-
-## Key Features
-
-### Advanced Filtering
-- Filter by leak type (`personal`, `employee`, `customer`, `external_vendor_leaks`, `organization_leaks`)
-- Search across all fields
-- Filter by domain, email, status, and date ranges
-- Sort by various fields (URL, username, log_date, country, etc.)
-
-### Grouping & Analytics
-Use the `group_by` parameter to get aggregated data:
-- Group by URL, country, device_ip, hostname, email, or hardware_id
-- Returns group summaries instead of individual leak records
-- Perfect for analytics and reporting
-
-### Pagination
-- Standard pagination with `limit` and `page_number` parameters
-- Default limit: 20 results per page
-
-## Response Structure
-
-### Individual Leaks Response
-```json
-{
- "data": [
- {
- "id": "leak_id_hash",
- "url": "https://example.com",
- "username": "user@example.com",
- "password": "masked_or_unmasked",
- "device_ip": "192.168.1.1",
- "hostname": "DESKTOP-ABC123",
- "os": "Windows 10",
- "country": "United States",
- "log_date": "2023-01-15",
- "hardware_id": "hw_12345",
- "domain": "example.com",
- "email_domain": "example.com",
- "url_domain": "example.com",
- "status": "open",
- "user_type": "employee"
- }
- ],
- "total_leaks": 150,
- "total_pages": 8,
- "total_count": 150,
- "summary": {
- "total_leaks": 150,
- "personal_leaks": 25,
- "employee_leaks": 100,
- "customer_leaks": 25,
- "external_vendor_leaks": 60,
- "organization_leaks": 40
- }
-}
-```
-
-### Grouped Response (when using `group_by`)
-```json
-{
- "group_summary": [
- {
- "url": "https://facebook.com",
- "count": 45
- },
- {
- "url": "https://linkedin.com",
- "count": 32
- }
- ],
- "total_leaks": 150
-}
-```
-
-## Privacy & Security
-
-### Access Control
-- **Personal leaks**: Always accessible to the authenticated user
-- **Employee/Customer leaks**: Requires domain verification
-- **Password unmasking**: Requires domain verification
-
-### Data Classification
-The API automatically classifies employee leaks:
-- **Organization leaks**: Login URL domain matches or is a subdomain of the email domain
-- **External vendor leaks**: Login URL domain is completely different from email domain
-
-## Migration from Deprecated Endpoints
-
-If you're currently using the deprecated endpoints, here's how to migrate:
-
-| Deprecated Endpoint | New Equivalent |
-|-------------------|----------------|
-| `GET /v1/leaks/email` | `GET /v1/leaks?type=personal` |
-| `GET /v1/leaks/domain` | `GET /v1/leaks?type=employee` |
-| `GET /v1/leaks/domain/customers` | `GET /v1/leaks?type=customer` |
-
-## Examples
-
-### Get all leaks
-```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks" \
- -H "Authorization: Bearer YOUR_API_KEY"
-```
-
-### Get only employee leaks
-```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks?type=employee" \
- -H "Authorization: Bearer YOUR_API_KEY"
-```
-
-### Get leaks grouped by URL
-```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks?group_by=url" \
- -H "Authorization: Bearer YOUR_API_KEY"
-```
-
-### Search for specific domain
-```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks?domain=example.com" \
- -H "Authorization: Bearer YOUR_API_KEY"
-```
diff --git a/api-reference/leaks/get-domain-customer-leaks.mdx b/api-reference/leaks/get-domain-customer-leaks.mdx
deleted file mode 100644
index f818a33b..00000000
--- a/api-reference/leaks/get-domain-customer-leaks.mdx
+++ /dev/null
@@ -1,47 +0,0 @@
----
-openapi: get /v1/leaks/domain/customers
----
-
-
-**DEPRECATED:** This endpoint is deprecated in favor of the consolidated `/v1/leaks` endpoint.
-
-Use `GET /v1/leaks?type=customer` instead for the same functionality with enhanced features.
-
-
-## Migration Guide
-
-This endpoint has been replaced by the new consolidated leaks API. Here's how to migrate:
-
-### Old Way (Deprecated)
-```bash
-GET /v1/leaks/domain/customers?search=example&limit=20
-```
-
-### New Way (Recommended)
-```bash
-GET /v1/leaks?type=customer&search=example&limit=20
-```
-
-## Why Migrate?
-
-The new consolidated endpoint offers several advantages:
-
-- **Unified API**: Access all leak types (personal, employee, customer) from one endpoint
-- **Enhanced Privacy**: Better privacy controls for customer data
-- **Advanced Filtering**: More sophisticated filtering and search capabilities
-- **Improved Performance**: Optimized for better response times
-- **Future-Proof**: All new features will be added to the consolidated endpoint
-- **Better Analytics**: Enhanced grouping and summary capabilities
-
-## Privacy Enhancements
-
-The new consolidated endpoint includes enhanced privacy protections for customer leaks:
-
-- **Password Masking**: Customer leak passwords are never unmasked (privacy protection)
-- **Access Control**: Stricter validation of domain ownership
-- **Audit Logging**: Better tracking of access to customer data
-
-## See Also
-
-- [Get All Leaks (New Consolidated Endpoint)](/api-reference/leaks/get-all-leaks)
-- [Migration Guide](#migration-guide) above
\ No newline at end of file
diff --git a/api-reference/leaks/get-domain-leaks.mdx b/api-reference/leaks/get-domain-leaks.mdx
deleted file mode 100644
index 2f6d1499..00000000
--- a/api-reference/leaks/get-domain-leaks.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-openapi: get /v1/leaks/domain
----
-
-
-**DEPRECATED:** This endpoint is deprecated in favor of the consolidated `/v1/leaks` endpoint.
-
-Use `GET /v1/leaks?type=employee` instead for the same functionality with enhanced features.
-
-
-## Migration Guide
-
-This endpoint has been replaced by the new consolidated leaks API. Here's how to migrate:
-
-### Old Way (Deprecated)
-```bash
-GET /v1/leaks/domain?search=example&limit=20
-```
-
-### New Way (Recommended)
-```bash
-GET /v1/leaks?type=employee&search=example&limit=20
-```
-
-## Why Migrate?
-
-The new consolidated endpoint offers several advantages:
-
-- **Unified API**: Access all leak types (personal, employee, customer) from one endpoint
-- **Enhanced Classification**: Distinguishes between organization leaks and external vendor leaks
-- **Better Filtering**: More advanced filtering and grouping options
-- **Improved Performance**: Optimized for better response times
-- **Future-Proof**: All new features will be added to the consolidated endpoint
-
-## See Also
-
-- [Get All Leaks (New Consolidated Endpoint)](/api-reference/leaks/get-all-leaks)
-- [Migration Guide](#migration-guide) above
\ No newline at end of file
diff --git a/api-reference/leaks/get-domain-stats.mdx b/api-reference/leaks/get-domain-stats.mdx
index 46ef5d35..a8105724 100644
--- a/api-reference/leaks/get-domain-stats.mdx
+++ b/api-reference/leaks/get-domain-stats.mdx
@@ -4,10 +4,10 @@ openapi: get /v1/leaks/stats/domain
## Overview
-Get statistical information about leaks associated with a specific domain. This endpoint provides aggregate data for monitoring and reporting purposes.
+Get statistical information about leaks associated with any domain. This is a **public endpoint** that doesn't require authentication, making it ideal for quick breach checks and integrations.
-This endpoint requires domain verification. You can only get stats for domains you have verified ownership of.
+**Public Endpoint**: No authentication required. You can check leak statistics for any domain.
## Query Parameters
@@ -15,7 +15,6 @@ This endpoint requires domain verification. You can only get stats for domains y
| Parameter | Type | Description |
|-----------|------|-------------|
| `domain` | string | **Required.** The domain to get leak statistics for |
-| `unmask_email` | boolean | Whether to unmask email addresses in the response |
## Response Structure
@@ -25,12 +24,8 @@ The response provides comprehensive statistics about leaks for the specified dom
{
"domain": "example.com",
"total_leaks": 150,
- "open_leaks": 120,
- "fixed_leaks": 30,
- "leak_types": {
- "employee_leaks": 100,
- "customer_leaks": 50
- },
+ "employee_leaks": 100,
+ "customer_leaks": 50,
"recent_activity": {
"last_30_days": 15,
"last_7_days": 3
@@ -60,26 +55,28 @@ The response provides comprehensive statistics about leaks for the specified dom
## Usage Examples
-### Get basic domain stats
+### Check domain breach status
```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks/stats/domain?domain=example.com" \
- -H "Authorization: Bearer YOUR_API_KEY"
+curl -X GET "https://api.projectdiscovery.io/v1/leaks/stats/domain?domain=example.com"
```
-### Get stats with unmasked emails
-```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks/stats/domain?domain=example.com&unmask_email=true" \
- -H "Authorization: Bearer YOUR_API_KEY"
-```
+
+No API key or authentication header is required for this endpoint.
+
-## Best Practices
+## Use Cases
-### Regular Monitoring
-- Check domain stats regularly to identify new leaks quickly
-- Set up automated alerts when leak counts increase
-- Monitor the ratio of open vs fixed leaks
+### Quick Breach Check
+Use this endpoint to quickly check if a domain has any known credential leaks without requiring authentication.
+
+### Security Integrations
+Integrate with your security tools to monitor domains for new leaks and alert when breach counts increase.
+
+### Due Diligence
+Check potential partners or vendors for credential exposure as part of your security assessment process.
+
+## Best Practices
-### Performance Considerations
-- Cache stats data appropriately to avoid excessive API calls
-- Use this endpoint for summary data, detailed leak info requires other endpoints
+- Cache results appropriately to avoid excessive API calls
+- Use this for summary data; detailed leak information requires authenticated endpoints
- Consider rate limiting when building automated monitoring systems
diff --git a/api-reference/leaks/get-email-leaks.mdx b/api-reference/leaks/get-email-leaks.mdx
deleted file mode 100644
index 9ae2607d..00000000
--- a/api-reference/leaks/get-email-leaks.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
----
-openapi: get /v1/leaks/email
----
-
-
-**DEPRECATED:** This endpoint is deprecated in favor of the consolidated `/v1/leaks` endpoint.
-
-Use `GET /v1/leaks?type=personal` instead for the same functionality with enhanced features.
-
-
-## Migration Guide
-
-This endpoint has been replaced by the new consolidated leaks API. Here's how to migrate:
-
-### Old Way (Deprecated)
-```bash
-GET /v1/leaks/email?search=example&limit=20
-```
-
-### New Way (Recommended)
-```bash
-GET /v1/leaks?type=personal&search=example&limit=20
-```
-
-## Why Migrate?
-
-The new consolidated endpoint offers several advantages:
-
-- **Unified API**: Access all leak types (personal, employee, customer) from one endpoint
-- **Enhanced Features**: Better filtering, grouping, and analytics capabilities
-- **Improved Performance**: Optimized for better response times and reliability
-- **Future-Proof**: All new features will be added to the consolidated endpoint
-- **Better Integration**: Easier to build comprehensive security dashboards
-
-## See Also
-
-- [Get All Leaks (New Consolidated Endpoint)](/api-reference/leaks/get-all-leaks)
-- [Migration Guide](#migration-guide) above
\ No newline at end of file
diff --git a/api-reference/leaks/get-email-stats.mdx b/api-reference/leaks/get-email-stats.mdx
index 8b0703b1..eb8d3413 100644
--- a/api-reference/leaks/get-email-stats.mdx
+++ b/api-reference/leaks/get-email-stats.mdx
@@ -4,10 +4,10 @@ openapi: get /v1/leaks/stats/email
## Overview
-Get statistical information about leaks associated with a specific email address. This endpoint provides aggregate data for personal leak monitoring and analysis.
+Get statistical information about leaks associated with any email address. This is a **public endpoint** that doesn't require authentication, making it ideal for quick breach checks and self-service monitoring.
-This endpoint is primarily used for personal email leak statistics. For organizational monitoring, consider using the domain stats endpoint instead.
+**Public Endpoint**: No authentication required. You can check leak statistics for any email address.
## Query Parameters
@@ -15,7 +15,6 @@ This endpoint is primarily used for personal email leak statistics. For organiza
| Parameter | Type | Description |
|-----------|------|-------------|
| `email` | string | **Required.** The email address to get leak statistics for |
-| `unmask_email` | boolean | Whether to unmask email addresses in the response |
## Response Structure
@@ -25,8 +24,6 @@ The response provides comprehensive statistics about leaks for the specified ema
{
"email": "user@example.com",
"total_leaks": 25,
- "open_leaks": 18,
- "fixed_leaks": 7,
"leak_classification": {
"personal_leaks": 15,
"employee_leaks": 8,
@@ -51,13 +48,11 @@ The response provides comprehensive statistics about leaks for the specified ema
"risk_timeline": [
{
"date": "2023-03",
- "new_leaks": 3,
- "fixed_leaks": 1
+ "new_leaks": 3
},
{
"date": "2023-02",
- "new_leaks": 5,
- "fixed_leaks": 2
+ "new_leaks": 5
}
]
}
@@ -69,52 +64,36 @@ The response provides comprehensive statistics about leaks for the specified ema
|-------|-------------|
| `email` | The email address these statistics apply to |
| `total_leaks` | Total number of leaks found for this email |
-| `open_leaks` | Number of leaks that haven't been marked as fixed |
-| `fixed_leaks` | Number of leaks marked as remediated |
| `leak_classification` | Breakdown by leak type (personal, employee, customer) |
| `recent_activity` | New leak discovery in recent time periods |
| `compromised_services` | Services where this email was found in leaks |
-| `risk_timeline` | Historical trend of leak discovery and remediation |
+| `risk_timeline` | Historical trend of leak discovery |
## Usage Examples
-### Get basic email stats
+### Check email breach status
```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks/stats/email?email=user@example.com" \
- -H "Authorization: Bearer YOUR_API_KEY"
+curl -X GET "https://api.projectdiscovery.io/v1/leaks/stats/email?email=user@example.com"
```
-### Get stats with unmasked emails
-```bash
-curl -X GET "https://api.projectdiscovery.io/v1/leaks/stats/email?email=user@example.com&unmask_email=true" \
- -H "Authorization: Bearer YOUR_API_KEY"
-```
+
+No API key or authentication header is required for this endpoint.
+
-## Privacy Considerations
+## Use Cases
-### Access Control
-- You can only access stats for emails you're authorized to view
-- Personal emails: accessible to the account owner
-- Employee emails: requires domain verification
+### Personal Breach Check
+Allow users to quickly check if their email has been involved in any credential leaks.
-### Data Sensitivity
-- Email statistics may reveal sensitive information about user behavior
-- Consider data retention policies for stored statistics
-- Implement appropriate access controls in your applications
+### Self-Service Monitoring
+Build breach notification tools that let users check their own exposure without requiring account creation.
-## Best Practices
+### Security Awareness
+Integrate into security training tools to show employees their personal exposure risk.
-### Regular Monitoring
-- Check email stats periodically for accounts under your management
-- Set up alerts for new leak discoveries
-- Track remediation progress to ensure security improvements
-
-### Integration Tips
-- Use this endpoint for summary dashboards and reports
-- Combine with detailed leak endpoints for comprehensive security monitoring
-- Cache results appropriately to minimize API usage
+## Best Practices
-### Security Recommendations
-- Encourage users to fix open leaks promptly
-- Provide guidance on changing passwords for compromised services
-- Monitor trends to identify systemic security issues
+- Cache results appropriately to minimize API calls
+- Use this for summary data; detailed leak information requires authenticated endpoints
+- Consider rate limiting when building user-facing applications
+- Combine with the domain stats endpoint for comprehensive organizational monitoring
diff --git a/api-reference/leaks/get-leak-info.mdx b/api-reference/leaks/get-leak-info.mdx
index 5a00661d..1edf6c4c 100644
--- a/api-reference/leaks/get-leak-info.mdx
+++ b/api-reference/leaks/get-leak-info.mdx
@@ -4,7 +4,11 @@ openapi: post /v1/leaks/info
## Overview
-Retrieve detailed information for a specific leak by its ID. This endpoint provides access to complete leak details with optional password and email unmasking based on your permissions and domain verification.
+Retrieve detailed information for a specific leak by its ID. This endpoint provides access to complete leak details including unmasked passwords after domain verification.
+
+
+**Password Unmasking**: Passwords are displayed unmasked after [domain verification](/cloud/credential-monitoring#domain-verification). Without verification, passwords appear as `***MASKED***`.
+
## Authentication & Authorization
@@ -12,7 +16,6 @@ Retrieve detailed information for a specific leak by its ID. This endpoint provi
- **Personal leaks**: Always accessible if the leak belongs to your email
- **Employee/Customer leaks**: Requires domain verification for the associated domain
- **Password unmasking**: Requires domain verification
-- **Customer leak privacy**: Passwords are never unmasked for customer leaks (privacy protection)
### Leak ID Format
The leak ID must be a 32-character MD5 hash (e.g., `b3652f2555841f7652badd9804859f4e`).
@@ -98,14 +101,15 @@ The leak ID must be a 32-character MD5 hash (e.g., `b3652f2555841f7652badd980485
## Password Unmasking Rules
-### When Passwords Are Unmasked
-- Personal leaks: Always unmasked for the account owner
-- Employee leaks: Unmasked with domain verification
-- Customer leaks: **Never unmasked** (privacy protection)
+Passwords are unmasked after [domain verification](/cloud/credential-monitoring#domain-verification):
+
+| Leak Type | Password Access |
+|-----------|-----------------|
+| **Personal leaks** | Always unmasked for the account owner |
+| **Employee leaks** | Unmasked after domain verification |
+| **Customer leaks** | Unmasked after domain verification |
-### When Passwords Are Masked
-- Shows as `***MASKED***` when access is not authorized
-- Customer leak passwords are always masked for privacy protection
+Without domain verification, passwords show as `***MASKED***`.
## Usage Examples
@@ -122,7 +126,6 @@ curl -X POST "https://api.projectdiscovery.io/v1/leaks/info" \
## Security Considerations
### Privacy Protection
-- Customer leak passwords are never exposed to maintain customer privacy
- Access is strictly controlled based on domain verification
- All access attempts are logged for security auditing
diff --git a/cloud/credential-monitoring.mdx b/cloud/credential-monitoring.mdx
index 28a0b86e..20526ea5 100644
--- a/cloud/credential-monitoring.mdx
+++ b/cloud/credential-monitoring.mdx
@@ -36,78 +36,200 @@ title="Try Credential Monitoring Now"
| Feature | Free Users | Free Business Domain Users | Enterprise Users |
| :------ | ---------- | -------------------------- | ---------------- |
| Personal email exposures | ✓ | ✓ | ✓ |
-| Organization-wide credential exposures | - | ✓ (Requires DNS verification) | ✓ |
-| View employee passwords | - | ✓ (Requires DNS verification) | ✓ |
+| Organization-wide credential exposures | ✗ | ✓ (Requires DNS verification) | ✓ |
| Export data (JSON/CSV) | ✓ | ✓ | ✓ |
| API access | ✓ | ✓ | ✓ |
-| Multi-domain monitoring | - | - | ✓ |
-| Priority support | - | - | ✓ |
+| Multi-domain monitoring | ✗ | ✗ | ✓ |
+| Priority support | ✗ | ✗ | ✓ |
-
-**Access Control**: Viewing employee passwords is only accessible to users with **Owner** or **Admin** account types within your organization.
-
+## Domain Verification
-## Domain Verification (Required for Organization-Wide Leaks)
+
+**Required for Organization-Wide Leaks**: To access **Employee Leaks** and **Customer/User Leaks** for your organization, you must first verify ownership of your domain.
+
-To access **Employee Leaks** and **Customer/User Leaks** for your organization, you must first verify ownership of your domain using a DNS TXT record.
+### How to Verify in the App
+
+
+
+ Go to **Credential Monitoring → Domains → Add Domain**
+
+
+ Type your domain name and click **Continue**
+
+
+ Select your preferred method tab (DNS record / HTML meta tag / Upload TXT file) and follow the instructions. Use the built-in copy and download helpers.
+
+
+ After adding the record, meta tag, or file, click **Verify**. A successful verification marks the domain as **Verified** ✓
+
+
-### How to Verify Your Domain
+---
-1. In **ProjectDiscovery Cloud**, open **Credential Monitoring → Domains**.
-2. Click **Add Domain**, enter your business domain (for example: example.com), and click **Verify Now**.
-3. A **DNS TXT record** will appear — copy this value.
-4. Add the TXT record to your DNS configuration through your provider (e.g., Cloudflare, GoDaddy, Route53).
-5. Wait a few minutes for DNS propagation.
-6. Return to the dashboard and click **Verify** to complete the process.
+### Verification Methods
-When verification succeeds, your domain will show a ✅ Verified status in the list.
+Choose from three verification methods based on your access level:
-#### Example DNS TXT Record
+
+
+ Best when you have DNS access
+
+
+ Best when you can edit your website
+
+
+ Best when you can upload files to your site
+
+
- Type: TXT
- Host: _pd-verification.example.com
- Value: pd-verification=2a9f34b8e6b74912adbe4f
+
+The verification modal in the app provides **copy/download helpers** for each method to make setup quick and easy.
+
-### Verifying Multiple Domains
+---
-You can verify multiple domains from the same account. (Note: This feature requires an Enterprise subscription)
-Each domain requires its own TXT record and verification step.
+#### Method 1: DNS TXT Record
-Example:
-- example.com
-- example.org
-- brand-example.io
+
+**Recommended** — Standard method when you have access to edit DNS records for the domain.
+
-### Troubleshooting
+
+
+ Add a TXT record on the root of your domain with the following value:
+
+ ```
+ projectdiscovery-verification=YOUR_VERIFICATION_STRING
+ ```
+
+
+ | Setting | Value |
+ |---------|-------|
+ | Host / Name | `@` (or "root" depending on your DNS provider) |
+ | Type | `TXT` |
+ | Value | `projectdiscovery-verification=YOUR_VERIFICATION_STRING` |
+
+
+ Click **Verify** in Credential Monitoring. Once successful, your domain will show as **Verified**.
+
+
+
+
+- **DNS propagation** can take up to 48 hours, though most verifications succeed within minutes
+- Verify your record is live using terminal:
+
+```bash
+dig TXT yourdomain.com
+```
-**No TXT record appears after clicking “Verify Now.”**
-→ Your account email is not a business domain. Log in with your work email (for example: name@company.com).
+Or for specific record names:
-**I logged in with GitHub and can’t verify.**
-→ Log out and sign in using your company email directly.
+```bash
+dig TXT _pd-verification.yourdomain.com
+```
+
-**Verification fails after adding the TXT record.**
-→ Wait 5–10 minutes for DNS propagation, then retry.
-→ You can check manually with:
+---
- dig TXT yourdomain.com
+#### Method 2: HTML Meta Tag
-**Government (.gov), education (.edu), or regulated domains**
-→ TXT verification works the same way. Use an official organization email to access full breach details.
+
+Best when you can edit and deploy your site's HTML but cannot change DNS settings.
+
-### FAQs About Verification
+
+
+ Place this meta tag inside the `` section of your root HTML page (`https://yourdomain/`):
+
+ ```html
+
+ ```
+
+
+ Push the updated HTML to your live site.
+
+
+ Click **Verify** in Credential Monitoring.
+
+
+
+
+Confirm the tag is present in the deployed page:
+
+```bash
+curl -s https://yourdomain | grep projectdiscovery-verification
+```
-**Do I need to verify to see personal leaks?**
-No — personal leaks are automatically visible for the email you used to sign up. Verification is only required for organization-wide views.
+If verification fails:
+- Ensure the change is on the **live site** (not staging)
+- Clear any CDN/cache that might be serving an old version
+
-**Can I verify multiple domains?**
-Yes, each domain requires its own TXT record.
+---
-**How long does verification take?**
-Usually 5–10 minutes, depending on DNS propagation time.
+#### Method 3: Upload TXT File
-**Do I need to reverify later?**
-No, once a domain is verified it remains linked unless the TXT record is removed.
+
+Best when you can upload static files to your site root but don't want to modify DNS or HTML.
+
+
+
+
+ Create a file named `pd-verification.txt` containing only your verification string:
+
+ ```
+ YOUR_VERIFICATION_STRING
+ ```
+
+
+ Upload the file so it's accessible at `https://yourdomain/pd-verification.txt`
+
+
+ Click **Verify** in Credential Monitoring.
+
+
+
+
+Confirm the file is reachable and contains the expected string:
+
+```bash
+curl -s https://yourdomain/pd-verification.txt
+```
+
+If verification fails:
+- Ensure the file is served over **HTTPS**
+- Verify it's accessible at the exact root path
+
+
+---
+
+### Quick Troubleshooting Reference
+
+| Method | Command | Expected Result |
+|--------|---------|-----------------|
+| **DNS** | `dig TXT yourdomain.com` | Shows `projectdiscovery-verification=...` |
+| **HTML** | `curl -s https://yourdomain \| grep projectdiscovery-verification` | Shows the meta tag in `
` |
+| **File** | `curl -s https://yourdomain/pd-verification.txt` | Shows the verification string |
+
+---
+
+### FAQs About Verification
+
+
+
+ No — personal leaks are automatically visible for the email you used to sign up. Verification is only required for organization-wide views.
+
+
+ Only **Enterprise customers** can have multiple domains verified. You can self-verify each domain individually or reach out to support for bulk verification.
+
+
+ Usually 5–10 minutes, depending on DNS propagation time.
+
+
+ No, once a domain is verified it remains linked unless the verification record is removed.
+
+
## How It Works
@@ -221,7 +343,6 @@ flowchart TD
- `buyer@outlook.com` with stored passwords for `shop.hooli.com`
- **Exclusions**: Does not include employee emails (those are classified as Employee Leaks)
- **Access**: Available to verified Business Domain Users and Enterprise customers
-- **Privacy**: Email addresses shown, but passwords are never displayed to protect customer privacy
### Key Classification Distinction
@@ -259,10 +380,6 @@ Our classification system uses advanced pattern matching and domain analysis to
- **Duplicate Prevention**: Cross-category filtering ensures employee emails don't appear in customer leak categories
- **False Positive Reduction**: Multiple validation layers minimize misclassification
-
-**Important**: Customer leak data shows email addresses for identification purposes but never displays actual passwords to maintain customer privacy and comply with data protection standards.
-
-
## Understanding Malware-Based Credential Theft
### How Malware Steals Credentials
@@ -334,11 +451,13 @@ When leak sources are blank or incomplete:
Access credential monitoring data programmatically:
-- **Domain Leaks**: `GET /v1/leaks/domain` - Get all malware-exposed credentials for your monitored domains
-- **Email Leaks**: `GET /v1/leaks/email` - Get credential exposures for specific email addresses
-- **Customer Leaks**: `GET /v1/leaks/domain/customers` - Get customer email addresses (returns only email addresses of customers, not full credential exposures)
+- **Export Leaks**: `POST /v1/leaks/export` - Export all leaked credentials (personal, employee, customer) with filtering options
+- **Leak Details**: `POST /v1/leaks/info` - Get detailed information for a specific leak
+- **Update Status**: `POST /v1/leaks/status` - Mark leaks as fixed or reopen them
+- **Domain Stats**: `GET /v1/leaks/stats/domain` - Get leak statistics for any domain (public endpoint, no auth required)
+- **Email Stats**: `GET /v1/leaks/stats/email` - Get leak statistics for any email (public endpoint, no auth required)
-For detailed API documentation and usage examples, see the [API Reference](/api-reference/leaks/get-domain-leaks).
+For detailed API documentation and usage examples, see the [API Reference](/api-reference/leaks/export-leaks).
Integrate these API endpoints with your security tools to automatically trigger password resets and security reviews when new malware-based exposures are detected.
@@ -350,7 +469,7 @@ Integrate these API endpoints with your security tools to automatically trigger
A: No, credential visibility is restricted to Owner and Admin accounts only. This ensures sensitive breach data is only accessible to authorized personnel responsible for security.
**Q: Why can't I see employee passwords?**
-A: Business Domain Users can view employee passwords data after DNS verification. Only Enterprise customers can monitor multiple domains. Customer passwords are never displayed to any user tier to protect customer privacy.
+A: Business Domain Users can view employee passwords data after DNS verification. Only Enterprise customers can monitor multiple domains.
**Q: How do I view my personal leaked credentials?**
A: You can automatically view all leaked credentials associated with the email address you used to sign up. Simply navigate to "My Leaks" to see any exposures linked to your personal email account - no additional verification required.
diff --git a/mint.json b/mint.json
index 81086ab1..3d9fb181 100644
--- a/mint.json
+++ b/mint.json
@@ -514,7 +514,6 @@
{
"group": "Leaks",
"pages": [
- "api-reference/leaks/get-all-leaks",
"api-reference/leaks/export-leaks",
"api-reference/leaks/get-leak-info",
"api-reference/leaks/update-leak-status",
diff --git a/openapi.yaml b/openapi.yaml
index 2021f870..ba14c93b 100644
--- a/openapi.yaml
+++ b/openapi.yaml
@@ -10988,7 +10988,8 @@ paths:
$ref: '#/components/requestBodies/AddCustomSeverityMappingRequest'
/v1/leaks/stats/domain:
get:
- summary: Your GET endpoint for domain stats
+ summary: Get leak statistics for a domain (Public)
+ description: 'Public endpoint - no authentication required. Returns leak statistics for any domain including employee/customer leak counts, geographic distribution, and top compromised services.'
tags:
- leaks
responses:
@@ -11072,19 +11073,18 @@ paths:
default:
$ref: '#/components/responses/ErrorResponse'
operationId: get-v1-leaks-stats-domain
- description: get leaks stats for a domain
+ security: []
parameters:
- schema:
type: string
in: query
name: domain
- - schema:
- type: boolean
- in: query
- name: unmask_email
+ required: true
+ description: The domain to get leak statistics for
/v1/leaks/stats/email:
get:
- summary: Your GET endpoint for email stats
+ summary: Get leak statistics for an email (Public)
+ description: 'Public endpoint - no authentication required. Returns leak statistics for any email address including leak classification, compromised services, and risk timeline.'
tags:
- leaks
responses:
@@ -11168,17 +11168,14 @@ paths:
default:
$ref: '#/components/responses/ErrorResponse'
operationId: get-v1-leaks-stats-email
- description: get leaks stats for an email
+ security: []
parameters:
- schema:
type: string
in: query
name: email
- description: Email to get stats for
- - schema:
- type: boolean
- in: query
- name: unmask_email
+ description: The email address to get leak statistics for
+ required: true
/v1/leaks:
get:
summary: Get all leaked credentials
@@ -11410,7 +11407,7 @@ paths:
/v1/leaks/export:
post:
summary: Export leaked credentials
- description: Export leaked credentials with same filtering options as GET /v1/leaks
+ description: 'Export leaked credentials with filtering by type, domain, email, date range, and more. Passwords are unmasked after domain verification. See [Domain Verification](/cloud/credential-monitoring#domain-verification) for setup instructions.'
tags:
- export
responses:
@@ -11518,11 +11515,6 @@ paths:
in: query
name: format
description: Export format (json or csv)
- - schema:
- type: string
- in: header
- name: X-Team-Id
- description: 'Retrieve the Team ID from: https://cloud.projectdiscovery.io/settings/team'
requestBody:
required: true
content:
@@ -12941,8 +12933,10 @@ paths:
type: string
/v1/leaks/status:
post:
- summary: Your POST endpoint
- tags: []
+ summary: Update leak status
+ description: 'Mark leaks as fixed or reopen them. Requires authentication and domain verification for employee/customer leaks. See [Domain Verification](/cloud/credential-monitoring#domain-verification) for setup instructions.'
+ tags:
+ - leaks
responses:
'200':
description: OK
@@ -12997,7 +12991,7 @@ paths:
/v1/leaks/info:
post:
summary: Get leak information by ID
- description: Retrieve detailed leak information by leak ID with optional password and email unmasking
+ description: 'Retrieve detailed leak information by leak ID. Passwords are unmasked after domain verification. See [Domain Verification](/cloud/credential-monitoring#domain-verification) for setup instructions.'
tags:
- leaks
operationId: post-v1-leaks-info
diff --git a/tools/alterx/install.mdx b/tools/alterx/install.mdx
index bdc8cc16..3767f16e 100644
--- a/tools/alterx/install.mdx
+++ b/tools/alterx/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/alterx/install'
+redirect: /opensource/alterx/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/alterx/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/alterx/install](/opensource/alterx/install).
If you are not automatically redirected, [click here](/opensource/alterx/install).
-
-
\ No newline at end of file
diff --git a/tools/alterx/overview.mdx b/tools/alterx/overview.mdx
index 32fa70c8..ae46b158 100644
--- a/tools/alterx/overview.mdx
+++ b/tools/alterx/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/alterx/overview'
+redirect: /opensource/alterx/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/alterx/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/alterx/overview](/opensource/alterx/overview).
If you are not automatically redirected, [click here](/opensource/alterx/overview).
-
-
\ No newline at end of file
diff --git a/tools/alterx/running.mdx b/tools/alterx/running.mdx
index 6807b8da..618b7b0b 100644
--- a/tools/alterx/running.mdx
+++ b/tools/alterx/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/alterx/running'
+redirect: /opensource/alterx/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/alterx/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/alterx/running](/opensource/alterx/running).
If you are not automatically redirected, [click here](/opensource/alterx/running).
-
-
\ No newline at end of file
diff --git a/tools/alterx/usage.mdx b/tools/alterx/usage.mdx
index 322c592a..9295ec34 100644
--- a/tools/alterx/usage.mdx
+++ b/tools/alterx/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/alterx/usage'
+redirect: /opensource/alterx/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/alterx/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/alterx/usage](/opensource/alterx/usage).
If you are not automatically redirected, [click here](/opensource/alterx/usage).
-
-
\ No newline at end of file
diff --git a/tools/chaos/install.mdx b/tools/chaos/install.mdx
index ae9201b7..4a7f25ff 100644
--- a/tools/chaos/install.mdx
+++ b/tools/chaos/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/chaos/install'
+redirect: /opensource/chaos/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/chaos/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/chaos/install](/opensource/chaos/install).
If you are not automatically redirected, [click here](/opensource/chaos/install).
-
-
\ No newline at end of file
diff --git a/tools/chaos/overview.mdx b/tools/chaos/overview.mdx
index 1f82f7ce..6e797fcd 100644
--- a/tools/chaos/overview.mdx
+++ b/tools/chaos/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/chaos/overview'
+redirect: /opensource/chaos/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/chaos/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/chaos/overview](/opensource/chaos/overview).
If you are not automatically redirected, [click here](/opensource/chaos/overview).
-
-
\ No newline at end of file
diff --git a/tools/chaos/running.mdx b/tools/chaos/running.mdx
index 368f32e7..98ef750d 100644
--- a/tools/chaos/running.mdx
+++ b/tools/chaos/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/chaos/running'
+redirect: /opensource/chaos/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/chaos/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/chaos/running](/opensource/chaos/running).
If you are not automatically redirected, [click here](/opensource/chaos/running).
-
-
\ No newline at end of file
diff --git a/tools/chaos/usage.mdx b/tools/chaos/usage.mdx
index 84df5514..c31726aa 100644
--- a/tools/chaos/usage.mdx
+++ b/tools/chaos/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/chaos/usage'
+redirect: /opensource/chaos/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/chaos/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/chaos/usage](/opensource/chaos/usage).
If you are not automatically redirected, [click here](/opensource/chaos/usage).
-
-
\ No newline at end of file
diff --git a/tools/cloudlist/install.mdx b/tools/cloudlist/install.mdx
index 8df09e7f..e906fe8d 100644
--- a/tools/cloudlist/install.mdx
+++ b/tools/cloudlist/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cloudlist/install'
+redirect: /opensource/cloudlist/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cloudlist/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cloudlist/install](/opensource/cloudlist/install).
If you are not automatically redirected, [click here](/opensource/cloudlist/install).
-
-
\ No newline at end of file
diff --git a/tools/cloudlist/overview.mdx b/tools/cloudlist/overview.mdx
index a8dabe56..057471bd 100644
--- a/tools/cloudlist/overview.mdx
+++ b/tools/cloudlist/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cloudlist/overview'
+redirect: /opensource/cloudlist/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cloudlist/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cloudlist/overview](/opensource/cloudlist/overview).
If you are not automatically redirected, [click here](/opensource/cloudlist/overview).
-
-
\ No newline at end of file
diff --git a/tools/cloudlist/providers.mdx b/tools/cloudlist/providers.mdx
index 7226c041..be7c4524 100644
--- a/tools/cloudlist/providers.mdx
+++ b/tools/cloudlist/providers.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cloudlist/providers'
+redirect: /opensource/cloudlist/providers
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cloudlist/providers');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cloudlist/providers](/opensource/cloudlist/providers).
If you are not automatically redirected, [click here](/opensource/cloudlist/providers).
-
-
\ No newline at end of file
diff --git a/tools/cloudlist/running.mdx b/tools/cloudlist/running.mdx
index 727f6cc7..3e0a3fbe 100644
--- a/tools/cloudlist/running.mdx
+++ b/tools/cloudlist/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cloudlist/running'
+redirect: /opensource/cloudlist/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cloudlist/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cloudlist/running](/opensource/cloudlist/running).
If you are not automatically redirected, [click here](/opensource/cloudlist/running).
-
-
\ No newline at end of file
diff --git a/tools/cloudlist/usage.mdx b/tools/cloudlist/usage.mdx
index c45e0de9..0f70c429 100644
--- a/tools/cloudlist/usage.mdx
+++ b/tools/cloudlist/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cloudlist/usage'
+redirect: /opensource/cloudlist/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cloudlist/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cloudlist/usage](/opensource/cloudlist/usage).
If you are not automatically redirected, [click here](/opensource/cloudlist/usage).
-
-
\ No newline at end of file
diff --git a/tools/cvemap/install.mdx b/tools/cvemap/install.mdx
index 9b0c51e3..2cef5e2a 100644
--- a/tools/cvemap/install.mdx
+++ b/tools/cvemap/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cvemap/install'
+redirect: /opensource/cvemap/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cvemap/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cvemap/install](/opensource/cvemap/install).
If you are not automatically redirected, [click here](/opensource/cvemap/install).
-
-
\ No newline at end of file
diff --git a/tools/cvemap/overview.mdx b/tools/cvemap/overview.mdx
index f9184a5d..9d16c439 100644
--- a/tools/cvemap/overview.mdx
+++ b/tools/cvemap/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cvemap/overview'
+redirect: /opensource/cvemap/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cvemap/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cvemap/overview](/opensource/cvemap/overview).
If you are not automatically redirected, [click here](/opensource/cvemap/overview).
-
-
\ No newline at end of file
diff --git a/tools/cvemap/running.mdx b/tools/cvemap/running.mdx
index 539fc20f..e99d9127 100644
--- a/tools/cvemap/running.mdx
+++ b/tools/cvemap/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cvemap/running'
+redirect: /opensource/cvemap/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cvemap/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cvemap/running](/opensource/cvemap/running).
If you are not automatically redirected, [click here](/opensource/cvemap/running).
-
-
\ No newline at end of file
diff --git a/tools/cvemap/usage.mdx b/tools/cvemap/usage.mdx
index 4b2264c8..8f0dda89 100644
--- a/tools/cvemap/usage.mdx
+++ b/tools/cvemap/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/cvemap/usage'
+redirect: /opensource/cvemap/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/cvemap/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/cvemap/usage](/opensource/cvemap/usage).
If you are not automatically redirected, [click here](/opensource/cvemap/usage).
-
-
\ No newline at end of file
diff --git a/tools/dnsx/install.mdx b/tools/dnsx/install.mdx
index d062811d..37d64ac4 100644
--- a/tools/dnsx/install.mdx
+++ b/tools/dnsx/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/dnsx/install'
+redirect: /opensource/dnsx/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/dnsx/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/dnsx/install](/opensource/dnsx/install).
If you are not automatically redirected, [click here](/opensource/dnsx/install).
-
-
\ No newline at end of file
diff --git a/tools/dnsx/overview.mdx b/tools/dnsx/overview.mdx
index b3bfdda1..129b2fbb 100644
--- a/tools/dnsx/overview.mdx
+++ b/tools/dnsx/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/dnsx/overview'
+redirect: /opensource/dnsx/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/dnsx/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/dnsx/overview](/opensource/dnsx/overview).
If you are not automatically redirected, [click here](/opensource/dnsx/overview).
-
-
\ No newline at end of file
diff --git a/tools/dnsx/running.mdx b/tools/dnsx/running.mdx
index 4cf54435..7facc8f6 100644
--- a/tools/dnsx/running.mdx
+++ b/tools/dnsx/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/dnsx/running'
+redirect: /opensource/dnsx/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/dnsx/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/dnsx/running](/opensource/dnsx/running).
If you are not automatically redirected, [click here](/opensource/dnsx/running).
-
-
\ No newline at end of file
diff --git a/tools/dnsx/usage.mdx b/tools/dnsx/usage.mdx
index e62e43a9..01cecfbb 100644
--- a/tools/dnsx/usage.mdx
+++ b/tools/dnsx/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/dnsx/usage'
+redirect: /opensource/dnsx/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/dnsx/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/dnsx/usage](/opensource/dnsx/usage).
If you are not automatically redirected, [click here](/opensource/dnsx/usage).
-
-
\ No newline at end of file
diff --git a/tools/httpx/install.mdx b/tools/httpx/install.mdx
index 7088ab5c..2222810c 100644
--- a/tools/httpx/install.mdx
+++ b/tools/httpx/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/httpx/install'
+redirect: /opensource/httpx/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/httpx/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/httpx/install](/opensource/httpx/install).
If you are not automatically redirected, [click here](/opensource/httpx/install).
-
-
\ No newline at end of file
diff --git a/tools/httpx/overview.mdx b/tools/httpx/overview.mdx
index 278b0b9d..ff2be563 100644
--- a/tools/httpx/overview.mdx
+++ b/tools/httpx/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/httpx/overview'
+redirect: /opensource/httpx/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/httpx/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/httpx/overview](/opensource/httpx/overview).
If you are not automatically redirected, [click here](/opensource/httpx/overview).
-
-
\ No newline at end of file
diff --git a/tools/httpx/running.mdx b/tools/httpx/running.mdx
index 50d1ccbb..117ccb52 100644
--- a/tools/httpx/running.mdx
+++ b/tools/httpx/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/httpx/running'
+redirect: /opensource/httpx/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/httpx/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/httpx/running](/opensource/httpx/running).
If you are not automatically redirected, [click here](/opensource/httpx/running).
-
-
\ No newline at end of file
diff --git a/tools/httpx/usage.mdx b/tools/httpx/usage.mdx
index 4b2c6ea4..1b24033d 100644
--- a/tools/httpx/usage.mdx
+++ b/tools/httpx/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/httpx/usage'
+redirect: /opensource/httpx/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/httpx/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/httpx/usage](/opensource/httpx/usage).
If you are not automatically redirected, [click here](/opensource/httpx/usage).
-
-
\ No newline at end of file
diff --git a/tools/index.mdx b/tools/index.mdx
index 087f79ea..5fbc0aef 100644
--- a/tools/index.mdx
+++ b/tools/index.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource'
+redirect: /opensource
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource](/opensource).
If you are not automatically redirected, [click here](/opensource).
-
-
\ No newline at end of file
diff --git a/tools/interactsh/install.mdx b/tools/interactsh/install.mdx
index f643be9d..e7cb9191 100644
--- a/tools/interactsh/install.mdx
+++ b/tools/interactsh/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/interactsh/install'
+redirect: /opensource/interactsh/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/interactsh/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/interactsh/install](/opensource/interactsh/install).
If you are not automatically redirected, [click here](/opensource/interactsh/install).
-
-
\ No newline at end of file
diff --git a/tools/interactsh/integrations.mdx b/tools/interactsh/integrations.mdx
index 056b61e1..c719a945 100644
--- a/tools/interactsh/integrations.mdx
+++ b/tools/interactsh/integrations.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/interactsh/integrations'
+redirect: /opensource/interactsh/integrations
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/interactsh/integrations');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/interactsh/integrations](/opensource/interactsh/integrations).
If you are not automatically redirected, [click here](/opensource/interactsh/integrations).
-
-
\ No newline at end of file
diff --git a/tools/interactsh/overview.mdx b/tools/interactsh/overview.mdx
index cdd08f48..d7a2d991 100644
--- a/tools/interactsh/overview.mdx
+++ b/tools/interactsh/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/interactsh/overview'
+redirect: /opensource/interactsh/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/interactsh/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/interactsh/overview](/opensource/interactsh/overview).
If you are not automatically redirected, [click here](/opensource/interactsh/overview).
-
-
\ No newline at end of file
diff --git a/tools/interactsh/running.mdx b/tools/interactsh/running.mdx
index ab409892..867df5e5 100644
--- a/tools/interactsh/running.mdx
+++ b/tools/interactsh/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/interactsh/running'
+redirect: /opensource/interactsh/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/interactsh/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/interactsh/running](/opensource/interactsh/running).
If you are not automatically redirected, [click here](/opensource/interactsh/running).
-
-
\ No newline at end of file
diff --git a/tools/interactsh/server.mdx b/tools/interactsh/server.mdx
index 2a950681..0f7b227a 100644
--- a/tools/interactsh/server.mdx
+++ b/tools/interactsh/server.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/interactsh/server'
+redirect: /opensource/interactsh/server
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/interactsh/server');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/interactsh/server](/opensource/interactsh/server).
If you are not automatically redirected, [click here](/opensource/interactsh/server).
-
-
\ No newline at end of file
diff --git a/tools/interactsh/usage.mdx b/tools/interactsh/usage.mdx
index 4c288732..06193947 100644
--- a/tools/interactsh/usage.mdx
+++ b/tools/interactsh/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/interactsh/usage'
+redirect: /opensource/interactsh/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/interactsh/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/interactsh/usage](/opensource/interactsh/usage).
If you are not automatically redirected, [click here](/opensource/interactsh/usage).
-
-
\ No newline at end of file
diff --git a/tools/katana/install.mdx b/tools/katana/install.mdx
index 31d2e83a..765da582 100644
--- a/tools/katana/install.mdx
+++ b/tools/katana/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/katana/install'
+redirect: /opensource/katana/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/katana/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/katana/install](/opensource/katana/install).
If you are not automatically redirected, [click here](/opensource/katana/install).
-
-
\ No newline at end of file
diff --git a/tools/katana/overview.mdx b/tools/katana/overview.mdx
index 328f052b..30b4f241 100644
--- a/tools/katana/overview.mdx
+++ b/tools/katana/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/katana/overview'
+redirect: /opensource/katana/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/katana/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/katana/overview](/opensource/katana/overview).
If you are not automatically redirected, [click here](/opensource/katana/overview).
-
-
\ No newline at end of file
diff --git a/tools/katana/running.mdx b/tools/katana/running.mdx
index 4d57ba75..d5c17cb0 100644
--- a/tools/katana/running.mdx
+++ b/tools/katana/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/katana/running'
+redirect: /opensource/katana/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/katana/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/katana/running](/opensource/katana/running).
If you are not automatically redirected, [click here](/opensource/katana/running).
-
-
\ No newline at end of file
diff --git a/tools/katana/usage.mdx b/tools/katana/usage.mdx
index 6730068a..ea96a0b1 100644
--- a/tools/katana/usage.mdx
+++ b/tools/katana/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/katana/usage'
+redirect: /opensource/katana/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/katana/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/katana/usage](/opensource/katana/usage).
If you are not automatically redirected, [click here](/opensource/katana/usage).
-
-
\ No newline at end of file
diff --git a/tools/naabu/install.mdx b/tools/naabu/install.mdx
index 65b933de..d35b65eb 100644
--- a/tools/naabu/install.mdx
+++ b/tools/naabu/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/naabu/install'
+redirect: /opensource/naabu/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/naabu/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/naabu/install](/opensource/naabu/install).
If you are not automatically redirected, [click here](/opensource/naabu/install).
-
-
\ No newline at end of file
diff --git a/tools/naabu/overview.mdx b/tools/naabu/overview.mdx
index 89f4056e..ea4e3cef 100644
--- a/tools/naabu/overview.mdx
+++ b/tools/naabu/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/naabu/overview'
+redirect: /opensource/naabu/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/naabu/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/naabu/overview](/opensource/naabu/overview).
If you are not automatically redirected, [click here](/opensource/naabu/overview).
-
-
\ No newline at end of file
diff --git a/tools/naabu/running.mdx b/tools/naabu/running.mdx
index bbea8404..6848933d 100644
--- a/tools/naabu/running.mdx
+++ b/tools/naabu/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/naabu/running'
+redirect: /opensource/naabu/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/naabu/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/naabu/running](/opensource/naabu/running).
If you are not automatically redirected, [click here](/opensource/naabu/running).
-
-
\ No newline at end of file
diff --git a/tools/naabu/usage.mdx b/tools/naabu/usage.mdx
index 3fdf6a31..d2820723 100644
--- a/tools/naabu/usage.mdx
+++ b/tools/naabu/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/naabu/usage'
+redirect: /opensource/naabu/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/naabu/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/naabu/usage](/opensource/naabu/usage).
If you are not automatically redirected, [click here](/opensource/naabu/usage).
-
-
\ No newline at end of file
diff --git a/tools/notify/install.mdx b/tools/notify/install.mdx
index 05d9ffd5..fc881cc8 100644
--- a/tools/notify/install.mdx
+++ b/tools/notify/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/notify/install'
+redirect: /opensource/notify/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/notify/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/notify/install](/opensource/notify/install).
If you are not automatically redirected, [click here](/opensource/notify/install).
-
-
\ No newline at end of file
diff --git a/tools/notify/overview.mdx b/tools/notify/overview.mdx
index 2a05415e..9ebdcc80 100644
--- a/tools/notify/overview.mdx
+++ b/tools/notify/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/notify/overview'
+redirect: /opensource/notify/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/notify/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/notify/overview](/opensource/notify/overview).
If you are not automatically redirected, [click here](/opensource/notify/overview).
-
-
\ No newline at end of file
diff --git a/tools/notify/provider-config.mdx b/tools/notify/provider-config.mdx
index af154315..b5533616 100644
--- a/tools/notify/provider-config.mdx
+++ b/tools/notify/provider-config.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/notify/provider-config'
+redirect: /opensource/notify/provider-config
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/notify/provider-config');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/notify/provider-config](/opensource/notify/provider-config).
If you are not automatically redirected, [click here](/opensource/notify/provider-config).
-
-
\ No newline at end of file
diff --git a/tools/notify/running.mdx b/tools/notify/running.mdx
index 44015c84..34f6f71f 100644
--- a/tools/notify/running.mdx
+++ b/tools/notify/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/notify/running'
+redirect: /opensource/notify/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/notify/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/notify/running](/opensource/notify/running).
If you are not automatically redirected, [click here](/opensource/notify/running).
-
-
\ No newline at end of file
diff --git a/tools/notify/usage.mdx b/tools/notify/usage.mdx
index b54ed88f..96c26ead 100644
--- a/tools/notify/usage.mdx
+++ b/tools/notify/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/notify/usage'
+redirect: /opensource/notify/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/notify/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/notify/usage](/opensource/notify/usage).
If you are not automatically redirected, [click here](/opensource/notify/usage).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/authenticated-scans.mdx b/tools/nuclei/authenticated-scans.mdx
index c67f64f7..c2cc62fd 100644
--- a/tools/nuclei/authenticated-scans.mdx
+++ b/tools/nuclei/authenticated-scans.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/authenticated-scans'
+redirect: /opensource/nuclei/authenticated-scans
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/authenticated-scans');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/authenticated-scans](/opensource/nuclei/authenticated-scans).
If you are not automatically redirected, [click here](/opensource/nuclei/authenticated-scans).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/faq.mdx b/tools/nuclei/faq.mdx
index f6064fc4..cba9402e 100644
--- a/tools/nuclei/faq.mdx
+++ b/tools/nuclei/faq.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/faq'
+redirect: /opensource/nuclei/faq
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/faq');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/faq](/opensource/nuclei/faq).
If you are not automatically redirected, [click here](/opensource/nuclei/faq).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/input-formats.mdx b/tools/nuclei/input-formats.mdx
index dbc951f2..69f6527b 100644
--- a/tools/nuclei/input-formats.mdx
+++ b/tools/nuclei/input-formats.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/input-formats'
+redirect: /opensource/nuclei/input-formats
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/input-formats');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/input-formats](/opensource/nuclei/input-formats).
If you are not automatically redirected, [click here](/opensource/nuclei/input-formats).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/install.mdx b/tools/nuclei/install.mdx
index 8dc95c8e..2eedc01e 100644
--- a/tools/nuclei/install.mdx
+++ b/tools/nuclei/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/install'
+redirect: /opensource/nuclei/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/install](/opensource/nuclei/install).
If you are not automatically redirected, [click here](/opensource/nuclei/install).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/mass-scanning-cli.mdx b/tools/nuclei/mass-scanning-cli.mdx
index dd28c303..aa048d14 100644
--- a/tools/nuclei/mass-scanning-cli.mdx
+++ b/tools/nuclei/mass-scanning-cli.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/mass-scanning-cli'
+redirect: /opensource/nuclei/mass-scanning-cli
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/mass-scanning-cli');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/mass-scanning-cli](/opensource/nuclei/mass-scanning-cli).
If you are not automatically redirected, [click here](/opensource/nuclei/mass-scanning-cli).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/nuclei-sdk.mdx b/tools/nuclei/nuclei-sdk.mdx
index 224c508f..a7423c9d 100644
--- a/tools/nuclei/nuclei-sdk.mdx
+++ b/tools/nuclei/nuclei-sdk.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/nuclei-sdk'
+redirect: /opensource/nuclei/nuclei-sdk
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/nuclei-sdk');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/nuclei-sdk](/opensource/nuclei/nuclei-sdk).
If you are not automatically redirected, [click here](/opensource/nuclei/nuclei-sdk).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/overview.mdx b/tools/nuclei/overview.mdx
index ab6ae445..894371c9 100644
--- a/tools/nuclei/overview.mdx
+++ b/tools/nuclei/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/overview'
+redirect: /opensource/nuclei/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/overview](/opensource/nuclei/overview).
If you are not automatically redirected, [click here](/opensource/nuclei/overview).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/running.mdx b/tools/nuclei/running.mdx
index 994f1849..c6e4d861 100644
--- a/tools/nuclei/running.mdx
+++ b/tools/nuclei/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/running'
+redirect: /opensource/nuclei/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/running](/opensource/nuclei/running).
If you are not automatically redirected, [click here](/opensource/nuclei/running).
-
-
\ No newline at end of file
diff --git a/tools/nuclei/usage.mdx b/tools/nuclei/usage.mdx
index 4bde80c4..abdb870b 100644
--- a/tools/nuclei/usage.mdx
+++ b/tools/nuclei/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/nuclei/usage'
+redirect: /opensource/nuclei/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/nuclei/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/nuclei/usage](/opensource/nuclei/usage).
If you are not automatically redirected, [click here](/opensource/nuclei/usage).
-
-
\ No newline at end of file
diff --git a/tools/pdtm/install.mdx b/tools/pdtm/install.mdx
index 97d2cf06..a0ef6a68 100644
--- a/tools/pdtm/install.mdx
+++ b/tools/pdtm/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/pdtm/install'
+redirect: /opensource/pdtm/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/pdtm/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/pdtm/install](/opensource/pdtm/install).
If you are not automatically redirected, [click here](/opensource/pdtm/install).
-
-
\ No newline at end of file
diff --git a/tools/pdtm/overview.mdx b/tools/pdtm/overview.mdx
index cff90829..24d70593 100644
--- a/tools/pdtm/overview.mdx
+++ b/tools/pdtm/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/pdtm/overview'
+redirect: /opensource/pdtm/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/pdtm/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/pdtm/overview](/opensource/pdtm/overview).
If you are not automatically redirected, [click here](/opensource/pdtm/overview).
-
-
\ No newline at end of file
diff --git a/tools/pdtm/running.mdx b/tools/pdtm/running.mdx
index 5d449520..eed5494a 100644
--- a/tools/pdtm/running.mdx
+++ b/tools/pdtm/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/pdtm/running'
+redirect: /opensource/pdtm/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/pdtm/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/pdtm/running](/opensource/pdtm/running).
If you are not automatically redirected, [click here](/opensource/pdtm/running).
-
-
\ No newline at end of file
diff --git a/tools/pdtm/usage.mdx b/tools/pdtm/usage.mdx
index 38a2fba4..2f8a2f1f 100644
--- a/tools/pdtm/usage.mdx
+++ b/tools/pdtm/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/pdtm/usage'
+redirect: /opensource/pdtm/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/pdtm/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/pdtm/usage](/opensource/pdtm/usage).
If you are not automatically redirected, [click here](/opensource/pdtm/usage).
-
-
\ No newline at end of file
diff --git a/tools/subfinder/install.mdx b/tools/subfinder/install.mdx
index 8f7d2f66..b05d551c 100644
--- a/tools/subfinder/install.mdx
+++ b/tools/subfinder/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/subfinder/install'
+redirect: /opensource/subfinder/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/subfinder/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/subfinder/install](/opensource/subfinder/install).
If you are not automatically redirected, [click here](/opensource/subfinder/install).
-
-
\ No newline at end of file
diff --git a/tools/subfinder/overview.mdx b/tools/subfinder/overview.mdx
index c70bf01e..715a5b06 100644
--- a/tools/subfinder/overview.mdx
+++ b/tools/subfinder/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/subfinder/overview'
+redirect: /opensource/subfinder/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/subfinder/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/subfinder/overview](/opensource/subfinder/overview).
If you are not automatically redirected, [click here](/opensource/subfinder/overview).
-
-
\ No newline at end of file
diff --git a/tools/subfinder/running.mdx b/tools/subfinder/running.mdx
index 1eceb585..0aa2b9e1 100644
--- a/tools/subfinder/running.mdx
+++ b/tools/subfinder/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/subfinder/running'
+redirect: /opensource/subfinder/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/subfinder/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/subfinder/running](/opensource/subfinder/running).
If you are not automatically redirected, [click here](/opensource/subfinder/running).
-
-
\ No newline at end of file
diff --git a/tools/subfinder/usage.mdx b/tools/subfinder/usage.mdx
index fd0ab44a..7dc244be 100644
--- a/tools/subfinder/usage.mdx
+++ b/tools/subfinder/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/subfinder/usage'
+redirect: /opensource/subfinder/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/subfinder/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/subfinder/usage](/opensource/subfinder/usage).
If you are not automatically redirected, [click here](/opensource/subfinder/usage).
-
-
\ No newline at end of file
diff --git a/tools/uncover/install.mdx b/tools/uncover/install.mdx
index b0948d60..379a446d 100644
--- a/tools/uncover/install.mdx
+++ b/tools/uncover/install.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/uncover/install'
+redirect: /opensource/uncover/install
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/uncover/install');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/uncover/install](/opensource/uncover/install).
If you are not automatically redirected, [click here](/opensource/uncover/install).
-
-
\ No newline at end of file
diff --git a/tools/uncover/overview.mdx b/tools/uncover/overview.mdx
index 60c939ea..94f0a297 100644
--- a/tools/uncover/overview.mdx
+++ b/tools/uncover/overview.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/uncover/overview'
+redirect: /opensource/uncover/overview
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/uncover/overview');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/uncover/overview](/opensource/uncover/overview).
If you are not automatically redirected, [click here](/opensource/uncover/overview).
-
-
\ No newline at end of file
diff --git a/tools/uncover/running.mdx b/tools/uncover/running.mdx
index 7b0988c7..09915f19 100644
--- a/tools/uncover/running.mdx
+++ b/tools/uncover/running.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/uncover/running'
+redirect: /opensource/uncover/running
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/uncover/running');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/uncover/running](/opensource/uncover/running).
-If you are not automatically redirected, [click here](/opensource/uncover/running).
-
-
\ No newline at end of file
+If you are not automatically redirected, [click here](/opensource/uncover/running).
\ No newline at end of file
diff --git a/tools/uncover/usage.mdx b/tools/uncover/usage.mdx
index 5913e311..6973459b 100644
--- a/tools/uncover/usage.mdx
+++ b/tools/uncover/usage.mdx
@@ -1,32 +1,11 @@
---
title: 'Redirecting...'
description: 'This page has moved to /opensource/uncover/usage'
+redirect: /opensource/uncover/usage
---
-import { useEffect } from 'react';
-
-export const RedirectComponent = () => {
- useEffect(() => {
- window.location.replace('/opensource/uncover/usage');
- }, []);
-
- return null;
-};
-
-
-
# 🔄 Redirecting...
You are being redirected to [/opensource/uncover/usage](/opensource/uncover/usage).
-If you are not automatically redirected, [click here](/opensource/uncover/usage).
-
-
\ No newline at end of file
+If you are not automatically redirected, [click here](/opensource/uncover/usage).
\ No newline at end of file