Build a content brief
https://seolyticize.com /api/v1/tools/build_content_brief A writer's brief for a keyword (or a cluster: the keyword plus relatedKeywords), built from the pages that rank: search intent and the format that wins (list, how-to, comparison, review, landing page, article), target length, the outline to cover, must-cover and nice-to-have terms, questions to answer (People Also Ask and the ranking pages'), structure and schema to include, the client's own pages to link to and from, and each competing page with what it misses — and ownership, a warning for each keyword the keyword registry already gives another page ('this already belongs to /x'). Also: each competitor scored 1–10 on depth, format, SEO and UX (out of 40), with claude-seo's full excluded list left out as non-competitors (encyclopedias, social and content platforms, search engines, marketplaces, forums, news and media, data platforms, directories, comparison aggregators, job boards, SEO tools, AI platforms, government and academic domains, and tag, author, login, legal and feed paths on any domain), and thinCompetition set when fewer than 3 real competitors remain; a section template for the page type (pageType: service, blog, case_study, category, landing, faq, location, about or homepage; default from the intent) with its goal, sections, schema (never FAQPage) and keyword placement; gaps typed topic, depth or quality with priority = impact × advantage ÷ effort; a required information-gain statement; the E-E-A-T the page needs; words per section; the featured-snippet section and format; title 50–60 and description 130–150 character targets; and with targetUrl, improve mode marking each section keep, strengthen or add against the page as it stands. Answers 'brief me on this keyword' and 'what should this post cover'. save: true keeps it as a research note on the client brief. Same cost as get_serp_content_profile.
Parameters
Idempotency-KeystringheaderRequest body
application/json
clientIdstringrequiredkeywordstringrequiredrelatedKeywordsstring[]targetUrlstringpageTypestringdepthintegersavebooleanlocationCodeintegerlanguageCodestringmaxCostMicrosintegerdryRunboolean{
"clientId": "string",
"keyword": "string",
"relatedKeywords": [
"string"
],
"targetUrl": "string",
"pageType": "service",
"depth": 10,
"save": false,
"locationCode": null,
"languageCode": null,
"maxCostMicros": 0,
"dryRun": true
}Code samples
cURL
curl -X POST "https://seolyticize.com/api/v1/tools/build_content_brief" \
-H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
-H "Idempotency-Key: <value>" \
-H "Content-Type: application/json" \
-d '{"clientId":"string","keyword":"string","relatedKeywords":["string"],"targetUrl":"string","pageType":"service","depth":10,"save":false,"locationCode":null,"languageCode":null,"maxCostMicros":0,"dryRun":true}'TypeScript
Python
Go
PHP
Ruby
Java
Responses
data, and its meta.Example
{
"data": {},
"meta": {
"requestId": "string",
"costMicros": 0,
"cached": true,
"cachedFrom": "string",
"dataAsOf": "string",
"sources": [
"string"
],
"partial": true,
"next": [
{
"tool": "string",
"args": {},
"why": "string"
}
],
"nextCursor": "string",
"dryRun": true
}
}Schema
datarequiredmetaobjectrequiredShow child parameters
requestIdstringrequiredcostMicrosintegerrequiredcachedbooleanrequiredcachedFromstringdataAsOfstringsourcesstring[]partialbooleanrequirednextobject[]requiredShow child parameters
toolstringargsobjectwhystringnextCursorstringdryRunbooleanX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerX-Request-IdstringExample
{
"error": "string",
"code": "string",
"next": "string",
"requestId": "string"
}Schema
errorstringrequiredcodestringnextstringrequestIdstringX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/build_content_brief
WWW-AuthenticatestringSame as 400 · POST /api/v1/tools/build_content_brief
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/build_content_brief
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/build_content_brief
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/build_content_brief
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/build_content_brief
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerRetry-AfterintegerSame as 400 · POST /api/v1/tools/build_content_brief
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-Resetinteger