Docs
Browse documentation
On this page

Use the REST API

API reference

Every REST API operation, grouped by resource, with the scope it needs.

Paths are relative to https://api.citeladder.com. Reads need the read scope; each write lists its scope. Request and response fields are described in openapi.json, which you can load into Postman, Insomnia or a client generator.

New fields and operations are added within v1; existing fields keep their meaning. See REST API for keys, pagination, idempotency and errors.

Operations

Generated from the API's own route declarations; openapi.json holds the same document. Linked types are listed under Schemas.

projects
  • GET /v1/projects/{project_id} · scope read
  • GET /v1/projects · scope read · query: cursor, limit
    • Response: object
      • items: Project[]
      • next_cursor: string | null
markets
  • GET /v1/projects/{project_id}/markets · scope read
    • Response: object[]
site-crawls
  • GET /v1/projects/{project_id}/site-crawls/{crawl_id}/pages · scope read · query: limit, cursor, status, monitored, page_kind, sort
  • GET /v1/projects/{project_id}/site-crawls/{crawl_id}/issues · scope read · query: limit, cursor, query, severity, category, dimension, rule, site_url_id, page_kind, finding_class
site-health
  • GET /v1/projects/{project_id}/site-health · scope read · query: crawl_id
ai-traffic
  • GET /v1/projects/{project_id}/ai-traffic/pages · scope read · query: range, start_date, end_date, bot_id, pattern, folder, resource_class, verification, sort, cursor, limit
  • GET /v1/projects/{project_id}/ai-traffic/overview · scope read · query: range, start_date, end_date, purpose, verification, bot_id, status, folder, resource_class, cursor, limit
  • GET /v1/projects/{project_id}/ai-traffic/coverage · scope read · query: range, start_date, end_date, purpose, verification, bot_id, status, folder, resource_class, cursor, limit
visibility
  • GET /v1/projects/{project_id}/visibility/ads · scope read · query: audit_id, audit_ids, market, engine, cohort, from, to, cursor, limit
  • GET /v1/projects/{project_id}/visibility/perception · scope read · query: audit_id, audit_ids, market, engine, cohort, from, to
  • GET /v1/projects/{project_id}/visibility · scope read · query: audit_id, market, engine, baseline_id, selection_mode, from, to, configuration_key, cohort
  • GET /v1/projects/{project_id}/visibility/prompts · scope read · query: audit_id, audit_ids, market, baseline_audit_ids, engine, baseline_id, cohort
  • GET /v1/projects/{project_id}/visibility/prompts/{prompt_id}/history · scope read · query: market, engine, cohort
  • GET /v1/projects/{project_id}/visibility/trends · scope read · query: market, engine, from, to, granularity, transport_model, retrieval_enabled, cohort
  • GET /v1/projects/{project_id}/visibility/fanout · scope read · query: audit_id, audit_ids, market, engine, cohort, query, search, cursor, limit
  • GET /v1/projects/{project_id}/visibility/sources · scope read · query: audit_id, audit_ids, market, baseline_audit_ids, engine, cohort, domain, source_type, standing, dimension, from, to, as_of, cursor, limit
  • GET /v1/projects/{project_id}/visibility/markets · scope read · query: cohort
performance
  • GET /v1/projects/{project_id}/performance · scope read · query: range, from, to, compare, compare_from, compare_to, granularity
    • Response: object
      • project_id: string (uuid)
      • range: string
      • granularity: string
      • compare: string
      • selected: PerformanceWindow
      • comparison: PerformanceWindow | null
      • coverage: object
        • earliest_date: string | null
        • latest_date: string | null
        • covered_days: integer
        • analytics_quality: map of object[]
      • dimension_counts: object
        • query: integer
        • page: integer
        • country: integer
        • device: integer
        • search_appearance: integer
        • day: integer
        • bing_query: integer
        • bing_page: integer
      • unavailable_dimensions: string[]
      • formula_version: string
      • normalization_version: string
  • GET /v1/projects/{project_id}/performance/table · scope read · query: snapshot_id, dimension, sort, cursor, page_size, compare_snapshot_id
    • Response: object
      • dimension: string
      • items: object[]
      • next_cursor: string | null
      • total_count: integer
      • page_size: integer
actions
  • GET /v1/projects/{project_id}/actions · scope read · query: limit, cursor, status, target_kind
  • GET /v1/projects/{project_id}/actions/{action_id} · scope read
  • PATCH /v1/projects/{project_id}/actions/{action_id} · scope actions:write
    • Request body: object
      • status: string
    • Response: ActionItem
  • POST /v1/projects/{project_id}/actions/{action_id}/declaration · scope actions:write
    • Request body: object
      • recommendation_ids (optional): string (uuid)[]
      • output_revision_id (optional): string (uuid) | null
      • declared_implemented_at: string (date-time)
    • Response: ActionDeclaration
search-intelligence
  • GET /v1/projects/{project_id}/search-intelligence/runs · scope read · query: offset, limit
  • GET /v1/projects/{project_id}/search-intelligence/datasets/{dataset_id}/rows · scope read · query: cursor, limit, sort, direction, search, min_volume, intent
business-map
  • GET /v1/projects/{project_id}/business-map · scope read
competitor-suggestions
  • GET /v1/projects/{project_id}/competitor-suggestions · scope read
  • POST /v1/projects/{project_id}/competitor-suggestions/{candidate_id}/accept · scope competitors:write
prompt-sets
  • POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/generate · scope prompts:write
    • Request body: object
      • count (optional): integer
      • topic_ids (optional): string (uuid)[]
      • topic_id (optional): string (uuid) | null
      • agent_revision_id (optional): string (uuid) | null
      • cohort (optional): "core" | "comparison" | "brand_diagnostic"
    • Response: PromptGenerateResponse
  • GET /v1/projects/{project_id}/prompt-sets/{prompt_set_id} · scope read
  • POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/import · scope prompts:write
    • Request body: object
      • prompts: object[]
        • text: string
        • theme (optional): string
        • intent (optional): string
        • cohort (optional): PromptCohort
        • enabled (optional): boolean
        • topic (optional): string
    • Response: PromptSet
  • GET /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/candidates · scope read
  • POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/candidates/review · scope prompts:write
  • GET /v1/projects/{project_id}/prompt-sets · scope read
  • POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/prompts · scope prompts:write
    • Request body: object
      • prompts: object[]
        • text: string
        • theme (optional): string
        • intent (optional): string
        • cohort (optional): PromptCohort
        • enabled (optional): boolean
        • topic_id (optional): string (uuid) | null
    • Response: object
  • GET /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/generation-runs · scope read · query: cursor, limit
    • Response: object
      • items: object[]
        • id: string (uuid)
        • prompt_set_id: string (uuid)
        • generator_version: string
        • created_at: string
      • next_cursor: string | null
