Voice and AI
Make every generated post sound like you.
Call POST /voice/{accountId}/refresh with {} and an Idempotency-Key, then poll the returned job. It analyzes up to 100 posts (at least 10 usable originals). A paid plan with AI limit left is required. Refresh cooldown: 15 minutes. A ready voice activates automatically; needs_review requires explicitly accepting its limitations through the activation endpoint.
Generate with POST /voice/{accountId}/generate, e.g. {"kind":"draft","brief":"Explain one lesson from a small product release","stream":false}. Save the returned text as a post with aiAssisted:true. Voice generation never publishes by itself. Manually written posts need no voice. Customization via PUT preferences always runs server-side Jev safety checks; a client-provided Jev evaluation cannot bypass them.
AI chat defaults to streaming; voice generate defaults to JSON. Streaming uses SSE with AI SDK UI message stream v1 events, including text-delta (delta) and errors. Stream failures can occur after HTTP 200. Preserve X-AI-Request-ID and inspect request status; disconnecting does not imply cancellation or a refund.