Draft an article from the brief
https://seolyticize.com /api/v1/tools/draft_article Writes a full article draft for a keyword, grounded in the content brief built from the pages that rank: the intent and format that win, the target length, the outline, the must-cover terms and the questions to answer, in the client's voice from its brief. Returns Markdown with H2/H3 headings, a meta title and description with pixel-length checks, and which must-cover terms the draft uses and misses (checked by us, not claimed). When the keyword registry already gives the keyword to another page, ownership warns 'this already belongs to /x' (targetUrl: the owner, to draft its rewrite instead). Answers 'write me a first draft for this keyword'. A paid Claude call on the client's budget, plus the brief's results page (free when anyone bought it in the last day). Run score_content on the result before publishing.
Parameters
Idempotency-KeystringheaderRequest body
application/json
clientIdstringrequiredkeywordstringrequiredrelatedKeywordsstring[]wordCountintegerinstructionsstringtargetUrlstringdepthintegerlocationCodeintegerlanguageCodestringmaxCostMicrosintegerdryRunboolean{
"clientId": "string",
"keyword": "string",
"relatedKeywords": [
"string"
],
"wordCount": 0,
"instructions": "string",
"targetUrl": "string",
"depth": 10,
"locationCode": null,
"languageCode": null,
"maxCostMicros": 0,
"dryRun": true
}Code samples
cURL
curl -X POST "https://seolyticize.com/api/v1/tools/draft_article" \
-H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
-H "Idempotency-Key: <value>" \
-H "Content-Type: application/json" \
-d '{"clientId":"string","keyword":"string","relatedKeywords":["string"],"wordCount":0,"instructions":"string","targetUrl":"string","depth":10,"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/draft_article
WWW-AuthenticatestringSame as 400 · POST /api/v1/tools/draft_article
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/draft_article
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/draft_article
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/draft_article
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/draft_article
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerRetry-AfterintegerSame as 400 · POST /api/v1/tools/draft_article
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-Resetinteger