Reset Marketing Agent setup

Changed on

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Throws away the app's marketing plan and puts the Marketing Agent back to before setup started. Start again with Start Marketing Agent setup.

The plan is shared by everyone who edits the app, so this clears it for all of them, including their conversations with the agent about it. The channels, KPIs, strategy, budget, and competitors are all cleared, and reset_epoch goes up by one.

Reset never refuses, so you can use it when setup is stuck. A run that's working when you reset isn't stopped: it keeps running and using credits, but nothing it produces is saved. Calling it again resets the plan again.

This is limited to 120 requests a minute per app for each workspace's personal API keys, so every key in a workspace shares one allowance, across every Marketing Agent endpoint. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key belonging to a user with editor access to the app and an editor role in its workspace. Read-only keys and workspace API keys are refused.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

post/api/apps/{app_id}/cmo/setup/reset

Request

  • Base URL: https://app.base44.com
  • URL: https://app.base44.com/api/apps/{app_id}/cmo/setup/reset
  • Auth: HTTP bearer

Path parameters

app_idstring required

ID of the app.

Response

Successful Response

status'idle' | 'provisioning' | 'analyzing' | 'ready' | 'error' required

State of the latest run. Either "idle" before any run, "provisioning" while the workspace's Marketing Agent is created, "analyzing" while a run is working, "ready" once it finished, or "error" if it failed. A run that stops reporting for 15 minutes reads as "error".

run_idstring nullable required

ID of the latest run, or null if no run has started. Compare it between polls to tell a new run from the one you started.

last_errorstring nullable required

Why the latest run failed, or null if it didn't.

setup_stage'not_started' | 'scanning' | 'channels' | 'kpis' | 'budget' | 'generating' | 'complete' required

How far setup has got. Either "not_started", "scanning", "channels", "kpis", "budget", "generating", or "complete". At channels, kpis, and budget the agent is waiting for an answer.

reset_epochinteger required

Number of times the plan was reset. Send it back as reset_epoch when you answer a setup step.

channels_revision_suggestionstring nullable required

A change to the channels the agent offers to make, or null if it offers none. Send it as a message to accept it.

kpis_revision_suggestionstring nullable required

A change to the KPIs the agent offers to make, or null if it offers none. Send it as a message to accept it.

competitor_research_opt_inboolean required

Whether competitor research runs alongside the strategy.

competitor_research_answerboolean nullable required

Whether competitor research was accepted (true) or declined (false), or null if the question wasn't answered yet.

setup_pausedboolean required

Whether setup is paused because the user asked the agent to stop. Sending a message resumes it.

competitor_scan_status'running' | 'done' | 'failed' nullable required

State of the competitor research. Either "running", "done", or "failed", or null if it never ran.

cmo_agent_app_idstring nullable required

ID of the workspace's Marketing Agent app your conversation runs on, or null if you haven't talked to it on this app yet.

Example response

{
  "status": "ready",
  "run_id": "68a1c9b7f0b3d9001a7e5d04",
  "last_error": "The scan did not complete. Retry the setup.",
  "setup_stage": "channels",
  "channels": [
    {
      "name": "Reddit communities",
      "why": "Freelancers already trade CRM tips in r/freelance.",
      "tactics": [
        "Share a build-in-public thread",
        "Answer lead-tracking questions"
      ],
      "priority": 5
    }
  ],
  "channels_revision_suggestion": "Swap LinkedIn for Product Hunt",
  "kpis": [
    {
      "name": "Weekly signups",
      "why": "Signups are the first sign the Reddit threads convert.",
      "baseline": "About 10 a week",
      "target": "50 a week in 90 days",
      "targets": {
        "mid": "50 a week in 90 days",
        "none": "20 a week in 90 days"
      },
      "target_values": {
        "mid": 50,
        "none": 20
      },
      "metric": {
        "template": "event_count",
        "event_name": "lead_created",
        "window_days": 7,
        "n": 7
      },
      "instrument": {
        "builder_prompt": "Track a lead_created event when a lead is saved on the Leads page.",
        "where": "src/pages/Leads.jsx:42",
        "requested_at": "2026-08-24T09:20:00+00:00"
      }
    }
  ],
  "kpis_revision_suggestion": "Track paid conversions instead of signups",
  "strategy": {
    "summary": "Win early freelancers in the communities they already use, then turn them into referrals.",
    "positioning": "The CRM for freelancers who never wanted a CRM.",
    "channel_plan": [
      {
        "name": "Reddit communities",
        "why": "Freelancers already trade CRM tips in r/freelance.",
        "tactics": [
          "Share a build-in-public thread",
          "Answer lead-tracking questions"
        ],
        "priority": 5
      }
    ],
    "key_metrics": [
      "Weekly signups",
      "Week-one retention"
    ],
    "budget_fit": "Organic first, with $100 a month for Reddit promoted posts."
  },
  "suggestions": [
    {
      "id": "68a1d0c2f0b3d9001a7e5e10",
      "title": "Add a referral link to the dashboard",
      "builder_prompt": "Add a Refer a friend card to the dashboard with a copyable invite link.",
      "category": "Referral",
      "rationale": "Freelancers recommend tools to each other.",
      "impact": "high",
      "effort": "low"
    }
  ],
  "budget": {
    "description": "$500 a month",
    "band": "mid"
  },
  "competitor_research_opt_in": true,
  "competitor_research_answer": true,
  "competitors": [
    {
      "name": "HubSpot",
      "url": "https://www.hubspot.com",
      "angle": "A full CRM suite for sales teams.",
      "gap": "Too heavy for a solo freelancer."
    }
  ],
  "competitor_scan_status": "done",
  "cmo_agent_app_id": "68a1c2e4f0b3d9001a7e5c21"
}

Changes