Skip to content

Disparo API

Official WhatsApp API broadcasts: what happens at each step

In InvestCRM, sending through the official WhatsApp API is a broadcast: a Meta-approved template goes to the audience you pick, at the pace you set, and every send is logged with its result. Below are the rules of each step, from the template text to the reason a message failed.

Before sending

What matters in an official API broadcast

On the official API, Meta charges per delivered message, by template category and by the country of the recipient’s number. For recipients with a Brazilian number, marketing costs R$ 0.3217 per message and utility R$ 0.0350: 9.2 times less. The category you pick for a template changes the bill for the whole month.

How recipients react matters too. Under Meta’s policy, blocks and reports can lead Meta to limit how many messages the number sends. And anyone who opted out has to stay out of every later broadcast, not just the current one.

  • Category: InvestCRM shows the category Meta approved, not the one you asked for.
  • Audience: one inclusion condition, exclusion rows and the blocklist removed on every send.
  • Pace: 1 to 600 sends a minute, with a warning when one broadcast goes over 100 in a day.
  • Results: sent, delivered, read, replies, failed, skipped and the reason for each failure.

The template

How to build the template that goes to review

Every broadcast starts with a Meta-approved message template. You create it under Templates, or inside the broadcast itself under "Or create a new template", and it goes to review when you save. Review usually takes minutes and can take up to 24 hours.

  • Name: lowercase letters, numbers and underscores only. If you type "Boas Vindas", the editor shows it will be saved as boas_vindas and saves it that way.
  • Category: Marketing (promotions, news) or Utility (notices, confirmations). The list also offers Authentication (codes), which does not work for broadcasts (see the note further down).
  • Header (optional): text up to 60 characters, an image, a video or a PDF. The file goes straight to Meta’s servers, which use it as the sample during review.
  • Body: up to 1,024 characters. Contact data goes in by name (First name, Full name, Phone, Field 1…) and the editor turns it into {{1}}, {{2}}, the format Meta requires.
  • Footer (optional): up to 60 characters. The editor itself suggests using it to say how to stop receiving messages.
  • Buttons (optional): up to 3 quick replies, up to 2 links and 1 call button, each with up to 25 characters.

Once submitted, the template shows as Approved, In review, Rejected or Paused. InvestCRM receives Meta’s notice and, as a safety net, checks templates still in review every 5 minutes, so nobody has to click "sync".

Categories

Marketing, utility or authentication: how Meta decides

Meta checks the category against the content. To be utility, a template must have no sales intent and must be about something of the person’s own (an order, an account, a service they signed up for) or be essential to them. A template that mixes a notice with a promotion is marketing. Abandoned carts and subscription renewals are marketing too, even when the person asked. Source: template categorization, in Meta’s documentation

When Meta decides a utility template should be marketing, it changes the category with one day’s notice; the template stays approved, at the marketing price. Businesses that keep labeling marketing as utility can have utility sending limited for at least 7 days. In InvestCRM, the Meus Modelos table, under Settings → WhatsApp, shows the real category and, when it changes, flags right below it that Meta changed it.

Four sample templates, with the likely category and why:

Order shipped notice

Name at Meta: aviso_envio_pedido · Category: Utility

Why this category: It is about an order the person placed, carries the order number and suggests no purchase. Meta lists this case (order management) as a utility example.

Due date reminder

Name at Meta: lembrete_vencimento · Category: Utility

Why this category: A payment reminder for a service the person already has is an account alert, which Meta treats as utility. One invitation to renew or buy more and it becomes marketing.

News for people who asked for promotions

Name at Meta: novidade_colecao · Category: Marketing

Why this category: It promotes products to drive sales: that is marketing even for existing customers. The text already says how to opt out, with a word InvestCRM recognizes when typed.

Saved cart

Name at Meta: carrinho_guardado · Category: Marketing

