Ingest a voice profile
niche_voice_profile_ingestExtract voice primitives (register / sentence rhythm / lexicon preferences / punctuation habits) from post-shaped text and persist onto the user's VoiceProfile. The voice primitives thread into content generation so generated copy matches the user's actual writing voice.
Two input shapes: pass posts (list of pre-collected text snippets, ≥80 chars each) or pass url (the server scrapes post-shaped snippets from the page: Substack / Medium / blog / X profile). Inline posts win when both are given. Inline post-shaped snippets need to be the user's own writing, not press articles or marketing copy.
Returns the extracted primitives + a diff of what changed on the stored VoiceProfile.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to scrape post-shaped text from. Substack / Medium / blog homepages work best; X / LinkedIn profile pages are supported but yield less per-snippet text. | |
| posts | No | Post-shaped text snippets the user wrote. ≥80 chars each; 3-10 snippets is the sweet spot for primitives extraction. | |
| brand_id | No | Which brand's voice to ingest into. Voice is brand-scoped: omit for the default brand, or pass a brand_id (from niche_brand_profile_get) to set up that brand's voice without touching another brand's. A brand with no voice of its own falls back to the default voice at generation time. | |
| archetype | No | Optional label for how the profile was acquired; tags the VoiceProfile.archetype field. Defaults to 'agent_ingest'. | agent_ingest |
| overwrite | No | Whether to replace an existing VoiceProfile. Default false: first run wins, subsequent runs are no-ops unless explicitly opted in, so an automated re-run does not overwrite a hand-curated voice. |