# Getting started

Arrange an invited Alpha workspace, reconcile Stripe and Resend, and rehearse before any live send.

HeyCMO is an invitation-only, $0 operational Alpha for Stripe and Resend recovery emails. A person approves every message before it is sent. The guides also describe implementation capabilities outside the Alpha. Their presence here does not make them available in the pilot. [Start with the Alpha checklist](https://docs.heycmo.ai/getting-started/). Help: [alpha@heycmo.ai](mailto:alpha@heycmo.ai).

**Current offer: an invitation-only, $0 operational Alpha.** It covers failed-payment service emails from your own Stripe account, sent through your own Resend sender. A person approves every message before it is sent. There is no charge, paid plan, self-service signup or promised recovery result in this pilot.

### Alpha checklist

1. Arrange an invitation with **alpha@heycmo.ai**. Name the company, the person who reviews every email, and the person who can stop sending. Agree the observation window and support availability before live sends.
2. Confirm the Stripe account contains your own paying customers and the Resend sender belongs to you. Reconcile existing Stripe reminders and other recovery tools so the same invoice is not contacted twice. Import your suppressions.
3. Start in practice mode. Review a failed invoice, the draft, its recipient and the exact action; approving a practice draft must send nothing.
4. Verify the sending domain, webhook delivery and stop controls together with the HeyCMO operator. The first-week cap is at most 10 sends per day. Nothing goes live until both sides agree the eligible invoices and the send window.
5. During the canary, approve each message yourself and reconcile provider receipts. A later payment is an observed outcome, not proof that the email caused it.

The remaining guide is implementation reference. Wider marketing operations, other email providers, paid plans and unattended approvals are outside this Alpha.

The reference below describes dashboard controls (the **Setup** wizard or **Settings** page) unless marked `API`; availability is limited to the Alpha scope above. `API` calls send a bearer credential (`Authorization: Bearer …`) to `https://agent-api.heycmo.ai`: your Clerk or WorkOS AuthKit session, or a machine key (`hcmo_…`, [API keys](https://docs.heycmo.ai/team/#api-keys)) for the CLI and scripts. Connecting Stripe and your email provider, storing secrets, the sender identity, managing API keys and enabling loops need the `admin` scope, which the person who created the workspace has.

## Sign up and create your workspace

The HeyCMO operator provisions the invited workspace and gives its named reviewer sign-in instructions once identity setup is qualified. Do not create a paid plan, paste a shared admin key as a substitute for a personal login, or connect live customer credentials before the operator confirms the workspace and account.

You then land on **Setup** (`/onboarding`): eight steps, one open at a time ("Step n of 8", a progress bar), each turning green from the live onboarding checklist and moving you on to the next unfinished one. The money path comes first: Connect Stripe, **Your plan** (the operator configures Alpha access), Failed-payment recovery, then Email sending, Your website, **Your ICP and goals** and Your brand, and last **Go live**: accept the sending terms and press **Request go-live** (it lists anything still missing first, such as the postal address in Email sending). The step then says when you asked; it turns green once HeyCMO has approved, and you get a "Live sending is on" notice by email or Slack if you set them up in Settings → Notifications & Slack. Webhooks set themselves up when you connect Stripe and your email provider; only if a key could not do that, **Advanced / manual setup** has the endpoint URLs and the signing-secret fields. Until every step but Your brand, Your ICP and goals and Go live is green, opening the Inbox brings you back here (**Skip for now** stops that for the browser session). An unfinished Your brand or Your ICP and goals stays open on Settings → Workspace without bringing you back (a workspace that finished the other steps before the ICP step existed finds it there or on the Strategy page). The same checklist lives on Settings → Workspace — it's the source of truth if you get lost. When every step you do is green, **All set** offers the two next actions: **Find failed payments** (HeyCMO looks in Stripe and drafts an email for each one, right there: at once for five or fewer, after you confirm for more) and **Request go-live** (opens the Go live step; "See your go-live request" while HeyCMO reviews it), with a link to the Inbox. Go live never sends you back to Setup on its own, and Settings → Workspace says "Setup is complete" once it is approved. Until you approve your first item, the Inbox shows a four-step **Get HeyCMO's first piece of work** checklist (connect your data → turn on a loop → review the first thing HeyCMO prepares → approve it), each step a link to where it is done; with Stripe connected it suggests failed-payment recovery, and **Find failed payments** is a button on the checklist itself that drafts an email for each failed payment (at once when it finds five or fewer, after you confirm when it finds more). After that first approval it gives way to **What happens next** (see "After your first approval" in [Approve, edit or decline](https://docs.heycmo.ai/drafts/#approve-edit-or-decline)). The workspace name is in the dashboard header; its id is on Settings → Team & API keys.

**Day 0 with no failed payment.** If Stripe has no failed payment to email today, Find failed payments says so and offers **Stage a sample recovery rehearsal** (with **Look again** beside it). The sample is a recovery email for a made-up customer (Alex Sample, on an `.example` address) and a made-up $49.00 payment whose card expired, drafted the way a real one is, in your brand. Its card says what it is everywhere it appears: a **Sample** badge, a "Sample, not a real customer" banner, the made-up customer and amount, and the checks the draft passed. You can press **Edit** to try changing its words, then **Approve the sample**: nothing is sent, to anyone. Approving it closes the checklist (your first approval) but counts in nothing that measures real work (This week, the Scorecard's time to first value, time to decide). The sample is only offered while nothing real waits, you have approved nothing and the kill switch is off (with it on, nothing could be approved); if real work arrives first, even while the sample is being drafted, a waiting sample is withdrawn and the checklist points at the real card. If you ran **Read my website**, the AI search check of your site ([Tell it about your product](https://docs.heycmo.ai/getting-started/#tell-it-about-your-product)) is already waiting as your first real card.

> Invited teammates join through the organization (see [Your team](https://docs.heycmo.ai/team/)). Their access arrives when the sign-in provider tells HeyCMO about the membership, so a teammate who joined the organization *before* the workspace was created gets access with the next membership change.
>
> Alpha reviewers use their own sign-in. If the login page asks for a token or an admin key, stop and contact **alpha@heycmo.ai** to finish identity setup.

## Tell it about your product

Setup → **Your website** → paste your site URL → **Read my website** (drafts the context doc, then runs the bootstrap below). If HeyCMO could not draft it (the site could not be read, no model answered, or the model's answer left out a section), you get a blank template and a note saying so: the step stays open until you fill it in on Settings → Workspace → **Product context** or read your website again. On Settings → Workspace: **Product context** → paste your site URL → **Draft from URL** (the context only) or **Read the whole site** (the bootstrap). This is fully self-serve: it crawls your site into the knowledge layer, sets up competitor monitors, and stages a brand foundation for your approval — all in one click, idempotent (safe to re-run). Any step that can't run yet (e.g. a missing secret) is listed honestly under **Some of it was skipped** right in the panel; store the secret ([Connect Stripe](https://docs.heycmo.ai/stripe/)) and re-run. This grounds every email and plan the agent drafts.

It also checks your site for AI search, whatever is configured: it reads your `robots.txt`, your homepage and your `/llms.txt` (three requests, nothing written) and puts an **AI search check of your site** card in your Inbox: which AI search bots your `robots.txt` lets read the site (ChatGPT search, Perplexity, Claude, Gemini and others; "unknown" when `robots.txt` could not be read), how your homepage does on five citability checks (an opening answer, numbers, a comparison table, question headings, links), what to change, and, when you have no `/llms.txt`, a draft of one built only from your site's own name, description and page links, with a **Copy the file** button. Publish it yourself; approving the card only marks it read. The setup step says the card is waiting, or why your site could not be read. Once you have approved or declined it, reading your website again checks the site afresh (after you publish the file, say). The site is read over https; a part that gives no complete answer within 10 seconds is reported as unknown.

Prefer just the context doc? **Draft from URL** writes only that → review → Save. (`API` alternative: `POST /v1/onboarding/bootstrap` with `{"siteUrl":"https://yourproduct.com"}` — same honest `skipped` list in the response. `POST /v1/context/draft` and `POST /v1/brand/draft` take the same `{"siteUrl":…}` and draft only the context or only the brand kit; a blank draft comes back with a `warning` that says why and what to do.)

Then **Your ICP and goals** (Setup): who you sell to (a segment: who they are, company size, regions, their main problems) and one goal with a target and a date (for example monthly recurring revenue to $20,000 by 31 December). **Save ICP and goals** writes the first version of your **marketing state**, the record every loop, draft and plan reads; no strategy plan is needed. The step turns green once the state has at least one segment and one goal.

Then **Draft brand kit** on Setup → **Your brand** (Settings → Workspace → **Brand voice** offers it too while you have no brand kit) drafts colours, fonts and tone from the same URL; refine the tone on Settings → Workspace → **Brand voice**. If the draft added nothing (the site could not be read, no model answered, or the model read the site but found no colours, fonts or voice it could use), a note says so and the step stays open until your brand kit has something in it: write your brand voice on Settings → Workspace → **Brand voice**, or draft it again on Setup → Your brand. An open Your brand step never brings you back to Setup by itself.

### Your strategy and marketing state (the Strategy page)

**Strategy** (under Work) holds your 13-section marketing plan and your marketing state. **Start a plan**, then for each section **Draft section n** (drafting needs a writing model on the deployment; without one the page says so), read it, and **Approve** it or **Ask for changes**. When every section is approved, an admin presses **Finalize the plan**. Finalizing compiles the plan, updates your marketing state from what the approved sections say (who you sell to, goals, channels, budget, competitors, words to avoid, messaging pillars; it lists any line it could not read), and puts the loop proposal and one card per recommended playbook in your Inbox — nothing starts until you approve a card. (Finalizing also needs the marketing skills library turned on for your workspace: an admin turns it on from Loops → **Marketing skills library** → **Turn on**, or `heycmo packs enable marketingskills`; until it is on, the Strategy page says so and links there.)

A playbook you approve runs one step at a time, each step a card in your Inbox. Approving its last step does not ship anything yet: it puts the result in your Inbox as new cards for the tools you have connected (a post for each connected social account, a draft post or page in your CMS), and each ships only once you approve that card too. The playbook finishes once one of them has shipped and none can still ship. A destination you have not connected, or whose write channel is not live yet (see [Go live](https://docs.heycmo.ai/go-live/)), is skipped with the reason on the card, and the text comes as a card ready to copy.

Below the plan, **Your marketing state** shows each part of the record; an admin edits any part in place (**Edit**, then **Save**). Each competitor shows its domains, the pages HeyCMO watches and how you position against it, with its **Battlecard** on demand. The competitor card says whether your listening settings (Settings → Listening) watch the same competitors, counting the names in their competitor search terms, and lines the two lists up in one click either way. Lining them up never removes a search term: a name listening has only as a search term is marked as one, and you change it in Settings → Listening. Words to avoid apply to every draft: an email draft that uses one is redrafted, then replaced by HeyCMO's standard text. `heycmo strategy state` (and `GET /v1/marketing-state`) prints the same record. An inbox card a plan section asked for links back to it from its **Why this**.

## Run your first recovery loop

First, Settings → **Email** → **Failed payment recovery**: the loop looks back 60 days by default. If you have older unpaid invoices you want to recover, raise the sense window (up to 90 days) and save **before** the first run; the first run also says what it did not count, such as "Not counted: 3 outside the 60-day window." The same panel shows what your customer receives and when: a notice when the payment fails, a reminder on day 3, an urgent email on day 7 and a final notice on day 14 (you can change the days). Stripe keeps retrying on its own schedule; HeyCMO writes the emails, and each one waits for your approval.

Each email is timed by why the payment failed, and the card in your Inbox says why it goes when it does:

- **A soft decline or insufficient funds:** Stripe's own retry often collects these, so the first email waits 24 to 48 hours (once your workspace has enough past failed payments, HeyCMO learns the wait from them, and the run's note says what it learned). For insufficient funds, the reminder and the urgent email wait up to 3 days for a payday: a Friday, the 1st, the 15th or the month's last business day.
- **An expired card, a card the bank will not charge again, or a 3D Secure check:** only your customer can fix these, so the first email goes at once and the final notice does not wait for Stripe.
- **A soft decline, insufficient funds, or a failure Stripe gave no reason for:** each email waits while Stripe's next automatic retry is less than 12 hours away (but no longer than the day after that retry is due), and the final notice goes only once Stripe has shown that it stopped retrying.

**VIP accounts.** A failed invoice of at least your VIP amount ($500 by default; set the amount and its currency on the same panel), or a customer someone on your team works in your CRM, gets a plain, personal note instead of the branded email, signed by the account owner in your CRM or by your sender name. It always waits for your review, a holdout never holds it out, and with the HeyCMO Slack app connected its card is posted to your approvals channel first. An invoice in another currency than the VIP amount's is compared with nothing (HeyCMO has no exchange rates).

Turn off "Send the notice and reminders while Stripe is still retrying" if you want nothing sent until Stripe has stopped; the run's note then also counts the invoices Stripe is still retrying ("2 held by Smart Retries (drafting while Stripe retries is off)"). Recovery never drafts for an invoice that was written off, nor, with Subscriptions: Read ([Connect Stripe](https://docs.heycmo.ai/stripe/)), for one whose subscription is paused, cancelled or set to cancel at the end of its period; the run's note counts them, and a live send reads Stripe again and sends nothing if one of these happened after the email was drafted.

Then Setup → **Turn on failed-payment recovery** (or Loops → **Turn on failed-payment recovery**, or the switch on its row, first under Start here: on the Loops page a dialog first says what the loop does, when it acts, what it makes and what it needs, and **Turn on failed payment recovery** confirms) → Loops → **Run now** on Failed payment recovery. Each row on Loops says what the loop is for, what it needs connected and how its last run went; **What it found** lists its runs, what each put in your Inbox and what became of it. (If the Loops page says "No loops to show yet" — a fresh deployment starts empty — press **Load the loop catalog**; it's idempotent.)

The first run reads your Stripe account and says what it found — "3 failed payments found — a first run only looks, so nothing was drafted yet." That is deliberate: a loop's first run never mass-emails history. To work that backlog now, press **Draft 3 emails for review** on the same row (admin; it asks you to confirm in a dialog), then **Review in the Inbox**. Otherwise the next run drafts them: the next daily run, or **Run now** again (a Run now on a day the loop already ran starts its note with "already ran today at HH:MM — ran again:" and what this run did). **Nothing sends yet** either way — every email lands in the Inbox as a staged action.

From the CLI the same run is `heycmo loops enable failed-payment-dunning`, `heycmo run dunning`, then `heycmo run dunning --stage-backlog`.

The first run of a loop records a starting point (a watermark) and stages nothing for failures that already exist, so its note says what it found and that a first run only looks, and the Inbox stays empty. A later run can stage drafts. A run that found no data says what to connect and where (for example "Connect Search Console in Settings → Connections, or send your pages …"). Every loop, what it does and what it needs: [What each loop does](https://docs.heycmo.ai/loops/).
