--- title: "create_campaign: Start a campaign | distribution.tech" description: "From a goal to a priced plan in one call: goal (launch, funding, feature or program), product, moment (what goes live and when), window_start, window_end." canonical: https://distribution.tech/docs/mcp/tools/create-campaign generator: md-live-route generated: 2026-10-21T10:13:29.203Z --- # create_campaign: Start a campaign | distribution.tech - [Getting started](https://distribution.tech/docs) - [API reference](https://distribution.tech/docs/api) - [MCP and agents](https://distribution.tech/docs/agents) - [Changelog](https://distribution.tech/docs/changelog) Search the docs Docs - Agents › - [Run a campaign with your agent](https://distribution.tech/docs/agents) - [MCP server](https://distribution.tech/docs/mcp) - MCP tools › - [inventory](https://distribution.tech/docs/mcp/tools/inventory) - [resolve\_audience](https://distribution.tech/docs/mcp/tools/resolve-audience) - [campaign\_status](https://distribution.tech/docs/mcp/tools/campaign-status) - [evidence](https://distribution.tech/docs/mcp/tools/evidence) - [results](https://distribution.tech/docs/mcp/tools/results) - [brain\_get](https://distribution.tech/docs/mcp/tools/brain-get) - [creators\_search](https://distribution.tech/docs/mcp/tools/creators-search) - [creator\_get](https://distribution.tech/docs/mcp/tools/creator-get) - [creator\_ask\_price](https://distribution.tech/docs/mcp/tools/creator-ask-price) - [plan\_quote](https://distribution.tech/docs/mcp/tools/plan-quote) - [create\_campaign](https://distribution.tech/docs/mcp/tools/create-campaign) - [plan\_add\_creator](https://distribution.tech/docs/mcp/tools/plan-add-creator) - [plan\_remove\_creator](https://distribution.tech/docs/mcp/tools/plan-remove-creator) - [plan\_move\_dates](https://distribution.tech/docs/mcp/tools/plan-move-dates) - [plan\_swap\_creator](https://distribution.tech/docs/mcp/tools/plan-swap-creator) - [set\_creator\_guidelines](https://distribution.tech/docs/mcp/tools/set-creator-guidelines) - [approve\_plan](https://distribution.tech/docs/mcp/tools/approve-plan) - [archive\_campaign](https://distribution.tech/docs/mcp/tools/archive-campaign) - [rename\_campaign](https://distribution.tech/docs/mcp/tools/rename-campaign) - [delete\_campaign](https://distribution.tech/docs/mcp/tools/delete-campaign) - [feedback\_send](https://distribution.tech/docs/mcp/tools/feedback-send) - [feedback\_list](https://distribution.tech/docs/mcp/tools/feedback-list) 1. [distribution](https://distribution.tech/) 2. / [Docs](https://distribution.tech/docs) 3. / [MCP tools](https://distribution.tech/docs#mcp) 4. / create\_campaign MCP tool # Start a campaign create\_campaign From a goal to a priced plan in one call: goal (launch, funding, feature or program), product, moment (what goes live and when), window\_start, window\_end. Copy page as markdown [View .md](https://distribution.tech/docs/mcp/tools/create-campaign.md) ## Overview From a goal to a priced plan in one call: goal (launch, funding, feature or program), product, moment (what goes live and when), window\_start, window\_end and budget\_usd; optionally audience and company (left out, they come from your company context), geography (worldwide), desired\_outcome (the goal's usual outcome), constraints and budget\_min\_usd. The answer's defaults lists every field it filled. The budget is held to this key's mandate: the plan is built within the smaller of budget\_usd, the mandate's maximum plan total and what is left of its monthly cap, and a budget\_min\_usd above either limit is refused (mandate\_refused, over\_max\_plan\_total or over\_monthly\_cap, with the numbers); with no budget\_min\_usd the campaign is held to the mandate instead. The campaign is started for the brand exactly as from the workspace and the planner builds the plan from creators on sale now. Returns campaign\_id and the plan as plan\_quote returns it, or plan\_note when nothing on sale fits yet. Needs an idempotency\_key; a retry with the same key never starts a second campaign. A brand starts at most 3 campaigns in any 24 hours (rate\_limited, details.reason daily\_campaign\_limit, details.resets\_at when it reopens). Server `https://app.distribution.tech/api/mcp` Scope `campaigns:write` Changes data Yes, pass an idempotency\_key REST endpoint [POST /campaigns](https://distribution.tech/docs/api/post-campaigns) ## Arguments | Name | Type | Required | Description | | --- | --- | --- | --- | | `idempotency_key` | string | Yes | Your unique id for this request. Retry with the same id and the same arguments to get the same answer; it never runs twice. | | `goal` | one of "launch", "funding", "feature", "program" | Yes | The campaign's goal: launch, funding or feature (an announcement) or program (steady reach every month). | | `product` | string | Yes | What is being promoted. | | `moment` | string | Yes | What goes live and when, e.g. Agent SDK 1.0, public on 4 November. | | `window_start` | string (date) | Yes | First day posts may go out (YYYY-MM-DD), today or later. | | `window_end` | string (date) | Yes | Last day posts may go out (YYYY-MM-DD), on or after window\_start. | | `budget_usd` | integer | Yes | The most to spend, in US dollars. The plan is held to this key's mandate: never above its maximum plan total or what is left of its monthly cap. | | `audience` | string | No | Who needs to care, in a sentence. Leave out to use the audience in your company context. | | `geography` | string | No | The markets. Leave out for worldwide. | | `budget_min_usd` | integer | No | The least to spend. Above the mandate's maximum plan total, or what is left of its monthly cap, the campaign is refused. Leave out and the budget is held to the mandate instead of refused. | | `desired_outcome` | string | No | What a good result looks like. Leave out for the goal's usual outcome (launch: views and clicks on the launch posts). | | `company` | string | No | Your company's name as the creators should say it. Leave out to use the name in your company context. | | `constraints` | string | No | Anything the creators must or must not do. | ## Call with curl The server speaks streamable HTTP, so one JSON-RPC `tools/call` request runs the tool. Set `DISTRIBUTION_API_KEY` to a key from Developers with the `campaigns:write` scope; the arguments shown are the required ones. curl ``` curl -X POST "https://app.distribution.tech/api/mcp" \ -H "Authorization: Bearer $DISTRIBUTION_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "create_campaign", "arguments": { "idempotency_key": "", "goal": "launch", "product": "", "moment": "", "window_start": "", "window_end": "", "budget_usd": 10 } } }' ``` ## Result The answer's `structuredContent` follows the tool's output schema (the same JSON is in its text content). It has these fields: | Name | Type | Required | Description | | --- | --- | --- | --- | | `campaign_id` | string (uuid) | Yes | | | `status` | one of "plan\_ready", "no\_plan" | Yes | | | `plan` | null or object | Yes | | | `plan_note` | string or null | Yes | | | `defaults` | array of one of "company", "audience", "geography", "desired\_outcome" | No | The fields filled because the request left them out. | | `budget` | object | No | The budget the campaign was stored with. held is true when budget\_usd alone was held lower, to what the mandate allows. | structuredContent, every field with its type ``` { "campaign_id": "", "status": "plan_ready", "plan": { "plan_id": "", "campaign_id": "", "version": 0, "status": "awaiting_approval", "currency": "", "launch_window_start": "", "launch_window_end": "", "terms_fingerprint": "", "total_cents": 0, "totals": {}, "lines": [ { "id": "", "creator": { "id": "", "name": "", "handle": "", "profile_url": "", "avatar_url": "", "followers": 0 }, "creator_id": "", "unit_id": "", "stage_id": "planned", "stage": "", "channel": "", "channel_label": "", "format": "", "deliverable": "", "scheduled_date": "", "price_cents": 0, "vetting": "", "reason": "", "expected_views_low": 0, "expected_views_high": 0, "on_sale": false } ], "payment_options": [ { "rail": "checkout", "label": "", "clears": "" } ], "agent_payment": "checkout", "brand_terms": { "current_version": "", "current_number": 0, "url": "", "accepted_for_this_key": "", "accepted_number_for_this_key": 0 }, "mandate": { "key_id": "", "version": 0, "max_plan_cents": 0, "monthly_cap_cents": 0, "channels": [ "" ], "may_approve": false, "may_exceed_budget": false, "expires_at": "", "updated_at": "", "spent_this_month_cents": 0, "terms_version": "", "terms_accepted_at": "", "terms_accepted_email": "" }, "policy": { "allowed": false, "refusal": {} }, "blocked_lines": [ "" ], "over_budget": { "budget_cents": 0, "total_cents": 0, "over_by_cents": 0 }, "order": {}, "valid_while": "terms_fingerprint_unchanged" }, "plan_note": "", "defaults": [ "company" ], "budget": { "min_usd": 0, "max_usd": 0, "held": false } } ``` ## Other tools - [`inventory`](https://distribution.tech/docs/mcp/tools/inventory): Network coverage - [`resolve_audience`](https://distribution.tech/docs/mcp/tools/resolve-audience): Resolve an audience - [`campaign_status`](https://distribution.tech/docs/mcp/tools/campaign-status): Campaign status - [`evidence`](https://distribution.tech/docs/mcp/tools/evidence): Proof of delivery - [`results`](https://distribution.tech/docs/mcp/tools/results): Results - [`brain_get`](https://distribution.tech/docs/mcp/tools/brain-get): Company context - [`creators_search`](https://distribution.tech/docs/mcp/tools/creators-search): Find creators - [`creator_get`](https://distribution.tech/docs/mcp/tools/creator-get): One creator - [`creator_ask_price`](https://distribution.tech/docs/mcp/tools/creator-ask-price): Ask for a price - [`plan_quote`](https://distribution.tech/docs/mcp/tools/plan-quote): Quote a plan - [`plan_add_creator`](https://distribution.tech/docs/mcp/tools/plan-add-creator): Add a creator - [`plan_remove_creator`](https://distribution.tech/docs/mcp/tools/plan-remove-creator): Remove a creator - [`plan_move_dates`](https://distribution.tech/docs/mcp/tools/plan-move-dates): Move a plan's dates - [`plan_swap_creator`](https://distribution.tech/docs/mcp/tools/plan-swap-creator): Swap a creator - [`set_creator_guidelines`](https://distribution.tech/docs/mcp/tools/set-creator-guidelines): Set the creator guidelines - [`approve_plan`](https://distribution.tech/docs/mcp/tools/approve-plan): Approve and get the pay link - [`archive_campaign`](https://distribution.tech/docs/mcp/tools/archive-campaign): Archive a campaign - [`rename_campaign`](https://distribution.tech/docs/mcp/tools/rename-campaign): Rename a campaign - [`delete_campaign`](https://distribution.tech/docs/mcp/tools/delete-campaign): Delete a draft campaign - [`feedback_send`](https://distribution.tech/docs/mcp/tools/feedback-send): Send feedback - [`feedback_list`](https://distribution.tech/docs/mcp/tools/feedback-list): Your feedback ## Get access Keys are created in Developers once your brand is approved. [Connect an agent](https://distribution.tech/distribution#access) to ask for access, then read [the agent guide](https://distribution.tech/docs/agents) for the full flow. On this page - [Overview](#overview) - [Arguments](#arguments) - [Call with curl](#curl) - [Result](#result) - [Other tools](#related) - [Get access](#access) [![distribution.tech](https://distribution.tech/brand/wordmark-light.svg)![distribution.tech](https://distribution.tech/brand/wordmark.svg)](https://distribution.tech/) Your agent buys your distribution. Distribution we run for - ClickUp - Gushwork - Tab Platform - [How it works](https://distribution.tech/how-it-works) - [Network](https://distribution.tech/network) - [Workspace](https://app.distribution.tech/login) - [For your agents](https://distribution.tech/distribution) Solutions - [Product launch](https://distribution.tech/solutions/product-launch) - [Funding announcement](https://distribution.tech/solutions/funding-announcement) - [Feature release](https://distribution.tech/solutions/feature-release) - [For brands](https://distribution.tech/for-brands) - [For creators](https://distribution.tech/for-creators) Resources - [Blog](https://distribution.tech/blog) - [Launch playbook](https://distribution.tech/playbook) - [X creator rates](https://distribution.tech/rates/x-creators) Company - [Customers](https://distribution.tech/customers) - [Pricing](https://distribution.tech/pricing) - [Changelog](https://distribution.tech/changelog) - [Build a distribution plan](https://app.distribution.tech/login) - [Join the creator network](https://distribution.tech/for-creators#apply) - [Log in](https://app.distribution.tech/login) Legal - [Privacy](https://distribution.tech/privacy) - [Terms](https://distribution.tech/terms) © 2026 distribution.tech [Contact: team@distribution.tech](mailto:team@distribution.tech)Cookie settings Light Dark System