Why this category: It looks like a notice, but Meta classifies abandoned carts and renewals as marketing, even when the person asked, because the goal is to sell. Submitting it as utility only makes Meta change the category.

More ready-made texts, sorted by category, in Message templates.

Audience

Who receives it: one condition, exclusions and who is always left out

The Target audience takes one inclusion condition; with none, the broadcast goes to every contact in the account except the blocklist. Under + Condition, the General Filters are Tag (is or is not), Segment, Subscription sequence and Opt-in source (Import, Messaged in on WhatsApp or Added manually). The System Fields are Full Name and Phone (contains) and Subscribed (has a confirmed opt-in).

Below it, the low-key + Exclude audience button adds Tag "is not" rows that remove contacts on top of the condition. The audience takes up to 20 rows in total, and the count of who will receive it updates with every change.

  • Anyone on the blocklist is never included, under both spellings of Brazil’s ninth mobile digit.
  • A half-set condition (no tag picked, a deleted segment) never becomes "everyone": the audience stays empty and the screen says what is missing.
  • A number that is another account’s connection of yours is left out: one account never sends to the other.
  • A contact who gets the "descadastro" tag goes to the blocklist automatically.

The Ready to broadcast checklist asks for a WhatsApp number selected, an approved template, the template’s buttons connected in the flow (when there are buttons), an audience with at least 1 contact and the I confirm the opt-in box, where you state these contacts agreed to get messages from your business. Without that confirmation, the server refuses to publish.

InvestCRM screen: the panel in Portuguese, with Público alvo (target audience) still without a condition and already showing the live count (64 contacts will get this broadcast); in the Pronto para transmitir checklist only the audience item is ticked, the Confirmo o opt-in box is still empty and the open + Condição menu lists Tag, Segmento, Sequência de assinatura and Origem do opt-in
Real InvestCRM screen, with sample data.

Timing and pace

Now or on a date, at the pace the number can take

Send now goes out as soon as you confirm. The clock next to it opens Schedule Broadcast, with its own calendar and time picker; the screen notes that the America/Sao_Paulo time zone (Brasília time) applies.

On the confirmation, the Sending pace offers three presets, Slow (6 a minute), Standard (20) and Fast (60), plus Custom, where you say how many sends every so many seconds, minutes or hours. The result always lands between 1 and 600 a minute, and the screen shows how long the send takes and when it ends.

Above InvestCRM’s pace sits Meta’s own ceiling. It counts how many different people receive messages from the business outside the customer service window over a moving 24-hour period, it belongs to the whole portfolio (all of its numbers add up together) and it starts at 250 for a new portfolio. The current tier shows under Settings → WhatsApp, in Messaging limits; while it is low, a large audience has to go out spread over several days. Meta may also hold back a marketing message for a specific person to keep engagement healthy (error 131049): its guidance is to wait at least 24 hours before resending. Source: Meta messaging limits · Source: Meta error codes · Portfolio limit and Meta warnings · Number quality and sending limits

Advanced Send: the audience in batches

On the Advanced Send tab, from the Business plan up, you set how many contacts go in each batch and how many days apart the batches go out: 1, 2, 3 or 7. There are 2 to 30 batches, each with an editable date. The audience is frozen when you schedule and split with no one repeated; each batch becomes its own broadcast in the list, named "Name — Lote 1/N", with its own metrics.

On the Start plan, which has 1,000 broadcast messages a month and no batches, the server refuses the whole broadcast when the audience is bigger than what is left for the month, so nothing goes out halfway. For a send in the current month, the screen already warns before publishing.

After the template

Each template button opens a path

Open the Flow Builder shows the broadcast’s board, with the template as the first block. If the template has buttons, each one must be connected to a next step; otherwise the checklist will not let you send, so no one taps a button that does nothing. The image in this section is from an automation, which starts with a trigger; in a broadcast, the same builder starts with the template.

