Authentication
All requests must include your API key in the Authorization header.
Authorization: Bearer peak_<your_api_key>
Generate and manage your API keys from your . Keys never expire but can be revoked at any time. All endpoints return 401 if the key is missing or invalid.
Base URL
https://www.peakvisibility.io/api
Endpoints
Complete example (Node.js)
const TOKEN = process.env.PEAK_API_TOKEN // peak_...
const BASE = 'https://www.peakvisibility.io/api'
const headers = {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json',
}
// 1. Start the scan
const start = await fetch(`${BASE}/scan`, {
method: 'POST',
headers,
body: JSON.stringify({ url: 'https://example.com' }),
})
const { id } = await start.json()
console.log('Scan started:', id)
// 2. Poll until complete
let status = 'processing'
while (status === 'processing' || status === 'queued') {
await new Promise(r => setTimeout(r, 4000))
const poll = await fetch(`${BASE}/scan-status?id=${id}`, { headers })
const data = await poll.json()
status = data.status
console.log(`[${data.step}] ${data.message} — ${data.pageCount} pages`)
}
if (status !== 'complete') throw new Error(`Scan failed: ${status}`)
// 3. Download the ZIP
const dl = await fetch(`${BASE}/scan-download?id=${id}`, { headers })
const { url, filename } = await dl.json()
const zip = await fetch(url)
const buf = await zip.arrayBuffer()
require('fs').writeFileSync(filename, Buffer.from(buf))
console.log('Saved:', filename)ZIP contents
sitemap.xmlSubmit directly to Google Search Console.
robots.txtDrop into your site root.
meta-tags.htmlPer-page <head> blocks with title + description.
schema-markup.htmlJSON-LD structured data for each page.
og-tags.htmlOpen Graph + Twitter Card tags.
alt-text.jsonSuggested alt text for every image found.
peak-report.htmlConfidence scores and per-page SEO summary.
Rate limits
Scan submissions
20 / minute per IP
Status polls
Unlimited
Download requests
Unlimited
Pages per scan
Up to 500 (Agency)
Error codes
Need help?
Agency plan includes dedicated support. Email [email protected] with your scan ID and we'll get back to you quickly.