WAM

WhatsApp on Rails

Your WhatsApp number, with an API and an autopilot.

WAM links to the number you already have. From then on your software can create groups, add people, answer messages and run automations that call your own APIs. Link a number in two minutes. The first tier is free.

No card. No new number. No Meta business application.

automation: dealer-stockenabled
  1. Trigger

    Message in "Dealers, West"

    "stock" from +91 98•••• ••21

  2. HTTP request

    POST https://erp.yourco.in/stock

    200 OK in 212ms {"units": 42, "eta": "Thu"}

  3. Reply

    Back into the same group

    Today: {{ steps.erp.body.units }} units. Next lot {{ steps.erp.body.eta }}.

Last test: 3 steps, 449ms, nothing sent. Press Send live when you are happy with it.

1,024
people in one group. The official Cloud API stops at 8.
2 min
from sign-up to a linked number. Scan a QR, done.
44
tools an AI agent can pick up over MCP.
$0
to start. One number, real automations, no card.

How it works

Three steps. The first one is scanning a QR code.

01

Link the number you already have

Open WhatsApp on your phone, go to Linked devices, scan the code on your dashboard. That is the whole set-up. No new SIM, no business verification, no waiting on an approval queue.

02

Drive it your way

Click through the console, call the REST API, install the Python SDK, or hand an AI agent a set of tools. Every route does the same job; pick the one that fits the task in front of you.

03

Let the automations run

Draw a flow: a message arrives, your server is asked something, a reply goes back. It runs at 2am with nobody watching, and every step of every run is written down so you can see exactly what it did.

What people build with it

If your customers are on WhatsApp, your software should be too.

Six things teams do with WAM in their first week. None of them needed a developer to learn a new platform, and the ones that needed a developer at all took an afternoon.

Communities and courses

Put 800 students in the right groups before lunch

Create a group per cohort, add members straight from your roster, make the teaching assistants admins, and switch the group to announcements only the night before an exam. Everything a phone can do to a group, done from a script.

Dealer and field networks

Type "stock" in the group, get today's numbers back

A trigger watches one group for one word. An HTTP step asks your ERP. A reply posts the figures back into the same group. Nobody on the floor learns a new app.

Support and sales teams

First reply in seconds, from a model you chose

Route new customer messages to your own AI, with your own tone and your own knowledge. Keep a short memory per chat so the conversation makes sense. Hand off to a person the moment it matters.

Product teams and agencies

Ship the WhatsApp feature your customers keep asking for

Add group creation, invites, polls or order updates to your own product with a few API calls. Stable error codes and per-recipient results mean the integration behaves the same on the hundredth call as on the first.

AI agent builders

Give Claude, Cursor or any MCP client a WhatsApp number

One key, bound to one number, exposes 44 tools: list groups, read the inbox, send a poll, check whether a number is on WhatsApp. The agent sees only what the key allows and can never touch another number.

Engineering and operations

Post deploys, incidents and reports to the team group

A cron job and one POST. Send the daily numbers, the release notes, or the on-call rota to the group people actually read, instead of the channel they muted.

Automation builder

Build an automation the way you would sketch it on a whiteboard.

Drag a few steps onto the canvas and join them with a line. A message wakes it up. Your server answers a question. A reply goes back. You never write code, and after one test run every value each step returned is there to pick from by name.

Trigger

A message arrives. Filter by group, sender, a word, or a mention.

HTTP request

Call your own server, your n8n webhook, or any API with a URL.

Split and Merge

Ask three systems at once and gather the answers.

AI

Send the conversation to any model on OpenRouter. Pro.

Reply

Answer in the same chat, or a different one, with any value by name.

Free plan

Bring your own backend. Bring your own n8n.

The HTTP step calls whatever address you give it: your own server, an n8n or Zapier webhook, a Lambda, a database service. Add a bearer token or a signed header so your side can verify the call. Every outbound request leaves from a separate container that holds no credentials of yours, pins the address it resolved, and never follows a redirect. Your existing stack becomes a WhatsApp stack without moving anything.

Pro plan

Add a model. Any model. Your key.

The AI step sends the conversation to any model on OpenRouter using an API key you hold. Pick the model from a live catalogue and the settings form builds itself from what that model supports. Keep a short memory per chat, attach the image someone sent, or let the model call your HTTP steps as tools. One key per number, rotated in one place, never pasted into a flow.

Automations that cannot run away

An automation ends in a real message to a real person, so most of the engineering went into the brakes.

  • A reply the automation sent can never trigger it again, so it cannot talk to itself.
  • One run at a time per chat. Ten messages in a row do not become ten replies.
  • After several failures in a row it pauses instead of trying harder.
  • A test run calls your real APIs but sends nothing. Sending live is a separate button.
  • Outbound calls leave from a separate locked-down container that holds no credentials and cannot reach a private network.
  • Every reply passes through the same pacing as a message you send by hand.

It checks your work as you go

Up to 40 steps in one flow. Something structurally broken will not save. Something that would run, but not the way you meant, saves fine and will not switch on until you fix it. The canvas will not let you draw a wire the engine could not follow.

Every run is recorded step by step, with what each step sent and what came back, so a flow that misbehaved at 3am explains itself at 9.

What it can do

Everything the phone can do, your software can do.

Grouped the way WhatsApp itself is. Every operation fails the same way, with the same kind of code, so you learn the rules once.

Groups

Up to 1,024 people, with every control an admin has in the app.

  • Create, rename, describe, leave
  • Add, remove, promote and demote, up to 50 at a time
  • Announcement mode, locked settings, join approval
  • Invite links, revoke and reissue
  • Disappearing messages by policy

Communities and channels

