AIEO.ee

API Route Inventory

Every public REST endpoint, generated from the running route table and annotated with auth and scope.

Generated from createApp() — the same route table the API server runs. Internal platform/admin/webhook endpoints are excluded.

Base URL: https://app.aieo.ee/api · Auth: Authorization: Bearer aieo_... (API key) or the dashboard session cookie.

Mutating calls (POST/PATCH/DELETE) with an API key require the write scope; read-only keys get 403. API keys always act on their own organization; the x-org-id header is a session-auth feature for dashboard users with multiple memberships and does not switch an API key's org.

Hand-written request/response examples for core workflows will be added in the next documentation phase; this inventory is the complete, generated surface.

AI Visibility (GEO)

MethodPathAuthDescription
DELETE/api/projects/:projectId/geo/prompts/:promptIdsession or API keyDelete a tracked prompt.
GET/api/projects/:projectId/geo/citationssession or API keyWhich domains AI engines cite for the tracked prompts.
GET/api/projects/:projectId/geo/enginessession or API keyPer-engine visibility breakdown (finished runs of the current method only; legacy sampled runs are excluded).
GET/api/projects/:projectId/geo/executions/activesession or API keyGEO runs still on their way: queued, waiting for the DeepSeek off-peak window, sending, collecting.
GET/api/projects/:projectId/geo/promptssession or API keyTracked prompt list with per-prompt stats.
GET/api/projects/:projectId/geo/runssession or API keyGEO run history (per prompt×engine×day).
GET/api/projects/:projectId/geo/runs/:runIdsession or API keyOne GEO run detail: raw answer, mentions, citations.
GET/api/projects/:projectId/geo/seriessession or API keyDaily visibility time series for charts.
GET/api/projects/:projectId/geo/sovsession or API keyShare of voice by brand across AI answers.
GET/api/projects/:projectId/geo/summarysession or API keyAI visibility summary: mention rate, citation rate over a lookback window (?days).
PATCH/api/projects/:projectId/geo/prompts/:promptIdsession or API keyUpdate a prompt (text, engines, active).
POST/api/projects/:projectId/geo/promptssession or API keyCreate a tracked prompt (text, category, engines). GEO runs only when started.
POST/api/projects/:projectId/geo/prompts/:promptId/runsession or API keyRun one prompt on its engines as one run request. Requires idempotencyKey and the priceVersion from a preview.
POST/api/projects/:projectId/geo/run-allsession or API keyRun every active prompt on its engines as one run request (at most 50 runs). Requires idempotencyKey and the priceVersion from the preview; optional DeepSeek policy.
POST/api/projects/:projectId/geo/run-all/previewsession or API keyAbout and at-most price of running every active prompt, with the priceVersion to confirm.
POST/api/projects/:projectId/geo/run-requestssession or API keyCreate a GEO run request: items (≤ 50, each promptId, engine, optional policy) with an idempotencyKey. Accepted as a whole (every run's maximum held in one transaction) or rejected; same key + same items replays. A new request must send the priceVersion from its preview (400 when missing, 409 price_changed when stale).
POST/api/projects/:projectId/geo/run-requests/previewsession or API keyPrice a selection before running it: typical and maximum usage units (1 unit = $0.0001) and engines without a verified price. No hold, no vendor call.

SEO Intelligence

MethodPathAuthDescription
DELETE/api/projects/:projectId/seo/keywords/:keywordIdsession or API keyRemove a tracked keyword.
GET/api/projects/:projectId/seo/backlink-gapsession or API keyBacklinks competitors have and the project lacks.
GET/api/projects/:projectId/seo/backlinkssession or API keyBacklink profile summary and top links.
GET/api/projects/:projectId/seo/competitor-discoverysession or API keyDiscover competitors sharing SERPs from stored snapshots (overlap score).
GET/api/projects/:projectId/seo/competitor-discovery/:domain/keywordssession or API keyCo-occurrence keyword drill-down for one discovered competitor.
GET/api/projects/:projectId/seo/competitorssession or API keyCompetitor matrix: overlap and position comparison.
GET/api/projects/:projectId/seo/competitors/missingsession or API keyKeywords competitors rank for and the project does not (?brandId).
GET/api/projects/:projectId/seo/distributionsession or API keyCumulative position buckets (top3, top10, top20, top100).
GET/api/projects/:projectId/seo/domain-overviewsession or API keyAggregated view of the project's tracked keywords: rank summary, estimated traffic, top pages, SERP features, stored backlinks, competitor matrix.
GET/api/projects/:projectId/seo/intersectionsession or API keyKeywords all selected competitors (2-4) hold top-20 for in the last 10 days, with each competitor's position.
GET/api/projects/:projectId/seo/keyword-gapsession or API keyKeyword gap vs selected competitors.
GET/api/projects/:projectId/seo/keywordssession or API keyTracked keyword table with positions, volume, difficulty, intent.
GET/api/projects/:projectId/seo/serpsession or API keyLive SERP lookup for one keyword (calls the provider on demand).
GET/api/projects/:projectId/seo/serp-featuressession or API keySERP feature stats over the last 7 days (demo-mode heuristic flags only; real feature detection not wired in).
GET/api/projects/:projectId/seo/summarysession or API keySEO headline metrics (avg position, tracked keywords, estimated traffic).
POST/api/projects/:projectId/competitorssession or API keyAdd a competitor brand/domain to the project.
POST/api/projects/:projectId/seo/keywordssession or API keyAdd tracked keywords (plan-limited).
POST/api/projects/:projectId/seo/refreshsession or API keyQueue a rank-check refresh for the project.
POST/api/projects/:projectId/seo/researchsession or API keyKeyword research for a seed term (DataForSEO when configured).

Search Console & Integrations

MethodPathAuthDescription
DELETE/api/projects/:projectId/integrations/bingsession, org owner/admin onlyDisconnect Bing Webmaster. Synced Bing search data is deleted; AI Performance imports are kept.
DELETE/api/projects/:projectId/integrations/bing-ai/imports/:importIdsession cookieDelete one import (admin, or the member who uploaded it).
DELETE/api/projects/:projectId/integrations/gscsession, org owner/admin onlyDisconnect GSC. Stored data is kept; reconnecting the same site reuses it, a different site replaces it.
GET/api/projects/:projectId/integrations/bingsession or API keyBing Webmaster connection status for the project: site, per-step sync state, pending site pick.
GET/api/projects/:projectId/integrations/bing-ai/comparesession or API keyCompare two imports a (before) and b (after) when canCompare allows. Overview: totals. Queries: aligned by query text with common/one-sided counts, paged; flagged when a period is estimated or the spans differ. Topics are never compared.
GET/api/projects/:projectId/integrations/bing-ai/importssession or API keyList the project's AI Performance imports (no rows), the latest import per kind and the reminder switch.
GET/api/projects/:projectId/integrations/bing-ai/imports/:importIdsession or API keyOne import, by kind. Overview: daily citations and cited pages, totals, 28-day comparison, zero run, read-time differences. Queries: import-wide summary plus the first page of rows (search is refused here — use POST …/rows). Topics: all rows.
GET/api/projects/:projectId/integrations/bing/auth-urlsession, org owner/admin onlyStart Bing Webmaster OAuth (one-time state URL, webmaster.read). Refused for impersonated sessions.
GET/api/projects/:projectId/integrations/bing/crawl-statssession or API keyBing's daily crawl counters (pages crawled, in index, inbound links, status-code counts) for the newest days=7..180 it served.
GET/api/projects/:projectId/integrations/gscsession or API keyGSC connection status for the project.
GET/api/projects/:projectId/integrations/gsc/auth-urlsession, org owner/admin onlyStart GSC OAuth (one-time state URL).
GET/api/projects/:projectId/search-analytics/insightssession or API keyGSC insights: type=striking|cannibalization|ctr|decay|brand, days=28|90. Returns a state; rows only when the period's imported data is complete.
GET/api/projects/:projectId/search-analytics/rowssession or API keyGSC row detail by query or page dimension, aggregated over the window (impressions-weighted CTR/position); returns the period and any missing days.
GET/api/projects/:projectId/search-analytics/summarysession or API keyGoogle Search Console summary (clicks, impressions, CTR, position) over a window that ends on the newest imported day; returns the period and any missing days.
PATCH/api/projects/:projectId/integrations/bingsession, org owner/admin onlySwitch the connected Bing site among the account's verified sites; the previous site's synced data is removed. 409 if the connection changed meanwhile.
PATCH/api/projects/:projectId/integrations/bing-ai/settingssession cookieSwitch the stale-import reminder on or off (owner/admin).
PATCH/api/projects/:projectId/integrations/gscsession, org owner/admin onlySwitch the connected GSC site; the previous site's stored data is removed and a fresh 90-day history import starts.
POST/api/projects/:projectId/integrations/bing-ai/importssession cookieUpload Bing AI Performance CSV exports (multipart files[] + meta): the overview, grounding queries or topic portfolio. Queries and topics need the range chosen in Bing per file (meta.periods / meta.period). Per-file results, host check by file name with a signed confirmation, 30 files per project per UTC day.
POST/api/projects/:projectId/integrations/bing-ai/imports/:importId/rowssession or API keyOne page of grounding queries for an import. The search term goes in the JSON body (search, limit ≤ 200, offset, sort) so it never lands in URL access logs; the import-wide summary is not affected by the search.
POST/api/projects/:projectId/integrations/bing/confirmsession, org owner/admin onlyConfirm the Bing site after OAuth when no verified site matched the project domain.
POST/api/projects/:projectId/integrations/bing/syncsession or API keyTrigger a Bing sync of everything Bing currently serves; returns mode=busy while a sync runs.
POST/api/projects/:projectId/integrations/gsc/backfill/retrysession, org owner/admin onlyRestart a GSC history import that stopped after repeated failures.
POST/api/projects/:projectId/integrations/gsc/confirmsession, org owner/admin onlyConfirm site selection after OAuth (pending_token flow).
POST/api/projects/:projectId/integrations/gsc/syncsession or API keyTrigger a GSC sync of the last 16 days (re-pulls the latest 4, fills missing days); returns mode=busy while an import runs.

Content Gaps & Briefs

MethodPathAuthDescription
GET/api/projects/:projectId/content/briefssession or API keyList generated content briefs.
GET/api/projects/:projectId/content/briefs/:briefIdsession or API keyOne content brief (outline, entities, FAQ).
GET/api/projects/:projectId/content/gapssession or API keyContent gaps: keywords competitors rank top-10 for and the project does not.
POST/api/projects/:projectId/content/gaps/:gapId/briefsession or API keyGenerate a content brief for a gap (metered: holds its maximum, settles at actual token cost).
POST/api/projects/:projectId/content/recompute-gapssession or API keyRecompute content gaps from current rankings.

Technical Audit

MethodPathAuthDescription
GET/api/projects/:projectId/audit/latestsession or API keyLatest audit run with scored issues.
POST/api/projects/:projectId/auditsession or API keyQueue a technical SEO site audit (crawler, maxPages).

Growth Agent & Recommendations

MethodPathAuthDescription
GET/api/projects/:projectId/agent/conversationssession or API keyList Growth Agent conversations.
GET/api/projects/:projectId/agent/conversations/:conversationId/messagessession or API keyMessages of one conversation.
GET/api/projects/:projectId/recommendationssession or API keyPrioritized growth recommendations for the project.
GET/api/projects/:projectId/recommendations/:recId/reviewsession or API keyBefore/after for a page task: the Google after-window and the audit recheck.
PATCH/api/projects/:projectId/recommendations/:recIdsession or API keyUpdate recommendation status (done/dismissed).
POST/api/projects/:projectId/agent/analyzesession or API keyRun the full diagnostic analysis (metered at actual token cost; requestKey makes a retry harmless).
POST/api/projects/:projectId/agent/chatsession or API keySend a message to the Growth Agent (metered at actual token cost).
POST/api/projects/:projectId/agent/conversationssession or API keyCreate a Growth Agent conversation.

Organization, Keys & Billing

MethodPathAuthDescription
DELETE/api/org/keys/:keyIdsession, org owner/admin onlyRevoke an API key — owner/admin only.
GET/api/orgsession or API keyActive organization profile: plan, eligibility, usage balance by source, usage packs, member count.
GET/api/org/billing/checkout-statussession, org owner/admin onlyReturn-page poll: whether a checkout slot's payment has landed in our records.
GET/api/org/billing/invoicessession, org owner/admin onlyPayments with Dodo's invoice link, newest first.
GET/api/org/invitationssession, org owner/admin onlyList pending member invitations — owner/admin only.
GET/api/org/keyssession or API keyList the org's API keys (masked).
GET/api/org/usagesession or API keyActivity counts of the last 30 days by kind (not money — see the balance on GET /api/org).
PATCH/api/orgsession, org owner/admin onlyUpdate organization settings (name etc.) — owner/admin sessions only.
POST/api/org/billing/cancelsession, org owner/admin onlyCancel the subscription at the end of the billing period (with a churn-reason survey).
POST/api/org/billing/checkoutsession, org owner/admin onlyOpen a Dodo hosted checkout for the $10 monthly plan (tax extra); requires the start-immediately consent.
POST/api/org/billing/portalsession, org owner/admin onlyOpen the Dodo customer portal (payment method, invoices, tax details).
POST/api/org/billing/resumesession, org owner/admin onlyResume a pending cancellation.
POST/api/org/billing/topupsession, org owner/admin onlyUsage-pack checkout: quantity 1–50 packs of $10 (tax extra), valid 365 days from payment (subscribers only); requires the start-immediately consent.
POST/api/org/keyssession, org owner/admin onlyCreate an API key (optional read+write scope) — owner/admin only.
POST/api/org/leavesession cookieLeave the organization (refuses last owner).
POST/api/org/transfer-ownershipsession, org owner/admin onlyTransfer org ownership atomically (org lock + role swap).

Projects & Overview

MethodPathAuthDescription
GET/api/projectssession or API keyList projects (websites) in the active org.
GET/api/projects/:projectId/overviewsession or API keyDashboard overview: Growth Score inputs, trend highlights.
GET/api/projects/:projectId/overview/reportsession or API keyWhite-label HTML growth report for the project.
POST/api/projectssession or API keyCreate a project (domain, name) — plan-limited.

Account & Notifications

MethodPathAuthDescription
GET/api/account/exportsession cookieExport the account's personal data (GDPR-style JSON export).
GET/api/account/preferencessession cookieRead the account preferences: locale and the weekly-digest opt-out.
GET/api/notificationssession only (no API keys)List in-app notifications for the current user (API keys rejected).
GET/api/notifications/unread-countsession only (no API keys)Unread notification count.
PATCH/api/account/preferencessession cookieUpdate account preferences: locale ('en' | 'zh', drives UI and transactional mail language) and/or digestOptOut (weekly growth digest opt-out).
POST/api/account/deletesession cookieDelete the account (cancels the Dodo subscription of sole-owned orgs first, cascades their data; 409 when blocked by shared orgs, 502 when Dodo cannot confirm the cancellation).
POST/api/notifications/mark-readsession only (no API keys)Mark notifications read (by ids or all).

Free Tools

MethodPathAuthDescription
POST/api/tools/robotssession or API keyFree tool: fetch and parse a site's robots.txt.
POST/api/tools/schemasession or API keyFree tool: extract structured data (schema.org) from a URL.
POST/api/tools/serpsession or API keyFree tool: live SERP check for a query (DataForSEO or mock pool).
POST/api/tools/sitemapsession or API keyFree tool: fetch and summarize a site's sitemap.

Meta

MethodPathAuthDescription
GET/api/projects/:projectId/ai-readiness/latestsession or API keyLatest AI readiness check and the latest finished report (scores, verdicts, fix steps).
GET/api/projects/:projectId/ai-readiness/runssession or API keyAI readiness history, newest first (cursor pagination; score deltas only within one caliber).
GET/api/projects/:projectId/ai-readiness/runs/:runIdsession or API keyOne AI readiness check with its report, or report=pruned after retention.
GET/api/projects/:projectId/page-prioritiessession or API keyPriority pages: Google decay merged by URL key, filtered by the newest finished audit. Page-level AI rules are reported unavailable.
GET/healthpublicLiveness probe: service name and the AI engine IDs currently configured.
PATCH/api/projects/:projectId/rank-settingssession, org owner/admin onlyAutomatic rank checks of a project: rankCadence daily|weekly|off and rankDepth 10|20|50|100 (org admins).
POST/api/projects/:projectId/ai-readiness/runssession or API keyStart a free AI readiness check of the project's primary domain (reuses a live check or one finished in the last 10 minutes; 20 per organization per UTC day).
POST/api/projects/:projectId/page-priorities/taskssession or API keyAdd a priority page as a task; the server freezes the baseline. One unfinished task per page.

On this page