Changelog
What changed in the /v1 API and the MCP server, newest first, with every change that asks something of an integration.
What changed in /v1, newest first. /v1 grows by addition: new endpoints, new optional parameters and
new response fields arrive without notice, so a client ignores fields it does not know. A change that
asks something of an existing integration is listed under Changed with what to do.
October 2026
Changed
- A webhook replay keeps the event id.
POST /v1/brands/{brand_id}/webhooks/{id}/deliveries/{delivery_id}/replayssends the sameX-RP-Event-Idand body as the first delivery, with a newX-RP-Delivery-Id. A receiver that dedupes on the event id now skips a replay of an event it already processed; dedupe on the delivery id to run it again. - Keyword research defaults to
suggestions. OnPOST /v1/brands/{brand_id}/seo/keyword-research, a request withoutmodenow returnssuggestions(longer phrasings that contain the seed), as the app, Agent Mode and the MCP do; before, it returnedideas. Sendmode=ideasto keep related keywords by topic. - Community searches pick their market and refund an empty run.
POST /v1/brands/{brand_id}/community-searchestakes optionalcountryandlanguage(the brand’s market by default; a country alone takes its language). A search that finds no thread is refunded and keeps the threads an earlier run of that keyword and market found. - A critical finding fails a page audit. On
POST /v1/page-audit,passedisfalsewhen any recommendation iscritical(anoindex, Googlebot or Bingbot blocked, JSON-LD that does not parse, a canonical to another host, no HTTPS), whatever thescore. A CI step that gates onpassednow fails those pages. Blocking only training crawlers (GPTBot, CCBot, Google-Extended) no longer lowers the score. - Writing a brand’s
descriptioncompletes its research. OnPATCH /v1/brands/{brand_id}/facts, a non-emptydescriptionsetsresearch_statustocomplete, so a brand whose website the research could not read is ready for reports right away. - Prompts read every answer, and the costly part on request. On
GET /v1/brands/{brand_id}/prompts:platform_resultscounts every answer of each engine:results,mentionsandposition, the brand’s mean position in the answers that name it. The latest answer’sanswer_id,brand_appears,rankandatare gone; read one answer withGET .../prompts/answers?prompt_hash=....- A
trendpoint carriesday, a date, instead ofat. Days are counted intz, a new optional IANA zone (defaultUTC). brands_namedanddomains_citedcome only withdetail=true, a slower read capped at 100 rows a page:detail=truewith a largerlimitanswers400 validation_error. Without it (the default) both are empty. Ask fordetail=trueon the rows you need, or on one prompt withprompt_hash.
- Fan-outs:
sourceis a list, and both by default. OnGET /v1/brands/{brand_id}/fanouts,sourcetakesaiandgoogleand can repeat;allanswers400 validation_error. With nosource, the engines’ searches and the People also ask questions come back together, as in the app (before:aialone). Sendsource=aito keep only the engines’ searches. - No
previous_*fields on cited pages and domains.GET /v1/brands/{brand_id}/citations/pagesdropsprevious_citation_countandprevious_share, and.../citations/domainsdropsprevious_citation_count. Comparefirst_half_citation_countwithsecond_half_citation_count, or read two periods. categoryrepeats on every Visibility read. The pages, domains, series, social posts and groups, fan-outs, prompts and their answers takecategorymore than once (up to 50 values of up to 200 characters) and read the answers to prompts of any of them.- Prompt
trackingisactive,pausedorone_off, and repeats. OnGET /v1/brands/{brand_id}/prompts,tracking=trackedanswers400 validation_error: sendtracking=active&tracking=pausedfor every scheduled prompt.pausedis new: scheduled prompts that are not running.typeandintentrepeat too, and read the prompts of any value given. - Schedule analytics weigh every answer and trend by halves. On
GET /v1/scheduled-reports/{id}/analytics,avg_visibilityand each prompt’savg_visibility_pctare the answers naming the brand over every answer, no longer a mean of run averages, andtrend_delta(withtrend_direction) compares the newer half of the runs with the older half, the middle run of an odd count left out, instead of the latest run with the one before. The same numbers the app shows; same fields. - Engines named as the app names them.
platforms_missedonGET /v1/brands/{brand_id}/content-opportunitiesand the engine lists ofGET /v1/brands/{brand_id}/content-briefs/citation-upliftreadGoogle AI Mode (AI Overviews),ChatGPTandClaude(before:Google AI,ChatGPT SearchandClaude Search), and so does the opportunity’sreason. A client that matches these names updates them. rankprompt_scoreis the Outreach score, recomputed from the page’s signals. OnGET /v1/brands/{brand_id}/citationsthe score (0 to 100) now weighs how much AI cites the page, whether it names your competitors and not you, how reachable the site is and how well the page fits, and is recomputed whenever one of them changes. It is 0 for your own site, a competitor’s site and a page that already links to you. Values shift once; a client that filters on a threshold checks it again.- A description written to a brand’s facts ends its research.
PATCH /v1/brands/{brand_id}/factswith a non-emptydescriptionsetsresearch_statustocomplete, so a brand the research could not read is ready for reports. A brand deleted while the write runs answers404 not_foundinstead of500 internal_error.
Removed
GET /v1/brands/{brand_id}/citations/by-domain. ReadGET /v1/brands/{brand_id}/citations/domains: the same counts per domain, with filters by report, engine, date and kind of site.domain_categoryandtop_domain_categoryon citations, and thedomain_categoryfilter. Readsite_typeandrelationonGET /v1/brands/{brand_id}/citations, and narrow by them on.../citations/pages. The MCP’srankprompt_list_citationsno longer takesdomain_category.summary.prompts_truncatedon content opportunities.GET /v1/brands/{brand_id}/content-opportunitiesread every prompt of the ten newest reports, so it was alwaysfalse;summary.prompts_analyzedsays how many were read.
Added
- Export a brand’s whole history.
POST /v1/brands/{brand_id}/exportsstarts an export ofcitationsandanswers(optional date window and filters) and answers202withLocation;GET .../exports/{export_id}returns its status, progress, row counts and, once done, links to gzipped NDJSON files, valid for 15 minutes and kept for 24 hours. One export runs per caller and brand: asking again while it runs returns it. Thecitationsdataset needsread:citations. Free on every plan; use it instead of paging a brand’s whole history. - Analytics of a schedule by period.
GET /v1/scheduled-reports/{id}/analyticstakes optionaldate_fromanddate_to. - Prompt discoveries say when a list is still being built.
GET /v1/brands/{brand_id}/prompt-discoveriesreturnspending: truewith an empty page while a brand’s competitor list is first built; ask again in a minute. - Google Maps places in Google AI Mode (AI Overviews) answers. A report citation of a place the answer lists
carries
google_place_url, its Google listing, andgoogle_place:rating,reviews,category,address,phoneandpositionamong the places the answer lists. Within a few hours of the report the place resolves to the business’s website, which becomes the citation’surl, so it counts under that domain. Both are null for every other citation. - An endpoint for every job the app’s Agent does. New endpoints, by resource:
- Tasks:
GET /v1/brands/{brand_id}/tasks/{task_id}, one task with a snapshot of where it came from. - Competitors:
GET /v1/reports/{report_id}/competitors, every entity a report’s answers name. - Sources:
GET .../citations/offsiteand.../citations/offsite/pages, the third-party pages the answers cite;GET,POSTandDELETE /v1/brands/{brand_id}/tracked-pages, the pages Sources follows. - Community:
GETandPOST .../community-threads,PATCH .../community-threads/{thread_id},PUT .../contextandPUT .../draft(reply drafts are never posted), andPOST .../community-searches. - Outreach targets:
POST .../outreach/citations,PATCH .../outreach/citations/{citation_id},POST .../backlink-verifications,POST .../outreach/processing-jobsandGET .../outreach/authors. - Contacts and contact lists:
/v1/brands/{brand_id}/contacts(list, create, edit, tag in bulk, a contact’s pages) and/contact-lists(list, create, edit, preview a filter, add and remove members). - Email templates and sequences:
/v1/brands/{brand_id}/email-templatesand/email-sequences, with step variants and their results. - Campaigns:
/v1/brands/{brand_id}/campaigns(list, create, read, timeline, preview);PATCHwithstatuslaunches, pauses or ends one. - Emails:
/v1/brands/{brand_id}/emails(list, summary, replies, create, AI composition, edit, thread, reply drafts) andPOST .../emails/{email_id}/sends, which sends from your Gmail. - Mailboxes:
GET /v1/me/mailboxes,PATCHandDELETE /v1/me/mailboxes/{mailbox_id}, andPOST /v1/me/mailbox-connection-links. - Content:
GET /v1/brands/{brand_id}/content-calendarandPOST .../content-briefs/{brief_id}/outlines. - Publishing on GitHub:
GET .../github/publishing-profile,POST .../github/publishing-profile-inferencesandPOST .../github/blog-scaffolds. - SEO:
GET .../seo-pages/candidates, the sitemap pages not tracked yet. - Analytics and Google Business Profile:
GET .../analytics/summary,GET .../gbp/locations,.../gbp/post-schedulesand a location’s reviews,POSTa scheduled post and a review reply. - Shares:
GET /v1/sharesacross your brands andDELETE /v1/shares/{share_id}. - Client reports:
/v1/client-reports(list, create, read, edit, facts, publish a version), a version’s delivery and its public link. - Agency (Agency Plus):
/v1/agency/portfolio,/heatmap,/competitors,/tasks,/tasks/summary,/reviews,/prospect-lists,/prospects/funnelandPOST /v1/agency/prospect-searches. - Lead webhooks (account owner, Agency Plus):
GETandPOST /v1/me/webhooks,DELETE /v1/me/webhooks/{webhook_id}.
- Tasks:
- New scopes.
read:outreachandwrite:outreach(write:outreachsends email from your mailbox),write:citations,read:communityandwrite:community,read:gbpandwrite:gbp(write:gbppublishes on Google),read:client-reportsandwrite:client-reports,read:agencyandwrite:prospects. Keys holdingread:allorwrite:allreach them too. - New error code
account_plan_required(403). An account level feature (mailboxes, client reports, the agency portfolio, lead webhooks) needs a plan the account does not have;details.required_plannames it. - The autopilot pauses itself after three failed articles in a row.
GET /v1/brands/{brand_id}/content-autopilotcan answerpause_reason: "failures"; resume it withPATCHonce the cause is fixed. - Generated prompts can replace a draft’s.
POST /v1/reports/{report_id}/promptstakesreplacewithauto_generate:truereplaces the report’s prompts with the generated set (put back if generation fails); left out, the generated prompts are added, as before. - Brands the answers name.
GET /v1/brands/{brand_id}/prompts/answers/brandsranks the brands every answer under the Visibility filters names, most named first, with each one’s mean place. - Answers that name a brand or cite a domain.
GET /v1/brands/{brand_id}/prompts/answerstakesnamed, abrands_named[].name, anddomain, adomains_cited[].domain; a scheme, a path and a leadingwww.are ignored, sodomain=www.runnersworld.comreadsrunnersworld.com. - Days in your time zone.
GET .../citations/series,GET .../prompts/answers/seriesand the prompt rows’trendtaketz, an IANA zone such asAmerica/New_York(defaultUTC), and count days and weeks in it. An unknown zone answers400 validation_error. - Share of voice over any relation.
GET /v1/brands/{brand_id}/competitors/summarytakescategory, the relations counted (direct_competitor,indirect_competitor,ai_platform,publisher,other), repeatable; left out, direct and indirect competitors. - One prompt’s row.
GET /v1/brands/{brand_id}/promptstakesprompt_hash, as its answers do, and lists only that prompt text. - Your Google demand as a discovery source.
GET /v1/brands/{brand_id}/prompt-discoveries?source=google_demandjoins the site’s Search Console queries of the last 28 days with the keywords its domain ranks for, one row per query, withorigin(gsc,rankedorboth),ctr,ranked_positionandetvbeside the clicks, impressions, position, volume and difficulty. It needs theread:analyticsandread:seoscopes, takessearchand pages withlimitandoffset. - Past-due refusals link to the card.
403 api_subscription_past_dueandsubscription_past_duecarrydetails.billing_url, the Subscription page where the card is updated, anddetails.docs_url, the Past-due billing section.details.upgrade_urlis unchanged. Refused calls are recorded in/v1/me/usageat 0 units and 0 credits, as they never spent any.
MCP
rankprompt_create_data_exportandrankprompt_get_data_exportexport a brand’s whole citation and answer history (see the exports entry above).- The tools are the in-app Agent’s, generated from its catalog, and each one calls its own
/v1endpoint with that endpoint’s scope, request units and credits: names follow the Agent (rankprompt_get_brand_info,rankprompt_research_keywords,rankprompt_create_share), a tool that took anactionis split into the Agent’s tools (the table below), and the outreach, community, Google Business Profile, client report and agency tools are on the list.dry_run: truepreviews a write; a tool that deletes or acts outside Rank Prompt answers a dry run of the call and runs once called again withconfirm: trueafter you agree.rankprompt_schemawithtoolnames its endpoint. The playbooks ofrankprompt_skills_listandrankprompt_skills_readare the Agent’s skills. The consent screen recommends reading outreach, tracking pages andread:meta; sending outreach email is not recommended. - Tool names changed. A script or a saved prompt that names a tool needs the new name. The tools whose
name stayed (
rankprompt_create_brand,rankprompt_research_brand,rankprompt_create_report,rankprompt_list_reports,rankprompt_get_report,rankprompt_list_tasks,rankprompt_create_task,rankprompt_update_task,rankprompt_list_citations,rankprompt_list_competitors,rankprompt_merge_competitors, the alias suggestion tools,rankprompt_list_content_opportunities,rankprompt_generate_article,rankprompt_regenerate_article,rankprompt_publish_article, the three audit runs,rankprompt_buy_credits,rankprompt_subscribeand theprime,schema,read,write,deleteandskills_*tools) may take other arguments: read them withrankprompt_schema.
| Before | Now |
|---|---|
rankprompt_list_brands | rankprompt_list_my_brands |
rankprompt_get_brand_facts, rankprompt_set_brand_facts | rankprompt_get_brand_info, rankprompt_update_brand_info; the full facts are rankprompt_read and rankprompt_write on /v1/brands/{brand_id}/facts |
rankprompt_add_prompts | rankprompt_add_report_prompt (prompts), rankprompt_generate_report_prompts (auto_generate, replaces the draft’s prompts) |
rankprompt_get_report_summary | rankprompt_get_report_visibility_breakdown |
rankprompt_run_report | rankprompt_analyze_report_visibility |
rankprompt_get_job | rankprompt_read on /v1/jobs/{job_id} |
rankprompt_list_citation_domains | rankprompt_list_cited_domains |
rankprompt_generate_ai_suggestions | rankprompt_generate_report_recommendations |
rankprompt_get_credits | rankprompt_get_credit_balance |
rankprompt_track_seo_page | rankprompt_add_seo_page |
rankprompt_create_schedule | rankprompt_create_scheduled_report |
rankprompt_create_article, rankprompt_edit_article | rankprompt_import_article, rankprompt_update_article |
rankprompt_content_plan | rankprompt_plan_articles, rankprompt_get_content_plan |
rankprompt_content_preferences | rankprompt_get_content_preferences, rankprompt_update_content_preferences |
rankprompt_citation_uplift | rankprompt_get_citation_uplift |
rankprompt_publish_targets | rankprompt_list_cms_connections |
rankprompt_connect_wordpress | rankprompt_connect_publishing_target |
rankprompt_review | rankprompt_get_article_review, rankprompt_share_article_review, rankprompt_reply_to_review |
rankprompt_share | rankprompt_create_share (a report; other targets are rankprompt_write on their /shares path), rankprompt_list_shares, rankprompt_revoke_share |
rankprompt_brand_audit | rankprompt_run_brand_audit, rankprompt_get_brand_audit, rankprompt_list_brand_audits |
rankprompt_keywords | rankprompt_list_tracked_keywords, rankprompt_track_keywords, rankprompt_check_keyword_ranks |
rankprompt_keyword_research | rankprompt_research_keywords |
rankprompt_seo_competition | rankprompt_get_ranking_keywords, rankprompt_get_keyword_gap, rankprompt_refresh_domain_overview, rankprompt_refresh_keyword_gap |
rankprompt_prompt_insights | rankprompt_get_prompt_insights |
rankprompt_analytics | rankprompt_get_analytics_summary |
rankprompt_search_console | rankprompt_get_search_console (performance) |
The actions without a tool of their own (keyword history and candidates, prompt insight lookups and pins,
Search Console URL inspection and sitemaps, the analytics connection and properties, brand audit page
analysis and recommendations) are rankprompt_read or rankprompt_write on their /v1 path.
September 2026
Changed
-
Three lists page on the server, with no cap.
GET /v1/scheduled-reports/{id}/prompt-history/{region_config_prompt_id}is a cursor list: runs move fromrunstodata,objectislist, and pages uselimitandcursor(has_more,next_cursor). The prompt fields stay on the envelope. It returns every completed run, not only the latest 50.GET /v1/brands/{brand_id}/seo/keywords/{keyword_id}/historyis a cursor list: checks move fromcheckstodata,objectislist,keywordstays on the envelope. It is no longer capped at 60 checks.GET /v1/brands/{brand_id}/seo/keywords/{keyword_id}/promptsis offset paginated (limit,offset,total,has_more,object: list). It is no longer capped at 200 prompts, andruns,answersandappearancescount completed runs and resolved answers only (before: every report’s runs, processing and failed ones included, and answers still being checked), so they can read lower.
Read
dataand follownext_cursororoffset. -
Competitors:
categorytakes the five categories only. OnGET /v1/brands/{brand_id}/competitors,categoryacceptsdirect_competitor,indirect_competitor,ai_platform,publisherandother, and can repeat. Any other value,allincluded, answers422 validation_error(before:alllisted every entity and an unknown value an empty page). To list every entity, leavecategoryout. -
The spec requires
Idempotency-Keyon everyPOST. The API always refused aPOSTmade with an API key without it (400 idempotency_key_required); the OpenAPI spec now marks the header required there, with its format, so a client generated from it sends one (before: optional in the spec).dry_run=truestill ignores it. Regenerate your client and send a new key per operation. -
SEO audits:
inp_msis nowtbt_ms. In thecore_web_vitalsof every SEO audit (GET /v1/brands/{brand_id}/seo-pages,.../seo-pages/{page_id}and itsaudits),inp_msis renamedtbt_ms. The value always was the lab Total Blocking Time: a lab run has no interactions, so real INP stays infield_data. Stored audits are rewritten andinp_msis no longer returned. Readtbt_ms. -
A report is shared once it completes.
POST /v1/reports/{report_id}/sharesanswers400 validation_errorwhile the report isprocessing(before: it shared the report as it stood). Create the share afterreport.completed, or onceGET /v1/reports/{report_id}readscompleted. -
upgrade_urlonly when the key’s creator pays. On402 insufficient_creditswithdetails.reason: credits_budget,details.upgrade_urlis present only when the credits are the key creator’s own. When the work is charged to someone else (the owner of a brand shared with you, or the owner of the team account the key acts in), it is absent and the message says who tops up (before: always present). The same holds forrequest_quota_exceeded,api_subscription_required,api_subscription_past_dueandsubscription_past_dueon a key that acts in a team account. Whenupgrade_urlis missing, show the message instead of a top-up link. -
A scheduled publish waits in our queue. On
POST /v1/brands/{brand_id}/content-briefs/{brief_id}/publish,scheduled_forno longer creates the post scheduled in the CMS: the post waits on the site as a draft (the hosted blog keeps it in Rank Prompt) until our queue makes it live at that time, retrying a site that does not answer. Scheduling a brief that is already live leaves the live post as it is until that time, then updates it (before: the live post was rescheduled).scheduled_forwithpublish_status: draftanswers400 validation_error. Sendscheduled_forwithpublish_status: publish(the default), and read the time from the publication’sscheduled_for, not from the CMS. -
A prompt’s
trend_deltacounts the engines both runs asked. InGET /v1/scheduled-reports/{id}/analytics, a prompt’strend_delta, and so itstrend_direction, is the change over the AI platforms both of its last two runs asked it on, so an engine added or removed no longer moves it (before: the gap between the two runs’ visibility). It can differ from the gap between the last twosparkline_datavalues. No action needed unless you recompute it fromsparkline_data. -
platforms_missednames Google’s engineAI Mode. InGET /v1/brands/{brand_id}/content-opportunities, Google’s engine is now namedAI Mode, notGoogle AI, on sets computed from now on. Match both if you filter on it. -
Every prompt is scanned for content opportunities. A set now reads every prompt of the brand’s ten newest reports (before: up to 200), so
summary.prompts_truncatedisfalseon every set computed from now on. No action needed. -
AI platforms: one price, two engines retired. Every plan runs the same six engines, and none costs more than another:
- The writes that take
ai_platforms(POSTandPATCH /v1/reports,POSTandPATCH /v1/region-configs,POST /v1/scheduled-reports) acceptchatgpt,claude,gemini,grok,perplexityandai_overviews. Any other value,chatgpt_searchandclaude_searchincluded, answers422with the codeai_platform_unsupported;details.valuenames the value,details.supportedlists the accepted ones and, for a retired engine,details.replacementnames the engine that runs in its place (chatgptforchatgpt_search,claudeforclaude_search). - Omitted,
ai_platformsdefaults to["chatgpt", "claude", "ai_overviews"](before:["chatgpt", "perplexity"]). - A prompt costs 1 credit per three platforms, rounded up: 1 credit for one to three, 2 for four to six, all six included. Four platforms without a premium engine now cost 2 credits per prompt where they cost 1.
- Reads still return
chatgpt_searchandclaude_searchon past results. A region config is the schedule’s current setting, soGET /v1/region-configsreturns the engine that runs in place of a retired one, and the same list can be sent back in aPATCH.
Send one of the six values, and budget four or more platforms at the new price.
- The writes that take
-
GET /v1/brands/{brand_id}/citations/by-domaincounts from the answers. The rollup now returns the same numbers asGET /v1/brands/{brand_id}/citations/domainswithout its filters, and every count means one thing:actionable_countandavg_rankprompt_scoreare gone.citation_countis how often the answers cited a page on the domain (before: the brand’s citation rows on the domain in the rollup window).with_backlink_countis how many cited pages on the domain were found linking to the brand (before: citation rows whose page linked to the brand).brand_mentioned_countis how many analyzed cited pages on the domain name the brand.rollup_source_countis the total citations across every domain of the brand (before: the citations that entered the filtered rollup).top_domain_categoryisnullwhile the site is being classified (and deprecated, see below).
For filters by report, engine, date or kind of site, and more fields per domain, read
/citations/domains. -
has_backlinkisnulluntil the page is read. On a citation,has_backlinkisfalseonly once an Analyze or a backlink check read the page, andnullbefore that (before:falsefor a page nobody read).brand_mentionedfollows the same rule, and the newanalyzed_atsays when the page was read. Thehas_backlink=falsefilter ofGET /v1/brands/{brand_id}/citationsnow matches only pages that were read, so it returns fewer rows (before: every page nobody read matched too). Treatnullas unknown, never as no. -
LinkedIn values are decoded.
linkedin_handlecarries the handle as people read it (instituto-tecnológico-de-buenos-aires, not the percent-encoded form), andlinkedin_kindis one ofpost,article,person,company,school,showcaseorother(before:profilefor a member page, and noschool,showcaseorother). An open set: new values can appear. -
domain_categoryandtop_domain_categoryare derived and deprecated. Both now follow from the newsite_typeandrelation(below):OWNEDwhenrelationisowned, else the category of the site type, andtop_domain_categoryisnullwhile a site is being classified. Readsite_typeandrelationinstead; the two fields stay until the version that removes them is announced here. -
Prompt history keeps one citation list.
SchedulePromptRunPlatform.citations, the flat list of URLs, is gone;citation_detailscarries the same URLs with their title, source and favicon. -
Tasks have seven states. What reports, Brand Audit, Site Health, Search Console and content opportunities find now lands in
suggesteduntil someone accepts it intobacklogor moves it todismissed, and a dismissed finding is not suggested again. Withoutstatus, the task list holds accepted work (backlogtodone), as before; ask forstatus=suggestedorstatus=dismissedto read those. A suggested task nobody accepts, dismisses or edits for 90 days is deleted nightly; if the finding still applies it comes back as a new suggestion with a new id.
Added
- What a weekly tip measured. A task with
source_type: weekly_tipcarriestip: the prompt, the AI platforms that named the brand when the tip was made (namedofengines), and once the task is done, the same prompt on the next run (measured_beforeagainstmeasured_named, overmeasured_engines). - The first charge of a new subscription.
POST /v1/me/subscriptionsreturnsfirst_charge_centsoncheckout:amount_centsless the first-month offer when the account has one, so an agent can quote it. - Prompt discovery.
GET /v1/brands/{brand_id}/prompt-discoveriesreads questions and keywords worth tracking from a freesource:search_console(every query the site gets impressions for),ranking,competitors(prompts whose answers name a competitor and not the brand) orfanouts.POSTon the same path runs a paidresearcharound a seed or apageread (1 credit, free when the same request ran in the last 24 hours). Every row says whether it is already tracked as a prompt or a keyword. - What kind of site cited you. Citations,
GET /v1/brands/{brand_id}/citations/pagesand.../citations/domainscarrysite_type, what the whole site is (reddit,youtube,linkedin,wikipedia,qa_forum,social,news,reviews,reference,institutional,company,marketplaceand more: an open set, so a client accepts values it does not know), andrelation, the site’s relation to the brand (owned,competitorornone). Both lists filter on them:site_typeandrelation, each repeatable, and.../citations/seriesdraws one line per site type unlessgroupasks forrelation,page_category,domainorurl. - Sources. Read from the answers themselves under the Visibility filters (
report_id,scheduled_report_id,platform,date_from,date_to,category):GET /v1/brands/{brand_id}/citations/pageslists every cited URL, with its card once the page is read (image_url,published_at,modified_at,author,site_name,schema_types), and.../citations/domainsthe same by domain, with each domain’s reach. Both carryfirst_half_citation_countandsecond_half_citation_count, the citations of the first and last half of the runs read in the window, in the order they started (with an odd count the middle run counts in neither;nullwith fewer than two runs), andsort=changeandsort=trendorder by the second half against the first..../citations/seriescounts citations per day or week..../citations/sociallists the Reddit posts, YouTube videos and LinkedIn pages cited, withauthor,image_urlandpublished_atfrom the page; withnetwork=linkedin,kind(repeatable) keeps only some kinds of page (post,article,person,company,school,showcase,other)..../citations/social/groupsrolls them up by subreddit, channel or author. Both need the brand owner on Starter or with an API subscription, as Social does in the app, and answer403 brand_plan_requiredbelow it.GET .../fanoutslists the web searches the engines ran, or withsource=googlethe People also ask questions of the tracked keywords, each with itskeywords(repeatsourcefor both);sorttakestimes,keywords,promptsorlast_seen.GET .../fanouts/promptslists the prompts behind one search.
- Citations carry the page’s card.
GET /v1/brands/{brand_id}/citationsandGET /v1/citations/{id}addimage_url,published_at,modified_at,author,site_nameandschema_types,nulluntil the page is read. - Read but not cited. Report answers (
GET /v1/reports/{id}) and the runs of a schedule’s prompt history carryretrieved: the pages the engine read while answering that its text does not cite (they stay incitationstoo). - The score’s noise band.
GET /v1/reports/{id}/summaryaddsvisibility_band: the 95% band of the score (low,high) and the change against the previous run of the same schedule location, counted only over the answers both runs asked (shared_answers,shared_score,previous_score,delta,movement), with the prompts new to this run apart (new_prompts). Read a move inside the band as normal variation. - Prompts.
GET /v1/brands/{brand_id}/promptslists every prompt the brand tracks or ran once, one row per text, withmentions,brands_named,platform_results,domains_cited,languagesandvolume.PATCHon the same path pauses, resumes or re-categorizes up to 500 tracked prompts across every schedule and location of the brand in one call, andGET .../prompts/answers/seriescounts the answers per day and engine. - Scheduled reports.
POST /v1/scheduled-reportstakesregion_configsto create the markets with their prompts in the same call,POST /v1/region-configstakescopy_report_promptsto seed a market from a finished report,POST /v1/scheduled-reports/{id}/duplicatescopies a schedule with its markets and prompts,GET /v1/scheduled-reports/{id}/runsgroups the reports of every run, and the schedule analytics addregionswith each market’s visibility per run. See Scheduled reports. - Competitors.
GET /v1/brands/{brand_id}/competitorstakescategorymore than once andtag, and returnsfacets, the entities per category and per tag, each counted under the other filters. Competitors carrytagsyou can set withPATCH,GET .../competitors/duplicatesgroups the entities that look like one company (offset paginated), andGET .../competitors/summaryreturns the share of voice of the brand and its competitors in a period, read through the directory: an alias counts under its competitor’s name, and a removed competitor is left out. - Tasks.
GET /v1/brands/{brand_id}/taskstakessearch, a case-insensitive part of the title, andsource_typeaddscontent_opportunity. - Content.
POST /v1/brands/{brand_id}/content-briefsand.../content-briefs/generationstakeopportunity_id, the content opportunity the article answers, as a plan item already did.GET /v1/brands/{brand_id}/content-opportunitiesandPOST .../content-opportunities/refreshestakesearch(every word must appear in the title, topic, keywords or competitor, ignoring case and accents;summary.totalcounts the matches) andcontent_type, the format an opportunity suggests.GET /v1/brands/{brand_id}/content-autopilotreads the autopilot andPATCHsets it up, changes, pauses or resumes it: weekly slots, destination, publish policy, monthly cap, topics and quality bar.GET /v1/brands/{brand_id}/content-briefs/{brief_id}/interlinkslists the related posts on the same site that could link to a live article, each with the sentence to add, andPOSTon.../interlinks/{interlink_id}/applicationsor.../dismissalsapplies or dismisses one.- A CMS connection’s
providercan bewordpress,ghost,shopify,webflow,wix,githuborwebhook(before: onlywordpress; the API creates WordPress connections, the rest come from the dashboard). An open set: new values can appear, so a client accepts values it does not know. Awebhookconnection’ssite_urlis only its host unless you own the brand, since the rest of that URL is its secret. Publishing to agithubrepository opens a pull request, unless the repository is set to commit directly: the publication answersdraftwith itsreview_urland goes live when it merges. - A brief’s
publicationscarryreview_urlandnote, what the last send could not do as asked.
- Tracked keywords carry the Google page around them.
GET /v1/brands/{brand_id}/seo/keywordsandGET /v1/brands/{brand_id}/seo/keywords/{keyword_id}addserp: People also ask, related searches, the AI Overview (whether it cites the brand) and the featured snippet from the last rank check in that market, withchecked_at;nulluntil a rank check has read it. InGET .../seo/keywords/{keyword_id}/history,keyword.serpalso carries the AI Overview’sreferences,textandnames_brandand the page’sdiscussionsandvideos, and each rank checkai_overview_cites_brandandai_overview_names_brand. - SEO audits. Each issue of an audit carries
savings_msandsavings_bytes, what fixing it would save as Lighthouse estimates it. - Search Console.
GET /v1/brands/{brand_id}/search-console/performancewithdimension=queryreads every query Search Console exposes for the window, not a top 1,000, paged withlimitandoffset, withtotalandhas_more. - AI traffic that converts.
GET /v1/brands/{brand_id}/analytics/ai-traffic: the totals, sources, landing pages and daily points carry GA4key_eventsandrevenue, and the totalscurrency_code. - Webhooks.
destination_type(generic,slackordiscord) on create, read andPATCHposts a readable message to a Slack or Discord incoming webhook, still signed.POST /v1/brands/{brand_id}/webhooks/{webhook_id}/test-deliveriessends a sample of one subscribed event now and answers with what the endpoint returned, and deliveries carryis_testandduration_ms. - Keys in a team account. A key acts in the account that was active when it was created.
GET /v1/meaddsaccount_id,account_roleandaccount_plan,GET /v1/me/usagetakesaccount_idto count only the calls made in that account, and a key whose creator is no longer a member of its team account answers403 account_membership_required. - MCP.
rankprompt_discover_prompts,rankprompt_sources,rankprompt_list_prompts,rankprompt_list_fanouts,rankprompt_list_social_citationsandrankprompt_share_of_voiceare new, andrankprompt_skills_listalso lists the skills of the in-app Agent. See MCP server.