# SMS and WhatsApp notices

> How the community sends notices by SMS and WhatsApp only to people who consented and whose phone was verified or provided by the team - turning each channel on with the daily cap, the plan's quota (WhatsApp on Business and Scale), sending to every country, quiet hours in the recipient's time zone, the per-person limit, WhatsApp only in approved templates, the platform messages and which ones are on by default, consent at sign-up, login and import, the phone confirmation in My Account › Account, the channels and the categories in My Account › Notices, the opt-out link and STOP.

The community can send **notices by SMS and WhatsApp**: the event reminder, the declined payment, the review cycle task, a [workflow](/notificacoes/workflows) step. Only people who **consented** and **verified their phone** with a code receive them. E-mail is still the main channel; SMS and WhatsApp are the nudge the person sees in time.

Both channels work the same way: each one is turned on separately and has its own cap, quota and consent. WhatsApp has two differences: every message goes out in an [approved template](#whatsapp-only-in-approved-templates), and Memberfy sends on its own the [platform messages](#platform-messages-on-whatsapp) the community keeps on.

## For the team

### Turning the channel on

*Role: owner or admin.*

In **Administration › Settings › E-mails and notifications**, the **SMS** and **WhatsApp** cards:

1. Turn on **Send notices by SMS** (or **Send notices on WhatsApp**).
2. Set the **Daily message cap**, from 1 to 50,000 messages a day. It is **required**: without it the channel does not turn on. Past the cap, the rest goes out the next day at 8 a.m.
3. **Save**.

**Which plan has each channel.** SMS comes from the **Growth** plan up, and WhatsApp is on the **Business** and **Scale** plans. On a plan without the channel, the card says *"WhatsApp is available from the Business plan up."*, with **See plans**, and the channel doesn't turn on. See the quotas in [Plan and extensions](/configuracoes/plano#plan-quotas).

Each card shows the **Usage**: **This month**, against the **plan's quota** (*"of N this month"*), and **Today**, against the cap. On an annual plan, what's left adds up until renewal (*"N available until 03/31/2027 (accumulates on the annual plan)"*). The SMS quota and the WhatsApp quota are separate, and phone verification codes do not count. The SMS card also shows the **parts** used: a long message, or one with accents, takes more than one part.

Turning the channel off also applies to what is still queued: those sends are skipped.

### Sending rules

| Rule | How it works |
|---|---|
| **Every country** | Sending works for phones from any country (*"Sent to every country except: United States."*). For now, **SMS to the United States** is blocked; WhatsApp goes to the United States as usual. A number from a blocked or unknown country is skipped (*"This number's country doesn't get SMS."*) |
| **Quiet hours** | Nothing goes out between 9 p.m. and 8 a.m. **in the recipient's time zone**: a phone from another country follows that country's time zone; one from the community's country, the community's. Whatever falls in that window waits until 8 a.m. The phone verification code does not wait |
| **Daily cap** | Whatever goes past the community's cap goes out the next day at 8 a.m. |
| **Per-person limit** | **Workflow messages per person per day**, on the SMS card: from 1 to 20, **5** by default. It applies to SMS and WhatsApp, counted in each channel; on WhatsApp, the platform messages that are not about payments, refunds or tickets count too. Past the limit, the step moves to the next day at 8 a.m. |
| **Monthly quota** | With the plan's quota used up, nothing else goes out until it renews |
| **Service notices** | Reminders, pending tasks, payments and workflow steps. On WhatsApp, the **purchase not completed** message and the [marketing templates](#marketing-templates) only reach people who accepted **news on WhatsApp** (the WhatsApp switch in **My Account › Notices** accepts notices and news together). On SMS, marketing is not sent yet |
| **Only to people who can receive** | Phone verified by the person (or provided by the team when [declaring the consent](#consent-declared-by-the-team)) and the channel on in **My Account › Notices** (or the consent from sign-up, login or import), and the category on in **My Account › Notices** |

Every SMS starts with the community's name (*"[Running Club] Your training starts in 1 hour."*) and ends with the opt-out link.

### WhatsApp only in approved templates

On WhatsApp there is **no free text**: every message goes out in a **template approved** by WhatsApp, with a button that opens the right page of the community (*"See ticket"*, *"Update payment"*). In-person event templates carry the place and a second button, **See on map**. Memberfy fills in the person's first name and the community's name; the other fields come from what happened (the event, the time, the amount).

The WhatsApp card shows, under **Approved templates**, each Memberfy template with its status (**Approved**, **Under review**, **Rejected**…), its type (**Service** or **Marketing**) and what it is for. The templates are fixed and approved in Portuguese. A template not approved yet doesn't go out: the send is skipped.

In a workflow, the **Send WhatsApp** block picks the template and fills in its fields; for a message that has no template of its own, use **Community notice**, which carries your text. See [Send SMS and Send WhatsApp](/notificacoes/workflows#send-sms-and-send-whatsapp), with the list of templates a workflow can use.

### Marketing templates

WhatsApp classifies some templates as **marketing**, even with service wording: **Community notice** (both versions), **Feedback received** (both versions), **Purchase not completed**, **Mention** and **New content**. The card shows each one's type under **Approved templates**. These templates only reach people who accepted **news on WhatsApp**; for everyone else the send is skipped (*"no WhatsApp consent"*). If WhatsApp reclassifies a template later, the stricter classification applies.

In a workflow with one of these templates, add a **Send email** for whoever didn't get it: after **Send WhatsApp**, a ["Variable" condition](/notificacoes/workflows#variable-condition) with `{{steps.<block>.result}}` equal to `skipped` leads to the email. That way everyone gets the message, on one channel or the other.

### Platform messages on WhatsApp

With WhatsApp on, Memberfy sends on its own, without a workflow, the messages for the moments below to people who can receive. Under **Platform messages**, on the WhatsApp card, the community turns off what it doesn't want to send; each person turns theirs off in **My Account › Notices**, under **What comes by WhatsApp**. They all follow the [sending rules](#sending-rules): the Business or Scale plan, quiet hours in the recipient's time zone, the daily cap, the per-person limit and the quota. Each one goes out only once per occurrence.

| Message | When it goes out | By default |
|---|---|---|
| **Payment confirmed** | A purchase or subscription payment is confirmed | On |
| **Payment declined** | A charge fails, with the button to update the payment method | On |
| **Purchase not completed** | A purchase was left halfway; one per cart, only to people who accepted news on WhatsApp | On |
| **Ticket confirmed** | The person gets a paid ticket | On |
| **Reminder 24 h before the event** | 24 hours before, to people who registered or have a ticket (people who register after that don't get it) | On |
| **Event starting** | 30 minutes before | On |
| **Event live** | 5 minutes after the stream starts, only to people who didn't get *starting* or, with check-in, haven't joined yet | On |
| **Proposal decision** | The decision on the person's proposal in a [call for papers](/espacos/chamada-de-trabalhos) comes out | On |
| **1:1 scheduled and reminder** | A [1:1](/espacos/1-1) is scheduled, and before it | On |
| **Feedback received** | The person gets [feedback](/espacos/feedbacks) | On |
| **HR to-dos (development plan, review)** | A [development plan](/espacos/pdi) or [review](/espacos/performance-review) to-do | On |
| **Replies to posts** | Someone replies to the person's post | Off |
| **Unread direct messages** | A direct message stays unread for 10 minutes; at most one per conversation every 6 hours | Off |
| **New content** | New content in the community | Off |
| **Mentions** | Someone mentions the person (coming soon) | Off |
| **Visitor at the front desk** | A [visitor](/espacos/visitantes) arrives at the front desk; it goes to whoever invited them | On |
| **Parcel received** | A [parcel](/espacos/encomendas) arrives for the person, with the locker or pickup spot | On |
| **Booking reminder (1 h before)** | 1 hour before a confirmed [booking](/espacos/reservas), to whoever booked and to the host (not for a booking made within that hour) | On |
| **Subscription renewing in 3 days** | 3 days before a subscription renews, with the amount | On |
| **Card expiring this month** | The saved card of someone paying a subscription by card expires this month | On |
| **Refund processed** | A purchase is refunded, with the amount | On |
| **Waitlist spot opened** | A spot opens at an [event](/espacos/eventos) for someone on the waitlist, while the offer lasts | On |
| **Reply to my support ticket** | The team replies to the person's [support](/espacos/suporte) ticket | On |
| **Certificate issued** | The person receives a [certificate](/espacos/certificados), with the link to verify it | On |
| **Sign-up approved** | The request to join the community is approved | On |

Event messages go **only to people who registered or have a ticket**, at most 3 per event. The ones **off by default** only reach people who turn them on in **My Account › Notices** (*"Only for people who turn it on in My account › Notices"*).

### The test

At the bottom of each card, **Test to my phone** (or **Test to my WhatsApp**) and the **Send me a test** button: a notice to **your** verified phone, under every rule. It counts toward usage, like any message. The channel must be on and saved.

The answer says what happened:

- *"Test queued: it arrives in a moment."*
- *"Test queued: it goes out at …"*, because of quiet hours or the daily cap.
- *"Test not sent: …"*, with the reason (no phone, phone not verified, no consent…). When the reason is on your side, the **Fix it in My account › Profile** link takes you to your account: the number is confirmed in **My Account › Account** and the channels are turned on in **My Account › Notices**.

### Where the notices are used

- **Workflows:** the **Send SMS** and **Send WhatsApp** blocks, in the **Messages** category. See [Send SMS and Send WhatsApp](/notificacoes/workflows#send-sms-and-send-whatsapp).
- **Platform messages (WhatsApp):** the moments in the table above.
- **Reminders (SMS):** with SMS on, the event reminder (1 hour before), the PDI cycle reminders and the 1:1 reminder also go by SMS. See [Reminders that also go by SMS](/notificacoes/workflows#reminders-that-also-go-by-sms).

### Each member's consent

On a member's profile, the owner and the admin see each consent in force, per channel: *"SMS (notices): consented on 10/27, origin sign-up"*. The origin is **sign-up**, **login**, **import**, **My account** or **declared by the team**. With no consent, *"SMS: no consent"*.

### Consent declared by the team

When the community collected SMS or WhatsApp consent outside Memberfy (a meetup sign-up form, a signed form), the owner or the admin records that consent for people who are **already members**, through the [API](#in-the-api) or the [assistant](/mcp/ferramentas-membros#sms-and-whatsapp-notices). For new people, or a large list, use the [spreadsheet import](/membros/importar-membros#sms-consent), which now also applies to existing members.

- **The declaration is the community's.** Whoever records it declares that the community collected the consent of each person on the list, and the responsibility for that declaration is the community's.
- **What for:** **service notices**, **news** (marketing) or both, on one channel or both. Optionally, when the consent was collected and how (*"October meetup sign-up form"*).
- **Up to 200 members at a time**, each with their phone, if you want. The result comes person by person: recorded, already had consent, consent withdrawn, invalid number, not found.
- **What gets recorded:** each consent with the origin **declared by the team**, who declared it, when and how, and a line in the community log.
- **The phone the team provides can receive right away.** The phone the team provides when declaring the consent (here or in an import with the declaration) gets SMS and WhatsApp without the code verification.
- **But it is not verified.** Verification codes still require the person to confirm the number themselves, and they are the one who confirms the number, in **My Account › Account**, to turn a channel on.
- **It holds while it is the profile's current phone.** A number changed later does not inherit the declaration, and a number saved later without a declaration loses it too. If the person already verified **another** number, it stays.
- **Anyone who left never comes back this way.** Someone who left the channel (through the link, by replying STOP or with the Profile switch) or withdrew consent is not re-enrolled.
- **The admin never declares for the owner**, not even through the import. Only the owner can record consent for themselves.

The person can still leave at any time (including by replying STOP or SAIR), and the per-channel consent, quiet hours, caps and the other [sending rules](#sending-rules) apply just the same.

## For members

### Consent

- **At sign-up:** the **Mobile phone (optional)** field and, next to the button, the service notice text: *"By continuing, you agree to receive service notices from the Running Club community by SMS (reminders and pending tasks). To stop, use the link in the message."* The WhatsApp text says the same, with *"To stop, reply STOP."* Creating the account accepts the service notices. The person turns the community news on later, with the channel's switch in **My Account › Notices**.
- **At login:** the same service text appears next to **Sign in**, once per community and per text version. Signing in is accepting; the text never blocks the login.
- **At import:** the person only gets SMS if the spreadsheet has the SMS consent column with a "yes" and whoever imports **attests** that the community collected that consent. It applies to people the import creates and to existing members. See [Import members from a spreadsheet](/membros/importar-membros#sms-consent). On screen, the import does not give WhatsApp consent (through the API and the assistant, it does).
- **By the team:** the owner or the admin records the consent the community collected. See [Consent declared by the team](#consent-declared-by-the-team).

If the consent text changes, what the person accepted still applies to what it covered.

### My Account › Account and Notices: the phone and the channels

In **My Account › Account**, right below **Phone**, you find the phone confirmation; in **My Account › Notices**, the **Phone: SMS and WhatsApp** card (*"Turn each channel on to get notices on your confirmed number."*) has one switch per channel:

1. Save the phone. A number not saved yet shows *"Save the number to confirm it."*
2. With the number saved, *"Phone not confirmed"* appears with the **Confirm number** button. It sends a 6-digit code **on WhatsApp**, when the community uses WhatsApp, or **by SMS**, when it doesn't (*"We sent a 6-digit code on WhatsApp to …"*). The code is valid for **10 minutes** and allows 5 tries; **Resend code** is available after 1 minute, and there are at most **3 codes an hour** for the same number.
3. Type the code and click **Confirm**: *"Phone confirmed."* The same phone is used for SMS and WhatsApp.
4. Turn the channel on: **Get notices and news by SMS** and, below it, **Get notices and news on WhatsApp** (*"Reminders, tickets, pending items and community news."*). While the number is not confirmed, the switch is disabled (*"Confirm the number first"*).

Turning a channel on authorizes, at once, the community's **reminders, tickets, pending items and news** on that channel, with the origin **My account**. Turning it off stops both the notices and the news on that channel. At the end of the box: *"To stop, reply STOP or turn it off here."* The choice applies only to the community you are in. A channel the community does not use yet has no switch.

After signing up with a phone, the **Confirm your phone** screen asks for the code right away. **Not now** leaves it for later, in **My Account › Account**. The number only counts on the account after the code; changing the phone undoes the confirmation.

### My Account › Notices

In **My Account**, the **Notices** section keeps only the topic choices:

- **Notices from this community**, with each channel's categories: **E-mail** (those of [E-mails from this community](/notificacoes/emails-desta-comunidade)), **SMS** and **WhatsApp** (under **By topic**);
- **What comes by WhatsApp**: each platform message, to turn on or off. The purchase-not-completed one needs the news (*"Needs you to accept news on WhatsApp in My account › Profile."*).

The switches to turn each channel on and off are in the same section, in the **Phone: SMS and WhatsApp** card. If the community does not send on a channel yet, the box says so.

### Stopping

| How | What stops |
|---|---|
| **The link at the end of the SMS** | SMS from **this community**, in one click, without signing in. The page has **Undo** |
| **Turning the channel off** in **My Account › Notices** | That channel's notices and news, only in this community |
| **Turning a message or a category off** in **My Account › Notices** | Only that message or category, only in this community |
| **Replying STOP (SAIR) to an SMS** | **Every SMS from Memberfy, from every community**, to that number. E-mail and WhatsApp continue |
| **Replying STOP (SAIR) on WhatsApp** | **Every WhatsApp from Memberfy, from every community**, to that number. SMS and e-mail continue |

Replying **START** (VOLTAR) undoes STOP, on the same channel. PARAR and CANCELAR also stop. To leave a single community, use the SMS link or the channel's switch in **My Account › Notices**: STOP applies to the whole number.

### Stopped by a STOP reply: see it and turn it back on

Whoever replied STOP (or SAIR) to the Memberfy number sees the stop in **My Account › Notices**, on the **Phone: SMS and WhatsApp** card. In place of the channel's switch it shows *"Stopped on November 1, 2026: you replied STOP."*, with the date and the word used, and below it: *"The stop applies to every community on Memberfy, because they all send from the same number. Turning it back on here resumes messages from all of them."*

1. In **My Account › Notices**, on the stopped channel, click **Turn back on**.
2. Done: *"Notices turned back on (SMS). Because the Memberfy number is shared, they resume from every community."* To get less from a single community, turn off its channel or categories afterwards.

- **The phone must be confirmed.** Without the confirmation, turning it back on answers *"Confirm your phone to turn the notices back on."* Confirm the number in **My Account › Account** and click **Turn back on** again.
- **STOP blocked by the carrier.** When the carrier blocked the number after a STOP, the button does not show and the screen says *"To turn it back on, reply START to the Memberfy number."* Only the START reply turns it back on.

## Examples

**Road race with a reminder on the phone.** The organizers turn SMS on with a cap of 2,000 a day. Whoever registers for the race and verified their phone gets, 1 hour before, *"[Running Club] Start at 7 a.m., gate 3."*, together with the e-mail reminder.

**Conference with attendees from abroad.** On the Business plan, the organizers turn WhatsApp on. Ticket holders get the **Reminder 24 h before the event** with the place and the **See on map** button, and **Event starting**, 30 minutes before. The speaker from Lisbon gets them on Lisbon time: nothing goes out to them between 9 p.m. and 8 a.m. there.

**HR with a task on WhatsApp.** The company turns WhatsApp on and keeps **HR to-dos** on: whoever has a pending self-review gets the notice with the button that opens the review. For a message of its own, a workflow uses the **Community notice** template with *"{{member.first_name}}, the all-hands moved to 3 p.m."* Since that template is marketing, a **Send email** right after reaches whoever didn't accept news on WhatsApp.

## Common errors and how to fix them

| Message or symptom | What to do |
|---|---|
| The channel does not turn on and asks for the daily cap | Fill in the **Daily message cap** before turning it on |
| *"WhatsApp is available from the Business plan up."* | The community's plan has no WhatsApp; see the plans |
| *"Turn SMS on and save to send the test."* | Turn the channel on and click **Save** |
| *"Test not sent: phone not verified."* | Confirm your phone in **My Account › Account** |
| *"This number's country doesn't get SMS."* | The number's country is blocked for the channel (today, SMS to the United States) |
| *"Confirm the number first"*, with the channel's switch disabled | Click **Confirm number** and type the code before turning the channel on |
| *"Save the number to confirm it."* | Save the phone in **Account Information**, then confirm it |
| *"This community doesn't send the confirmation code yet."* | The community has neither SMS nor WhatsApp on; there is nothing to confirm yet |
| Wrong code, with the tries left | Check the code; after 5 tries, ask for another |
| You have to wait to ask for another code | A new code only once a minute, and at most 3 an hour for the same number |
| WhatsApp skipped because the template is not approved yet | Check **Approved templates** on the WhatsApp card; sending resumes when the template is approved |
| A workflow step waits with the per-person WhatsApp daily limit | The person already got the day's limit; the step goes out the next day at 8 a.m. Change the limit on the SMS card |
| *"Confirm your phone to turn the notices back on."* | Confirm the phone in **My Account › Account** and click **Turn back on** again |
| *"The carrier blocked this number after a STOP. To turn it back on, reply START to the Memberfy number."* | Reply START to the Memberfy number; the screen cannot turn it back on in this case |

## Frequently asked questions

**Is the phone required?**
No. Without a phone, nothing is sent by SMS or WhatsApp.

**Does it work outside Brazil?**
Yes. Sending works for every country; for now, only SMS to the United States is left out. Quiet hours follow the recipient's time zone.

**Do imported people receive them?**
Yes, with the consent column saying "yes" and the importer's attestation, and the spreadsheet's phone can receive right away, without the code verification. On screen, only SMS; through the API and the assistant, WhatsApp too.

**I collected consent on a paper form. Can I record it?**
Yes, for existing members: the owner or the admin records it through the API or the assistant, declaring that the community collected it. See [Consent declared by the team](#consent-declared-by-the-team).

**Why ask for a code?**
To confirm the phone is yours before the first message. The code comes on WhatsApp when the community uses WhatsApp, and by SMS when it doesn't.

**I replied STOP and stopped getting SMS from another community.**
STOP applies to the number in every community. Reply **START** and, to leave just one, use the SMS link or the channel's switch in that community's **My Account › Notices**. You can also turn it back on from the screen: **Turn back on**, on the stopped channel in **My Account › Notices**, resumes messages from every community. See [Stopped by a STOP reply](#stopped-by-a-stop-reply-see-it-and-turn-it-back-on).

**Can I write the WhatsApp text my own way?**
Only inside the **Community notice** template, in a workflow. WhatsApp doesn't accept text outside an approved template. That template is marketing: it only reaches people who accepted news on WhatsApp, so send the same message by email to everyone else.

**Can I send a campaign by SMS or WhatsApp?**
No. Campaigns are by e-mail. On WhatsApp, only the purchase-not-completed message and the marketing templates, to people who accepted news.

**A notice fell at 10 p.m. Is it lost?**
No: it waits until 8 a.m., in the recipient's time zone. Only the event, PDI and 1:1 reminders, which would make no sense late, are skipped on SMS (the e-mail goes out as usual).

## Through the assistant (MCP)

The owner and the admin read and change the channels (`get_sms_settings`, `update_sms_settings`, which also changes the per-person limit with `person_daily_cap`, `get_whatsapp_settings`, `update_whatsapp_settings`, which turns platform messages on and off with `moments`; turning on needs the daily cap), see the templates (`list_whatsapp_templates`) and send the test to their own phone (`send_sms_test`, `send_whatsapp_test`), which **ask for confirmation** because they send a real message. The team counts the parts of a text (`count_sms_segments`). Each person sees and changes their own notices (`get_my_notice_preferences`, `update_my_notice_preferences`, with the WhatsApp messages in `whatsapp.moments` and news in `whatsapp.marketing`), sees their own consents (`list_my_contact_consents`) and verifies their phone (`request_phone_verification`, `confirm_phone_verification`). The owner and the admin see a member's consents (`list_member_contact_consents`), never the IP, and record the consent the community declares it collected (`attest_contact_consent`, which **asks for confirmation**). See [Tools · Community](/mcp/ferramentas-comunidade#sms-and-whatsapp) and [Tools · Members](/mcp/ferramentas-membros#sms-and-whatsapp-notices). With the channel stopped by a STOP reply, `get_my_notice_preferences` shows the stop (`global_opt_out`: the date, the word and whether it can be turned back on from there), and `update_my_notice_preferences` with `enabled: true` turns the channel back on, with a **confirmation** that states the reach: the stop is lifted in every community.

## In the API

`GET` and `PUT /api/sms/settings` and `/api/whatsapp/settings` (turning on needs `dailyCap`, from 1 to 50,000; without it, `422` with `param: "dailyCap"`; `personDailyCap`, from 1 to 20, on SMS; `moments` on WhatsApp; `availableOnPlan`, `blockedCountries` and the `quota` meter on read), `POST /api/sms/test` and `/api/whatsapp/test` (`202`, with `queued` or `skipped` and the reason), `GET /api/whatsapp/templates` and `POST /api/sms/segments` (the parts and encoding of the text alone and as sent). Turning WhatsApp on in a plan without it: `403` `whatsapp.notOnPlan`. For your own account: `POST /api/members/me/phone-verification` and `.../confirm`, `GET` and `PUT /api/members/me/notice-preferences` (`channels.email`, `channels.sms`, `channels.whatsapp`, with `whatsapp.moments` and `whatsapp.marketing`) and `GET /api/members/me/contact-consents`. For the team: `GET /api/members/{memberId}/contact-consents` and `POST /api/contact-consent/attestations` (owner and admin: `attestation: true`, `channels`, `purpose` `service`, `marketing` or `all`, optional `collectedAt` and `collectionMethod`, and `members`, up to 200, with `memberId` and optional `phone`; the result has, per member, the `status`, `phoneVerified` and `sendable`, whether the current phone can receive). The consent texts: `GET /api/contact-consent/texts`. Sign-up and login accept `smsConsent` (`service`, `marketing` and `whatsapp`); the import, the `smsConsent` and `whatsappConsent` targets, with the attestation. See [Order of creation › SMS and WhatsApp](/api/ordem-de-criacao#sms-and-whatsapp) and [Responses and errors](/api/respostas-e-erros). With the channel stopped by a STOP reply, `channels.sms.globalOptOut` (and `channels.whatsapp.globalOptOut`) brings `optedOutAt`, `keyword`, `allCommunities`, `resumableFromScreen`, `resumeKeyword` and `notice` (`null` without a stop); the `PUT` with `enabled: true` turns it back on in every community and answers `409` without the confirmed phone or with the carrier block.

## Related

- [Workflows](/notificacoes/workflows)
- [E-mails from this community](/notificacoes/emails-desta-comunidade)
- [Import members from a spreadsheet](/membros/importar-membros)
- [Plan and extensions](/configuracoes/plano)
- [Community settings](/configuracoes/configuracoes-gerais)