Several groups as one, and broadcasts to followers.

  • Create a community, add and remove groups
  • Manage members across the whole community
  • Create a channel, post to it, see followers
  • Follow, unfollow, mute, react

Messages

Everything WhatsApp can send, in both directions.

  • Text, images, files, location, contact cards, polls
  • Reply, mention, forward, edit, delete, react, pin
  • Download any media that came in
  • A durable inbox your program can drain in order

Chats, contacts and profile

Keep the number tidy and know who you are talking to.

  • Archive, pin, mute, star, mark read or unread
  • Typing and recording indicators, presence
  • Check a number is on WhatsApp before you write
  • Block and unblock, profile name, photo and privacy

For developers

An API that behaves the way you wish WhatsApp did.

Three doors into the same building. Use whichever your project already speaks.

REST and WebSocket

Over a hundred endpoints, one shape. Every failure is a stable code with an HTTP status and a retryable flag, served live at /errors. Events are numbered; reconnect with the last number you saw and nothing is missed.

Python SDK

pip install greenwire. Typed resources, reads retried and writes never, and a key that is bound to one number so there is no session id to get wrong. Partial results stay partial, because WhatsApp answers per participant.

MCP for agents

Point any MCP client at /mcp with a key. It sees exactly the tools that key permits, and a revoked key is cut off on its next call. The catalogue is the prompt: each tool tells the model when to stop and ask a person.

curl
# create a group and add people, from a script
curl -sX POST $API/api/sessions/shop/groups \
  -H "Authorization: Bearer $WAM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subject":"Dispatch, Pune","participants":["919000000000"]}'
python
from greenwire import Client

wa = Client(api_key=WAM_KEY)
group = wa.groups.create("Dispatch, Pune", ["919000000000"])
wa.messages.send_text(group.jid, "Welcome. Orders post here at 9am.")
claude_desktop_config.json
{
  "mcpServers": {
    "whatsapp": {
      "url": "https://<your-api>/mcp?key=wam_..."
    }
  }
}

Bulk actions answer per person, because WhatsApp does. Add twelve people and you get twelve results, not one yes or no that makes you either redo all twelve or quietly forget the ones that failed.

Built for the long run

Good behaviour is the default, not a setting.

A number that people trust is worth more than a number that sends fast. WAM is built so the careful thing is also the easy thing.

Paced like a person

Sends are capped per window, spaced by a minimum gap, and given a little randomness. Nothing in the product can send without taking a turn in that queue. Not the API, not an automation, not an agent.

Check before you write

One call tells you whether a number is on WhatsApp before you message it, and adding people to a group reports the outcome for each person, so a bad list never turns into a wall of failed sends.

Consent is a product rule

Our Do Not Contact policy is short and it applies to everyone using the product. Adding someone to a group counts as contact. Opt-outs are honoured in any wording, in any language.

The official option

When Meta’s Cloud API is enough, and when it is not.

If you have an Official Business Account and you need approved templates sent to individuals at scale, use the Cloud API. It is built for that and it does it well. It also has a Groups API now, which some tools still tell you does not exist.

The gap is groups. A Cloud API group holds eight people. You cannot add anyone to it, only send a link and approve them one at a time. You cannot make an admin, leave a group, or touch communities and channels at all. WAM exists for the work on the other side of that line.

WhatMeta’s Groups APIWAM
Who can use itBusinesses with an Official Business Account on the Cloud API.Anyone with a WhatsApp number and a phone to scan a code.
People per group81,024, the same as the app
Adding someoneSend a link, they request, you approve.Add them directly, 50 at a time. Links and approvals still work.
AdminsCannot promote or demotePromote and demote
Group settingsName, description, picturePlus announcement mode, locked info, who can add, disappearing messages
Communities and channelsNo APICreate, manage, post
Message typesText, media, approved templatesPlus location, contacts, polls, reactions, edits, pins, forwards
Price per messageMeteredIncluded in the plan

The middle column is Meta’s published Groups API reference as of August 2026. They change it often, so read the current documentation before deciding anything on our summary of it.

Pricing

Free to prove it works. One flat price when it does.

Free

$0

One linked number, 10 messages a day, every group tool, unlimited automations calling your own APIs. Enough to build the real thing and watch it run.

Pro

$30 / month

No caps on numbers, messages, group size or automation sends. The AI step with your own OpenRouter key. Cancel whenever you like.

Full comparison and the fine print

Questions

The things people ask before they link a number.

Do I need a new number or a business account?
No. You link the number you already use, the same way you link WhatsApp Web. Personal and business numbers both work.
Can my automations talk to my own servers?
Yes, on every plan. The HTTP step calls any URL you give it. That includes an n8n or Zapier webhook, a Lambda, your own backend, or a database service. You can add a signed header so your server knows the call came from you.
What does the free plan actually let me do?
One linked number, 10 outbound messages a day of which automations may use 5, and no sending into groups larger than 8 people. Reading, listening, group management and building automations are not limited. It is enough to prove a flow works end to end before you pay.
What is on Pro?
Everything in Free without the caps, plus the AI step: bring your own OpenRouter key and use any model in their catalogue. $30 a month, cancel any time and keep Pro until the end of the period you paid for.
Where does my data live?
Your messages and contacts live in your account on our service and go nowhere else. We do not sell them, train on them, or hand them to a model unless you wire an AI step to do so with your own key. The Privacy Policy sets it out in full.
Can I run it on my own infrastructure?
The same software ships as a Docker stack. If you need it inside your own network, write to us and we will set you up.

Link a number. Draw a flow. Go home on time.

The free plan needs no card and the first automation takes ten minutes. If it earns its keep, Pro is one flat price.