Leo Scanner API
Integrate comprehensive website auditing into your applications. Scan for SEO, accessibility, performance, security, and broken links programmatically.
API Version 1.0•Rate Limited: 5 requests/hour
Quick Start
Get started with the Leo Scanner API in seconds. No authentication required.
Base URL
https://useleo.app/api/v1Endpoint
POST /scanRate Limiting
⚠️
Rate Limits
The API is rate limited to 5 requests per hour per IP address. Rate limit information is included in response headers.
X-RateLimit-LimitMaximum requests per hourX-RateLimit-RemainingRemaining requests in current windowX-RateLimit-ResetUnix timestamp when the limit resetsScan Website
POST
/api/v1/scanRequest Body
{
"url": "https://example.com"
}Parameters
urlrequired • string
The URL to scan. Must be a valid HTTP or HTTPS URL, maximum 2048 characters.
Success Response (200)
{
"url": "https://example.com",
"scannedAt": "2026-02-05T17:02:51.000Z",
"overallScore": 87,
"categories": [
{
"category": "seo",
"label": "SEO",
"score": 85,
"issues": [
{
"severity": "warning",
"title": "Missing meta description",
"description": "The page is missing a meta description tag",
"recommendation": "Add a meta description to improve search engine visibility",
"howToFix": "Add <meta name=\"description\" content=\"Your description here\"> to the <head> section"
}
]
},
{
"category": "accessibility",
"label": "Accessibility",
"score": 92,
"issues": []
},
{
"category": "performance",
"label": "Performance",
"score": 78,
"issues": []
},
{
"category": "security",
"label": "Security",
"score": 95,
"issues": []
},
{
"category": "links",
"label": "Links",
"score": 100,
"issues": []
}
],
"meta": {
"fetchTimeMs": 1250,
"pageSize": 45632,
"statusCode": 200
}
}Error Response
{
"error": "Rate limit exceeded",
"details": "Maximum 5 requests per hour. Please try again later."
}Response Format
Scan Categories
Each scan analyzes your website across these categories:
🔍
SEO
Meta tags, headings, Open Graph, structured data
♿
Accessibility
Alt text, ARIA labels, color contrast, navigation
⚡
Performance
Page size, load time, resource optimization
🔒
Security
HTTPS, security headers, mixed content
🔗
Links
Broken links, redirects, external link analysis
Issue Severity Levels
errorCritical issues that should be fixed immediately
warningImportant issues that should be addressed
infoSuggestions for improvement
Code Examples
JavaScript (fetch)
const response = await fetch('https://useleo.app/api/v1/scan', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
url: 'https://example.com'
})
});
const result = await response.json();
if (response.ok) {
console.log('Scan completed:', result.overallScore);
result.categories.forEach(category => {
console.log(`${category.label}: ${category.score}/100`);
});
} else {
console.error('Scan failed:', result.error);
}Python (requests)
import requests
import json
url = 'https://useleo.app/api/v1/scan'
payload = {
'url': 'https://example.com'
}
headers = {
'Content-Type': 'application/json'
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
if response.status_code == 200:
result = response.json()
print(f"Scan completed: {result['overallScore']}")
for category in result['categories']:
label = category['label']
score = category['score']
print(f"{label}: {score}/100")
# Print issues for each category
for issue in category['issues']:
print(f" {issue['severity']}: {issue['title']}")
else:
error = response.json()
print(f"Scan failed: {error['error']}")cURL
curl -X POST https://useleo.app/api/v1/scan \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'HTTP Status Codes
200Scan completed successfully
400Bad request (invalid URL or request body)
429Rate limit exceeded (includes Retry-After header: 3600 seconds)
500Internal server error during scan
CORS Support
The API supports Cross-Origin Resource Sharing (CORS) with the following configuration:
- •
Access-Control-Allow-Origin: * - •
Access-Control-Allow-Methods: POST, OPTIONS - •
Access-Control-Allow-Headers: Content-Type - •
Access-Control-Max-Age: 86400
This allows the API to be called directly from web browsers without CORS restrictions.
Support & Resources
Need help with the API? Have questions or feature requests?
Get Help
Contact SupportGet help with integration issues
@LeonardoDaPetraFollow for API updates
Resources
Try Leo ScannerTest the scanner manually
Documentation updatesThis page will be updated as the API evolves