--- title: "plan_quote: Quote a plan | distribution.tech" description: "One plan of yours as the person sees it and as you sign it: each line with the creator's name (its X handle and profile link once the plan's order is paid)." canonical: https://distribution.tech/docs/mcp/tools/plan-quote generator: md-live-route generated: 2026-10-21T22:49:15.492Z --- # plan_quote: Quote a plan | 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. / plan\_quote MCP tool # Quote a plan plan\_quote One plan of yours as the person sees it and as you sign it: each line with the creator's name (its X handle and profile link once the plan's order is paid). Copy page as markdown [View .md](https://distribution.tech/docs/mcp/tools/plan-quote.md) ## Overview One plan of yours as the person sees it and as you sign it: each line with the creator's name (its X handle and profile link once the plan's order is paid), format, date and all-in price, the totals (creators, measured reach, cost per 1,000 views, budget left), every payment option with when it clears, the current brand terms, and the terms\_fingerprint approve\_plan needs. It also says whether this key's mandate lets it sign the plan now, and if not which limit and by how much. A key that writes gets the quote at each creator's current price. over\_budget names how far the plan is over its campaign's budget (budget\_cents, total\_cents, over\_by\_cents), at current prices when a creator's price rose past it; null within the budget. Server `https://app.distribution.tech/api/mcp` Scope `campaigns:read` Changes data No, a read REST endpoint [GET /plans/{id}/quote](https://distribution.tech/docs/api/get-plans-id-quote) ## Arguments | Name | Type | Required | Description | | --- | --- | --- | --- | | `plan_id` | string (uuid) | Yes | A plan id, from create\_campaign or campaign\_status. | ## 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:read` 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": "plan_quote", "arguments": { "plan_id": "" } } }' ``` ## 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 | | --- | --- | --- | --- | | `plan_id` | string (uuid) | No | | | `campaign_id` | string (uuid) | No | | | `version` | integer | No | | | `status` | one of "awaiting\_approval", "approved" | No | | | `currency` | string | No | | | `launch_window_start` | string (date) | No | | | `launch_window_end` | string (date) | No | | | `terms_fingerprint` | string | No | Send exactly this to approve. It changes when a line, a price or the dates change. | | `total_cents` | integer | No | | | `totals` | object | No | creators, total\_cents, views\_low, views\_high, unmeasured, cpm\_low\_cents, cpm\_high\_cents, tiers, budget\_cents, remaining\_cents. | | `lines` | array of object | No | | | `payment_options` | array of object | No | | | `agent_payment` | one of "checkout", "team\_invoice" | No | | | `brand_terms` | object | No | | | `mandate` | object or null | No | | | `policy` | object | No | allowed: whether this key's mandate lets it sign now; refusal: the reason and numbers when not (over\_budget when the plan is over the campaign's budget, which no mandate can approve: remove a creator or have the brand raise the budget). | | `blocked_lines` | array of string (uuid) | No | | | `over_budget` | object or null | No | The plan over its campaign's budget: budget\_cents, total\_cents and over\_by\_cents, at current prices when a creator's price rose past the budget (the plan then keeps its earlier prices, so total\_cents alone reads as within it). Null within the budget, with no budget, or once signed. Approval refuses it until a creator is removed or the budget is raised. | | `order` | object or null | No | | | `valid_while` | "terms\_fingerprint\_unchanged" | No | | structuredContent, every field with its type ``` { "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" } ``` ## 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 - [`create_campaign`](https://distribution.tech/docs/mcp/tools/create-campaign): Start a campaign - [`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