Builders Program

Build with us for a whole month. Unlimited usage and add-ons, weekly calls and your own Slack channel.

Learn more
Polymorfa

Command Palette

Search for a command to run...

BanSafe

Stop bans before they happen

BanSafe protects every Linked Devices number from the moment it pairs: human-paced sending, a warm-up for new numbers, and Health from our own AI model, with rules that act when it drops. Pro numbers carry BanSafe Pro Insurance.

Illustrative values, not live data.

Health, with every deduction explained
0 to 100
Daily warm-up allowance over 14 days
20 to 2,000
Rule actions: slow down, stop or log out
3
Of usage returned after a covered Pro ban
30 days

Safe Mode and warm-up

Send at a human pace.

Safe Mode adds presence, typing, read receipts and varied gaps between sends. The warm-up plan gives new numbers a daily allowance that grows. Both come with Standard and Pro and stay off until you turn them on.

Typing before text. The indicator lasts as long as the message takes to type, up to 9 seconds. Campaign sends always type first and use varied gaps.
One ceiling per project. Each number follows the project or stays more private, never more visible. It reports the settings it is running.
A warm-up for new numbers. 20 messages on day one, then a straight line to 2,000 a day over 14 days. The day resets at midnight in the number's country.
Health shrinks the warm-up. A number in fair Health gets three quarters of the day's allowance, poor half and failing a quarter. It never drops below the first-day figure.

BanSafe model

An AI model that knows a healthy number.

Our own model learns from what WhatsApp actually did to numbers, and scores each number's present condition from nearly 200 observed signals.

Trained on real account states. Labels come from observed restrictions and bans, never from a quiet day. It reads counts, not conversations, and shows no score when the evidence is thin.

Health

A score with its reasons.

Until the model has enough evidence for a number, Health applies versioned rules to fresh operational counts, never message text, media or recipients. Every plan includes it for production Linked Devices numbers, Free too.

Every deduction explained. Each lost point names its cause and the measurement behind it, so you fix the cause instead of guessing.
Unknown is not zero. A number without enough fresh evidence shows no score. Test and Cloud API numbers show no estimate.

Project rules

Decide what happens below your line.

One rule per project. It acts only on a fresh score below your threshold, and checks Health again before it applies. Unknown or stale Health never triggers it.

Act on the number
  • Slow down to a rate you set, up to the plan's limit
  • Stop the number and keep its link for a restart
  • Log it out so it must pair again
  • Or only notify
Tell your team
  • Email the team
  • Send bansafe.health_threshold to your webhooks
  • Every action and its outcome in the Console and the API

Incidents

A record of what WhatsApp did.

Polymorfa records each restriction it observes on a number, from a new conversation limit to a ban. Report one it missed so BanSafe learns from it.

Every restriction on record. Observed and reported incidents share one history with start and end times. bansafe.incident fires when one is recorded and again when it settles.
Report a ban we missed. Tell us what happened and when. Each report helps us understand bans better and improves BanSafe for every number.

Calls

BanSafe covers calls too.

WhatsApp restricts numbers whose calls draw reports, as it does for messages. BanSafe counts every call a number places and holds the calls a restriction would refuse.

Calls in the same telemetry. How each call ended and how many callees never chatted with the number. Counts only, never a callee or a call ID.
Restricted calls never ring. While WhatsApp limits a number to existing chats, calls to anyone else stop with number_restricted. session.restriction_updated tells you when the limit ends.

BanSafe Pro Insurance

Banned on Pro? Your credits come back.

Included on every Pro number. You never file a claim.

30 days of credits back. When a ban on a Pro number is attributed to Polymorfa, the credits it used in the 30 days before the ban return to your balance.
A claim files itself. A claim opens when a ban is recorded on a covered number. A person reviews every claim before credits move, and bansafe.claim follows each step.

In your code

BanSafe in your own code.

Settings, reads and webhooks use the Platform API with an organization key. Any HTTP client works too.

protect.ts
import { Client } from "@polymorfa/sdk";

const platform = new Client({
  credential: { type: "organizationApiKey", value: process.env.POLYMORFA_KEY! },
});

await platform.projects.updateSafeMode(projectId, {
  typing: "before_text",
  pacing: "jittered",
});

await platform.projects.updateWarmupPlan(projectId, {
  enabled: true,
  dailyStart: 20,
  warmupDays: 14,
});

API surface

The BanSafe API.

Reads need sessions:read and changes need sessions:manage. The TypeScript SDK wraps every route below.

Protection settings

  • PUT/platform/projects/{projectId}/safe-modeSet the project's Safe Mode ceiling
  • PUT/platform/sessions/{sessionId}/safe-modeOverride one number
  • PUT/platform/projects/{projectId}/warmup-planSet the warm-up plan
  • PUT/platform/projects/{projectId}/health-policySet the project rule
  • PUT/platform/projects/{projectId}/insurance-evidenceCollect device evidence for claims

Health, incidents and claims

  • GET/platform/bansafe/healthHealth for every number
  • GET/platform/bansafe/health/{session}/historyHow a score changed
  • GET/platform/bansafe/health-actionsWhat each rule action did
  • POST/platform/bansafe/incidentsReport a ban Polymorfa missed
  • GET/platform/bansafe/claimsBanSafe Pro Insurance claims

Webhook events

  • Eventbansafe.health_thresholdA rule fired below its threshold
  • Eventbansafe.actionA restriction changed or the allowance ran out
  • Eventbansafe.incidentA restriction was recorded or settled
  • Eventbansafe.claimA claim was filed or changed state
  • Eventsession.restriction_updatedWhatsApp's limit on new chats started or ended

Start with a free number

Your first real number is free. Add more numbers on Pay-As-You-Go.