prompts
  • PATCH /v1/projects/{project_id}/prompts/{prompt_id} · scope prompts:write
    • Request body: object
      • text (optional): string | null
      • theme (optional): string | null
      • intent (optional): string | null
      • cohort (optional): PromptCohort | null
      • enabled (optional): boolean | null
      • status (optional): PromptStatus | null
      • topic_id (optional): string (uuid) | null
    • Response: Prompt
  • DELETE /v1/projects/{project_id}/prompts/{prompt_id} · scope prompts:write
    • Response: no body
  • GET /v1/projects/{project_id}/prompts · scope read · query: cursor, limit, prompt_set_id, topic_id, status
    • Response: object
      • items: object[]
        • id: string (uuid)
        • prompt_set_id: string (uuid)
        • topic_id (optional): string (uuid) | null
        • text: string
        • theme: string
        • intent: PromptIntent
        • buyer_stage: BuyerStage
        • prompt_intent: PromptIntentDetail
        • cohort: PromptCohort
        • branded: boolean
        • enabled: boolean
        • status: PromptStatus
        • origin: "manual" | "imported" | "generated"
        • created_at (optional): string
        • updated_at (optional): string
        • latest_measurement: object | object | object
          • state: "measured"
          • audit_id: string (uuid)
          • mention_rate: number | null
          • citation_rate: number | null
      • next_cursor: string | null
topics
  • GET /v1/projects/{project_id}/topics · scope read
  • POST /v1/projects/{project_id}/topics · scope prompts:write
    • Request body: object
      • name: string
      • description (optional): string
      • parent_id (optional): string (uuid) | null
    • Response: Topic
  • PATCH /v1/projects/{project_id}/topics/{topic_id} · scope prompts:write
    • Request body: object
      • name (optional): string | null
      • description (optional): string | null
      • parent_id (optional): string (uuid) | null
    • Response: Topic
  • DELETE /v1/projects/{project_id}/topics/{topic_id} · scope prompts:write
    • Response: no body
audit-schedules
  • POST /v1/projects/{project_id}/audit-schedules · scope schedules:write
    • Request body: object
      • prompt_set_id: string (uuid)
      • audit_scope (optional): "brand" | "commerce"
      • cadence: AuditScheduleCadence
      • interval_minutes (optional): integer | null
      • timezone (optional): string
      • engines: LogicalEngine[]
      • market_ids (optional): string (uuid) | null[]
      • repetitions (optional): integer | null
      • benchmark_mode (optional): BenchmarkMode | null
      • enabled (optional): boolean
      • next_run_at (optional): string (date-time) | null
    • Response: AuditSchedule
  • GET /v1/projects/{project_id}/audit-schedules · scope read
  • GET /v1/projects/{project_id}/audit-schedules/{schedule_id} · scope read
  • PATCH /v1/projects/{project_id}/audit-schedules/{schedule_id} · scope schedules:write
    • Request body: object
      • prompt_set_id (optional): string (uuid)
      • audit_scope (optional): "brand" | "commerce"
      • cadence (optional): AuditScheduleCadence
      • interval_minutes (optional): integer | null
      • timezone (optional): string
      • engines (optional): LogicalEngine[]
      • market_ids (optional): string (uuid) | null[]
      • repetitions (optional): integer | null
      • benchmark_mode (optional): BenchmarkMode | null
      • enabled (optional): boolean
      • next_run_at (optional): string (date-time) | null
    • Response: AuditSchedule
  • DELETE /v1/projects/{project_id}/audit-schedules/{schedule_id} · scope schedules:write
    • Response: no body
audits
  • GET /v1/projects/{project_id}/audits/{audit_id} · scope read
  • POST /v1/projects/{project_id}/audits/{audit_id}/cancel · scope audits:run
  • GET /v1/projects/{project_id}/audits · scope read · query: cursor, limit
    • Response: object
      • items: Audit[]
      • next_cursor: string | null
  • POST /v1/projects/{project_id}/audits · scope audits:run
    • Request body: object
      • prompt_set_id (optional): string (uuid) | null
      • prompt_ids (optional): string (uuid)[]
      • engines: LogicalEngine[]
      • repetitions (optional): integer | null
      • benchmark_mode (optional): BenchmarkMode | null
      • market_ids (optional): string (uuid) | null[]
      • audit_scope (optional): "brand" | "commerce"
      • random_seed (optional): string | null
      • max_estimated_credits: integer
    • Response: Audit[]
  • POST /v1/projects/{project_id}/audits/estimate · scope read
    • Request body: object
      • prompt_set_id (optional): string (uuid) | null
      • prompt_ids (optional): string (uuid)[]
      • engines: LogicalEngine[]
      • repetitions (optional): integer | null
      • market_ids (optional): string (uuid) | null[]
    • Response: AuditEstimate
competitors
  • GET /v1/projects/{project_id}/competitors · scope read
  • POST /v1/projects/{project_id}/competitors · scope competitors:write
    • Request body: object
      • name: string
      • aliases (optional): string[]
      • domains (optional): string[]
    • Response: Competitor
  • PATCH /v1/projects/{project_id}/competitors/{competitor_id} · scope competitors:write
    • Request body: object
      • name (optional): string
      • aliases (optional): string[]
      • domains (optional): string[]
    • Response: Competitor
  • DELETE /v1/projects/{project_id}/competitors/{competitor_id} · scope competitors:write
    • Response: no body

Schemas

Shapes shared between operations, each defined once under components.schemas.

