DEVELOPER API

SIGHTFUL API

Add broken link detection to your apps, pipelines and workflows in minutes. Submit any URL and receive structured JSON — every link's HTTP status, category and source page, ready to process programmatically.

JSON responses Bearer token auth RESTful API versioned
HOW IT WORKS

THREE STEPS TO YOUR FIRST RESULT

From sign-up to your first JSON response in under five minutes.

01
AUTHENTICATE

Include your API key as a Bearer token in the Authorization header. Always call the API from your server — never from browser code, where the key would be visible in source.

02
SUBMIT A SCAN

POST any URL with a crawl depth of 1, 2 or 3. Depth 1 checks links on the target page. Depth 2–3 follow and check linked pages too.

03
GET RESULTS

Receive structured JSON with every link's URL, HTTP status code, category (ok / broken / redirect), link text and the page it was found on.

CODE EXAMPLES

MAKE YOUR FIRST CALL

Copy any example below — replace sk_live_YOUR_KEY_HERE with your API key and you're ready to go.

🔒 Server-side only. Your API key must be kept on your backend server and stored in an environment variable — never hard-coded or sent from a browser. Any request that exposes the key in client-side JavaScript risks that key being stolen and your quota being consumed by a third party.
POST https://sightful.info/api/v1/scan
curl -X POST 'https://sightful.info/api/v1/scan' \
  -H "Authorization: Bearer sk_live_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com", "depth": 1 }'
// Node.js — keep your API key on the server, never in browser code
const response = await fetch('https://sightful.info/api/v1/scan', {
  method:  'POST',
  headers: {
    'Authorization': 'Bearer sk_live_YOUR_KEY_HERE',
    'Content-Type':  'application/json',
  },
  body: JSON.stringify({
    url:   'https://example.com',
    depth: 1,
  }),
});

const data = await response.json();

// Filter to broken links only
const broken = data.results.filter(r => r.category === 'broken');
console.log(`Found ${broken.length} broken link(s)`);
import requests

response = requests.post(
    'https://sightful.info/api/v1/scan',
    headers={
        'Authorization': 'Bearer sk_live_YOUR_KEY_HERE',
        'Content-Type':  'application/json',
    },
    json={
        'url':   'https://example.com',
        'depth': 1,
    },
)

data = response.json()

# Filter to broken links only
broken = [r for r in data['results'] if r['category'] == 'broken']
print(f"Found {len(broken)} broken link(s)")
{
  "url":            "https://example.com",
  "depth":          1,
  "pages_crawled":  1,
  "hit_page_limit": false,
  "hit_time_limit": false,
  "js_rendering":   null,
  "results": [
    {
      "url":         "https://example.com/about",
      "source_page": "https://example.com",
      "link_text":   "About Us",
      "status":      200,
      "category":    "ok"
    },
    {
      "url":         "https://example.com/old-page",
      "source_page": "https://example.com",
      "link_text":   "Read more",
      "status":      404,
      "category":    "broken"
    },
    {
      "url":         "https://example.com/signin",
      "source_page": "https://example.com",
      "link_text":   "Sign in",
      "status":      301,
      "category":    "redirect"
    }
  ],
  "meta": {
    "tier":             "hobbyist",
    "calls_this_month": 1,
    "calls_remaining":  499,
    "resets_at":        "2026-07-01T00:00:00+00:00"
  }
}
PLANS

API PRICING

All plans include structured JSON responses, API key management with rotation, and rate-limit headers on every response.

HOBBYIST
Free
forever
  • 500 calls / month
  • Depth 1 scanning
  • Structured JSON results
  • API key management
  • Depth 2–3 scanning
  • Enhanced JS scanning
  • Multiple API keys
GET STARTED
PROFESSIONAL
$149 /mo
billed monthly
or $1,490/yr — 2 months free
  • 25,000 calls / month
  • Depth 1–3 scanning
  • Structured JSON results
  • API key management
  • Multiple API keys
  • Enhanced JS scanning
GET STARTED
READY TO BUILD? GET API ACCESS