Skip to content
WACRM.AI

How opt-outs, consent, and cost reports work in WACRM

WACRM records opt-outs per channel: STOP on WhatsApp blocks later WhatsApp template and broadcast sends, STOP on SMS blocks SMS sends, and on Messenger and Instagram it blocks automated sends. A recorded WhatsApp opt-in gates every broadcast, and you can pull a cost report and 30-day forecast through WACRM's API.

By Huy Nguyen (David), Founder & CEO of Netbase JSC Updated

WACRM gives you three independent ways to stay safe and in control of cost on WhatsApp: an automatic opt-out that blocks future template and broadcast sends to a contact with no setup needed, a consent record that gates every broadcast, and a cost report you can pull through the API. This walks through all three as they work today — including the one piece, a Workspace report screen for cost, that doesn’t exist yet.

What you need before you start

  • A WACRM Workspace account with at least one project and at least one contact conversation, for the opt-out and consent sections.
  • Owner access to the workspace and a way to call an HTTP API (curl or similar), for the cost report section — the screen that mints the API key is owner-only.

Stop sending to a contact — opt-out keywords

WACRM watches every inbound text message — on WhatsApp, SMS, Messenger, and Instagram — for an exact opt-out keyword, case-insensitive, after stripping punctuation and collapsing extra whitespace — a sentence that merely contains the word doesn’t count. The moment a contact sends one, WACRM records their opt-out for the channel it arrived on. On WhatsApp, every later attempt to send them a template or broadcast message is then blocked with a consent_required error, automatically, with nothing for you to configure — a free-text reply to that contact inside an open 24-hour window still goes through:

LanguageOpt-out keywords
EnglishSTOP, UNSUBSCRIBE
SpanishBAJA, ALTO
Portuguese (Brazil)PARAR, SAIR
VietnameseHUY, DUNG, HỦY, DỪNG

WACRM sends nothing back when this happens — no automatic confirmation reply — and the same message is also excluded from WACRM’s own AI auto-reply. Opt-outs are recorded per channel, so STOP on one channel doesn’t opt the contact out of another:

ChannelAfter STOP on that channel, WACRM refuses…Still goes through
WhatsAppTemplate and broadcast sends (409 consent_required)Free-text replies inside an open 24-hour window
SMSEvery SMS send to that contact, including a reply from the Inbox — refused before any wallet charge. A booking reminder that falls back to SMS is recorded as skipped, reason sms_opted_outWhatsApp, Messenger, and Instagram messages
Messenger / InstagramAutomated sends: AI auto-reply and automationsA reply a person types in the Inbox

SMS, Messenger, and Instagram never require an opt-in first — only an explicit opt-out blocks a send. WhatsApp template and broadcast sends are the opposite: they need a recorded opt-in (next section). Re-subscribing isn’t automatic either (see the FAQ) — treat an opt-out as something you have to deliberately reverse, the same way you recorded it.

A contact’s recorded WhatsApp marketing opt-in is the only signal WACRM’s broadcast system checks before it sends them a template. To record one:

  1. Open Conversations → Inbox and select the contact’s conversation.
  2. Find the WhatsApp marketing consent card in the side panel. It shows the contact’s current status and, if set, when it was last recorded.
  3. Click Record opt-in (or Record opt-out), optionally adding a short note in Source / proof on where the consent came from.

This card makes no legal certification — recording opt-in only tells WACRM the merchant says this customer agreed to receive WhatsApp marketing messages. But it’s the record Broadcasts actually acts on: start a campaign under Messaging → Broadcasts and each recipient without a recorded opt-in is skipped — nothing is sent to them, and the campaign’s Skipped count goes up, captioned No opt-in consent — while the campaign still runs for everyone else. See the first-template guide for the full broadcast walkthrough.

Pull a message cost report and forecast via the API

There’s no cost report screen in Workspace yet — this works through the API only, and only the workspace owner can reach the screen that mints the key.

  1. As the owner, open Developer / API & MCP in Workspace’s sidebar (/settings).

  2. Create a new key — a Secret key (sk_live_…) for a server or script — and check Restrict what this key can do (advanced).

  3. Under WhatsApp CRM scopes, check cost_reports:read, then create the key. It’s shown exactly once — copy it immediately.

    Creating keys and restricting scopes depends on your plan — Workspace shows an upgrade notice if yours doesn’t include it.

  4. Call the cost report endpoint with that key:

    Code
    curl -s "https://api.wacrm.ai/v1/crm-projects/{project}/cost-report?date_from=2026-10-01&date_to=2026-10-31" \
      -H "Authorization: Bearer sk_live_your_scoped_key"