The steps available are the same as in automations: Send Message, Actions (tag, field, pipeline, sequence, hand off to the team), Condition, Smart Delay, AI assistant, Randomizer, Start automation and Opt-out.

Already have a flow? Broadcast from an automation creates the broadcast with an existing automation’s flow. See how automations work.

InvestCRM screen: an automation with a keyword trigger (orçamento, preço, quanto custa), built in the same flow builder broadcasts use; the message’s three buttons lead to Atendimento com IA, to Ações with the Quer orçamento tag and the pipeline, and to a Condição on the Cliente VIP tag with a 10-minute Atraso Inteligente
Real InvestCRM screen, with sample data.

While sending

What the system checks while the broadcast goes out

The sending engine works in 15-second rounds and sends, in each one, the share that matches the pace you picked. Before every round it checks again who can receive:

  • Anyone who typed SAIR, PARAR, STOP, CANCELAR or DESCADASTRAR after scheduling is skipped, with the reason "asked to opt out before sending".
  • Anyone waiting for an agent or talking to someone on the team does not get the broadcast on top of that chat: the send to that person waits.
  • If Meta refuses over payment (error 131042), that number’s broadcasts are paused and the account owner is notified. When one runs again, 1 message at a time goes out every 10 minutes instead of the batch: that is how the system learns whether Meta accepts payment again.
  • If the connection to Meta expired or was revoked, sending stops instead of marking the whole list as failed.
  • If the header media link expired, the system fetches the file from Meta again before sending.
  • A send that dropped midway and was not confirmed within 10 minutes is marked as failed, with a note that it was not re-sent to avoid a duplicate.

While the broadcast is going out you can Pause, Resume and Cancel. When resuming with more than 100 messages still queued, the daily volume warning shows again. What to do when Meta declines your card.

Report

The report: what each number means

In the Broadcasts list, History shows each send with Started, Sent, Delivered (%), Read (%) and Clicked (%). When you open a broadcast that already went out, the Metrics panel shows:

NumberWhat it counts
SentMessages that went out, out of how many recipients in total.
DeliveredMessages that reached the phone, as a percentage of sent.
ReadMessages opened, as a percentage of sent.
RepliesPeople who replied to the broadcast.
FailedMessages that did not go out or that Meta returned with an error.
SkippedPeople who opted out after scheduling or did not open the 24-hour window for a free-form step.

Below come Why it failed, with the 10 most recent failures (contact and reason), and Clicks per button (CTR), with clicks, sends and the rate of each button. On the flow board, the number above each block (Sent, Delivered, Clicked) opens the list of contacts behind it.

The report counts what happened to each send; the money side is Meta’s, per delivered message, on the card saved on the WhatsApp account. To estimate the amount before sending, use the cost calculator, which follows the official rate card.

Reasons InvestCRM writes itself

  • The contact opted out (SAIR) before sending: it counts as skipped, not failed.
  • The number belongs to your own system (another account’s connection) and does not receive sends.
  • The template has a media header, but the file could not be found: recreate the template uploading the file through the editor.
  • The send dropped midway without confirmation: it was not re-sent, to avoid a duplicate message.

Other reasons carry the error Meta returned. The official API guide explains the most common codes and what to do about each.

A broadcast that went out becomes a published version: to send it again, Duplicate creates an identical draft. Copy to another account takes the flow to another account of yours as a draft; you pick the number, template and audience there.

Cost

One month of broadcasts on Meta’s bill

Example of a store that, in one month, sends 5,000 templates (order and due date notices plus a news campaign) and answers people who write back. InvestCRM does not charge per message: Meta charges the card saved on the WhatsApp account directly, with no markup.

Sample bill using Meta's official rate card, Brazilian number
What forBilled × price per messageCost for the month
News campaign for people who asked for promotions · Marketing2,000 × R$ 0.3217R$ 643.40
Order and due date notices · Utility3,000 × R$ 0.0350R$ 105.00
Replies to people who wrote back · Service (support)1,500 × R$ 0.0350 (of 2,500 this month)R$ 52.50
TotalR$ 800.90

