Generate campaign
generate_campaignCreates a new marketing campaign for a brand and generates its first batch of draft posts (copy + image briefs per channel). Posts land as drafts awaiting human approval in the Rebbel dashboard — this tool never publishes or schedules anything. If the brand already has a campaign with exactly this objective and angle, that campaign comes back instead (with a choice: open it, or generate anyway) and nothing new is created — pass generateAnyway:true only after the user asks for a second one. channels takes these ids: meta_facebook (Facebook), meta_instagram (Instagram), x, threads, bluesky, linkedin_personal, pinterest. TikTok posts are made in the Rebbel dashboard. A requested channel this brand can't use yet (for example, one its plan doesn't include) is left out and named in the response while the rest go ahead; if none of the requested channels can be used, nothing is created.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Leave this out to use the brand's own setting (get_make_posts_default). 'first' writes one post now and plans the rest, which the user can then have written with make_rest_of_campaign; 'all' writes every post now. Pass it only when the user says which they want. | |
| angle | Yes | The creative angle or hook the campaign should take. | |
| brandId | Yes | The brand's id, from list_brands. | |
| channels | Yes | Channels to generate content for — meta_facebook is Facebook, meta_instagram is Instagram. | |
| objective | Yes | What this campaign is for, in plain English. For organic campaigns, phrase the objective as what the audience should know or feel after the campaign (e.g. 'people starting Sober October know HALT before October 1'); the business result (signups, follows) is tracked, not written into posts. For a promotional/launch campaign, name the thing being promoted (e.g. 'promote the fall product launch'). | |
| campaignType | No | 'launch' for an introduction/who-we-are campaign (recommended when the brand's marketing-presence audit shows a thin footprint), 'standard' otherwise. Defaults to 'standard'. | |
| generateAnyway | No | Default false: if this brand already has a campaign with exactly this objective and angle, the existing one is returned instead of a copy being created. Pass true only after the user has seen that and explicitly wants a second campaign on the same brief. | |
| referenceLinks | No | Existing pages on the brand's own site worth linking to when a concept's angle genuinely calls for it (a blog post, a guide, a product page) — e.g. {url: 'https://example.com/guides/x', label: 'the X guide'}. Optional; omit if none apply. Not forced into every post. |