Leo Scanner API v1 Documentation

A simple REST API for analyzing websites and getting detailed scan reports.

Overview

The Leo Scanner API allows developers to programmatically scan websites for SEO, accessibility, performance, security, and link issues. The API returns detailed reports with scores and actionable recommendations.

Base URL

https://useleo.app/api/v1

Rate Limiting

Rate Limit: 5 requests per hour per IP address

Rate limit information is included in response headers:

  • X-RateLimit-Limit: Maximum requests per hour
  • X-RateLimit-Remaining: Remaining requests in current window
  • X-RateLimit-Reset: Unix timestamp when the limit resets

Scan Website

POST/api/v1/scan

Request Body

{
  "url": "https://example.com"
}

Response (Success)

{
  "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": []
    }
  ],
  "meta": {
    "fetchTimeMs": 1250,
    "pageSize": 45632,
    "statusCode": 200
  }
}

Response (Error)

{
  "error": "Rate limit exceeded",
  "details": "Maximum 5 requests per hour. Please try again later."
}

Data Structure

Categories

Each scan checks these categories:

  • SEO: Meta tags, headings, canonical URLs
  • Accessibility: Alt text, ARIA labels, color contrast
  • Performance: Page size, image optimization
  • Security: HTTPS, security headers
  • Links: Broken links, external link analysis

Issue Severity Levels

  • error: Critical issues that should be fixed immediately
  • warning: Important issues that should be addressed
  • info: Suggestions for improvement

Example Usage

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);
}

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
500Server error during scan

Support

Need help with the API? Have questions or feature requests?

Support: Contact our support team

Documentation: This page will be updated as the API evolves