Developers
Everything in the product is reachable from a terminal, a pipeline, or an AI agent. No SDK required — plain HTTPS and JSON.
Quickstart
# Scan any URL, no key needed (30/hour per IP)
curl "https://www.fastrank.ai/api/scan?url=example.com"
# Or from the terminal
npx visibility scan example.com
# With a key: unlimited scans + your projects
export VISIBILITY_API_KEY=vis_… # Settings → API key
curl -H "Authorization: Bearer $VISIBILITY_API_KEY" https://www.fastrank.ai/api/v1/projects
Authentication
Create a key in Settings → API key. Send it as Authorization: Bearer vis_… or X-Api-Key: vis_…. Keys are scoped to your workspace; rotate or revoke anytime. Browser sessions also work for every endpoint, which makes the API easy to explore from the address bar.
REST API openapi.json
| Method | Path | What it does |
|---|---|---|
| GET | /api/scan?url= | Instant single-page scan: score, grade, issues, vitals, TLS, email auth. Public; &vitals=false for speed. |
| GET | /api/pagespeed?url=&strategy= | PageSpeed report: real-user Core Web Vitals, Lighthouse category scores, lab metrics, opportunities and diagnostics. strategy=mobile|desktop. Public, 10/hour without a key; 10–40 s on a cold URL. |
| GET | /api/v1/checks | All 83 check definitions (id, name, severity, category). |
| GET | /api/v1/me | Workspace, plan, limits, usage. |
| GET / POST | /api/v1/projects | List projects, or create one ({"domain":"example.com"}) and queue its first audit. |
| GET | /api/v1/projects/{id} | Project, alerts config, latest audit with Core Web Vitals and TLS expiry. |
| GET | /api/v1/projects/{id}/readiness | Readiness score 0–100, grade, points to goal, next actions, failing checks. |
| GET | /api/v1/projects/{id}/issues | Issues from the latest audit; filter ?check=, ?severity=. |
| GET | /api/v1/projects/{id}/pages | Crawled pages with status, title, depth, words. |
| GET | /api/v1/projects/{id}/keywords | Tracked keywords with engine, device, locale and latest position. |
| GET | /api/v1/projects/{id}/uptime | Availability % and check history (?hours=). |
| GET / POST | /api/v1/projects/{id}/audits | Audit history, or queue a new crawl. |
| GET | /api/protect/projects/{id} | CI gate: 200 pass, 412 fail, body explains why. |
Rate limits: anonymous scans 30/hour/IP. Keyed requests are limited by plan. Responses are JSON; errors are {"error": "…", "hint": "…"}.
CLI
Zero-install via npx. Prints a scorecard, exits non-zero when the score is below --min — perfect for pre-deploy checks.
npx visibility scan https://example.com --min 80
npx visibility scan example.com --json | jq '.issues[] | select(.severity=="error")'
npx visibility projects # needs VISIBILITY_API_KEY
npx visibility readiness <project-id> --min 85
npx visibility audit <project-id> --wait # queue a crawl and wait for the result
VISIBILITY_URL=https://www.fastrank.ai npx visibility scan example.com # point at this instance
Source: packages/visibility-cli. Node 18+. Publish with npm publish from that folder.
CI gate & GitHub Action
Fail a pull request when a page regresses or when a project's thresholds are exceeded. Thresholds live in project settings.
# .github/workflows/seo.yml
name: SEO gate
on: [pull_request, deployment_status]
jobs:
seo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/visibility-audit # or your-org/visibility-action@v1
with:
url: https://preview.example.com
min-score: 80
api-key: ${{ secrets.VISIBILITY_API_KEY }} # optional
base-url: https://www.fastrank.ai
Plain HTTP for any CI:
curl -fsS -H "Authorization: Bearer $VISIBILITY_API_KEY" https://www.fastrank.ai/api/protect/projects/$PROJECT_ID \
|| { echo "SEO gate failed"; exit 1; }
MCP server
Let Claude Desktop, Cursor, or any Model Context Protocol client scan sites and read your audits as tools: scan_url, compare_urls, list_projects, get_readiness, list_issues, trigger_audit, list_checks.
// claude_desktop_config.json / .cursor/mcp.json
{
"mcpServers": {
"visibility": {
"command": "npx",
"args": ["-y", "visibility-mcp"],
"env": { "VISIBILITY_API_KEY": "vis_…", "VISIBILITY_URL": "https://www.fastrank.ai" }
}
}
}
Source: packages/visibility-mcp. Then ask: “Scan example.com and open GitHub issues for every error.”
Webhooks
Set a webhook URL per project (Alerts & integrations). We POST JSON with header X-Visibility-Event:
audit.completed—{ projectId, domain, auditId, healthScore, previousHealthScore, pagesCrawled, errors }audit.health_drop— same payload, sent when the drop exceeds your thresholduptime.down/uptime.recovered—{ project, statusCode, responseMs }test— from the “Send test notification” button
Slack incoming webhooks work directly: the subject field renders as the message.
Badges
Project badge (updates with every audit, needs a public scorecard link): https://www.fastrank.ai/badge/<token>.svg.
Live badge for any URL: https://www.fastrank.ai/badge.svg?url=example.com
[](https://www.fastrank.ai/scan?url=example.com)
Embeddable audit widget
Drop a lead-capturing “free audit” form on your agency site. Results open on our scan page; the visitor's URL and email are POSTed to your data-lead endpoint.
<script src="https://www.fastrank.ai/embed/widget.js"
data-title="Free SEO audit by Acme"
data-lead="https://acme.example/api/leads"></script>
Browser extension beta
Scan the page you're on from the toolbar. Load packages/visibility-extension as an unpacked extension in Chrome (chrome://extensions → Developer mode → Load unpacked). Set the instance URL in the popup if you self-host.