Polaris — Strategic Marketing OS by Marketising. Bilingual (EN + FA) 8-node AI strategic-marketing operating system. Connect via web, Telegram, or MCP from Claude / Claude Code / Cursor / any MCP client.
Send a one-line brand brief (just a brand name is enough) → Polaris turns it into a defensible strategic decision — what deserves budget, backed by tagged evidence — plus the complete 12-month marketing operating plan, composed by 8 specialist AI roles working in sequence:
[VERIFIED · source]; otherwise they are AI-inferred analytical drafts (see Data Integrity Note below)Three discipline layers in the system prompt enforce: (1) Calendar discipline — anchor every date to the brief's start date, scale to campaign duration; (2) Strategic posture discipline — every node aligns to the chosen posture; (3) Industry-agnostic — never assume beauty/clinic; tailor to the brand's actual category.
[VERIFIED · source], [USER-PROVIDED], [AI-INFERRED], [HYPOTHESIS] — and ends every node with a Confidence & Verification Map (H/M/L) the UI renders as colored chips and cells.BRAVE_SEARCH_API_KEY for competitors, GOOGLE_PLACES_API_KEY for reviews, and a website field in the brief for live brand-site fetch via cheerio). They are designed for strategic direction, not standalone factual verification. Treat AI-INFERRED and HYPOTHESIS claims as starting points to validate before launch or before making spending decisions. Every deliverable (HTML/DOCX/PPTX) auto-includes a Source-Citation Appendix that counts every claim by category so you can audit grounding without re-reading the body.
A plan mode sets the depth of the plan — how many specialist nodes run and how long the deliverable is. It does not decide how ambitious the recommendations are: the Budget Reality Gate scales every recommendation to your actual budget in any mode, so a small budget no longer gets a stripped-down plan.
| Mode | For | Nodes | Credits | Output |
|---|---|---|---|---|
| Survival | Pre-revenue founder, first 3 clients | 2 — Researcher + Strategist | 1 | ONE angle · ONE offer · first-3-clients plan · ZERO forecasts |
| Quick-Start | Solo, beginner | 3 — + Creative | 1 | ~10 pages, action-first |
| Lean | SMB, 1–3 person team | 5 — + Digital + CRM | 3 | ~25 pages |
| Full | Growth stage | 7 — all main nodes | 6 | ~80 pages |
| Enterprise | Agency / brand | 7 + Enterprise Extensions | 10 | ~100 pages, multi-market notes + PI planning |
The Execution Plan (52-week run-book, RACI, tool stack, 30/60/90) is a separate add-on in every mode, not part of Full's seven nodes. It costs 2 more credits.
Pick one explicitly and you get it — an explicit choice always wins. Survival, Quick-Start and Lean are deliberate choices for a shorter deliverable; a small budget does not drop you into one.
Leave it on Auto (the default) and Polaris reads the brief's
monthly_ad_budget:
| Monthly ad budget | Auto picks |
|---|---|
| $50k or more | Enterprise |
| Any amount above zero | Full — every real budget gets the complete plan |
| Not given | Lean — a sensible middle default when there is no budget signal |
Auto then caps the mode to what your credits can afford, so it never lands you on a paywall: 10+ credits → Enterprise, 6+ → Full, 3+ → Lean, 1+ → Quick-Start, 0 → Survival. On the Unlimited tier nothing is capped. Your budget is used only to pick the mode — it is never treated as a revenue figure, and revenue is not part of this decision.
Every mode also renders a 1-Page Summary at the top of the output — posture, primary challenge, Big Idea, top-3 strategies, 3 actions this week — so you get the bird's-eye view without reading the detail. Survival mode skips forecasts entirely by design and replaces OKRs with a first-3-clients hit-list.
The simplest way. No install, no auth required.
brand_name — everything else can be auto-filled with Smart-FillThe MCP server exposes 7 tools that any MCP-aware client can call.
https://polaris.marketising.ca/api/mcp (Streamable HTTP transport)
list_nodes — returns the 8 nodes and 4 plan modes readOnlyenrich_brief — Smart-Fill empty brief fieldsgenerate_node — run one specialist node, return bilingual markdowngenerate_full_plan — run all nodes for the resolved plan mode (3–10 min)build_html_deliverable — produce a full HTML reportbuild_docx_deliverable — produce a Word document (base64)build_pptx_deliverable — produce a PowerPoint deck (base64){
"mcpServers": {
"advertising-agency": {
"transport": "streamable-http",
"url": "https://polaris.marketising.ca/api/mcp"
}
}
}
If MCP_API_KEYS is set on the server, supply Authorization: Bearer <key>.
Mobile-friendly. Send a brief, get every generated bilingual node report back as a separate message. The number of reports depends on the auto-resolved plan mode — 2 for Survival, 3 for Quick-Start, 5 for Lean, 8 for Full, 8 + Extensions for Enterprise.
/start to see the brief formatkey: value lines, e.g.:brand: Aurora Beauty
location: Toronto, Canada
services: HydraFacial, Laser, Botox
budget: 3000
target_audience: women 25-45, downtown Toronto
private: true # optional — opt out of all archiving
Any program that can send an HTTP request can generate a Polaris plan. Calls are authenticated with a personal API key and meter the same credits as a run started in the web app — the plan is archived to your account either way.
Create a key in the dashboard → Public API. It is shown once; store it as a secret. Send it on every request:
X-API-Key: pol_live_…
A browser session can send Authorization: Bearer <session JWT> instead. A
request with neither is treated as anonymous: it still generates, but nothing is metered,
archived, or white-labelled.
| Method | Path | Purpose | API key |
|---|---|---|---|
| POST | /api/marketing/node | Generate one node — the call you build a plan from | ✅ |
| POST | /api/marketing/build-docx | Word document | ✅ |
| POST | /api/marketing/build-pptx | PowerPoint deck | ✅ |
| POST | /api/marketing/build-html | HTML report | ✅ |
| POST | /api/marketing/enrich | Smart-Fill empty brief fields | ❌ session only |
| POST | /api/marketing/telegram | Telegram webhook — internal, not for callers | — |
Your key also carries your white-label branding into the three exporters, so a document generated by a script looks like one downloaded from the app.
Authentication. Send X-API-Key (or a signed-in session) to generate
a whole plan. A call with neither is treated as anonymous: it may run the
researcher node only, a few times an hour per address — enough to try the API, not
enough to build with. Anything else answers 401 sign_in_required, and going over the
ceiling answers 429 with Retry-After.
Request body (JSON):
| Field | Required | Meaning |
|---|---|---|
brandBrief.brand_name | yes | The only required field in the whole API. Every other brief field is optional and improves the output. |
nodeId | yes | One of researcher, strategist, creative, digital, crm, affiliate, efficiency, plus the add-on execution-plan. |
priorOutputs | no | An object of {nodeId: markdown} from the nodes you already ran. This is how a node inherits the plan — researcher takes {}, every later node should receive the ones before it. |
chunkId | no | Some nodes are generated in parts. Omitting it gives you the whole node. |
continueFrom | no | Text of a truncated response, to resume it. Rarely needed. |
The response is streamed plain text (text/plain; charset=utf-8), not
JSON — the node's markdown, arriving as it is written. Read it to the end; do not expect a
JSON envelope. Useful response headers: X-Node-Id, X-Node-Order,
X-Chunk-Id.
Call the nodes in order, feeding each result into the next call's
priorOutputs. Which nodes make up a plan depends on the plan mode:
| Plan mode | Nodes | Credits |
|---|---|---|
survival | researcher → strategist | 1 |
quick | + creative | 1 |
lean | + digital, crm | 3 |
full | + affiliate, efficiency (all 7) | 6 |
enterprise | all 7, at multi-market depth | 10 |
Set brandBrief.plan_mode explicitly, or leave it out and Polaris derives it from
the budget. The execution-plan add-on costs 2 more credits.
Credits are charged once per run, on the researcher call — the
nodes after it are already paid for.
curl -N -X POST https://polaris.marketising.ca/api/marketing/node \
-H "X-API-Key: pol_live_…" \
-H "Content-Type: application/json" \
-d '{
"nodeId": "researcher",
"brandBrief": { "brand_name": "Acme", "plan_mode": "lean" },
"priorOutputs": {}
}'
-N disables curl's buffering so you see the stream. Feed the text you get back in
as priorOutputs.researcher on the next call, with
"nodeId": "strategist".
15 requests per minute per key, in a fixed one-minute window. Over it you get
429 with a Retry-After: 60 header. Sessions signed in through the web
app are not rate-limited.
| Status | Meaning | What to do |
|---|---|---|
| 400 | Missing brandBrief.brand_name, unknown nodeId, or invalid JSON | Fix the request; the body names which. |
| 402 | insufficient_credits — and only that | Top up. The body carries cost, balance, upgrade_url. |
| 405 | Not a POST | Use POST. |
| 429 | Rate limit | Wait out Retry-After. |
| 502 | The AI provider failed in a way worth retrying | Retry with backoff. |
| 503 | A Polaris-side fault — including a billing check that could not be read | Retry shortly. This is not a balance problem, and Polaris will not tell you to top up for it. |
A 402 always means your balance; it is never used for a server-side fault. That
distinction is deliberate — see Methodology.
Revoke from the dashboard. It stops working immediately, and anything using it stops with it — one key per integration makes that survivable.
From a cloned repo:
npm install
cp .env.local.example .env.local # fill in OPENAI_API_KEY
START_DATE=2026-05-13 \
STRATEGIC_POSTURE=auto \
CAMPAIGN_DURATION_MONTHS=12 \
USE_ENRICH=1 \
BRAND_NAME="Your Brand" \
bash run-all-nodes.sh
python3 build-deliverables.py # produces Word + PPT + HTML in outputs/deliverables
Polaris runs on a hybrid subscription + credits model: Free ($0 — Survival & Quick marketing plans, 2 plan runs/month, Markdown output), Pro ($500/mo — all plan modes, 20 credits/month, Word · PowerPoint · HTML export), and Unlimited ($1,500/mo — everything in Pro, no usage cap, MCP + Telegram access). Extra credits are $25 each and never expire. See Pricing for current details and Terms for the agreement.
Email: mahan.sma@gmail.com
GitHub: advertising-agency (private — request access)