create_content_brief
Open a brief for one keyword. XeoRank collects the evidence bundle the draft must satisfy: related Search Console queries, the site's own pages that rank for them (internal-link targets and cannibalisation risk), rival pages with their headings and entities, stored content gaps, the keyword cluster, tracked-keyword data, AI-visibility rows, and derived targets — word_count, must_cover topics, questions, entities, secondary_keywords, internal_links. Pass the opportunity object from content_opportunities so its reasoning is kept with the brief. When fewer than three rival pages are on file, XeoRank fetches the LIVE Google results for the keyword once (~$0.0155, on us): the top pages become rivals (their headings feed must_cover), and Google's People-Also-Ask questions and related searches go into targets.questions / secondary_keywords — evidence.serp shows what was fetched. Returns the brief with evidence and a next_step. One open brief per keyword per site — an existing one is returned instead.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | create | optimize (inferred when omitted) | |
| notes | No | Anything the user said about angle, audience or constraints | |
| title | No | Working title, if the user already has one | |
| intent | No | informational | commercial | transactional | navigational | |
| goal_id | No | The goal this piece serves (from list_goals). Prefer content_for_goal when the user starts from a goal. | |
| site_id | Yes | The site ID | |
| live_serp | No | Fetch live Google results when rivals are thin (default true); false = stored evidence only | |
| opportunity | No | JSON: the opportunity object from content_opportunities (kept verbatim) | |
| target_keyword | Yes | The keyword / prompt the piece targets |