ActionDeclaration
  • id: string (uuid)
  • action_id: string (uuid)
  • output_revision_id: string (uuid) | null
  • member_opportunity_ids: string (uuid)[]
  • opportunity_snapshot_id: string (uuid)
  • target_site_url_ids: string (uuid)[]
  • target_external_url: string | null
  • declared_implemented_at: string
  • expected_checks: ExpectedCheck[]
  • state: ImplementationState
  • limitations: string[]
  • verification_events: VerificationEvent[]
  • legs: MeasurementLeg[]
  • checks: DeclarationCheck[]
  • measured_until: string
  • created_at: string
ActionDetail
  • id: string (uuid)
  • project_id: string (uuid)
  • target_kind: string
  • target_label: string
  • target_url: string | null
  • target_prompt_id: string (uuid) | null
  • origin: "evidence" | "agent"
  • status: ActionStatus
  • priority_score: number | null
  • families: string[]
  • approach: string
  • skill_id: string
  • member_count: integer
  • evidence_cleared_at: string | null
  • created_at: string
  • updated_at: string
  • member_measurement: map of "next_visibility_run" | "next_search_console_window" | "next_crawl" | null
  • declarable_since: string
  • diagnosis: object
    • what_happened (optional): object[]
      • opportunity_id: string (uuid)
      • rule_id: string
      • title: string
      • family: string
      • priority_score: number
    • families (optional): map of "observed" | "no_finding" | "unavailable"
    • approach (optional): string
    • skill_id (optional): string
    • donts (optional): string[]
    • measure_with (optional): string[]
  • members: object[]
    • id: string (uuid)
    • project_id: string (uuid)
    • rule_id: string
    • opportunity_type: OpportunityType
    • severity: OpportunitySeverity
    • priority_score: number
    • title: string
    • target_key: string
    • target_prompt_id: string (uuid) | null
    • target_url: string | null
    • target_theme: string | null
    • target_label: string | null
    • action_id: string (uuid) | null
    • system_rank: integer
    • display_rank: integer
    • order_source: "system" | "manual"
    • priority_factors: map of string | number
    • evidence_summary: object
      • count: integer
      • kinds: string[]
    • created_at: string
    • updated_at: string
    • remediation: string
  • declaration: ActionDeclaration | null
ActionItem
  • id: string (uuid)
  • project_id: string (uuid)
  • target_kind: string
  • target_label: string
  • target_url: string | null
  • target_prompt_id: string (uuid) | null
  • origin: "evidence" | "agent"
  • status: ActionStatus
  • priority_score: number | null
  • families: string[]
  • approach: string
  • skill_id: string
  • member_count: integer
  • evidence_cleared_at: string | null
  • created_at: string
  • updated_at: string
ActionsPage
  • items: ActionItem[]
  • next_cursor: string | null
  • status_counts: map of integer
ActionStatus

"open" | "in_progress" | "implemented" | "measuring" | "done" | "dismissed"

AdOwnership

"owned" | "competitor" | "other"

AiReferrals
  • project_id: string (uuid)
  • window_start: string
  • window_end: string
  • granularity: SnapshotGranularity
  • referral_volume: MetricSeries
  • referral_share: MetricSeries
  • sources: AiReferralSourceRow[]
  • analyzer_version: string
  • formula_version: string
  • scope: "property-wide"
  • reporting_timezone: string | null
  • currency_code: string | null
  • analytics_quality: map of object[]
  • unattributed_landing: number | null
  • source_measures: object[]
    • ai_source: AiSource
    • sessions: number | null
    • key_events: number | null
    • engagement_rate: number | null
    • transactions: number | null
    • purchase_revenue: number | null
  • channel_comparison: object[]
    • channel: string
    • sessions: number | null
    • key_events: number | null
    • engagement_rate: number | null
  • landing_pages: object[]
    • url_hash: string
    • canonical_url: string
    • ai_source: AiSource
    • sessions: number | null
    • key_events: number | null
    • analytics_quality: string[]
AiReferralSourceRow
  • ai_source: "chatgpt" | "gemini" | "claude" | "perplexity" | "copilot" | "google_ai_overview"
  • sessions: integer
  • share: number | null
AiSource

"chatgpt" | "gemini" | "claude" | "perplexity" | "copilot" | "google_ai_overview" | "other"

AiTrafficOverview
  • crawl: CrawlSummary
  • referrals: AiReferrals
  • citations: object
    • unit: "tracked_citations"
    • count: number | null
    • label: string
AiTrafficPages
  • window_start: string
  • window_end: string
  • items: object[]
    • url_hash: string
    • canonical_url: string
    • display_path: string
    • folder: string
    • resource_class: string
    • crawl: TrafficLeg
    • referrals: TrafficLeg
    • citations: TrafficLeg
    • findings: TrafficLeg
    • key_events: number | null
    • last_crawl: string | null
    • errors_4xx: number | null
    • errors_5xx: number | null
  • next_cursor: string | null
  • observed_crawl_coverage: object
    • state: string
    • share: number | null
    • known_pages: number
    • observed_pages: number | null
    • inventory_date: string | null
    • inventory_complete: boolean
    • sample_mode: boolean
    • label: "Observed crawl coverage"
AnswerStates
  • mentioned_and_cited: integer
  • mentioned_only: integer
  • cited_only: integer
  • neither: integer
Audit
  • id: string (uuid)
  • workspace_id: string (uuid)
  • project_id: string (uuid)
  • parent_audit_id: string (uuid) | null
  • status: AuditStatus
  • benchmark_mode: string
  • audit_scope: "brand" | "commerce"
  • model_provenance: ModelProvenance[]
  • repetitions: integer
  • random_seed: string
  • requested_count: integer
  • completed_count: integer
  • failed_count: integer
  • error_message: string
  • engine_snapshots: object[]
    • logical_engine: string
    • transport_provider: string
    • transport_model: string
  • market: object
    • id: string (uuid) | null
    • country_code: string
    • language_code: string
  • launch_id: string (uuid) | null
  • not_applicable_engines: LogicalEngine[]
  • created_at: string
  • updated_at: string
  • started_at: string | null
  • completed_at: string | null
