Integrate SEO analysis, GEO visibility, backlink intelligence, and AI citation data into your applications.
https://api.ai1stseo.comAuthorization: Bearer ai1st_YOUR_KEY or X-API-Key: ai1st_YOUR_KEY"status": "success" or "status": "error".
All API endpoints require either a Cognito JWT token (from login) or a developer API key. API keys are prefixed with ai1st_ and support scoped access (read, write, admin).
Log in to the admin dashboard, navigate to API Keys, and generate a new key. Keys are shown once — save it immediately.
/api/keys{ "label": "My Integration", "scopes": ["read", "write"], "rate_limit_per_hour": 100 }
100 requests/hour per key
Set per key at creation (up to 1000/hr)
10 requests/second max
/api/analyze authRun 200+ SEO checks across 10 categories. Returns scores, passed/failed checks, and recommendations.
Request: { "url": "https://example.com" }
Response: { "status": "success", "overallScore": 75, "categories": {...}, "checks": [...] }
/api/content-score authScore a URL for readability (Flesch), SEO (on-page), and AEO (AI-extractable content).
/api/content-brief authGenerate an AI content brief for a target keyword with SERP analysis.
/api/health publicService health check. Returns available categories and check counts.
/api/geo-probe authProbe an AI model (ChatGPT, Gemini, Perplexity) to check if it cites a brand for a keyword.
Request: { "keyword": "best seo tools", "ai_model": "chatgpt", "url": "https://example.com", "brand_name": "Example" }
Response: { "status": "success", "probe": { "cited": true, "position": 3, ... } }
/api/geo-probe/batch authProbe multiple AI models simultaneously for the same keyword.
/api/geo-probe/models publicList available AI models for probing.
/api/geo-probe/history authGet probe history. Filter by keyword, model, date range.
/api/aeo/analyze authRun Answer Engine Optimization analysis on a URL.
/api/backlinks/score authScore a domain's authority (0-100) using 10+ real-time signals.
Request: { "domain": "example.com" }
Response: { "status": "success", "da_score": 72, "signals": { "https": true, "response_time_ms": 340, ... } }
/api/backlinks/analyze-toxic authClassify backlinks as potentially toxic using heuristic signals.
/api/backlinks/link-gap authCompare your domain against competitors to find backlink gaps.
/api/backlinks/citation-authority authProbe AI models to discover which domains they cite for a topic. No competitor offers this.
/api/backlinks/broken-links authScan a page for broken outbound links — reclaim opportunities.
/api/backlinks/wikipedia-gaps authFind dead citations in Wikipedia articles as replacement opportunities.
/api/backlinks/competitor-alerts authDetect when a competitor gains or loses significant domain authority.
/api/backlinks/priority-queue authUnified opportunity queue ranked by composite priority score.
/api/backlinks/report/download authGenerate a white-label HTML report with presigned S3 download URL.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/data/audits | Store an audit result |
| GET | /api/data/audits | List audits (filter by URL) |
| POST | /api/data/geo-probes | Store a GEO probe result |
| GET | /api/data/geo-probes | List GEO probes |
| POST | /api/data/content-briefs | Store a content brief |
| GET | /api/data/content-briefs | List content briefs |
| POST | /api/data/competitors | Add a tracked competitor |
| GET | /api/data/competitors | List tracked competitors |
| POST | /api/data/reports | Store a report |
| GET | /api/data/reports | List reports |
/api/webhooks authRegister a URL to receive event notifications (HMAC-signed).
{ "url": "https://your-server.com/hook", "events": ["audit.created", "*"], "secret": "your-hmac-secret" }
/api/notifications/subscribe authSubscribe to events via Slack webhook or email.
{ "channel": "slack", "target": "https://hooks.slack.com/services/...", "events": ["*"] }
/api/webhooks/events publicList all available event types.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/contact | Contact form (sends via SES) |
| POST | /api/invest | Investor inquiry form |
| POST | /api/collect-email | Email lead collection |
| POST | /api/content-freshness | Record content update timestamp |
| GET | /api/content-freshness | Get freshness history |
All errors return JSON with "status": "error" and a "message" field.
| Code | Meaning |
|---|---|
| 400 | Bad request — missing or invalid parameters |
| 401 | Unauthorized — missing or expired token/key |
| 403 | Forbidden — insufficient role (admin required) |
| 404 | Not found — resource or endpoint doesn't exist |
| 429 | Rate limited — exceeded requests per hour |
| 500 | Server error — check the message field |