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
markets
GET /v1/projects/{project_id}/markets· scope read- Response:
object[]
- Response:
site-crawls
GET /v1/projects/{project_id}/site-crawls/{crawl_id}/pages· scope read · query: limit, cursor, status, monitored, page_kind, sort- Response:
PagesPage
- Response:
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- Response:
SiteIssuesPage
- Response:
site-health
GET /v1/projects/{project_id}/site-health· scope read · query: crawl_id- Response:
SiteHealthDashboard
- Response:
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- Response:
AiTrafficPages
- Response:
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- Response:
AiTrafficOverview
- Response:
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- Response:
CrawlCoverageResponse
- Response:
visibility
GET /v1/projects/{project_id}/visibility/ads· scope read · query: audit_id, audit_ids, market, engine, cohort, from, to, cursor, limit- Response:
VisibilityAdsResponse
- Response:
GET /v1/projects/{project_id}/visibility/perception· scope read · query: audit_id, audit_ids, market, engine, cohort, from, to- Response:
PerceptionResponse
- Response:
GET /v1/projects/{project_id}/visibility· scope read · query: audit_id, market, engine, baseline_id, selection_mode, from, to, configuration_key, cohort- Response:
Visibility
- Response:
GET /v1/projects/{project_id}/visibility/prompts· scope read · query: audit_id, audit_ids, market, baseline_audit_ids, engine, baseline_id, cohort- Response:
PromptMetricItem[]
- Response:
GET /v1/projects/{project_id}/visibility/prompts/{prompt_id}/history· scope read · query: market, engine, cohort- Response:
PromptHistory
- Response:
GET /v1/projects/{project_id}/visibility/trends· scope read · query: market, engine, from, to, granularity, transport_model, retrieval_enabled, cohort- Response:
VisibilityTrendList
- Response:
GET /v1/projects/{project_id}/visibility/fanout· scope read · query: audit_id, audit_ids, market, engine, cohort, query, search, cursor, limit- Response:
VisibilityFanoutSummary
- Response:
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- Response:
VisibilitySources
- Response:
GET /v1/projects/{project_id}/visibility/markets· scope read · query: cohort- Response:
VisibilityMarkets
- Response:
performance
GET /v1/projects/{project_id}/performance· scope read · query: range, from, to, compare, compare_from, compare_to, granularity- Response:
objectproject_id:string (uuid)range:stringgranularity:stringcompare:stringselected:PerformanceWindowcomparison:PerformanceWindow | nullcoverage:objectearliest_date:string | nulllatest_date:string | nullcovered_days:integeranalytics_quality:map of object[]
dimension_counts:objectquery:integerpage:integercountry:integerdevice:integersearch_appearance:integerday:integerbing_query:integerbing_page:integer
unavailable_dimensions:string[]formula_version:stringnormalization_version:string
- Response:
GET /v1/projects/{project_id}/performance/table· scope read · query: snapshot_id, dimension, sort, cursor, page_size, compare_snapshot_id- Response:
objectdimension:stringitems:object[]dimension_key:stringdisplay_value:stringmetrics:PerformanceMetricscomparison_metrics:PerformanceMetrics | null
next_cursor:string | nulltotal_count:integerpage_size:integer
- Response:
actions
GET /v1/projects/{project_id}/actions· scope read · query: limit, cursor, status, target_kind- Response:
ActionsPage
- Response:
GET /v1/projects/{project_id}/actions/{action_id}· scope read- Response:
ActionDetail
- Response:
PATCH /v1/projects/{project_id}/actions/{action_id}· scope actions:write- Request body:
objectstatus:string
- Response:
ActionItem
- Request body:
POST /v1/projects/{project_id}/actions/{action_id}/declaration· scope actions:write- Request body:
objectrecommendation_ids(optional):string (uuid)[]output_revision_id(optional):string (uuid) | nulldeclared_implemented_at:string (date-time)
- Response:
ActionDeclaration
- Request body:
search-intelligence
GET /v1/projects/{project_id}/search-intelligence/runs· scope read · query: offset, limit- Response:
SearchRun[]
- Response:
GET /v1/projects/{project_id}/search-intelligence/datasets/{dataset_id}/rows· scope read · query: cursor, limit, sort, direction, search, min_volume, intent- Response:
SearchDatasetPage
- Response:
business-map
GET /v1/projects/{project_id}/business-map· scope read- Response:
BusinessMap
- Response:
competitor-suggestions
GET /v1/projects/{project_id}/competitor-suggestions· scope read- Response:
ObservedCompetitor[]
- Response:
POST /v1/projects/{project_id}/competitor-suggestions/{candidate_id}/accept· scope competitors:write- Response:
Competitor
- Response:
prompt-sets
POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/generate· scope prompts:write- Request body:
objectcount(optional):integertopic_ids(optional):string (uuid)[]topic_id(optional):string (uuid) | nullagent_revision_id(optional):string (uuid) | nullcohort(optional):"core" | "comparison" | "brand_diagnostic"
- Response:
PromptGenerateResponse
- Request body:
GET /v1/projects/{project_id}/prompt-sets/{prompt_set_id}· scope read- Response:
PromptSet
- Response:
POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/import· scope prompts:write- Request body:
objectprompts:object[]text:stringtheme(optional):stringintent(optional):stringcohort(optional):PromptCohortenabled(optional):booleantopic(optional):string
- Response:
PromptSet
- Request body:
GET /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/candidates· scope read- Response:
PromptCandidate[]
- Response:
POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/candidates/review· scope prompts:write- Request body:
objectaccept_ids(optional):string (uuid)[]reject_ids(optional):string (uuid)[]
- Response:
PromptCandidateReviewResponse
- Request body:
GET /v1/projects/{project_id}/prompt-sets· scope read- Response:
PromptSet[]
- Response:
POST /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/prompts· scope prompts:write- Request body:
objectprompts:object[]text:stringtheme(optional):stringintent(optional):stringcohort(optional):PromptCohortenabled(optional):booleantopic_id(optional):string (uuid) | null
- Response:
objectprompts:Prompt[]
- Request body:
GET /v1/projects/{project_id}/prompt-sets/{prompt_set_id}/generation-runs· scope read · query: cursor, limit- Response:
objectitems:object[]id:string (uuid)prompt_set_id:string (uuid)generator_version:stringcreated_at:string
next_cursor:string | null
- Response:
prompts
PATCH /v1/projects/{project_id}/prompts/{prompt_id}· scope prompts:write- Request body:
objecttext(optional):string | nulltheme(optional):string | nullintent(optional):string | nullcohort(optional):PromptCohort | nullenabled(optional):boolean | nullstatus(optional):PromptStatus | nulltopic_id(optional):string (uuid) | null
- Response:
Prompt
- Request body:
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:
objectitems:object[]id:string (uuid)prompt_set_id:string (uuid)topic_id(optional):string (uuid) | nulltext:stringtheme:stringintent:PromptIntentbuyer_stage:BuyerStageprompt_intent:PromptIntentDetailcohort:PromptCohortbranded:booleanenabled:booleanstatus:PromptStatusorigin:"manual" | "imported" | "generated"created_at(optional):stringupdated_at(optional):stringlatest_measurement:object | object | objectstate:"measured"audit_id:string (uuid)mention_rate:number | nullcitation_rate:number | null
next_cursor:string | null
- Response:
topics
GET /v1/projects/{project_id}/topics· scope read- Response:
Topic[]
- Response:
POST /v1/projects/{project_id}/topics· scope prompts:write- Request body:
objectname:stringdescription(optional):stringparent_id(optional):string (uuid) | null
- Response:
Topic
- Request body:
PATCH /v1/projects/{project_id}/topics/{topic_id}· scope prompts:write- Request body:
objectname(optional):string | nulldescription(optional):string | nullparent_id(optional):string (uuid) | null
- Response:
Topic
- Request body:
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:
objectprompt_set_id:string (uuid)audit_scope(optional):"brand" | "commerce"cadence:AuditScheduleCadenceinterval_minutes(optional):integer | nulltimezone(optional):stringengines:LogicalEngine[]market_ids(optional):string (uuid) | null[]repetitions(optional):integer | nullbenchmark_mode(optional):BenchmarkMode | nullenabled(optional):booleannext_run_at(optional):string (date-time) | null
- Response:
AuditSchedule
- Request body:
GET /v1/projects/{project_id}/audit-schedules· scope read- Response:
AuditSchedule[]
- Response:
GET /v1/projects/{project_id}/audit-schedules/{schedule_id}· scope read- Response:
AuditSchedule
- Response:
PATCH /v1/projects/{project_id}/audit-schedules/{schedule_id}· scope schedules:write- Request body:
objectprompt_set_id(optional):string (uuid)audit_scope(optional):"brand" | "commerce"cadence(optional):AuditScheduleCadenceinterval_minutes(optional):integer | nulltimezone(optional):stringengines(optional):LogicalEngine[]market_ids(optional):string (uuid) | null[]repetitions(optional):integer | nullbenchmark_mode(optional):BenchmarkMode | nullenabled(optional):booleannext_run_at(optional):string (date-time) | null
- Response:
AuditSchedule
- Request body:
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- Response:
Audit
- Response:
POST /v1/projects/{project_id}/audits/{audit_id}/cancel· scope audits:run- Response:
Audit
- Response:
GET /v1/projects/{project_id}/audits· scope read · query: cursor, limit- Response:
objectitems:Audit[]next_cursor:string | null
- Response:
POST /v1/projects/{project_id}/audits· scope audits:run- Request body:
objectprompt_set_id(optional):string (uuid) | nullprompt_ids(optional):string (uuid)[]engines:LogicalEngine[]repetitions(optional):integer | nullbenchmark_mode(optional):BenchmarkMode | nullmarket_ids(optional):string (uuid) | null[]audit_scope(optional):"brand" | "commerce"random_seed(optional):string | nullmax_estimated_credits:integer
- Response:
Audit[]
- Request body:
POST /v1/projects/{project_id}/audits/estimate· scope read- Request body:
objectprompt_set_id(optional):string (uuid) | nullprompt_ids(optional):string (uuid)[]engines:LogicalEngine[]repetitions(optional):integer | nullmarket_ids(optional):string (uuid) | null[]
- Response:
AuditEstimate
- Request body:
competitors
GET /v1/projects/{project_id}/competitors· scope read- Response:
Competitor[]
- Response:
POST /v1/projects/{project_id}/competitors· scope competitors:write- Request body:
objectname:stringaliases(optional):string[]domains(optional):string[]
- Response:
Competitor
- Request body:
PATCH /v1/projects/{project_id}/competitors/{competitor_id}· scope competitors:write- Request body:
objectname(optional):stringaliases(optional):string[]domains(optional):string[]
- Response:
Competitor
- Request body:
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) | nullmember_opportunity_ids:string (uuid)[]opportunity_snapshot_id:string (uuid)target_site_url_ids:string (uuid)[]target_external_url:string | nulldeclared_implemented_at:stringexpected_checks:ExpectedCheck[]state:ImplementationStatelimitations:string[]verification_events:VerificationEvent[]legs:MeasurementLeg[]checks:DeclarationCheck[]measured_until:stringcreated_at:string
ActionDetail
id:string (uuid)project_id:string (uuid)target_kind:stringtarget_label:stringtarget_url:string | nulltarget_prompt_id:string (uuid) | nullorigin:"evidence" | "agent"status:ActionStatuspriority_score:number | nullfamilies:string[]approach:stringskill_id:stringmember_count:integerevidence_cleared_at:string | nullcreated_at:stringupdated_at:stringmember_measurement:map of "next_visibility_run" | "next_search_console_window" | "next_crawl" | nulldeclarable_since:stringdiagnosis:objectwhat_happened(optional):object[]opportunity_id:string (uuid)rule_id:stringtitle:stringfamily:stringpriority_score:number
families(optional):map of "observed" | "no_finding" | "unavailable"approach(optional):stringskill_id(optional):stringdonts(optional):string[]measure_with(optional):string[]
members:object[]id:string (uuid)project_id:string (uuid)rule_id:stringopportunity_type:OpportunityTypeseverity:OpportunitySeveritypriority_score:numbertitle:stringtarget_key:stringtarget_prompt_id:string (uuid) | nulltarget_url:string | nulltarget_theme:string | nulltarget_label:string | nullaction_id:string (uuid) | nullsystem_rank:integerdisplay_rank:integerorder_source:"system" | "manual"priority_factors:map of string | numberevidence_summary:objectcount:integerkinds:string[]
created_at:stringupdated_at:stringremediation:string
declaration:ActionDeclaration | null
ActionItem
id:string (uuid)project_id:string (uuid)target_kind:stringtarget_label:stringtarget_url:string | nulltarget_prompt_id:string (uuid) | nullorigin:"evidence" | "agent"status:ActionStatuspriority_score:number | nullfamilies:string[]approach:stringskill_id:stringmember_count:integerevidence_cleared_at:string | nullcreated_at:stringupdated_at:string
ActionsPage
items:ActionItem[]next_cursor:string | nullstatus_counts:map of integer
ActionStatus
"open" | "in_progress" | "implemented" | "measuring" | "done" | "dismissed"
AdOwnership
"owned" | "competitor" | "other"
AiReferrals
project_id:string (uuid)window_start:stringwindow_end:stringgranularity:SnapshotGranularityreferral_volume:MetricSeriesreferral_share:MetricSeriessources:AiReferralSourceRow[]analyzer_version:stringformula_version:stringscope:"property-wide"reporting_timezone:string | nullcurrency_code:string | nullanalytics_quality:map of object[]unattributed_landing:number | nullsource_measures:object[]ai_source:AiSourcesessions:number | nullkey_events:number | nullengagement_rate:number | nulltransactions:number | nullpurchase_revenue:number | null
channel_comparison:object[]channel:stringsessions:number | nullkey_events:number | nullengagement_rate:number | null
landing_pages:object[]url_hash:stringcanonical_url:stringai_source:AiSourcesessions:number | nullkey_events:number | nullanalytics_quality:string[]
AiReferralSourceRow
ai_source:"chatgpt" | "gemini" | "claude" | "perplexity" | "copilot" | "google_ai_overview"sessions:integershare:number | null
AiSource
"chatgpt" | "gemini" | "claude" | "perplexity" | "copilot" | "google_ai_overview" | "other"
AiTrafficOverview
crawl:CrawlSummaryreferrals:AiReferralscitations:objectunit:"tracked_citations"count:number | nulllabel:string
AiTrafficPages
window_start:stringwindow_end:stringitems:object[]url_hash:stringcanonical_url:stringdisplay_path:stringfolder:stringresource_class:stringcrawl:TrafficLegreferrals:TrafficLegcitations:TrafficLegfindings:TrafficLegkey_events:number | nulllast_crawl:string | nullerrors_4xx:number | nullerrors_5xx:number | null
next_cursor:string | nullobserved_crawl_coverage:objectstate:stringshare:number | nullknown_pages:numberobserved_pages:number | nullinventory_date:string | nullinventory_complete:booleansample_mode:booleanlabel:"Observed crawl coverage"
AnswerStates
mentioned_and_cited:integermentioned_only:integercited_only:integerneither:integer
Audit
id:string (uuid)workspace_id:string (uuid)project_id:string (uuid)parent_audit_id:string (uuid) | nullstatus:AuditStatusbenchmark_mode:stringaudit_scope:"brand" | "commerce"model_provenance:ModelProvenance[]repetitions:integerrandom_seed:stringrequested_count:integercompleted_count:integerfailed_count:integererror_message:stringengine_snapshots:object[]logical_engine:stringtransport_provider:stringtransport_model:string
market:objectid:string (uuid) | nullcountry_code:stringlanguage_code:string
launch_id:string (uuid) | nullnot_applicable_engines:LogicalEngine[]created_at:stringupdated_at:stringstarted_at:string | nullcompleted_at:string | null
AuditEstimate
retrieval_enabled:booleanprompt_count:integerengine_count:integerrepetition_count:integermarket_count:integerexecution_count:integermaximum_attempt_count:integermaximum_wall_clock_seconds:integercost_status:"complete" | "partial" | "unknown"estimated_total_cost_microusd:integer | nullengines:object[]logical_engine:LogicalEnginetransport_provider:TransportProvidertransport_model:stringretrieval_enabled:boolean | nullprompt_count:integerrepetition_count:integermarket_count:integerexecution_count:integermaximum_attempt_count:integerestimated_input_tokens:integer | nullestimated_output_tokens:integer | nullestimated_search_calls:integer | nullestimated_token_cost_microusd:integer | nullestimated_search_cost_microusd:integer | nullestimated_total_cost_microusd:integer | nullcost_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:AuditScheduleCadenceinterval_minutes:integer | nulltimezone:stringengines:LogicalEngine[]market_ids:string (uuid) | null[]repetitions:integer | nullbenchmark_mode:BenchmarkMode | nullenabled:booleannext_run_at:string | nulllast_run_at:string | nullfailure_count:integerlast_error:stringlast_failure_at:string | nullcreated_at:stringupdated_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
offerings:OfferingMap[]available_offerings:string[]
BusinessMapEntry
value:stringorigin:"manual" | "model"review_state:"suggested" | "confirmed"reviewed_by:string | nullreviewed_at:string | nullsource:map of
BuyerStage
"" | "awareness" | "consideration" | "decision" | "implementation"
Competitor
id:string (uuid)name:stringaliases:string[]domains:string[]logo_url(optional):string | nullmatching(optional):EntityMatching
CrawlAnalysisStatus
"pending" | "running" | "stopped" | "completed" | "partially_completed" | "failed" | "cancelled"
CrawlCounters
discovered:integer | nullselected:integerqueued:integerrunning:integeranalyzed:integererrors:integerblocked:integerfailure_breakdown:objectrobots_denied:integerhttp_4xx:integerhttp_5xx:integertimeout:integer
activity:objectstate:"working" | "waiting" | "stalled" | "terminal"reason:"active_work" | "host_gate" | "retry_backoff" | "expired_lease" | "terminal"queue_depth:integernext_available_at:string | null
by_page_kind:map of integer
CrawlCoverageResponse
items:object[]source_id:string (uuid)reporting_date:stringreporting_timezone:stringcoverage:"complete" | "declared_complete" | "partial" | "unknown"reason:stringbatch_count:numberheartbeat_count:numbermax_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:stringbuffer_interval_seconds:number | nullformat:stringcollection_point:stringsampling:object | object | objectkind:"none"
origin:stringhost:stringstatus:"active" | "revoked"state:"active" | "awaiting_verification" | "stalled" | "revoked"stall_reason:CrawlStallReason | nullstalled_at:string | nullpull:object | nullsubscription:stringverification_nonce:stringverified_at:string | nullverification_checked_at:string | nullverification_failure:CrawlVerificationFailure | nullfilter_catalog_version:stringfilter_confirmed_at:string | nullfilter_current:booleandeclared_sample_rate:numberlast_pull_at:string | nulllast_drained_at:string | null
token_prefix:string | nullconnection:"not_connected" | "awaiting_data" | "connected"last_accepted_batch:string | nulllast_processed_at:string | nullrejected_lines:numberoverlapping_lines:numberunsupported_uploads:numberunsupported_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:stringlast_processed_at:string | nullrequests:number | nullpages:number | nullactive_bots:number | nullerror_share:number | nullfailed_verification_requests:number | nullseries:object[]date:stringpurpose:CrawlerPurpose | "unknown"requests:number
CrawlVerificationFailure
"label_mismatch" | "push_subscription" | "ack_deadline" | "permission_denied" | "not_found" | "unavailable"
DeclarationCheck
index:integerkind:stringleg:"next_visibility_run" | "next_search_console_window" | "next_crawl"state:"waiting" | "met" | "unmet" | "unavailable"reason:string | nullobserved_at:string | nullsource_kind:string | nullsource_id:string | nullsubject:string | nullprompt_id(optional):string (uuid) | null
EntityMatching
mode:EntityMatchingModecontext_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:integerdefect_issue_type_count:integeradvisory_issue_type_count:integeroccurrence_count:integerseverity_counts:map of integerdimension_counts:map of integeraffected_url_count:integermonitored_affected_url_count:integer
KeywordPresenceExpectedCheck
kind:"keyword_presence"keyword:stringquery_key:stringowned_origin:stringlocation_code:integer | nulllanguage_code:string
LogicalEngine
"chatgpt" | "gemini" | "claude" | "google_ai_overview" | "chatgpt_search" | "gemini_consumer"
MeasurementCounts
state:stringresponses:integerbrand_responses:integer | nullowned_citation_responses:integer | nullentity_presences:integer | nullexpected:integer | nullfailed:integer | nullnot_run:integer | null
MeasurementLeg
leg:"next_visibility_run" | "next_search_console_window" | "next_crawl"state:"waiting" | "not_scheduled" | "sync_needed" | "observed"due_at:string | nulllast_evidence_at:string | nullsource_id:string (uuid) | null
MetricSeries
object[]
ModelProvenance
logical_engine:stringtransport_provider:stringtransport_model:stringretrieval_enabled:boolean | null
MonitoredQuota
used:integerlimit:integer
ObservedCompetitor
id:string (uuid)audit_id:string (uuid)name:stringdomain:stringqualification_reason:stringprompt_count:integerengine_count:integermarket_relevant:booleananalyzer_version:stringsource_analysis_ids:string[]source_artifact_ids:string[]status:stringcreated_at:string
OfferingMap
offering:stringattributes:BusinessMapEntry[]situations:BusinessMapEntry[]audiences:BusinessMapEntry[]exclusions:object[]first:stringsecond:string
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:integerweb_fundamentals_score:number | nullweb_fundamentals_coverage:number | nullweb_fundamentals_state:"measured" | "limited_evidence" | "not_measured" | "excluded"aeo_readiness_score:number | nullaeo_measurement_coverage:number | nullaeo_measurement_state:"measured" | "limited_evidence" | "not_measured" | "excluded"aeo_measurement_reason:string
PagesPage
items:PageSummary[]next_cursor:string | nullroot_errors:RootError[]
PageStanding
"yours" | "competitor" | "blocked" | "unreadable" | "not_read" | "gap" | "listed" | "read"
PageSummary
site_url_id:string (uuid)crawl_id:string (uuid)normalized_url:stringdisplay_url:stringtitle:string | nullmonitored:booleananalysis_status:PageAnalysisStatuserror_code:stringissue_count:integer | nullweb_fundamentals_score:number | nullweb_fundamentals_coverage:number | nullweb_fundamentals_state:"measured" | "limited_evidence" | "not_measured" | "excluded"aeo_readiness_score:number | nullaeo_measurement_coverage:number | nullaeo_measurement_state:"measured" | "limited_evidence" | "not_measured" | "excluded"aeo_measurement_reason:stringmain_content_indexable:boolean | nulllast_audited:string | nullpage_kind:PageKind | nullinbound_count:integer | nullmain_content_inbound_count:integer | nulldepth_from_home:integer | null
PerceptionBreakdown
key:stringlabel:stringscore:PerceptionScorecoverage:PerceptionCoverage
PerceptionCoverage
mentions:integerclassified:integerpending:integernot_assessable:integerlow_confidence:integerunavailable:object[]reason:"model_not_configured" | "platform_cap" | "entity_limit" | "invalid_output" | "model_error" | "task_failed" | "not_assessable"count:integer
PerceptionEntity
name:stringis_brand:booleanscore:PerceptionScorecoverage:PerceptionCoverage
PerceptionQuote
text:stringtheme:stringpolarity:"positive" | "negative"entity:stringis_brand:booleanlogical_engine:stringprompt:stringrun_id:string (uuid)execution_id:string (uuid)observed_at:stringextractor_version:stringtemplate_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" | nullsource_audit_ids:string (uuid)[]brand:PerceptionEntity | nullcoverage:PerceptionCoverageentities:PerceptionEntity[]engines:PerceptionBreakdown[]topics:PerceptionBreakdown[]prompts:PerceptionBreakdown[]themes:object[]theme:stringpositive:integernegative:integerquotes:PerceptionQuote[]
negative_quotes:PerceptionQuote[]drivers:object[]domain:stringanswers:integerexample_url:string | null
recommended:objectmentioned:integerrecommended:integerrecommended_against:integerrate:number | nulllimitation:string
trend:object[]audit_id:string (uuid)completed_at:stringscore:PerceptionScorementions:integerextractor_version:stringtemplate_version:stringmetrics_version:stringcomparable:boolean
PerceptionScore
positive:integerneutral:integernegative:integermixed:integerclassified:integerpositive_share:number | nullnegative_share:number | nullnet_sentiment:number | null
PerformanceMetrics
clicks:integer | nullimpressions:integer | nullctr:number | nullposition:number | null
PerformanceWindow
snapshot_id:string (uuid) | nullwindow_start:stringwindow_end:stringevidence_state:"not_run" | "observed_zero" | "available"totals:objectclicks:integer | nullimpressions:integer | nullctr:number | nullposition:number | nullsessions:integer | nullkey_events:number | null
series:objectclicks:object[]date:stringvalue:number | null
impressions:object[]date:stringvalue:number | null
ctr:object[]date:stringvalue:number | null
position:object[]date:stringvalue:number | null
Project
id:string (uuid)workspace_id:string (uuid)name:stringbrand_name:stringwebsite_url:stringindustry:stringsubindustry:stringprimary_market:stringcountry_code:stringlanguage_code:stringbenchmark_mode:BenchmarkModedefault_repetitions:integerbrand:objectaliases:string[]logo_url(optional):string | nullmatching(optional):EntityMatching
owned_domains:string[]unintended_domains:string[]competitors:Competitor[]prompt_sets:PromptSet[]created_at:stringupdated_at:string
Prompt
id:string (uuid)prompt_set_id:string (uuid)topic_id(optional):string (uuid) | nulltext:stringtheme:stringintent:PromptIntentbuyer_stage:BuyerStageprompt_intent:PromptIntentDetailcohort:PromptCohortbranded:booleanenabled:booleanstatus:PromptStatusorigin:"manual" | "imported" | "generated"created_at(optional):stringupdated_at(optional):string
PromptCandidate
id:string (uuid)run_id:string (uuid)prompt_set_id:string (uuid)topic_id:string (uuid) | nulltext:stringintent:stringbuyer_stage:BuyerStageprompt_intent:PromptIntentDetailcohort:PromptCohortcreated_at:stringexpires_at:stringquality_status:"judged" | "off" | "unavailable" | "not_judged"quality_flags:string[]grounded:boolean
PromptCandidateReviewResponse
accepted:Prompt[]rejected_count:integerdropped_duplicates:integerunavailable_count:integer
PromptCohort
"core" | "brand_diagnostic" | "comparison" | "commerce"
PromptGenerateResponse
candidates:PromptCandidate[]topics:Topic[]dropped_duplicates:integerrequested_count:integercandidates_generated:integerquality_gate:"off" | "shadow" | "gate" | "unavailable"quality_rejected:integeradmission_drops:map of integershortfall_reason:"deadline" | "model_error" | null
PromptHistory
prompt:objectid:string (uuid)text:stringtopic_id:string (uuid) | nullstatus:string
cohort:PromptCohortmarket_id:string (uuid) | nulllogical_engine:string | nullpoints:PromptHistoryPoint[]implementations:PromptHistoryImplementation[]latest:PromptMetricItem | null
PromptHistoryImplementation
implementation_event_id:string (uuid)action_id:string (uuid)title:stringstatus:ActionStatusimplemented_at:string
PromptHistoryPoint
audit_id:string (uuid)completed_at:stringprompt_text:stringcounts:MeasurementCountsmention_rate:number | nullowned_citation_rate:number | nullanswer_states:AnswerStates | nullsource_analysis_ids:string (uuid)[]comparison_key:string | nullanalyzer_version:stringscoring_rule_version:stringcomparable_with_previous:boolean | nullsource_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) | nullprompt_index:integerprompt_text:stringprompt_snapshot_id(optional):string (uuid) | nullcohort:stringcomposite_score:number | nullsource_audit_ids(optional):string (uuid)[]previous_score:number | nullimmediate_delta:number | nullrolling_four:number[]per_engine_scores:map of numbercomponents:map of number | nullengine_agreement:numberrepetition_agreement:numberevidence_coverage:numbertrend_confidence:numberdecline_confirmed:booleananalyzer_version:stringscoring_rule_version:stringcreated_at:stringtheme(optional):stringintent(optional):stringvisibility_rate(optional):number | nullowned_citation_rate(optional):number | nullavg_position(optional):number | nullvisibility_delta(optional):number | nullcomparison_status(optional):stringcomparison(optional):VisibilityComparison | nullcounts(optional):MeasurementCountsanswer_states(optional):AnswerStates | nullaction_id(optional):string (uuid) | nulloutcomes(optional):object[]logical_engine:stringtransport_model:stringcounts:MeasurementCountsvisibility_rate:number | nullowned_citation_rate:number | nullanswer_states(optional):AnswerStates | nullgap_counts:map of integer
PromptSet
id:string (uuid)project_id:string (uuid)name:stringdescription(optional):stringprompt_count(optional):integerprompts:Prompt[]created_at:stringupdated_at:string
PromptStatus
"active" | "archived"
RankingRow
name:stringis_brand:booleanlogo_url(optional):string | nullwebsite_url(optional):string | nullmention_rate:number | nullcitation_rate:number | nullshare_of_voice:number | nullmention_count:integervisibility_delta(optional):number | nullgap_count(optional):integer | nullmatched_visibility_rate(optional):number | nullmatched_visibility_delta(optional):number | nullmatched_response_count(optional):integer | nullavg_position:number | null
ResearchScope
"exact_host" | "domain_subdomains"
RootError
method:stringtarget:stringoutcome:stringerror_code:stringstatus_code:integer | nulllatency_ms:integer | null
SearchDataset
research_scope:ResearchScopeid:string (uuid)run_id:string (uuid)dataset_kind:stringtarget_domain:stringtarget_hostname:stringtarget_origin:stringacquisition:map ofcomparison_origin:stringlocation_code:integer | nulllanguage_code:stringstatus:stringcoverage:stringrequested_rows:integerraw_rows_received:integerunique_rows_saved:integerprovider_total:integer | nulltruncated:booleansummary:map ofcollection_started_at:string | nullcollection_ended_at:string | nullpublished_at:string | nullfiltered_saved_count(optional):integer | null
SearchDatasetPage
dataset:SearchDatasetrows:SearchRow[]next_cursor:string | null
SearchRow
id:string (uuid)dataset_id:string (uuid)call_id:string (uuid) | nullrow_kind:stringkeyword:stringdomain:stringurl:stringsearch_volume:integer | nulldifficulty:integer | nullintent:stringrank_group:integer | nullowned_rank_group:integer | nulletv:string | nullbacklinks:integer | nullreferring_main_domains:integer | nulldataforseo_rank:integer | nullauxiliary:map ofaction_id(optional):string (uuid) | null
SearchRun
id:string (uuid)status:stringaction:stringpricing_version:stringestimated_cost_usd:stringprovider_reported_cost_usd:string | nullplanned_calls:integercompleted_calls:integerplanned_rows:integerreceived_rows:integeruncertain_calls:integererror_code:stringerror_detail:stringexpires_at:stringconfirmed_at:string | nullcancelled_at:string | nullcompleted_at:string | nullfrozen_scope:map ofcall_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:CrawlOverallStatusdiscovery_status:CrawlDiscoveryStatusanalysis_status:CrawlAnalysisStatusroot_url:stringsample_mode:booleanseed:stringinventory_complete:booleanpartial_reason:"" | "discovery_incomplete" | "analysis_incomplete" | "discovery_and_analysis_incomplete"visible_url_count:integeranalyzed_count:integerfailed_count:integerdiscovery_requested_count:integeranalysis_requested_count:integercounters:CrawlCountersdiscovered_count(optional):integer | nulltotal_url_count:integer | nullhas_more_site_urls(optional):boolean | nullscore_summary:SiteScoreSummary | nullfailure_summary:object | nullcode:stringmessage:stringattempts:integer | nullstatus_code:integer | nulltarget_url:string
site_facts:map of | nullextractor_version:stringanalyzer_version:stringrule_version:stringscoring_version:stringerror_message:stringcreated_at:stringupdated_at:stringstarted_at:string | nullcompleted_at:string | null
SiteHealthDashboard
project_id:string (uuid)crawl:SiteCrawl | nullscore_summary:SiteScoreSummary | nullphase:"empty" | "discovering" | "analyzing" | "dashboard" | "terminal"snapshot_id:string (uuid) | nullquota:MonitoredQuotaroot_errors:RootError[]
SiteIssue
group_id:string (uuid)crawl_id:string (uuid)rule_id:stringpage_kinds:string[]dimension:IssueDimensioncategory:stringseverity:IssueSeverityfinding_class:FindingClasstitle:stringdescription:stringremediation:stringremediation_route:stringaffected_url_count:integeranalyzer_version:stringrule_version:stringcreated_at:string
SiteIssuesPage
items:SiteIssue[]next_cursor:string | nullsummary:IssuesSummary
SiteScoreSummary
web_fundamentals_score:number | nullweb_fundamentals_coverage:number | nullweb_fundamentals_state:"measured" | "limited_evidence" | "not_measured" | "excluded"aeo_readiness_score:number | nullaeo_measurement_coverage:number | nullaeo_measurement_state:"measured" | "limited_evidence" | "not_measured" | "excluded"search_eligibility:"eligible" | "blocked" | "unknown" | "excluded"classified_page_count:integerother_page_count:integerclassification_error_page_count:integerclassification_expected_page_count:integerclassification_coverage:number | nullclassification_state:"complete" | "partial" | "not_measured"classification_reason_groups:map of integerclassification_formula_version:stringclassification_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 integerselected_count:integeranalyzed_count:integerissue_count:integerscoring_version:stringby_page_kind:map of PageKindScoreSummary
SnapshotGranularity
"day" | "week" | "month"
Topic
id:string (uuid)project_id:string (uuid)parent_id:string (uuid) | nullname:stringdescription:stringorigin:"manual" | "generated"active_count:integercreated_at:stringupdated_at:string
TrafficLeg
state:"not_connected" | "unknown" | "unavailable" | "zero" | "value" | "non_comparable" | "flagged"value:number | nullcoverage:string | nullreason:string | null
TransportProvider
"openai" | "anthropic" | "google" | "dataforseo"
VerificationEvent
id:string (uuid)observation_kind:"observed" | "verified" | "contradicted"observed_at:stringcrawl_id:string (uuid) | nullaudit_id:string (uuid) | nullsource_analysis_ids:string (uuid)[]source_rule_evaluation_ids:string (uuid)[]source_metric_ids:string (uuid)[]result:map ofverifier_version:stringlimitations:string[]created_at:string
Visibility
project_id:string (uuid)audit_id:string (uuid)audit_status:AuditStatusanalyzer_version:stringscoring_rule_version:stringcohort:PromptCohortcoverage:map of number | nulltotal_completed:integertotal_failed:integervisibility_score:number | nullvisibility_rate(optional):number | nullowned_citation_rate(optional):number | nullprompt_performance_score(optional):number | nullcounts(optional):MeasurementCountscomparison_key(optional):string | nullcomparison(optional):VisibilityComparisoncitation_totals(optional):objectcitations:integerowned_citations:integerowned_share:number | null
selection_mode(optional):"latest" | "run" | "range"source_audit_ids(optional):string (uuid)[]configuration_groups(optional):map of integerfrom_at(optional):string | nullto_at(optional):string | nullmodel_provenance:ModelProvenance[]rankings:RankingRow[]per_engine:VisibilityEngine[]avg_position:number | nullcreated_at:string
VisibilityAdsResponse
state:"value" | "not_applicable" | "unavailable" | "no_answers"source_audit_ids:string (uuid)[]parser_versions:string[]metrics_version:stringpresence:objectanswers:integeranswers_with_ads:integerrate:number | null
engines:object[]engine:stringapplicability:"applicable" | "unavailable" | "not_applicable"answers:integerpresence:object | nullanswers:integeranswers_with_ads:integerrate:number | null
brand:objectappearances:integershare:number | nullbest_rank:integer | null
advertisers_seen:integeradvertisers:object[]name:stringdomain:stringownership:AdOwnershipappearances:integerprompts:integershare:numberfirst_seen_at:stringlast_seen_at:string
creatives:objectitems:object[]advertiser_name:stringadvertiser_domain:stringownership:AdOwnershiptitle:stringsnippet:stringlanding_url:stringappearances:integerprompts:integerfirst_seen_at:stringlast_seen_at:string
total:integernext_cursor:string | null
prompts:object[]prompt:stringtopic:stringpresence:objectanswers:integeranswers_with_ads:integerrate:number | null
ads_seen:integertop_advertiser:object | nullname:stringdomain:string
competitor_ad_answers:objectbrand_mentioned:integerbrand_not_mentioned:integer
topics:object[]key:stringlabel:stringpresence:objectanswers:integeranswers_with_ads:integerrate:number | null
runs:object[]key:stringlabel:stringpresence:objectanswers:integeranswers_with_ads:integerrate:number | null
VisibilityComparison
status:stringbaseline_audit_id:string (uuid) | nullbaseline_audit_ids:string (uuid)[]baseline_at:string | nullbaseline_counts:MeasurementCounts | nullcurrent_counts:MeasurementCounts | nulldeltas:map of number | nullrankings:RankingRow[]skipped_runs:integermatched_cells:integercurrent_cells:integerbaseline_cells:integercurrent_values:map of number | nullbaseline_values:map of number | nullcurrent_rankings:RankingRow[]
VisibilityEngine
logical_engine:stringtotal_completed:integerbrand_mention_rate:number | nullowned_citation_rate:number | nullsearch_use_rate:number | nullvisibility_score:number | nullcounts(optional):MeasurementCounts
VisibilityFanoutSummary
event_count:integerdistinct_queries:integermatched_queries:integercoverage:map of integernext_cursor:string | nulltotal_answers:integeranswers:object[]audit_id:string (uuid)task_id:string (uuid)prompt_text:stringlogical_engine:stringbrand_mentioned:booleanowned_domain_cited:boolean
items:object[]query:stringevent_count:integerprompt_count:integerengines:string[]response_count:integerbrand_response_count:integer
VisibilityMarketRow
market:objectid:string (uuid) | nulllabel:stringcountry_code:stringlanguage_code:stringis_default:booleancreated_at:string | null
state:"measured" | "no_run"audit_id:string (uuid) | nullmeasured_at:string | nullmention_rate:number | nullshare_of_voice:number | nullnet_sentiment:number | nullcomparison_status:string | nullmention_rate_delta:number | nullshare_of_voice_delta:number | null
VisibilityMarkets
cohort:PromptCohortmarkets:VisibilityMarketRow[]
VisibilitySources
previous_cursor(optional):string | nulltotal:integerresponses:integerprompts:integertotal_citations:integercategory_totals(optional):map of integernext_cursor:string | nullas_of:stringcomparison_status:stringitems:object[]key:stringresponses:integerprompts:integerannotations:integerurls:integerresponse_rate:number | nullprompt_coverage:number | nullretrieval_rate:number | nullcitation_share:number | nullcitation_rate:number | nullownership:string[]categories:string[]taxonomy_versions:string[]category_unavailable:booleanresponse_delta:number | nullurl_hash:string | nullinspection_state:string | nullopportunity_id:string (uuid) | nullstanding:PageStanding | nullaction_id:string (uuid) | nulltitle:string | nullpage_format:string | nullpage_format_method:string | nulllast_cited_at:string | nullmentions:integerbrands:object[]kind:"brand" | "competitor"name:stringresponses:integerlogo_url:string | nullwebsite:string | null
VisibilityTrendList
VisibilityTrendPoint
audit_id:string (uuid) | nullcompleted_at:stringlogical_engine:string | nullvisibility_score:number | nullvisibility_rate(optional):number | nullprompt_performance_score(optional):number | nullcounts(optional):MeasurementCountscomparison_key(optional):string | nullrun_count(optional):integersource_audit_ids(optional):string (uuid)[]brand_mention_rate:number | nullowned_citation_rate:number | nullsov:objectmention:number | null
rankings:RankingRow[]avg_position:number | nulltransport_model:string | nullretrieval_enabled:boolean | nullmodel_provenance:ModelProvenance[]source_snapshot_ids:string (uuid)[]analyzer_versions:string[]scoring_rule_versions:string[]spans_version_boundary:boolean