AuditEstimate
  • retrieval_enabled: boolean
  • prompt_count: integer
  • engine_count: integer
  • repetition_count: integer
  • market_count: integer
  • execution_count: integer
  • maximum_attempt_count: integer
  • maximum_wall_clock_seconds: integer
  • cost_status: "complete" | "partial" | "unknown"
  • estimated_total_cost_microusd: integer | null
  • engines: object[]
    • logical_engine: LogicalEngine
    • transport_provider: TransportProvider
    • transport_model: string
    • retrieval_enabled: boolean | null
    • prompt_count: integer
    • repetition_count: integer
    • market_count: integer
    • execution_count: integer
    • maximum_attempt_count: integer
    • estimated_input_tokens: integer | null
    • estimated_output_tokens: integer | null
    • estimated_search_calls: integer | null
    • estimated_token_cost_microusd: integer | null
    • estimated_search_cost_microusd: integer | null
    • estimated_total_cost_microusd: integer | null
    • cost_status: "complete" | "partial" | "unknown"
    • pricing_version: string
AuditSchedule
  • id: string (uuid)
  • workspace_id: string (uuid)
  • project_id: string (uuid)
  • prompt_set_id: string (uuid)
  • audit_scope: "brand" | "commerce"
  • cadence: AuditScheduleCadence
  • interval_minutes: integer | null
  • timezone: string
  • engines: LogicalEngine[]
  • market_ids: string (uuid) | null[]
  • repetitions: integer | null
  • benchmark_mode: BenchmarkMode | null
  • enabled: boolean
  • next_run_at: string | null
  • last_run_at: string | null
  • failure_count: integer
  • last_error: string
  • last_failure_at: string | null
  • created_at: string
  • updated_at: string
AuditScheduleCadence

"one_time" | "every_n_minutes" | "hourly" | "daily" | "weekly"

AuditStatus

"draft" | "validating" | "queued" | "running" | "analyzing" | "reporting" | "completed" | "partially_completed" | "failed" | "cancelled"

BenchmarkMode

"consumer_like" | "controlled_localized" | "forced_grounded"

BusinessMap
BusinessMapEntry
  • value: string
  • origin: "manual" | "model"
  • review_state: "suggested" | "confirmed"
  • reviewed_by: string | null
  • reviewed_at: string | null
  • source: map of
BuyerStage

"" | "awareness" | "consideration" | "decision" | "implementation"

Competitor
  • id: string (uuid)
  • name: string
  • aliases: string[]
  • domains: string[]
  • logo_url (optional): string | null
  • matching (optional): EntityMatching
CrawlAnalysisStatus

"pending" | "running" | "stopped" | "completed" | "partially_completed" | "failed" | "cancelled"

CrawlCounters
  • discovered: integer | null
  • selected: integer
  • queued: integer
  • running: integer
  • analyzed: integer
  • errors: integer
  • blocked: integer
  • failure_breakdown: object
    • robots_denied: integer
    • http_4xx: integer
    • http_5xx: integer
    • timeout: integer
  • activity: object
    • state: "working" | "waiting" | "stalled" | "terminal"
    • reason: "active_work" | "host_gate" | "retry_backoff" | "expired_lease" | "terminal"
    • queue_depth: integer
    • next_available_at: string | null
  • by_page_kind: map of integer
CrawlCoverageResponse
  • items: object[]
    • source_id: string (uuid)
    • reporting_date: string
    • reporting_timezone: string
    • coverage: "complete" | "declared_complete" | "partial" | "unknown"
    • reason: string
    • batch_count: number
    • heartbeat_count: number
    • max_gap_minutes: number
  • sources: CrawlSource[]
  • next_cursor: string | null
CrawlDiscoveryStatus

"pending" | "running" | "stopped" | "completed" | "sample_completed" | "failed" | "cancelled"

CrawlerPurpose

"ai_training" | "ai_search" | "ai_user_fetch" | "search_engine" | "other"

CrawlOverallStatus

"draft" | "validating" | "queued" | "running" | "paused" | "completed" | "partially_completed" | "failed" | "cancelled"

CrawlSource
  • id: string (uuid)
  • kind: "webhook" | "pull" | "upload"
  • setup: "cloudflare_worker" | "cloudflare_logpush" | "aws_firehose" | "gcp_pubsub_pull" | "custom" | "upload"
  • preset: string
  • buffer_interval_seconds: number | null
  • format: string
  • collection_point: string
  • sampling: object | object | object
    • kind: "none"
  • origin: string
  • host: string
  • status: "active" | "revoked"
  • state: "active" | "awaiting_verification" | "stalled" | "revoked"
  • stall_reason: CrawlStallReason | null
  • stalled_at: string | null
  • pull: object | null
    • subscription: string
    • verification_nonce: string
    • verified_at: string | null
    • verification_checked_at: string | null
    • verification_failure: CrawlVerificationFailure | null
    • filter_catalog_version: string
    • filter_confirmed_at: string | null
    • filter_current: boolean
    • declared_sample_rate: number
    • last_pull_at: string | null
    • last_drained_at: string | null
  • token_prefix: string | null
  • connection: "not_connected" | "awaiting_data" | "connected"
  • last_accepted_batch: string | null
  • last_processed_at: string | null
  • rejected_lines: number
  • overlapping_lines: number
  • unsupported_uploads: number
  • unsupported_batches: number
CrawlStallReason

"no_receipts" | "not_in_plan" | "oversize" | "verification_failed"

CrawlSummary
  • unit: "requests"
  • identity_level: "path"
  • connection: "not_connected" | "awaiting_data" | "connected"
  • coverage: "complete" | "declared_complete" | "partial" | "unknown"
  • reporting_timezone: string
  • last_processed_at: string | null
  • requests: number | null
  • pages: number | null
  • active_bots: number | null
  • error_share: number | null
  • failed_verification_requests: number | null
  • series: object[]
CrawlVerificationFailure

"label_mismatch" | "push_subscription" | "ack_deadline" | "permission_denied" | "not_found" | "unavailable"

DeclarationCheck
  • index: integer
  • kind: string
  • leg: "next_visibility_run" | "next_search_console_window" | "next_crawl"
  • state: "waiting" | "met" | "unmet" | "unavailable"
  • reason: string | null
  • observed_at: string | null
  • source_kind: string | null
  • source_id: string | null
  • subject: string | null
  • prompt_id (optional): string (uuid) | null
EntityMatching
  • mode: EntityMatchingMode
  • context_terms: string[]
  • exclusion_phrases: string[]
  • common_word: boolean
EntityMatchingMode

