Content pipeline
Steer, check and recover content
Two settings steer what VectraSEO writes: the Content Brief shapes topics and prose, and the generation policy ranks topics. Five quality gates then decide whether a post may publish. A post a gate holds stays a draft, and you can act on it.
Content Brief
Set it under Settings → Step 2 · Content rules → Content Brief, or send {"content_brief": {…}} to PUT /projects/{id} (projects:write). Every field is optional, and an empty brief changes nothing. Omitting content_brief leaves it untouched, {} clears it, and any other object replaces the whole brief, so send every field you want to keep.
Generation policy and topics
The generation policy ranks suggested topics toward buyer intent and toward queries you already rank for on pages 2-4. Every field is optional; an empty policy leaves the ranking unchanged.
/projects/:id/generation-configRead the generation policy · projects:read/projects/:id/generation-configSet the generation policy · projects:write/projects/:id/gaps/rescoreRe-rank existing topics after a policy change, with no regeneration or AI call (?refresh_market_data=true re-fetches search metrics for every topic) · projects:write/projects/:id/gaps/:gap_id/rejectMark a topic off-target. It is kept and fed back as a negative example · projects:write/projects/:id/gaps/:gap_idDelete a topic outright; it can be suggested again · gaps:deleteThe five quality gates
A generated post publishes only when every gate passes. The publish check is run again at publish time.
product_facts. A claim that is only unverifiable, or a check that errored, does not hold a post.Post statuses
needs_review, with lifecycle_phase: "review_required": automatic repair has stopped, and the draft stays held until its checks pass. Use an owner action below.What you can do with a held post
Model-backed actions need a paid plan or an active trial. Actions marked session need a signed-in session; the others also accept an account key with the scope shown.
/projects/:id/posts/:post_id/remove-unconfirmed-claimsRemove unconfirmed claims and re-check · session · paid/projects/:id/posts/:post_id/repair-contentRun the content repair: up to 3 AI repair passes, then the truth check again · jobs:write · paid/projects/:id/posts/:post_id/regenerate-contentRewrite out the product claims your destination rejected, then re-check · jobs:write · paid/projects/:id/posts/:post_id/repair-metadataRewrite the title and description to spec · session · paid/projects/:id/posts/:post_id/retry-truthRun the truth check again · session · paid/projects/:id/posts/:post_id/archiveArchive (purged after 5 days) · session/projects/:id/posts/:post_id/unarchiveRestore an archived post · session- Remove unconfirmed claims and re-check deletes only the sentences the truth check could not confirm, then re-runs every gate. On a pass the draft becomes
readyand publishes according to your project settings. Otherwise nothing changes, and the result is recorded on the post. It never archives. It returns409, with the reason, for a post that was ever published, is not held by unconfirmed claims, is held on metadata or content quality (fix those first), is already being re-checked, or has used its AI allowance for re-checks. - Repair, regenerate and the truth re-check answer
202with ajob_id; pollGET /jobs/{job_id}. Repairing metadata is synchronous and returns the updated post. - Archive is deletion on a delay. An archived post leaves your active views and stops counting toward your generation allowance, and is permanently purged after 5 days. Unarchive before then to restore it as it was.
Can't find what
you're looking for?
Reach out to the team. We answer every email and we read every bug report.