{project} is your project’s UUID; it must be the same project your key belongs to — a different project, even one you also own, returns 404. Dates use YYYY-MM-DD, the range can’t exceed 366 days, and an invalid or reversed range returns a 400 error instead of a guessed answer.

The response breaks spend down by message category — marketing, utility, authentication, and service — and includes a forecast: for each category, WACRM adds up the estimated spend over the 30 days before today, divides by 30 (days with no data count as zero), and multiplies by 30 for a next-30-days estimate, marked estimate: true; a category with no data in that window returns null, not 0. The report covers WhatsApp messages only: SMS, Messenger, and Instagram sends and failed messages aren’t counted, and messages sent before cost tracking began aren’t included. Every figure here is built from WACRM’s own placeholder estimate rates, which can differ significantly from what Meta actually bills — never read them as a confirmed Meta invoice or a price. For Meta’s actual published per-message, per-country rates, see the message pricing guide.

What works today / what needs WACRM

You want to…WhereWorks today?
Stop future WhatsApp template and broadcast sends to a contactContact sends an opt-out keyword (STOP, BAJA, PARAR, HUY…) on WhatsAppYes — automatic, nothing to set up
Stop SMS sends to a contactContact sends an opt-out keyword to your SMS numberYes — automatic; replies from the Inbox are refused too
Stop automated Messenger or Instagram sends to a contactContact sends an opt-out keyword on that channelYes — AI auto-reply and automations are refused; replies you type in the Inbox still go through
Record or check a contact’s WhatsApp marketing opt-inConversations → Inbox → WhatsApp marketing consent cardYes
Block a broadcast send to a contact with no opt-in on fileMessaging → Broadcasts (automatic)Yes
Let a contact restart marketing messages by texting START—Not yet — re-collect consent yourself; WACRM doesn’t read START automatically
Pull a message cost report and 30-day forecastDeveloper / API & MCP → mint a key with cost_reports:read, then call the APIYes — via the API; owner access needed, no Workspace report screen yet
Get an in-app alert when monthly spend crosses a cap—Needs WACRM — there’s no cap you can set; WACRM’s single service-wide cap is off today. When it’s on, the first time the month’s estimated spend reaches it posts one notification in Workspace for that month.

Ready to put this in place for your own number? Request early access to get a Workspace, or have WACRM’s team configure consent capture and cost monitoring for you with Quick Setup.

Talk to an expert

Huy Nguyen (David), Founder & CEO

Ask David a question about opt-outs, consent, and cost reports in wacrm.

Frequently asked questions

Does WACRM send an automatic reply when a contact texts STOP?

No. The opt-out hook only records the opt-out — it sends nothing back — and WACRM's AI auto-reply skips the opt-out message itself. On WhatsApp the opt-out then blocks later template and broadcast sends with a 409 consent_required response, but not free-text replies inside an open 24-hour window, so an AI or human free-text reply can still go out later. SMS, Messenger, and Instagram work differently — see the next question.

Does STOP on one channel opt a contact out of every channel?

No. WACRM records the opt-out for the channel the message arrived on: STOP on WhatsApp opts the contact out of WhatsApp only, and STOP on SMS opts them out of SMS only. On SMS, every send to an opted-out contact is refused, including a reply typed in the Inbox, before anything is charged to your wallet; a booking reminder that would fall back to SMS is recorded as skipped with reason sms_opted_out. On Messenger and Instagram, automated sends (AI auto-reply, automations) to an opted-out contact are refused, but a reply a person types in the Inbox still goes through. A contact with no recorded opt-out on a channel is unaffected.

Can a contact start receiving broadcasts again by texting START?

Not automatically. WACRM recognizes START, ALTA, and VOLTAR as configured keywords, but nothing reads an inbound message for them yet — texting START does not restore a contact's consent on its own. You have to re-collect their WhatsApp marketing opt-in yourself, either on the Inbox consent card or through the API.

What happens if I run a broadcast to a contact with no recorded opt-in?

The campaign still runs, but nothing is sent to that recipient and the campaign's Skipped count goes up, captioned No opt-in consent — the Campaigns list, which only shows campaigns created in this browser session, tracks that as a per-campaign count, not a per-recipient row. Record their opt-in on the Inbox consent card first if you want them included.

Are the numbers in the cost report what Meta actually billed me?

No. Every amount in the cost report response is a cost_estimate field, and forecast entries carry estimate: true — all built from WACRM's own placeholder estimate rates, which can differ significantly from what Meta actually bills, not Meta's official invoice. For Meta's own published per-message, per-country rates, see the message pricing guide.

Want this set up for you?

Quick Setup connects your number with coexistence in 48 hours, done by a person.