Check this week's visibility
#Compare the last seven days with the seven days before. Both tools need only the read permission.
- Call
getAnalyticsVisibilitywithquery.fromandquery.toset to the first and last day of the week. Dates are inclusive UTC days, so 2026-10-12 to 2026-10-18 is seven days. - Call
getAnalyticsShareOfVoicewith the same dates to see your share of voice next to your competitors. - Repeat both calls for the seven days before, from 2026-10-05 to 2026-10-11. Compare the two weeks.
To narrow the check, add the same query.platforms or query.topics filter to every call, so both weeks cover the same answers.
Find sources competitors win
#- Call
getAnalyticsCitationGapwithquery.fromandquery.tofor the period to review, such as the last 30 days. It needs thereadpermission. - Read the result. It lists competitor domains cited in answers that do not cite your own domain, most cited first, with each domain's citation count.
- Before you treat a domain as an opportunity, read what it publishes and check that it covers the same topic, audience and products as your project.
A gap is an observed difference in the selected answers. It does not promise that appearing on that website will make an AI model cite your brand.
Draft an article from an opportunity
#This recipe needs a key with read, write, generate and publish. Content Studio needs Pro or above, and generation needs an active subscription or trial.
- Call
listOpportunitiesand copy theidof the opportunity to act on. - Call
createContentwith a newbody.requestId, abody.promptand the opportunity's ID asbody.sourceOpportunityId. After an uncertain response, retry with the same request ID and body. Keep the returneddata.contentId. - A full article needs at least one verified source before generation. Read the document's sources with
getContentStudio. If there are none, attach a public page withaddContentSource, sending a new request ID and the page'surl. - Call
getContentSetupQuestionswith an empty body and choose an answer for each question it returns. Then callgenerateContentwith a new request ID, the document's current revision fromgetContentand your answers, as the content workflow shows. Generation is queued: pollgetContentGenerationwith the returneddata.generation.jobIduntil the job is completed or failed. - Read the document again with
getContentand runcheckContentReadinessagainst its revision and snapshot hash. Fix any blockers it reports. - Call
approveContentwith the document'supdatedAtasexpectedUpdatedAtand its snapshot hash asexpectedHash. Approval covers that exact version. - Call
publishContentwith the approval result'sdata.publishing.currentVersion.idasversionIdand itshashasexpectedHash. Webflow must be connected and configured.action: "draft"queues a Webflow draft.action: "publish"queues live publishing, which is available only when live publishing is enabled and the current version meets the publishing requirements. PollgetContentPublishingfor the delivery result.
Edit and publish
#Read a content document before editing it. Save against its expectedRevision, or expectedBriefRevision for a brief edit. A stale edit returns a conflict; re-read the document and reconcile your changes before retrying.
For operations that support body.requestId, reuse the same UUID and payload when retrying. Operations without that field do not gain a general replay guarantee. Queued work is not completion: poll its documented status tool.
Publishing still requires readiness and approval for the exact current version and hash. A changed document cannot inherit an earlier approval. Destructive replacement or deletion tools retain their documented history effects; review the content workflow and operation inputs before authorizing them.