Estimated monthly total, paid straight to Meta: R$ 800.90. The first 1,000 service messages of each number, every month, are free. If the utility templates in this bill were classified as marketing, the same month would go from R$ 800.90 to R$ 1,661.00. The volumes are an example to show the math, not data from a customer.

Meta's BRL rate card for Brazilian numbers, effective Oct 1, 2026, checked on Oct 9, 2026. See the rate card at Meta · Run your own numbers in the calculator

Since Oct 1, 2026, ordinary replies inside the 24-hour window are charged too, as service, with 1,000 per number at no cost every month. The article How much the official WhatsApp API costs walks through the full rate card.

Rules

Meta’s rules, Brazil’s data law, and what InvestCRM does about each

Opt-in before the first message

The WhatsApp Business policy only lets you contact people who gave you their number and agreed to receive your messages; how you collect that permission is the business’s responsibility. Source: WhatsApp Business Messaging Policy

In InvestCRM: publishing requires ticking I confirm the opt-in, and the audience can be filtered by Subscribed or by Opt-in source. The system does not check how the opt-in was collected: that stays with you.

Whoever asks to leave, leaves

The policy requires honoring requests to stop, made on or off WhatsApp, and Brazil’s data protection law (LGPD) says consent can be withdrawn at any time through a free and easy procedure (art. 8, § 5). Source: WhatsApp Business policy · Source: Law 13,709/2018

In InvestCRM: anyone who types just SAIR, PARAR, STOP, CANCELAR or DESCADASTRAR goes to the blocklist. Tapping a button with those words does not count, because the button is a path in the flow. Requests made by phone or email you add to the blocklist yourself, from the Contacts screen.

Conversations start with an approved template

Outside the 24-hour window, which opens and resets with each message from the person, a business may only write with an approved template. Source: WhatsApp Business policy

In InvestCRM: the first block of a broadcast is always the template; free-form steps after it only go to people who replied.

Blocks and reports cut your reach

Meta may limit how many messages a business sends based on blocks and reports from recipients. Source: WhatsApp Business policy

In InvestCRM: the warning for a broadcast above 100 a day and removing the blocklist on every send help, but no system can promise a number will never be limited. The broadcast best practices guide covers what matters most.

Sensitive data stays out of the chat

The policy forbids asking for or sharing full card numbers, bank account numbers or ID document numbers. Source: WhatsApp Business policy

In InvestCRM: the template text is yours and the system neither reads nor blocks it. Use contact fields only for what the message needs.

Plans

Broadcasts on each plan

The Grátis (free) plan has no broadcasts. Start sends up to 1,000 broadcast messages a month, with scheduling and a pace of up to 600 a minute. Business and Enterprise have no monthly cap on broadcast messages in InvestCRM (Meta’s 24-hour ceiling still applies) and unlock Advanced Send in batches; the sample bill above, with 5,000 templates in a month, already calls for Business.

On the team, building and sending broadcasts belongs to the Editor, the Administrator and the Owner; Collaborators and Viewers can only follow along.

InvestCRM plans: price, limits and features of each one
FeatureGrátisStartBusinessEnterprise
Price per monthR$ 0R$ 147R$ 297R$ 597
Broadcast messages per monthNot included1,000UnlimitedUnlimited
Broadcast sending paceNot includedUp to 600 a minuteUp to 600 a minuteUp to 600 a minute
Schedule a broadcast by date and timeNot includedIncludedIncludedIncluded
Batch sending (Envio Avançado)Not includedNot includedIncludedIncluded
Contacts included1001,0005,000Unlimited
People on the accountJust youYou plus 1You plus 3You plus 15

See all plans and pricing →

Keep reading

To set up your first broadcast

Start free on InvestCRM

The Free plan has no time limit and needs no card. Connect your number through the Meta window and try the system.