Skip to content
Guides7 min read

Will an iMessage API Get Your Number Banned?

Why iMessage numbers get flagged, the daily limits that keep a line healthy, and 30 days of real traffic from 31 iMessage lines running AI agents on Keiki.

Grainy film still of a snow-capped mountain at dusk seen through a curved window above a dim control room of old computer terminals, a white swivel chair on a patterned rug, with the words "Will an iMessage API get your number banned? How to send safely at scale" across the middle

Short answer: An iMessage API won't get your number banned on its own. Apple flags a line by how it behaves (bursts, one-way blasts, cold outreach), and a line that waits for users to text first and stays under about 50 new conversations a day stays healthy.

If you've searched for an iMessage API, you've seen the worry: Apple has no official bot API (we covered why in Is There an iMessage API?), so every option looks like it could get your number shut off. That question decides whether you build on iMessage at all, so here is what actually gets a line flagged, the limits we enforce, and what 30 days of real traffic look like on our lines.

This guide is part of Building iMessage Agents: The Complete Guide.

How Apple flags an iMessage line

Apple publishes no sending limits for iMessage. Messages are end-to-end encrypted, so Apple can't judge a line by what it says. It judges the line by how it behaves: who starts conversations, how fast messages go out, and whether people write back.

A flagged line doesn't usually vanish overnight. It delivers less, then gets cut off. In practice, almost every flagged line did one of these in the hour before:

  1. Bursts. A hundred or more messages from one line within a few minutes, or several messages to one person within seconds.
  2. One-way traffic. Broadcasting to people who don't reply.
  3. Chasing silence. Following up again and again with someone who stopped answering.
  4. Cold outreach. Messaging people who never asked to hear from you.
  5. Odd hours. Sending in the middle of the recipient's night.

Volume on its own rarely flags a line. High volume combined with few replies does. A line that suddenly sends far more than usual, or wakes up after a quiet stretch, also gets extra scrutiny for about a week.

What healthy traffic looks like: 30 days on Keiki

These are the numbers from the 31 active iMessage lines on Keiki over the last 30 days (excluding test and internal traffic):

Last 30 days
Conversations566
Conversations where the user sent the very first message565 (over 99%)
Messages sent by agents6,451
Messages sent by people3,579
Sent-to-received ratioabout 1.8 to 1
Median messages per line per day16
Busiest single line in a day585 messages
Most new conversations one line opened in a day33

The ratio matters more than the totals. Agents send more than they receive because answers are often split into a couple of messages, but people keep writing back: about one reply for every two messages sent. That two-way pattern is what Apple reads as a real conversation. Even the busiest line-day, 585 messages, sits far below the daily ceiling below.

The limits that keep a line healthy

Plan forKeiki enforces
Messages per line per dayup to 5,000, sent and received combined7,000 sent messages, then every send is refused
New conversations per line per dayfewer than 5050, then only sends that would open a new conversation are refused
Active users per line400–500 for conversational use, 200–400 for heavy usenot capped
Messages per hourno fixed number; spread sends out and never burstnot capped

Keiki's two hard ceilings reset at midnight UTC. On your own lines they are pooled, so one busy line can borrow headroom from a quiet one. A shared Keiki number is the exception: its ceilings count every organization's sends on that number, and it can't borrow from your other lines. A new conversation is the first message a line sends to someone it has never messaged; replies in an existing conversation don't count toward the 50.

To size your lines, divide 5,000 by the messages an average user sends and receives in a day. At 10 a day, a line holds about 500 users; at 25 a day, about 200. Stop adding users at 70–80% of that, and add the next line before you need it.

How to keep your iMessage number in good standing

Step 1: Let the user text first

A conversation the user starts carries far less risk than one your line starts. That's why all but one of the conversations above began with the user. Put an sms: link on your site, in your app or in an email, with the first message filled in:

html
<a href="sms:+15555550123?body=Hi">Text us</a>

On an iPhone this opens Messages addressed to your agent's line, ready to send.

Step 2: Keep the first message plain

Send links, media and iMessage app cards only after the user has replied, so they preview and open properly. Share a contact card after the first exchange so the user can save the agent.

Step 3: Get three replies early

A conversation where the user has written back at least three times is treated as trusted. Open with a simple question that's easy to answer, not a wall of text.

Step 4: Write like a person, not a broadcast

Send one message rather than three in a row, and space out multi-part answers. Aim for about one reply for every two messages the agent sends, which is close to the 1.8 to 1 our lines run at.

Step 5: Back off when someone goes quiet

Wait about a day, then follow up once. If there's still no reply, wait a few more days and try once more. Then send one last message that makes stopping easy ("Want me to stop checking in?") and send nothing more until they reply. Never more than two or three follow-ups, spaced over days, not hours.

Step 6: Honor STOP immediately

When someone replies with exactly STOP, Keiki suppresses the contact and refuses every further send to them, so your agent can't keep messaging by mistake. Exactly START from the same person opts them back in. Ordinary words like "cancel" or "end" stay normal replies, because in a booking conversation they usually mean the appointment, not the messages.

A refused send tells you why, so your code can tell a cap from an opt-out:

TypeScript
// a refused send comes back failed, with the reason
{ status: 'failed', error: 'send_blocked: opted_out' }                  // the contact replied STOP
{ status: 'failed', error: 'send_blocked: daily_line_volume_reached' }  // today's 7,000 / 50 ceiling

If you keep your own CRM, turn on Consent change events in Settings → Webhooks and mirror opt-outs from the keiki.conversation.opt_status_changed event (trimmed):

JSON
{
  "type": "keiki.conversation.opt_status_changed",
  "conversationId": "+14155550100",
  "channel": "imessage",
  "previousOptedOut": false,
  "optedOut": true,
  "reason": "keyword"
}

Step 7: Spread the load and grow new lines slowly

Onboard users across several lines; one line taking a wave of new users draws attention even when they text first. Ramp a new line's daily volume over its first weeks instead of moving an existing audience onto it at full pace. If a line starts to struggle, slow it down and work on reply rates rather than abandoning it, because moving its users moves the same sending pattern to a new line. And keep every line active: a line with no traffic for about two months can be deactivated.

FAQ

Can using an iMessage API get my number banned? Not by itself. Lines get flagged for behaviour (bursts, cold outreach, one-way traffic, ignoring people who stopped replying), not for being connected to an API. A line where users text first and keep replying stays healthy.

How many iMessages can one number send per day? Plan for up to 5,000 messages a day per line, sent and received combined, and fewer than 50 new conversations. Keiki hard-stops at 7,000 sent messages and 50 new conversations per line per UTC day, pooled across your own lines (a shared number has its own count).

Is there an official iMessage API? No. Apple has no public server-side API for iMessage bots. See Is There an iMessage API? for what developers can use instead.

What happens when someone texts STOP? Keiki stops all further messages to that person and refuses sends with opted_out until they text exactly START.

Can I do cold outreach over iMessage? You shouldn't. Messaging people who never asked to hear from you is one of the fastest ways to get a line flagged. Have users start the conversation with an sms: link instead.

For the full rule set, see iMessage best practices.

Put your agent on a line that stays healthy

Start building on Keiki or pick an agent template, add an iMessage line, and share an sms: link so your first users text you first.