"always" | "context_required"

ExpectedCheck

KeywordPresenceExpectedCheck | object | object | object | object

FindingClass

"defect" | "advisory" | "diagnostic"

ImplementationState

"declared" | "observed" | "verified" | "contradicted"

IssueDimension

"technical" | "aeo"

IssueSeverity

"critical" | "high" | "medium" | "low" | "info"

IssuesSummary
  • issue_count: integer
  • defect_issue_type_count: integer
  • advisory_issue_type_count: integer
  • occurrence_count: integer
  • severity_counts: map of integer
  • dimension_counts: map of integer
  • affected_url_count: integer
  • monitored_affected_url_count: integer
KeywordPresenceExpectedCheck
  • kind: "keyword_presence"
  • keyword: string
  • query_key: string
  • owned_origin: string
  • location_code: integer | null
  • language_code: string
LogicalEngine

"chatgpt" | "gemini" | "claude" | "google_ai_overview" | "chatgpt_search" | "gemini_consumer"

MeasurementCounts
  • state: string
  • responses: integer
  • brand_responses: integer | null
  • owned_citation_responses: integer | null
  • entity_presences: integer | null
  • expected: integer | null
  • failed: integer | null
  • not_run: integer | null
MeasurementLeg
  • leg: "next_visibility_run" | "next_search_console_window" | "next_crawl"
  • state: "waiting" | "not_scheduled" | "sync_needed" | "observed"
  • due_at: string | null
  • last_evidence_at: string | null
  • source_id: string (uuid) | null
MetricSeries

object[]

ModelProvenance
  • logical_engine: string
  • transport_provider: string
  • transport_model: string
  • retrieval_enabled: boolean | null
MonitoredQuota
  • used: integer
  • limit: integer
ObservedCompetitor
  • id: string (uuid)
  • audit_id: string (uuid)
  • name: string
  • domain: string
  • qualification_reason: string
  • prompt_count: integer
  • engine_count: integer
  • market_relevant: boolean
  • analyzer_version: string
  • source_analysis_ids: string[]
  • source_artifact_ids: string[]
  • status: string
  • created_at: string
OfferingMap
OpportunitySeverity

"critical" | "high" | "medium" | "low" | "info"

OpportunityType

"visibility" | "commerce" | "site" | "traffic" | "topic"

PageAnalysisStatus

"not_selected" | "not_measured" | "pending" | "running" | "completed" | "partially_completed" | "failed" | "error" | "blocked" | "cancelled"

PageKind

"homepage" | "article" | "editorial_index" | "product" | "category" | "pricing" | "docs" | "faq" | "about_contact" | "service" | "local" | "guide" | "how_to" | "listicle" | "comparison" | "alternative" | "case_study_review" | "trust_policy" | "other"

PageKindScoreSummary
  • analyzed_count: integer
  • web_fundamentals_score: number | null
  • web_fundamentals_coverage: number | null
  • web_fundamentals_state: "measured" | "limited_evidence" | "not_measured" | "excluded"
  • aeo_readiness_score: number | null
  • aeo_measurement_coverage: number | null
  • aeo_measurement_state: "measured" | "limited_evidence" | "not_measured" | "excluded"
  • aeo_measurement_reason: string
PagesPage
PageStanding

"yours" | "competitor" | "blocked" | "unreadable" | "not_read" | "gap" | "listed" | "read"

PageSummary
  • site_url_id: string (uuid)
  • crawl_id: string (uuid)
  • normalized_url: string
  • display_url: string
  • title: string | null
  • monitored: boolean
  • analysis_status: PageAnalysisStatus
  • error_code: string
  • issue_count: integer | null
  • web_fundamentals_score: number | null
  • web_fundamentals_coverage: number | null
  • web_fundamentals_state: "measured" | "limited_evidence" | "not_measured" | "excluded"
  • aeo_readiness_score: number | null
  • aeo_measurement_coverage: number | null
  • aeo_measurement_state: "measured" | "limited_evidence" | "not_measured" | "excluded"
  • aeo_measurement_reason: string
  • main_content_indexable: boolean | null
  • last_audited: string | null
  • page_kind: PageKind | null
  • inbound_count: integer | null
  • main_content_inbound_count: integer | null
  • depth_from_home: integer | null
PerceptionBreakdown
PerceptionCoverage
  • mentions: integer
  • classified: integer
  • pending: integer
  • not_assessable: integer
  • low_confidence: integer
  • unavailable: object[]
    • reason: "model_not_configured" | "platform_cap" | "entity_limit" | "invalid_output" | "model_error" | "task_failed" | "not_assessable"
    • count: integer
PerceptionEntity
PerceptionQuote
  • text: string
  • theme: string
  • polarity: "positive" | "negative"
  • entity: string
  • is_brand: boolean
  • logical_engine: string
  • prompt: string
  • run_id: string (uuid)
  • execution_id: string (uuid)
  • observed_at: string
  • extractor_version: string
  • template_version: string
PerceptionResponse
  • state: "value" | "pending" | "unavailable" | "no_mentions"
  • reason: "model_not_configured" | "platform_cap" | "entity_limit" | "invalid_output" | "model_error" | "task_failed" | "not_assessable" | null
  • source_audit_ids: string (uuid)[]
  • brand: PerceptionEntity | null
  • coverage: PerceptionCoverage
  • entities: PerceptionEntity[]
  • engines: PerceptionBreakdown[]
  • topics: PerceptionBreakdown[]
  • prompts: PerceptionBreakdown[]
  • themes: object[]
  • negative_quotes: PerceptionQuote[]
  • drivers: object[]
    • domain: string
    • answers: integer
    • example_url: string | null
  • recommended: object
    • mentioned: integer
    • recommended: integer
    • recommended_against: integer
    • rate: number | null
    • limitation: string
  • trend: object[]
    • audit_id: string (uuid)
    • completed_at: string
    • score: PerceptionScore
    • mentions: integer
    • extractor_version: string
    • template_version: string
    • metrics_version: string
    • comparable: boolean
PerceptionScore
  • positive: integer
  • neutral: integer
  • negative: integer
  • mixed: integer
  • classified: integer
  • positive_share: number | null
  • negative_share: number | null
  • net_sentiment: number | null
