Skip to content
AdCrunch
Esc
↑↓navigate↵open⌘Jpreview
On this page

campaign_plan_get

Get one Campaign Plan with its money figures and its number of Line Items.

Ask for one Campaign Plan. The agent gets the Campaign Plan with its money figures and its number of Line Items. It does not get the Line Items.

“Show me the spring sale Campaign Plan.”

The agent calls campaign_plan_get. You see the envelope, the sum that the Line Items hold, and what is left. You also see the number of Line Items. When the Line Items mix totals and daily rates, the agent tells you that no sum exists. You also see the Assignees of the Campaign Plan: the members who are accountable for it. An Assignee has no extra access. A member who left the organization is not shown. To see the Line Items, the agent calls line_item_list. To check that AdCrunch can build one Line Item, the agent calls line_item_get. Only that call carries the readiness.

Plan a campaign walks the whole job.

Reference

Fetch one Campaign Plan by its slug, with its markdown body. The Campaign Plan carries lineItemCount, the number of its Line Items, and it does not list them: line_item_list gives the Line Items, with the id and the revision that each write needs. The readiness of a Line Item is not in this answer: line_item_get gives it for one Line Item. The Campaign Plan carries commentCount, the number of its Comments: campaign_plan_comment_list reads them. It also carries three money figures — the envelope (what you have), the allocated sum (what you have placed) and the remainder. When allocation.comparable is false the Line Items do not share a unit, so there is no total to state: say “not comparable” rather than adding them. A person approves a Campaign Plan and validates a Line Item in the AdCrunch console. No tool approves or validates. The provider write tools do not check either status. Echo revision back as base_revision when you write to the Campaign Plan. The Campaign Plan carries its assignees. An Assignee is a current member of the organization who is accountable for the record. An Assignee has no extra access: every role with the write scope can still edit the record. A Campaign Plan is AdCrunch’s own planning document — it is not a campaign on Meta or Google. For those, use list_campaigns and get_campaign.

Input

Argument Type Required Description
campaign_plan_name string yes The Campaign Plan slug — its stable per-organization handle.

Output

A successful call returns this object in structuredContent.

Field Type Always present Description
campaignPlan object yes The Campaign Plan as it is now, with the number of its Line Items. line_item_list gives the Line Items.
campaignPlan.allocation object yes The money of the Campaign Plan. AdCrunch calculates it on each read and does not store it.
campaignPlan.allocation.allocated number or null yes The sum of the Line Item budgets, in whole units of the currency. null when the Line Items with a budget do not share a unit.
campaignPlan.allocation.comparable boolean yes false when the Line Items with a budget mix totals and daily rates. Then no sum exists: say “not comparable”, and do not add the budgets.
campaignPlan.allocation.unallocated number or null yes The envelope less the allocated sum. It can be negative. null when the envelope is not set, when the Line Items do not share a unit, or when the unit is daily.
campaignPlan.allocation.unit one of total, daily or null yes The unit that the Line Items with a budget share. null when no Line Item has a budget, or when the Line Items do not share a unit.
campaignPlan.assignees array of object yes The current members who are accountable for the record, oldest first, at most 10. An Assignee grants no access.
campaignPlan.assignees[].id string yes The usr_… id of the member.
campaignPlan.assignees[].name string yes The name of the member.
campaignPlan.body string or null yes The long markdown document of the Campaign Plan: the argument for the split, how the result is judged, and anything else a reviewer reads. null when nobody wrote it.
campaignPlan.brand object or null yes The Brand that the Campaign Plan is for, or null when it has no Brand or its Brand was deleted.
campaignPlan.brand.name string yes The display name of the Brand.
campaignPlan.brand.slug string yes The slug of the Brand. Each tool takes it as brand_name.
campaignPlan.brandId string or null yes The Brand that the Campaign Plan is for, brd_…, or null.
campaignPlan.commentCount number yes The number of live Comments on the Campaign Plan, replies included. List them with campaign_plan_comment_list.
campaignPlan.createdAt number yes Milliseconds since the Unix epoch, UTC.
campaignPlan.createdBy string yes The user who created the Campaign Plan, usr_….
campaignPlan.currency string yes ISO 4217. Each amount of the Campaign Plan and of its Line Items is in whole units of this currency. It cannot change after a Line Item has a budget.
campaignPlan.description string yes One sentence that tells the Campaign Plan apart in a list.
campaignPlan.endDate string or null yes The last day of the Campaign Plan, or null. With no end date, the Campaign Plan is always on, and the budget of a Line Item with no end date of its own is a daily rate.
campaignPlan.id string yes The id of the Campaign Plan, cpl_….
campaignPlan.lineItemCount number yes The number of live Line Items of the Campaign Plan. List them with line_item_list.
campaignPlan.name string yes The display name.
campaignPlan.revision number yes The revision of the Campaign Plan. It increments when the Campaign Plan changes. Send it as base_revision to campaign_plan_update or campaign_plan_delete. A Line Item has a revision of its own.
campaignPlan.slug string yes The slug of the Campaign Plan. Each tool takes it as campaign_plan_name.
campaignPlan.startDate string or null yes The first day of the Campaign Plan, or null.
campaignPlan.status one of draft, approved yes approved when a person approved the content at this revision in the AdCrunch console. It is a record, not a gate: the provider write tools do not check it. A real change to the Campaign Plan, or a Line Item that is added or deleted, returns it to draft.
campaignPlan.totalBudget number or null yes The envelope: the money that you have, in whole units of currency. null means no declared limit, not zero.
campaignPlan.updatedAt number or null yes When the Campaign Plan last changed, or null when it never changed.

Failure codes

A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.

  • not_found
  • organization_unentitled
  • forbidden
  • invalid_request
  • internal_error

Scope

The token must hold campaign_plan:read. Auth & scopes lists each scope.

Annotations

A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.

  • Read-only. The tool changes nothing.
  • Closed world. The tool reads and writes the data of AdCrunch only.

Example

The arguments:

{
  "campaign_plan_name": "spring-sale"
}

The result, in structuredContent:

{
  "campaignPlan": {
    "allocation": {
      "allocated": 2500,
      "comparable": true,
      "unallocated": 2500,
      "unit": "total"
    },
    "assignees": [
      {
        "id": "usr_4d8b12",
        "name": "Maya Lindqvist"
      }
    ],
    "body": "## Why this split\n\nMeta carries the reach. One Line Item keeps the budget in one place.\n\n## How it will be judged\n\nRevenue in the window, against the spring of 2025.",
    "brand": {
      "name": "Acme",
      "slug": "acme"
    },
    "brandId": "brd_6a9c33",
    "commentCount": 2,
    "createdAt": 1768435200000,
    "createdBy": "usr_5d2b71",
    "currency": "EUR",
    "description": "The spring sale of Acme, on Meta, in France and Belgium.",
    "endDate": "2026-05-31",
    "id": "cpl_4e1a08",
    "lineItemCount": 1,
    "name": "Spring Sale 2026",
    "revision": 3,
    "slug": "spring-sale",
    "startDate": "2026-03-01",
    "status": "approved",
    "totalBudget": 5000,
    "updatedAt": 1769040000000
  }
}

Was this page helpful?