Use cases
WhatsApp group API for developers
WaGate gives you a REST API for WhatsApp groups. From your own code you can create a group, add, remove, promote or demote people, rename it, set its description and settings, and fetch its invite link. Each request is authenticated with the token of one linked number, and a free sandbox is included.
Facts (as of October 2026, API v1)
- One request changes up to 50 people. A group subject is 1 to 25 characters.
- A group add answers one result per person, so one refusal does not fail the others.
- The free sandbox channel allows 5 group adds a day, counted in Bangkok time.
- Prices: from $25 per number per month, with a free sandbox and no per-message fees.
What you can automate
- Create a group, optionally with people already named, or inside a community.
- Add, remove, promote or demote up to 50 people per request.
- Rename a group and set or clear its description.
- Change who can send, who can edit group info and who can add members.
- Get the invite link.
- Read a group, or list the groups the number is in.
- Get a signed webhook when someone joins, leaves, or is promoted or demoted.
A first call
Create a group, then add a person. The number you call from must be linked to a channel. The same two calls in curl and Node (set GROUP_JID in curl to the jid the first call returns):
API=https://api.wagate.dev/v1
BASE="$API/sessions/$CHANNEL_ID"
AUTH="Authorization: Bearer $CHANNEL_TOKEN"
curl -s -X POST "$BASE/groups" \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{"subject":"Team","participants":[]}'
curl -s -X POST "$BASE/groups/$GROUP_JID/participants" \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{"action":"add","participants":["66XXXXXXXXX"]}'const API = 'https://api.wagate.dev/v1';
const { CHANNEL_ID, CHANNEL_TOKEN } = process.env;
const BASE = `${API}/sessions/${CHANNEL_ID}`;
const headers = {
Authorization: `Bearer ${CHANNEL_TOKEN}`,
'Content-Type': 'application/json',
};
async function call(method, path, body) {
const res = await fetch(`${BASE}${path}`, {
method,
headers,
body: body === undefined ? undefined : JSON.stringify(body),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.code}: ${data.error}`);
return data;
}
const group = await call('POST', `/groups`, {"subject":"Team","participants":[]});
console.log(group);
const added = await call('POST', `/groups/${group.jid}/participants`, {"action":"add","participants":["66XXXXXXXXX"]});
console.log(added);Every group route
| Method | Path | What it does |
|---|---|---|
| GET | /v1/sessions/{channel}/groups | List groups |
| POST | /v1/sessions/{channel}/groups | Create a group |
| GET | /v1/sessions/{channel}/groups/{group} | Get a group |
| PUT | /v1/sessions/{channel}/groups/{group}/description | Set or clear a group's description |
| GET | /v1/sessions/{channel}/groups/{group}/invite-link | Get a group's invite link |
| POST | /v1/sessions/{channel}/groups/{group}/participants | Add, remove, promote or demote participants |
| PUT | /v1/sessions/{channel}/groups/{group}/settings | Change a group's settings |
| PUT | /v1/sessions/{channel}/groups/{group}/subject | Set a group's subject |
Limits and honest caveats
- A create counts as one group add for the group, one for each person you name, and one more when you create it inside a community with parent_jid. On the free sandbox channel those come out of its 5 adds a day. Past the allowance the request is refused whole.
- Some people cannot be added. Per person you can get a refusal for their privacy settings, a recent exit, a block, or a number that is not on WhatsApp. The answer says which.
- If the outcome of an add is unclear, the result is "unknown". Read the group before you retry.
- The API has no idempotency key. Never re-create a group without listing groups first.
- Adding people to groups on a new number is what gets numbers restricted. Add a few at a time, with random gaps, and watch the number health readings.
- WaGate is independent. You link your own number. It is not an official WhatsApp route.
Questions
- Can I create a WhatsApp group with an API?
- Yes. POST to /v1/sessions/{channel}/groups with a subject of 1 to 25 characters, and optionally up to 50 participants. The answer is the new group, including its jid.
- How many people can I add in one request?
- Up to 50 per request, for add, remove, promote and demote. The answer has one result per person.
- Can I get the invite link?
- Yes. GET /v1/sessions/{channel}/groups/{group}/invite-link returns an invite_link.
- Can I try it without paying?
- Yes. Every account has one free sandbox channel. It allows 5 group adds a day, so it is enough to build and test against.
- Is this an official WhatsApp API?
- No. WaGate is an independent API. You link your own number, and WhatsApp sets its own rules for each number.
Free sandbox, forever. Add a real number when you're ready.
Start in the free sandboxKeep going
WaGate is an independent WhatsApp API for developers: send and receive messages, automate groups and communities, and get signed webhooks with a free sandbox. Not affiliated with WhatsApp or Meta. You link your own number.