In the app
The draft appears with a title, message and call to action, in statedraft.
From the API
Approving it
A campaign moves through states, and only legal moves are accepted:ready can go back to draft for another pass. Anything else — draft → sent,
sent → anything — is refused with 409 conflict, so a campaign cannot skip
review.
Notes
Generation needs the segment to exist. An unknown
segmentId is 404; the
segment name is resolved server-side, so a client cannot label a campaign with a
name its audience does not have. See
the generative pipeline.The tone and channel reach the prompt. They are instructions to the model,
not a formatting pass applied afterwards.
llm_unavailable (503) means the provider could not be reached; the request
is safe to retry. llm_error (502) means it answered with something
unusable. See the error model.