PerformanceMetrics
  • clicks: integer | null
  • impressions: integer | null
  • ctr: number | null
  • position: number | null
PerformanceWindow
  • snapshot_id: string (uuid) | null
  • window_start: string
  • window_end: string
  • evidence_state: "not_run" | "observed_zero" | "available"
  • totals: object
    • clicks: integer | null
    • impressions: integer | null
    • ctr: number | null
    • position: number | null
    • sessions: integer | null
    • key_events: number | null
  • series: object
    • clicks: object[]
      • date: string
      • value: number | null
    • impressions: object[]
      • date: string
      • value: number | null
    • ctr: object[]
      • date: string
      • value: number | null
    • position: object[]
      • date: string
      • value: number | null
Project
  • id: string (uuid)
  • workspace_id: string (uuid)
  • name: string
  • brand_name: string
  • website_url: string
  • industry: string
  • subindustry: string
  • primary_market: string
  • country_code: string
  • language_code: string
  • benchmark_mode: BenchmarkMode
  • default_repetitions: integer
  • brand: object
    • aliases: string[]
    • logo_url (optional): string | null
    • matching (optional): EntityMatching
  • owned_domains: string[]
  • unintended_domains: string[]
  • competitors: Competitor[]
  • prompt_sets: PromptSet[]
  • created_at: string
  • updated_at: string
Prompt
  • id: string (uuid)
  • prompt_set_id: string (uuid)
  • topic_id (optional): string (uuid) | null
  • text: string
  • theme: string
  • intent: PromptIntent
  • buyer_stage: BuyerStage
  • prompt_intent: PromptIntentDetail
  • cohort: PromptCohort
  • branded: boolean
  • enabled: boolean
  • status: PromptStatus
  • origin: "manual" | "imported" | "generated"
  • created_at (optional): string
  • updated_at (optional): string
PromptCandidate
  • id: string (uuid)
  • run_id: string (uuid)
  • prompt_set_id: string (uuid)
  • topic_id: string (uuid) | null
  • text: string
  • intent: string
  • buyer_stage: BuyerStage
  • prompt_intent: PromptIntentDetail
  • cohort: PromptCohort
  • created_at: string
  • expires_at: string
  • quality_status: "judged" | "off" | "unavailable" | "not_judged"
  • quality_flags: string[]
  • grounded: boolean
PromptCandidateReviewResponse
  • accepted: Prompt[]
  • rejected_count: integer
  • dropped_duplicates: integer
  • unavailable_count: integer
PromptCohort

"core" | "brand_diagnostic" | "comparison" | "commerce"

PromptGenerateResponse
  • candidates: PromptCandidate[]
  • topics: Topic[]
  • dropped_duplicates: integer
  • requested_count: integer
  • candidates_generated: integer
  • quality_gate: "off" | "shadow" | "gate" | "unavailable"
  • quality_rejected: integer
  • admission_drops: map of integer
  • shortfall_reason: "deadline" | "model_error" | null
PromptHistory
PromptHistoryImplementation
  • implementation_event_id: string (uuid)
  • action_id: string (uuid)
  • title: string
  • status: ActionStatus
  • implemented_at: string
PromptHistoryPoint
  • audit_id: string (uuid)
  • completed_at: string
  • prompt_text: string
  • counts: MeasurementCounts
  • mention_rate: number | null
  • owned_citation_rate: number | null
  • answer_states: AnswerStates | null
  • source_analysis_ids: string (uuid)[]
  • comparison_key: string | null
  • analyzer_version: string
  • scoring_rule_version: string
  • comparable_with_previous: boolean | null
  • source_snapshot_id: string (uuid)
PromptIntent

"" | "discovery" | "comparison" | "purchase" | "service" | "local"

PromptIntentDetail

"" | "learn" | "solve" | "compare" | "recommend" | "validate" | "buy" | "implement"

PromptMetricItem
  • id: string (uuid)
  • audit_id: string (uuid)
  • prompt_id: string (uuid) | null
  • prompt_index: integer
  • prompt_text: string
  • prompt_snapshot_id (optional): string (uuid) | null
  • cohort: string
  • composite_score: number | null
  • source_audit_ids (optional): string (uuid)[]
  • previous_score: number | null
  • immediate_delta: number | null
  • rolling_four: number[]
  • per_engine_scores: map of number
  • components: map of number | null
  • engine_agreement: number
  • repetition_agreement: number
  • evidence_coverage: number
  • trend_confidence: number
  • decline_confirmed: boolean
  • analyzer_version: string
  • scoring_rule_version: string
  • created_at: string
  • theme (optional): string
  • intent (optional): string
  • visibility_rate (optional): number | null
  • owned_citation_rate (optional): number | null
  • avg_position (optional): number | null
  • visibility_delta (optional): number | null
  • comparison_status (optional): string
  • comparison (optional): VisibilityComparison | null
  • counts (optional): MeasurementCounts
  • answer_states (optional): AnswerStates | null
  • action_id (optional): string (uuid) | null
  • outcomes (optional): object[]
    • logical_engine: string
    • transport_model: string
    • counts: MeasurementCounts
    • visibility_rate: number | null
    • owned_citation_rate: number | null
    • answer_states (optional): AnswerStates | null
    • gap_counts: map of integer
PromptSet
  • id: string (uuid)
  • project_id: string (uuid)
  • name: string
  • description (optional): string
  • prompt_count (optional): integer
  • prompts: Prompt[]
  • created_at: string
  • updated_at: string
PromptStatus

"active" | "archived"

RankingRow
  • name: string
  • is_brand: boolean
  • logo_url (optional): string | null
  • website_url (optional): string | null
  • mention_rate: number | null
  • citation_rate: number | null
  • share_of_voice: number | null
  • mention_count: integer
  • visibility_delta (optional): number | null
  • gap_count (optional): integer | null
  • matched_visibility_rate (optional): number | null
  • matched_visibility_delta (optional): number | null
  • matched_response_count (optional): integer | null
  • avg_position: number | null
ResearchScope

"exact_host" | "domain_subdomains"

RootError
  • method: string
  • target: string
  • outcome: string
  • error_code: string
  • status_code: integer | null
  • latency_ms: integer | null
