Cookies & analytics
Essential cookies keep you signed in. Analytics load only with your OK. Privacy Policy
The AEOForged REST API is an HTTPS, JSON API that gives developers and AI agents programmatic access to 30 tools plus consolidated verbs — research, scoring, grounded drafting, site diagnosis, authority, original research, and measured citation monitoring. Responses use a consistent { ok, data } envelope.
All endpoints use HTTPS. Pass Authorization: Bearer aeo_sk_… for an account key or Bearer aeo_ho_… for a project handoff. GET /api/v1/onboard is the live catalog; this page is a guide, not the source of truth for costs.
Last updated
Quick start
1. Create an API key at Settings → API Keys. 2. Bootstrap: curl -H "Authorization: Bearer aeo_sk_..." https://aeoforged.com/api/v1/onboard. 3. Score some content (free): curl -X POST -H "Authorization: Bearer aeo_sk_..." -d '{"markdown":"# Test"}' https://aeoforged.com/api/v1/score. 4. See the Prompting Guide or MCP Setup for agent wiring.
Hard rules for agents
POST /write returns 422 research_required without research sources. Submit-for-review and final: true saves return 422 ungrounded_content without research-allow-listed citations. Prefer POST /api/v1/create if you want one grounded call.submit-for-review rejects scores below 80 (422 below_score_bar). Improve with /improve mode to-score, or escalate via /decisions then resubmit with human-authorized acknowledge_low_score. This is an agent workflow gate — not a citation promise.gate-status or decisions returns wait, stop. Payment and package checkout are human-only./visibility and /share-of-voice are Brave-search proxies. Measured engine citations live on /visibility/scoreboard and /citation-sources.202 + poll_url. Poll GET /api/v1/tool-runs/{id} until status: "complete".Base URL: https://aeoforged.com
API version: v1 (stable; breaking changes ship under v2)
Auth: Account key aeo_sk_ or project handoff aeo_ho_. Handoff tokens are workspace-scoped; account-level listings may return handoff_scope.
Response headers: X-Credits-Charged, X-Credits-Remaining, X-Tool-Run-Id, X-AEO-Score, Retry-After (on 429), X-Request-Id
Rate limits: Free: 10/min, 100/day | Pro: 60/min | Team: 120/min
Billing semantics: Credits are reserved before the tool runs and refunded on failure. Validation errors (400/422) and tool errors (500) do not consume credits. Authoritative balance: GET /api/v1/me.
Export & CSV: Many reads accept ?format=csv. Full per-client JSON export requires the Agency full-export capability.
{
"ok": false,
"error": {
"code": "insufficient_credits",
"message": "Human-readable reason",
"upgrade_url": "/settings/billing"
}
}unauthorized (401) — missing or invalid credentialinvalid_input / invalid_json (400) — bad request bodyresearch_required / ungrounded_content / below_score_bar (422) — grounding or score gateinsufficient_credits (402) — buy credits or upgraderate_limited (429) — see retry_after_secondshandoff_scope (403) — handoff token outside its Projecttool_error (500) — upstream failure (no charge)Prefer these intent-driven endpoints. Granular tools remain stable aliases. Live verb metadata is on GET /api/v1/onboard.
| Method | Endpoint | Credits | Purpose |
|---|---|---|---|
| POST | /api/v1/create | 20/~44 cr | Unified grounded creation: research → outline → write → polish → fact-check → score → package. |
| POST | /api/v1/improve | 2-8 cr | Citation-safe transforms by mode: voice (2), to-score (2), humanize (2), aeo (8), freshness (8). |
| POST | /api/v1/package | Free/3 cr | Machine-readable artifacts: jsonld (free), snippets (free), llms-txt (3). |
| POST | /api/v1/diagnose | Free | Site-wide audit: discover pages, score each, competitive context, action plan. |
| POST | /api/v1/factcheck | Free | Deterministic statistical grounding against research sources (no LLM). |
| POST | /api/v1/visibility | 10 cr | Brave-search visibility proxy vs competitors — report as likely visibility, not confirmed ChatGPT/Perplexity/Gemini citations. |
Representative endpoints (57 below). For the complete live catalog — including every mode and credit cost — use GET /api/v1/onboard.
| Method | Endpoint | Credits | Purpose |
|---|---|---|---|
| GET | /api/v1/onboard | Free | Agent bootstrap: live tool catalog, consolidated verbs, scoring dimensions, grounding/score-bar rules, and session context (account key vs handoff). |
| GET | /api/v1/me | Free | Whoami: auth type, tier, credit balance, and per-tool cost table (tool_costs). |
| GET | /api/v1/tool-runs/[id] | Free | Poll long-running tools. |
| GET | /api/v1/handoff/[token] | Free | Resolve a short-lived project handoff token (aeo_ho_…). |
| POST | /api/v1/score | Free | Score markdown or a live url across 8 AEO dimensions (0–100). |
| POST | /api/v1/schema | Free | Generate JSON-LD (Article / FAQPage / HowTo as applicable) from title + outline or finished content. |
| POST | /api/v1/research | 10/15 cr | Live web research. |
| POST | /api/v1/outline | 3 cr | Generate a structured content outline from research data. |
| POST | /api/v1/write | 8 cr | Hosted section writing from outline + research. |
| POST | /api/v1/polish | 2 cr | Style and cleanup pass with changelog, heading preservation, and brand voice. |
| POST | /api/v1/verify | 2 cr | LLM review of non-statistical claims. |
| POST | /api/v1/factcheck | Free | Deterministic grounding check for statistical claims (no LLM). |
| POST | /api/v1/create | 20/~44 cr | Consolidated create verb (recommended). |
| POST | /api/v1/improve | 2-8 cr | Consolidated improve verb. |
| POST | /api/v1/package | Free/3 | Consolidated package verb. |
| POST | /api/v1/generate | 12/20 cr | Legacy full pipeline. |
| POST | /api/v1/projects/import | Free | Import external markdown or a live url into a workspace as a baseline-scored content-mode article. |
| POST | /api/v1/projects/[id]/submit-for-review | Free | Human review gate. |
| GET | /api/v1/projects/[id]/gate-status | Free | Poll the review gate. |
| POST | /api/v1/decisions | Free | Durable human decision gate (MCP: aeo_ask_human). |
| POST | /api/v1/audit | 5 cr | Fetch a URL, score it, and return a prioritized improvement plan. |
| POST | /api/v1/diagnose | Free | Site-wide diagnose (recommended alias of complete_audit workflows). |
| POST | /api/v1/complete-audit | Free* | Comprehensive site audit (also MCP aeo_complete_audit). |
| GET | /api/v1/audit-snapshots/[id] | Free | Read a persisted audit snapshot (scorecards, sampling, site plan when present). |
| POST | /api/v1/verify-page | Free | Re-fetch one URL, re-score against the snapshot's pinned research, run deterministic checks. |
| PATCH | /api/v1/action-items/[id] | Free | Action-queue transitions: open → in_progress → done | blocked (+ blocked_reason) | reopen. |
| POST | /api/v1/action-items/[id]/document-fix | Free | Capture a Remediation Story (problem + fix) in the agent's own words. |
| POST | /api/v1/compare | 3 cr | Compare two articles head-to-head across all 8 AEO dimensions. |
| POST | /api/v1/refresh | 8 cr | Analyze existing content against fresh research. |
| POST | /api/v1/cluster | 5 cr | Group keywords by semantic similarity with pillar/supporting hierarchy and a content calendar. |
| POST | /api/v1/extract | Free | Reformat markdown for featured snippet / knowledge panel / PAA extraction. |
| POST | /api/v1/authority | 0-8* cr | Authority OS modes: audit, blueprint, distribution_candidates, distribution, entity, external, recognition, compare, remediate, replan, social_scan, wikidata_draft, nap_scan. |
| POST | /api/v1/study | 8* cr | Original Research Engine lifecycle: design (8cr) → run (lane-priced) → draft (8cr) → register (free, live HEAD verify). |
| POST | /api/v1/citation-sources | Free | Citation Source Intelligence over measured visibility checks (not the Brave proxy): source leaderboard, competitor fuel, off-site opportunities. |
| GET | /api/v1/visibility/graph | Free | Measured citation map for one workspace: hubs (URLs cited for two or more tracked queries), uncovered clusters, and one next pack. |
| GET | /api/v1/workspace-context | Free | Typed join of this workspace's existing records: index (counts, sitting, next_hop) or one neighbourhood (?node=&id=). |
| POST | /api/v1/crawler-logs | Free | AI crawler log analytics: upload Apache/Nginx combined or JSON lines (≤5 MB). |
| POST | /api/v1/agent-ready | Free | Probe-based agent readiness: agent user-agents, form operability, commerce schema, protocol signals, capability scores. |
| POST | /api/v1/agent-policy | 3 cr | Generate robots.txt agent allow rules + AGENT-POLICY.md draft. |
| POST | /api/v1/client-profile | 5 cr | Build client intelligence from a website (brand voice, facts, audience). |
| POST | /api/v1/optimise | 8 cr | Page-level section analysis, intent classification, and AEO-oriented rewrites. |
| POST | /api/v1/track | Free | Register a URL for visibility monitoring via a Brave-search ranking proxy — not a measured ChatGPT/Perplexity/Gemini citation. |
| GET | /api/v1/track/status | Free | List tracked URLs with latest proxy monitoring data. |
| GET | /api/v1/visibility/scoreboard | Free | Query-first measured citation scoreboard (real engine checks): per-query status, SOV basis, winning page, competitors cited. |
| GET | /api/v1/sov | Free | Persisted Share of Voice history — Brave-search proxy (not confirmed AI-engine citations). |
| POST | /api/v1/crawlability | Free | AI crawlability: robots.txt for AI bots, meta directives, llms.txt, sitemap, JS rendering signals. |
| POST | /api/v1/llms-txt | 3 cr | Generate spec-compliant llms.txt + llms-full.txt with semantic page grouping and deployment instructions. |
| POST | /api/v1/share-of-voice | 10 cr | Share of Voice tracker (Brave proxy). |
| POST | /api/v1/moat-check | 15 cr | Competitive gap analysis: topic/format/schema/depth gaps and a prioritized action plan. |
| GET | /api/v1/projects | Free | List articles — org-scoped for API keys, workspace-scoped for handoff tokens. |
| GET | /api/v1/workspaces | Free | List accessible Projects (workspaces). |
| POST | /api/v1/workflow/audit-improve | 5-13 cr | Composite: audit a URL then refresh if below threshold. |
| POST | /api/v1/workflow/strategy | ~44 cr | Composite: cluster → research + outline top N pillars. |
| POST | /api/v1/workflow/health | 5/URL cr | Batch-audit up to 10 URLs into a priority dashboard. |
| POST | /api/v1/workflow/quality-gate | Free | Score against a target threshold with pass/fail + fixes. |
| GET | /api/v1/platform/stats | Free | Public aggregate platform analytics (no auth). |
| GET | /api/v1/clients/[workspaceId]/export | Free | Agency full-export JSON archive for one client (profile, latest snapshot, action items, tracked URLs, visibility). |
/api/v1/onboardAgent bootstrap: live tool catalog, consolidated verbs, scoring dimensions, grounding/score-bar rules, and session context (account key vs handoff). Costs and tool lists here stay current.
(no body — optional ?workspace_id= for setup_checklist)
{
"ok": true,
"data": {
"tools": [ { "name": "research", "endpoint": "POST /api/v1/research", "cost": 10, "..." : "..." } ],
"verbs": [ { "name": "create", "endpoint": "POST /api/v1/create", "mcp": "aeo_create", "..." : "..." } ],
"workflow": {
"grounding_gate": "RESEARCH FIRST — enforced...",
"score_bar": "submit-for-review enforces score >= 80..."
},
"session_context": { "mode": "account" }
}
}/api/v1/meWhoami: auth type, tier, credit balance, and per-tool cost table (tool_costs). Call before paid tools to verify auth and budget. Prefer this over any static cost table in docs.
(no body)
{
"ok": true,
"data": {
"user_id": "uuid",
"auth_type": "api_key",
"tier": "pro",
"credits": {
"included_remaining": 187,
"balance": 0,
"total": 187
},
"tool_costs": {
"score": 0,
"research": 10,
"research_deep": 15,
"write_sections": 8,
"create": 20,
"study_design": 8,
"moat_check": 15
}
},
"credits_remaining": 187
}/api/v1/tool-runs/[id]Poll long-running tools. Async tools return 202 with run_id + poll_url. Statuses: running | complete | error | timeout. Check likely_stalled when heartbeat is old.
(no body)
{
"ok": true,
"data": {
"id": "uuid",
"status": "complete",
"step": "aggregating_results",
"progress": { "current": 10, "total": 10 },
"result": { "..." : "..." },
"heartbeat_ago_seconds": 2,
"likely_stalled": false
}
}/api/v1/handoff/[token]Resolve a short-lived project handoff token (aeo_ho_…). Returns workspace brief, articles, credits, MCP/REST config, next steps, and (when present) audit queue + verify-page instructions. Then use the same token as Bearer.
(token in path — no body)
{
"ok": true,
"data": {
"workspace": { "id": "uuid", "name": "..." },
"credits": { "total": 187 },
"mcp": { "url": "https://aeoforged.com/api/mcp/mcp" },
"next_steps": [ "..." ]
}
}/api/v1/scoreScore markdown or a live url across 8 AEO dimensions (0–100). Page-type aware. Pass research for entity/grounding feedback. Scoring is publish-readiness feedback — not a live citation guarantee.
{
"markdown": "# Your Article\n\nContent here...",
"hasJsonLd": false,
"entities": ["entity1", "entity2"]
// or: "url": "https://example.com/page"
}{
"ok": true,
"data": {
"total": 72,
"pageType": "article",
"breakdown": [
{ "name": "Direct Answer", "score": 80, "max": 100, "details": "..." }
],
"suggestions": [
{ "dimension": "Schema", "suggestion": "Add JSON-LD structured data" }
]
},
"credits_remaining": 200
}/api/v1/schemaGenerate JSON-LD (Article / FAQPage / HowTo as applicable) from title + outline or finished content.
{
"title": "Your Article Title",
"outline": {
"title": "Your Article Title",
"sections": [
{
"h2": "Section Title",
"intent": "informational",
"directAnswer": "The concise answer.",
"eatSlots": ["expertise"]
}
]
}
}{
"ok": true,
"data": {
"schemas": [
{ "@context": "https://schema.org", "@type": "Article", "..." : "..." }
]
}
}/api/v1/researchLive web research. Standard (10cr) or deep (15cr). Async by default (202 + poll_url); force blocking with ?wait=true. Pass a detailed brief for better results.
{
"keyword": "answer engine optimization",
"brief": "Optional brand/audience context",
"depth": "standard",
"region": "US",
"language": "en",
"recency": true
}{
"ok": true,
"data": {
"entities": ["AEO", "Google AI Overviews"],
"claimsSupportedBySources": ["..."],
"dataPoints": ["..."],
"topUrls": ["https://..."]
},
"credits_remaining": 190
}/api/v1/outlineGenerate a structured content outline from research data. Optional project_id persists to the workspace article.
{
"topic": "answer engine optimization",
"research": { "..." : "..." },
"contentType": "article",
"brief": "Optional context"
}{
"ok": true,
"data": {
"title": "Understanding Answer Engine Optimization",
"sections": ["..."]
},
"credits_remaining": 187
}/api/v1/writeHosted section writing from outline + research. Requires research-backed sources (422 research_required otherwise). Citations outside the research allow-list are stripped.
{
"outline": { "title": "...", "sections": ["..."] },
"research": { "..." : "..." },
"contentType": "article",
"tone": "professional",
"readingLevel": "general"
}{
"ok": true,
"data": {
"sections": ["..."],
"markdown": "## Section 1\n\nContent...",
"citations": [{ "url": "https://...", "howUsed": "..." }]
}
}/api/v1/polishStyle and cleanup pass with changelog, heading preservation, and brand voice. Prefer POST /api/v1/improve?mode=voice for new integrations.
{
"markdown": "## Section\n\nContent...",
"contentType": "article",
"brandVoice": "Never use passive voice",
"targetReadingLevel": 8
}{
"ok": true,
"data": {
"markdown": "## Section\n\nPolished content...",
"changesApplied": ["Shortened sentences", "Removed passive voice"],
"removedCitations": [],
"headingCheck": { "preserved": true }
}
}/api/v1/verifyLLM review of non-statistical claims. For statistics, prefer /api/v1/factcheck (deterministic, free).
{
"markdown": "Article content...",
"research": { "..." : "..." }
}{
"ok": true,
"data": {
"markdown": "Verified content...",
"claimsRemoved": ["..."],
"claimsQualified": ["..."]
}
}/api/v1/factcheckDeterministic grounding check for statistical claims (no LLM). Pass research, or project_id to load pinned research_json. /score can return grounding when research is supplied.
{
"markdown": "Article content with 70% stats...",
"research": { "..." : "..." }
// or: "project_id": "<uuid>"
}{
"ok": true,
"data": {
"claims": [ { "text": "...", "status": "supported", "matchedSourceUrl": "https://..." } ],
"totalClaims": 3,
"supportedClaims": 2,
"unsupportedClaims": ["..."],
"groundingScore": 67
}
}/api/v1/createConsolidated create verb (recommended). Modes single/gate (~20cr) or strategy (~44cr). Grounds end-to-end so lightweight agents need not chain research → write → factcheck manually.
{
"mode": "single",
"keyword": "answer engine optimization",
"brief": "Audience, product, CTA",
"target_score": 80
}{
"ok": true,
"data": {
"markdown": "# ...",
"score": { "total": 82 },
"project_id": "uuid"
}
}/api/v1/improveConsolidated improve verb. Modes: voice | aeo | to-score | freshness | humanize. Cost depends on mode (see /me or /onboard).
{
"mode": "to-score",
"markdown": "# Draft...",
"research": { "..." : "..." },
"target_score": 80
}{
"ok": true,
"data": {
"markdown": "# Revised...",
"score": { "total": 81 }
}
}/api/v1/packageConsolidated package verb. Modes: jsonld | snippets | llms-txt.
{
"mode": "jsonld",
"markdown": "# Finished article...",
"title": "Article title"
}{
"ok": true,
"data": {
"schemas": ["..."]
}
}/api/v1/generateLegacy full pipeline. Draft (12cr) or publish (20cr). New integrations should prefer /api/v1/create.
{
"keyword": "answer engine optimization",
"brief": "Optional context",
"contentType": "article",
"mode": "publish"
}{
"ok": true,
"data": {
"markdown": "# Article Title\n\n...",
"score": { "total": 85 },
"completedSteps": ["research", "outline", "write", "polish", "verify", "score"]
}
}/api/v1/projects/importImport external markdown or a live url into a workspace as a baseline-scored content-mode article. Then research → score → improve(to-score) → save. Ungrounded until research-backed citations are added.
{
"workspace_id": "uuid",
"markdown": "# Existing article...",
"keyword": "optional topic"
// or: "url": "https://example.com/article"
}{
"ok": true,
"data": {
"project_id": "uuid",
"baseline": { "total": 58 },
"weakest_dimensions": ["Direct Answer", "Schema"],
"next_steps": ["research", "score", "improve"]
}
}/api/v1/projects/[id]/submit-for-reviewHuman review gate. Rejects ungrounded content (422 ungrounded_content) and scores below 80 (422 below_score_bar) unless a human-authorized acknowledge_low_score + reason is present. Poll gate-status afterward; wait means stop.
{
// optional escape after aeo_ask_human:
"acknowledge_low_score": true,
"reason": "Human approved shipping at 76"
}{
"ok": true,
"data": {
"status": "pending_review",
"project_id": "uuid"
}
}/api/v1/projects/[id]/gate-statusPoll the review gate. action: wait | apply_feedback_and_resubmit | publish_and_track. Never skip wait.
(no body)
{
"ok": true,
"data": {
"action": "wait",
"status": "pending_review"
}
}/api/v1/decisionsDurable human decision gate (MCP: aeo_ask_human). Create a question (+ optional options), then GET /api/v1/decisions/{id} until action is proceed. Wait means stop. Payment and package checkout are always human-only — never automate them.
{
"question": "Ship this draft below score 80?",
"options": ["Yes, acknowledge low score", "Keep iterating"]
}{
"ok": true,
"data": {
"id": "uuid",
"status": "pending",
"action": "wait"
}
}/api/v1/auditFetch a URL, score it, and return a prioritized improvement plan. Also available as the consolidated audit verb with crawlability + grounding extras.
{
"url": "https://example.com/article",
"targetKeyword": "answer engine optimization",
"brief": "Optional brand context"
}{
"ok": true,
"data": {
"url": "https://example.com/article",
"score": { "total": 62, "breakdown": ["..."] },
"improvements": [
{ "priority": "high", "category": "Structure", "description": "Add question-format H2 headings" }
]
}
}/api/v1/diagnoseSite-wide diagnose (recommended alias of complete_audit workflows). Async by default → 202 + poll_url. Free path is bounded; paid depth flags (when authorized) are priced in code and returned by the API — never invent prices.
{
"siteUrl": "https://example.com",
"workspace_id": "uuid"
}{
"ok": true,
"data": {
"run_id": "uuid",
"poll_url": "/api/v1/tool-runs/uuid",
"status": "running"
}
}/api/v1/complete-auditComprehensive site audit (also MCP aeo_complete_audit). Discovers pages, scores, optional competitor context, persists an audit snapshot + action items. Async by default. Pass workspace_id when available.
{
"siteUrl": "https://example.com",
"workspace_id": "uuid"
}{
"ok": true,
"data": {
"run_id": "uuid",
"poll_url": "/api/v1/tool-runs/uuid"
}
}/api/v1/audit-snapshots/[id]Read a persisted audit snapshot (scorecards, sampling, site plan when present). Org-scoped; handoff tokens limited to their workspace. ?format=csv&dataset=scorecards|actions for CSV.
(no body)
{
"ok": true,
"data": {
"id": "uuid",
"siteUrl": "https://example.com",
"sampling": { "discovered": 40, "technicalChecked": 40, "llmAudited": 30, "strategy": "scored-select" },
"report": { "overallScore": 71, "scorecards": ["..."] }
}
}/api/v1/verify-pageRe-fetch one URL, re-score against the snapshot's pinned research, run deterministic checks. Sole writer that can promote done/applied items to verified. MCP: aeo_verify_page.
{
"url": "https://example.com/pricing",
"snapshot_id": "uuid"
}{
"ok": true,
"data": {
"url": "https://example.com/pricing",
"baselineScore": 62,
"freshScore": 78,
"promoted": ["action-item-uuid"]
}
}/api/v1/action-items/[id]Action-queue transitions: open → in_progress → done | blocked (+ blocked_reason) | reopen. Rejects status verified — use verify-page. MCP: aeo_action_update.
{
"status": "in_progress"
}{
"ok": true,
"data": { "id": "uuid", "status": "in_progress" }
}/api/v1/action-items/[id]/document-fixCapture a Remediation Story (problem + fix) in the agent's own words. No LLM. Measured impact is attached later from verify-page evidence. MCP: aeo_document_fix.
{
"problem": "Homepage had no FAQ block answer engines could extract.",
"fix": "Added a concise FAQ section with schema matching visible copy."
}{
"ok": true,
"data": { "action_item_id": "uuid", "recorded": true }
}/api/v1/compareCompare two articles head-to-head across all 8 AEO dimensions. Provide URLs or markdown for each.
{
"contentA": { "url": "https://example.com/our-article" },
"contentB": { "url": "https://competitor.com/their-article" },
"targetKeyword": "answer engine optimization"
}{
"ok": true,
"data": {
"scoreA": { "total": 78 },
"scoreB": { "total": 62 },
"winner": "A",
"recommendations": ["..."]
}
}/api/v1/refreshAnalyze existing content against fresh research. Prefer /api/v1/improve mode freshness for new integrations.
{
"url": "https://example.com/old-article",
"keyword": "content marketing strategy"
}{
"ok": true,
"data": {
"currentScore": { "total": 55 },
"projectedScore": 72,
"updatePlan": ["..."]
}
}/api/v1/clusterGroup keywords by semantic similarity with pillar/supporting hierarchy and a content calendar.
{
"keywords": ["what is SEO", "SEO basics", "keyword research tools"],
"domain": "example.com",
"maxClusters": 5
}{
"ok": true,
"data": {
"clusters": ["..."],
"contentCalendar": ["..."]
}
}/api/v1/extractReformat markdown for featured snippet / knowledge panel / PAA extraction. Prefer /api/v1/package mode snippets for new integrations.
{
"markdown": "## What is AEO?\n\nAnswer Engine Optimization is...",
"format": "all"
}{
"ok": true,
"data": {
"featuredSnippet": { "definition": "..." },
"peopleAlsoAsk": ["..."],
"extractabilityScore": 8
}
}/api/v1/authorityAuthority OS modes: audit, blueprint, distribution_candidates, distribution, entity, external, recognition, compare, remediate, replan, social_scan, wikidata_draft, nap_scan. Costs vary by mode — read /onboard or /me. MCP: aeo_authority.
{
"mode": "audit",
"workspace_id": "uuid"
}{
"ok": true,
"data": {
"mode": "audit",
"authorityProfile": { "..." : "..." }
}
}/api/v1/studyOriginal Research Engine lifecycle: design (8cr) → run (lane-priced) → draft (8cr) → register (free, live HEAD verify). Lanes: bench | engine | first_party | comparison. Depth floors refuse thin samples. MCP: aeo_study. Exact run pricing from /me and the API response.
{
"mode": "design",
"lane": "engine",
"workspace_id": "uuid",
"question": "Which domains are cited for category queries?"
}{
"ok": true,
"data": {
"study_id": "uuid",
"status": "designed"
}
}/api/v1/citation-sourcesCitation Source Intelligence over measured visibility checks (not the Brave proxy): source leaderboard, competitor fuel, off-site opportunities. Run visibility checks first. MCP: aeo_citation_sources.
{
"workspace_id": "uuid"
}{
"ok": true,
"data": {
"sources": ["..."],
"opportunities": ["..."]
}
}/api/v1/visibility/graphMeasured citation map for one workspace: hubs (URLs cited for two or more tracked queries), uncovered clusters, and one next pack. Never the Brave proxy; does not trigger checks. Hub URLs are aims, not citations. MCP: aeo_citation_graph.
?workspace_id=uuid
{
"ok": true,
"data": {
"thin": false,
"hubs": ["..."],
"clusters": ["..."],
"next_action": { "packId": "content_cycle", "reason": "..." }
}
}/api/v1/workspace-contextTyped join of this workspace's existing records: index (counts, sitting, next_hop) or one neighbourhood (?node=&id=). Never invents edges. Hub URLs are aims, not citations. MCP: aeo_workspace_context.
?workspace_id=uuid
{
"ok": true,
"data": {
"counts": { "pages": 0, "questions": 0, "thin": false },
"next_hop": null,
"sitting": { "packId": null }
}
}/api/v1/crawler-logsAI crawler log analytics: upload Apache/Nginx combined or JSON lines (≤5 MB). Deterministic parse — bots seen, top pages, error hotspots, crawl-vs-citation cross-ref. Sample-scoped honesty (never claim a bot never visits beyond the sample). MCP: aeo_crawler_logs.
{
"log": "127.0.0.1 - - [08/Aug/2026:12:00:00 +0000] \"GET / HTTP/1.1\" 200 1234 \"-\" \"GPTBot/...\"",
"workspace_id": "uuid",
"site_url": "https://example.com"
}{
"ok": true,
"data": {
"botsSeen": ["GPTBot"],
"findings": ["..."]
}
}/api/v1/agent-readyProbe-based agent readiness: agent user-agents, form operability, commerce schema, protocol signals, capability scores. MCP: aeo_agent_ready.
{
"siteUrl": "https://example.com"
}{
"ok": true,
"data": {
"capabilities": { "read": "pass", "forms": "partial" },
"recommendations": ["..."]
}
}/api/v1/agent-policyGenerate robots.txt agent allow rules + AGENT-POLICY.md draft. MCP: aeo_agent_policy.
{
"siteUrl": "https://example.com"
}{
"ok": true,
"data": {
"robotsRules": "...",
"agentPolicyMd": "..."
}
}/api/v1/client-profileBuild client intelligence from a website (brand voice, facts, audience). List existing profiles via GET /api/v1/client-profile/list.
{
"siteUrl": "https://example.com"
}{
"ok": true,
"data": {
"id": "uuid",
"company_name": "Example",
"profile": { "..." : "..." }
}
}/api/v1/optimisePage-level section analysis, intent classification, and AEO-oriented rewrites. Prefer /api/v1/improve mode aeo for new integrations.
{
"url": "https://example.com/page"
}{
"ok": true,
"data": {
"sections": ["..."],
"rewrites": ["..."]
}
}/api/v1/trackRegister a URL for visibility monitoring via a Brave-search ranking proxy — not a measured ChatGPT/Perplexity/Gemini citation. For measured engine citations use /api/v1/visibility/scoreboard.
{
"url": "https://example.com/my-article",
"keyword": "answer engine optimization",
"project_id": "uuid"
}{
"ok": true,
"data": {
"id": "uuid",
"url": "https://example.com/my-article",
"status": "active",
"created_at": "2026-08-08T12:00:00Z"
}
}/api/v1/track/statusList tracked URLs with latest proxy monitoring data. Supports ?format=csv.
(no body)
{
"ok": true,
"data": [
{
"id": "uuid",
"url": "https://example.com/my-article",
"keyword": "answer engine optimization",
"status": "active"
}
]
}/api/v1/visibility/scoreboardQuery-first measured citation scoreboard (real engine checks): per-query status, SOV basis, winning page, competitors cited. ?workspace_id= to scope, ?format=csv to export.
(no body — query params: ?workspace_id=uuid, ?format=csv)
{
"ok": true,
"data": {
"summary": {
"citedRate": 0.42,
"perQuery": [
{ "query": "best aeo tools", "status": "cited", "bestTier": "page", "winningPage": "https://example.com/tools" }
]
},
"measuredEngines": ["perplexity", "chatgpt"]
}
}/api/v1/sovPersisted Share of Voice history — Brave-search proxy (not confirmed AI-engine citations). Org-scoped; not available to handoff tokens. ?format=csv supported.
(no body — query param: ?format=csv)
{
"ok": true,
"data": {
"methodology": "Brave-search visibility proxy (not a confirmed AI-engine citation).",
"snapshots": ["..."],
"count": 1
}
}/api/v1/crawlabilityAI crawlability: robots.txt for AI bots, meta directives, llms.txt, sitemap, JS rendering signals.
{
"siteUrl": "https://example.com"
}{
"ok": true,
"data": {
"siteUrl": "https://example.com",
"checkedAt": "2026-08-08T12:00:00Z",
"overallStatus": "partial",
"recommendations": ["..."]
}
}/api/v1/llms-txtGenerate spec-compliant llms.txt + llms-full.txt with semantic page grouping and deployment instructions.
{
"siteUrl": "https://example.com"
}{
"ok": true,
"data": {
"llmsTxt": "# example.com\n...",
"llmsFullTxt": "# example.com\n...",
"deploymentInstructions": "..."
}
}/api/v1/moat-checkCompetitive gap analysis: topic/format/schema/depth gaps and a prioritized action plan. MCP: aeo_moat_check.
{
"siteUrl": "https://example.com",
"competitorUrls": ["https://competitor.com"]
}{
"ok": true,
"data": {
"gaps": ["..."],
"actionPlan": ["..."]
}
}/api/v1/projectsList articles — org-scoped for API keys, workspace-scoped for handoff tokens. Optional ?workspace_id=.
(no body — query param: ?workspace_id=uuid)
{
"ok": true,
"data": {
"projects": [
{
"id": "uuid",
"name": "Answer engine optimization guide",
"pipeline_status": "scored",
"updated_at": "2026-08-08T12:00:00Z"
}
],
"count": 1
}
}/api/v1/workspacesList accessible Projects (workspaces). Handoff tokens see only their bound Project.
(no body)
{
"ok": true,
"data": {
"workspaces": [
{ "id": "uuid", "name": "Acme content", "status": "active" }
]
}
}/api/v1/workflow/audit-improveComposite: audit a URL then refresh if below threshold. Prefer /diagnose or /improve for new work.
{
"url": "https://example.com/article",
"keyword": "target keyword",
"skipRefreshIfAbove": 80
}{
"ok": true,
"data": {
"audit": { "..." : "..." },
"refresh": { "..." : "..." },
"totalCreditsUsed": 13
}
}/api/v1/workflow/strategyComposite: cluster → research + outline top N pillars. Prefer /api/v1/create mode strategy.
{
"keywords": ["what is SEO", "SEO basics"],
"domain": "example.com",
"researchTopN": 3
}{
"ok": true,
"data": {
"clusters": ["..."],
"pillars": ["..."],
"totalCreditsUsed": 44
}
}/api/v1/workflow/healthBatch-audit up to 10 URLs into a priority dashboard. Prefer /diagnose for site-wide work.
{
"urls": [
"https://example.com/article-1",
"https://example.com/article-2"
]
}{
"ok": true,
"data": {
"results": ["..."],
"averageScore": 58,
"totalCreditsUsed": 10
}
}/api/v1/workflow/quality-gateScore against a target threshold with pass/fail + fixes. Prefer /api/v1/create mode gate or free /score loops.
{
"markdown": "# Your Article\n\nContent here...",
"targetScore": 80
}{
"ok": true,
"data": {
"passed": false,
"score": { "total": 68 },
"targetScore": 80,
"fixes": ["..."]
}
}/api/v1/platform/statsPublic aggregate platform analytics (no auth). Figures are measured aggregates when available — not a guarantee for your site. Prefer your own scoreboard for client claims.
(no body — no auth required)
{
"success": true,
"data": {
"stats": {
"stat_date": "2026-08-08",
"total_tracked": 142,
"avg_score_cited": 84.2,
"computed_at": "2026-08-08T08:00:00Z"
}
}
}/api/v1/clients/[workspaceId]/exportAgency full-export JSON archive for one client (profile, latest snapshot, action items, tracked URLs, visibility). Capability-gated; not available to handoff tokens.
(no body — returns a JSON file attachment)
{
"exportedAt": "2026-08-08T08:00:00Z",
"workspace": { "id": "uuid", "name": "Acme" },
"latestSnapshot": { "id": "uuid" },
"actionItems": ["..."],
"visibility": { "citedRate": 0.4 }
}Sample timestamps on this page use 2026-08-08. Credit costs marked with * vary by mode or depth — always confirm with GET /api/v1/me.