persona_id | integer | no | — | The buyer persona this content is for, one of the personas get_brand_context lists. Provide this OR persona. |
persona | string | no | — | The buyer persona this content is for, by its name exactly as get_brand_context lists it. Provide this OR persona_id. |
voice_persona_id | integer | no | — | Voice persona the content speaks as. Omit for brand voice (right for blog posts). |
intent | 'engagement' | 'commercial' | yes | — | ‘engagement’ = relationship-building; ‘commercial’ = drive a buy decision. |
platform | 'linkedin' | 'twitter' | 'reddit' | 'blog' | 'instagram' | 'youtube' | yes | — | Target platform for the content. |
body | string | yes | — | The draft body (1-8000 chars). Long-form for blog; short-form for socials. |
title | string | no | — | Optional title (max 200 chars). Defaults to the first 80 chars of the body. |
source_task_id | integer | no | — | Anchor: action ticket this responds to. Exactly one of this, from_conversation_id or origin=‘editorial’ is required. |
from_conversation_id | integer | no | — | Anchor: ingested conversation. Exactly one of this, source_task_id or origin=‘editorial’ is required. |
origin | string | no | — | Anchor for a news-led post that answers neither a ticket nor a conversation. Requires editorial_reason and target_prompt_ids. |
editorial_reason | string | no | — | With origin=‘editorial’: why this post is worth publishing (≥ 8 chars). |
source_url | string | no | — | With origin=‘editorial’: the news or source the post responds to, when there is one. |
action_subtype | string | no | — | Finer subtype, e.g. ‘long_form_hub’ / ‘reddit_spoke’. |
fan_out_role | 'hub' | 'spoke' | no | — | Set ‘hub’ on the canonical piece, ‘spoke’ on channel adaptations. |
parent_action_id | integer | no | — | Hub action’s id; required when fan_out_role=‘spoke’. |
target_prompt_ids | integer[] | no | — | Required (at least one): tracked-question ids from plan_question_bank (not search_prompt_intelligence row ids) this content is meant to win citations on. Scopes outcome measurement. |
override_reason | string | no | — | Required to proceed past a blocking guardrail violation; recorded with the override. |