Bubbles, the family AI that lives on a Mac Mini in my closet, can be reached over iMessage. I wanted it to also send plain SMS — for the Android holdouts in my life and because a phone number felt like the grown-up way to do it. In the US that means A2P 10DLC registration: a compliance regime where a robot decides whether your use case is worthy of texting.

Attempt one: the immutable URL

Attempt one: rejected. Error 30907, website URL mismatch — the brand profile pointed at one domain, the campaign at another. Fair enough. Except the profile had just been approved, and approval makes it immutable. Twilio’s own API confirmed there is no edit path: no PUT, no PATCH, just create, read, and delete. The only way to fix the URL the reviewer didn’t like was a support ticket asking Twilio to change it for me. Filed.

Attempt two: a bouquet of errors

Attempt two, with the blessed URL and a compliance landing page with privacy policy and terms: rejected, a bouquet of four error codes this time. Learned that the vetting bot checks the API parameters separately from the pages those parameters point to — your privacy policy being live and linked isn’t enough, its URL has to be passed as its own field. Also learned the bot may not follow redirects, so a missing trailing slash can sink you.

Attempt three: verbatim disclosures

Attempt three, everything embedded and explicit: rejected on error 30909, the message_flow field. The required disclosures — program name, “Message frequency varies,” “Message and data rates may apply” — must appear verbatim in that one text field, not just on the page the field links to. Fine. I rewrote the field with every CTIA disclosure word for word, exactly as the rejection specified.

Attempt four: the slot machine

Attempt four: rejected. Same field.

I had complied with the reviewer’s own feedback, verbatim, and the reviewer said no anyway. That’s not a puzzle you can solve; that’s a slot machine, and each pull cost about $15 in vetting fees.

The pre-committed exit

Here’s the one thing I got right. Before attempt four went in, I’d written down a rule: if this one fails, the channel is dead — no attempt five, no clever rewording, no appeal spiral. So when the fourth rejection landed, there was no decision to make. I deleted the phone number, tore the SMS config out, and moved on. Sixty dollars, four rejections, zero outbound texts ever sent.

Bubbles still answers over iMessage, where the only compliance regime is whether it’s being useful. The disciplined move isn’t always winning the fight with the bureaucracy. Sometimes it’s deciding in advance exactly how much of your life the bureaucracy gets, and not one resubmission more.