skip to content →
FIELD_MANUAL / LIVEREVISIONv1.3 · 2026.10.04Updated 2026-10-04CHAPTERS12 FILEDCH_05INTEGRATION
[ CH_05.09 / FIELD_MANUAL ]

Content pipeline

[ CH_05.09 / 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.

FIELD
STEERS
persona
One reader, described like a person. Shapes topic choice and the angle, depth and vocabulary of every post.
brand_voice
How posts should sound. Two or three adjectives beat a paragraph.
product_facts
One capability per line: the only things the writer may claim about your product. The truth check also counts them as evidence.
topics_to_avoid
Subjects never suggested or written about.
title_guidelines
House rules for titles: length, format, banned words.

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.

FIELD
EFFECT
intent_weights
Relative weight per search intent, e.g. {"commercial": 2.5, "informational": 1.0}. Missing intents weigh 1.0.
seed_keywords, seed_boost
Topics matching a seed keyword get a priority boost (default 1.5).
exclude_intents
Intents never generated, e.g. ["navigational"].
striking_distance_max_multiplier
The largest boost for a topic you already rank for on pages 2-4 (default 2.5).
respect_topics_to_avoid
When true (the default), topics_to_avoid also excludes matching topics from the ranking, not only from the prompts.
Topics and policy · scope
GET/projects/:id/generation-configRead the generation policy · projects:read
PUT/projects/:id/generation-configSet the generation policy · projects:write
POST/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
POST/projects/:id/gaps/:gap_id/rejectMark a topic off-target. It is kept and fed back as a negative example · projects:write
DELETE/projects/:id/gaps/:gap_idDelete a topic outright; it can be suggested again · gaps:delete

The five quality gates

A generated post publishes only when every gate passes. The publish check is run again at publish time.

GATE
HOLDS A POST WHEN
SEO metadata
The title or meta description fails the metadata checks, for example a description that is too short, too long or missing the keyword. Descriptions are written to length, never cut off mid-sentence.
Content quality
The body fails the content checks, for example a statistic or an absolute claim ("always", "guaranteed") with no source nearby.
Truth check
A factual claim could not be confirmed against its cited sources, a Google Search lookup, or your own site, capability file and brief product_facts. A claim that is only unverifiable, or a check that errored, does not hold a post.
Destination claims
The post claims a capability your publishing destination does not have, per your capability guard or capability contract.
Publish check
Leaked writing instructions, placeholder links or template tokens, or garbled text survived automatic repair.

Post statuses

STATUS
MEANING
draft
Saved, not on its way to publishing.
needs_review
Needs review. A gate is holding the post and automatic checks are working to clear it. No action needed yet.
checks unresolved
Still 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.
ready
Every gate passed. It publishes according to your project settings.
publishing
Being sent to your CMS.
published
Live. A failed republish, including a fix, never changes this.
failed
The publish did not go through, for example your CMS rejected it. Repair it or publish again.
archived
Out of your active views and allowance, and purged after 5 days unless you unarchive it.

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.

Owner actions · access · plan
POST/projects/:id/posts/:post_id/remove-unconfirmed-claimsRemove unconfirmed claims and re-check · session · paid
POST/projects/:id/posts/:post_id/repair-contentRun the content repair: up to 3 AI repair passes, then the truth check again · jobs:write · paid
POST/projects/:id/posts/:post_id/regenerate-contentRewrite out the product claims your destination rejected, then re-check · jobs:write · paid
POST/projects/:id/posts/:post_id/repair-metadataRewrite the title and description to spec · session · paid
POST/projects/:id/posts/:post_id/retry-truthRun the truth check again · session · paid
POST/projects/:id/posts/:post_id/archiveArchive (purged after 5 days) · session
POST/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 ready and publishes according to your project settings. Otherwise nothing changes, and the result is recorded on the post. It never archives. It returns 409, 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 202 with a job_id; poll GET /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.
[ END_OF_MANUAL ]
[ NEED_HELP? ]

Can't find what
you're looking for?

Reach out to the team. We answer every email and we read every bug report.