SearchDataset
  • research_scope: ResearchScope
  • id: string (uuid)
  • run_id: string (uuid)
  • dataset_kind: string
  • target_domain: string
  • target_hostname: string
  • target_origin: string
  • acquisition: map of
  • comparison_origin: string
  • location_code: integer | null
  • language_code: string
  • status: string
  • coverage: string
  • requested_rows: integer
  • raw_rows_received: integer
  • unique_rows_saved: integer
  • provider_total: integer | null
  • truncated: boolean
  • summary: map of
  • collection_started_at: string | null
  • collection_ended_at: string | null
  • published_at: string | null
  • filtered_saved_count (optional): integer | null
SearchDatasetPage
SearchRow
  • id: string (uuid)
  • dataset_id: string (uuid)
  • call_id: string (uuid) | null
  • row_kind: string
  • keyword: string
  • domain: string
  • url: string
  • search_volume: integer | null
  • difficulty: integer | null
  • intent: string
  • rank_group: integer | null
  • owned_rank_group: integer | null
  • etv: string | null
  • backlinks: integer | null
  • referring_main_domains: integer | null
  • dataforseo_rank: integer | null
  • auxiliary: map of
  • action_id (optional): string (uuid) | null
SearchRun
  • id: string (uuid)
  • status: string
  • action: string
  • pricing_version: string
  • estimated_cost_usd: string
  • provider_reported_cost_usd: string | null
  • planned_calls: integer
  • completed_calls: integer
  • planned_rows: integer
  • received_rows: integer
  • uncertain_calls: integer
  • error_code: string
  • error_detail: string
  • expires_at: string
  • confirmed_at: string | null
  • cancelled_at: string | null
  • completed_at: string | null
  • frozen_scope: map of
  • call_plan: map of []
  • reused_datasets: map of []
  • created_at: string
SiteCrawl
  • id: string (uuid)
  • workspace_id: string (uuid)
  • project_id: string (uuid)
  • profile_id: string (uuid)
  • status: CrawlOverallStatus
  • discovery_status: CrawlDiscoveryStatus
  • analysis_status: CrawlAnalysisStatus
  • root_url: string
  • sample_mode: boolean
  • seed: string
  • inventory_complete: boolean
  • partial_reason: "" | "discovery_incomplete" | "analysis_incomplete" | "discovery_and_analysis_incomplete"
  • visible_url_count: integer
  • analyzed_count: integer
  • failed_count: integer
  • discovery_requested_count: integer
  • analysis_requested_count: integer
  • counters: CrawlCounters
  • discovered_count (optional): integer | null
  • total_url_count: integer | null
  • has_more_site_urls (optional): boolean | null
  • score_summary: SiteScoreSummary | null
  • failure_summary: object | null
    • code: string
    • message: string
    • attempts: integer | null
    • status_code: integer | null
    • target_url: string
  • site_facts: map of | null
  • extractor_version: string
  • analyzer_version: string
  • rule_version: string
  • scoring_version: string
  • error_message: string
  • created_at: string
  • updated_at: string
  • started_at: string | null
  • completed_at: string | null
SiteHealthDashboard
SiteIssue
  • group_id: string (uuid)
  • crawl_id: string (uuid)
  • rule_id: string
  • page_kinds: string[]
  • dimension: IssueDimension
  • category: string
  • severity: IssueSeverity
  • finding_class: FindingClass
  • title: string
  • description: string
  • remediation: string
  • remediation_route: string
  • affected_url_count: integer
  • analyzer_version: string
  • rule_version: string
  • created_at: string
SiteIssuesPage
SiteScoreSummary
  • web_fundamentals_score: number | null
  • web_fundamentals_coverage: number | null
  • web_fundamentals_state: "measured" | "limited_evidence" | "not_measured" | "excluded"
  • aeo_readiness_score: number | null
  • aeo_measurement_coverage: number | null
  • aeo_measurement_state: "measured" | "limited_evidence" | "not_measured" | "excluded"
  • search_eligibility: "eligible" | "blocked" | "unknown" | "excluded"
  • classified_page_count: integer
  • other_page_count: integer
  • classification_error_page_count: integer
  • classification_expected_page_count: integer
  • classification_coverage: number | null
  • classification_state: "complete" | "partial" | "not_measured"
  • classification_reason_groups: map of integer
  • classification_formula_version: string
  • classification_source_analysis_ids: string (uuid)[]
  • classification_source_artifact_ids: string (uuid)[]
  • classification_source_task_ids: string (uuid)[]
  • scored_page_kind_set: PageKind[]
  • scored_page_count_by_kind: map of integer
  • selected_count: integer
  • analyzed_count: integer
  • issue_count: integer
  • scoring_version: string
  • by_page_kind: map of PageKindScoreSummary
SnapshotGranularity

"day" | "week" | "month"

Topic
  • id: string (uuid)
  • project_id: string (uuid)
  • parent_id: string (uuid) | null
  • name: string
  • description: string
  • origin: "manual" | "generated"
  • active_count: integer
  • created_at: string
  • updated_at: string
TrafficLeg
  • state: "not_connected" | "unknown" | "unavailable" | "zero" | "value" | "non_comparable" | "flagged"
  • value: number | null
  • coverage: string | null
  • reason: string | null
TransportProvider

"openai" | "anthropic" | "google" | "dataforseo"

VerificationEvent
  • id: string (uuid)
  • observation_kind: "observed" | "verified" | "contradicted"
  • observed_at: string
  • crawl_id: string (uuid) | null
  • audit_id: string (uuid) | null
  • source_analysis_ids: string (uuid)[]
  • source_rule_evaluation_ids: string (uuid)[]
  • source_metric_ids: string (uuid)[]
  • result: map of
  • verifier_version: string
  • limitations: string[]
  • created_at: string
Visibility
  • project_id: string (uuid)
  • audit_id: string (uuid)
  • audit_status: AuditStatus
  • analyzer_version: string
  • scoring_rule_version: string
  • cohort: PromptCohort
  • coverage: map of number | null
  • total_completed: integer
  • total_failed: integer
  • visibility_score: number | null
  • visibility_rate (optional): number | null
  • owned_citation_rate (optional): number | null
  • prompt_performance_score (optional): number | null
  • counts (optional): MeasurementCounts
  • comparison_key (optional): string | null
  • comparison (optional): VisibilityComparison
  • citation_totals (optional): object
    • citations: integer
    • owned_citations: integer
    • owned_share: number | null
  • selection_mode (optional): "latest" | "run" | "range"
  • source_audit_ids (optional): string (uuid)[]
  • configuration_groups (optional): map of integer
  • from_at (optional): string | null
  • to_at (optional): string | null
  • model_provenance: ModelProvenance[]
  • rankings: RankingRow[]
  • per_engine: VisibilityEngine[]
  • avg_position: number | null
  • created_at: string
VisibilityAdsResponse
  • state: "value" | "not_applicable" | "unavailable" | "no_answers"
  • source_audit_ids: string (uuid)[]
  • parser_versions: string[]
  • metrics_version: string
  • presence: object
    • answers: integer
    • answers_with_ads: integer
    • rate: number | null
  • engines: object[]
    • engine: string
    • applicability: "applicable" | "unavailable" | "not_applicable"
    • answers: integer
    • presence: object | null
      • answers: integer
      • answers_with_ads: integer
      • rate: number | null
  • brand: object
    • appearances: integer
    • share: number | null
    • best_rank: integer | null
  • advertisers_seen: integer
  • advertisers: object[]
    • name: string
    • domain: string
    • ownership: AdOwnership
    • appearances: integer
    • prompts: integer
    • share: number
    • first_seen_at: string
    • last_seen_at: string
  • creatives: object
    • items: object[]
      • advertiser_name: string
      • advertiser_domain: string
      • ownership: AdOwnership
      • title: string
      • snippet: string
      • landing_url: string
      • appearances: integer
      • prompts: integer
      • first_seen_at: string
      • last_seen_at: string
    • total: integer
    • next_cursor: string | null
  • prompts: object[]
    • prompt: string
    • topic: string
    • presence: object
      • answers: integer
      • answers_with_ads: integer
      • rate: number | null
    • ads_seen: integer
    • top_advertiser: object | null
      • name: string
      • domain: string
    • competitor_ad_answers: object
      • brand_mentioned: integer
      • brand_not_mentioned: integer
  • topics: object[]
    • key: string
    • label: string
    • presence: object
      • answers: integer
      • answers_with_ads: integer
      • rate: number | null
  • runs: object[]
    • key: string
    • label: string
    • presence: object
      • answers: integer
      • answers_with_ads: integer
      • rate: number | null
VisibilityComparison
  • status: string
  • baseline_audit_id: string (uuid) | null
  • baseline_audit_ids: string (uuid)[]
  • baseline_at: string | null
  • baseline_counts: MeasurementCounts | null
  • current_counts: MeasurementCounts | null
  • deltas: map of number | null
  • rankings: RankingRow[]
  • skipped_runs: integer
  • matched_cells: integer
  • current_cells: integer
  • baseline_cells: integer
  • current_values: map of number | null
  • baseline_values: map of number | null
  • current_rankings: RankingRow[]
VisibilityEngine
  • logical_engine: string
  • total_completed: integer
  • brand_mention_rate: number | null
  • owned_citation_rate: number | null
  • search_use_rate: number | null
  • visibility_score: number | null
  • counts (optional): MeasurementCounts
VisibilityFanoutSummary
  • event_count: integer
  • distinct_queries: integer
  • matched_queries: integer
  • coverage: map of integer
  • next_cursor: string | null
  • total_answers: integer
  • answers: object[]
    • audit_id: string (uuid)
    • task_id: string (uuid)
    • prompt_text: string
    • logical_engine: string
    • brand_mentioned: boolean
    • owned_domain_cited: boolean
  • items: object[]
    • query: string
    • event_count: integer
    • prompt_count: integer
    • engines: string[]
    • response_count: integer
    • brand_response_count: integer
VisibilityMarketRow
  • market: object
    • id: string (uuid) | null
    • label: string
    • country_code: string
    • language_code: string
    • is_default: boolean
    • created_at: string | null
  • state: "measured" | "no_run"
  • audit_id: string (uuid) | null
  • measured_at: string | null
  • mention_rate: number | null
  • share_of_voice: number | null
  • net_sentiment: number | null
  • comparison_status: string | null
  • mention_rate_delta: number | null
  • share_of_voice_delta: number | null
VisibilityMarkets
VisibilitySources
  • previous_cursor (optional): string | null
  • total: integer
  • responses: integer
  • prompts: integer
  • total_citations: integer
  • category_totals (optional): map of integer
  • next_cursor: string | null
  • as_of: string
  • comparison_status: string
  • items: object[]
    • key: string
    • responses: integer
    • prompts: integer
    • annotations: integer
    • urls: integer
    • response_rate: number | null
    • prompt_coverage: number | null
    • retrieval_rate: number | null
    • citation_share: number | null
    • citation_rate: number | null
    • ownership: string[]
    • categories: string[]
    • taxonomy_versions: string[]
    • category_unavailable: boolean
    • response_delta: number | null
    • url_hash: string | null
    • inspection_state: string | null
    • opportunity_id: string (uuid) | null
    • standing: PageStanding | null
    • action_id: string (uuid) | null
    • title: string | null
    • page_format: string | null
    • page_format_method: string | null
    • last_cited_at: string | null
    • mentions: integer
    • brands: object[]
      • kind: "brand" | "competitor"
      • name: string
      • responses: integer
      • logo_url: string | null
      • website: string | null
VisibilityTrendList

VisibilityTrendPoint[]

VisibilityTrendPoint
  • audit_id: string (uuid) | null
  • completed_at: string
  • logical_engine: string | null
  • visibility_score: number | null
  • visibility_rate (optional): number | null
  • prompt_performance_score (optional): number | null
  • counts (optional): MeasurementCounts
  • comparison_key (optional): string | null
  • run_count (optional): integer
  • source_audit_ids (optional): string (uuid)[]
  • brand_mention_rate: number | null
  • owned_citation_rate: number | null
  • sov: object
    • mention: number | null
  • rankings: RankingRow[]
  • avg_position: number | null
  • transport_model: string | null
  • retrieval_enabled: boolean | null
  • model_provenance: ModelProvenance[]
  • source_snapshot_ids: string (uuid)[]
  • analyzer_versions: string[]
  • scoring_rule_versions: string[]
  • spans_version_boundary: boolean