Send iMessages with Python
The short answer
Yes, Python can send iMessages. The Blue Reacher API is plain HTTPS with a bearer key, so one requests call sends a blue-bubble text from your dedicated line, and a small Flask or FastAPI route receives replies and delivery states. No SDK to install, no A2P registration required, and unlimited iMessages per line. Lines pace at 50 opted-in / 30 cold new contacts a day; replies never metered.
5 tools in this group
Trigger
Python
Under 9 seconds
Send iMessage
Result
Reply back in Python
iMessage
Hi Alex, following up on your demo request. Worth a quick chat this week?
Sent from your Python workflow
Yeah, tomorrow works.
Key takeaways
- Python needs three lines of setup and one POST.
- Webhooks do the inbound side: register your HTTPS endpoint once and Blue Reacher posts every reply, delivery state and STOP opt-out there, signed with an HMAC header your code verifies.
- Pricing is flat: $249 per line per month with unlimited iMessages (50 opted-in / 30 cold new contacts a day) and no per-message metering, so volume never changes the bill.
How a message falls back
How do you send an iMessage from Python?
Python needs three lines of setup and one POST. The requests library is enough; there is no SDK to install because the API is standard HTTPS with JSON.
import os, requests
r = requests.post(
"https://api.bluereacher.com/v1/messages",
headers={"Authorization": f"Bearer {os.environ['BLUEREACHER_API_KEY']}"},
json={
"to": "+15551234567",
"message": "Hi Alex, worth a quick chat this week?",
},
)
message = r.json()- The response carries a message id. Poll https://api.bluereacher.com/v1/status/{message_id} for pending, sent or failed, or skip polling and let the webhook push delivery events to you.
How does Python receive replies and delivery states?
Webhooks do the inbound side: register your HTTPS endpoint once and Blue Reacher posts every reply, delivery state and STOP opt-out there, signed with an HMAC header your code verifies.
import hashlib, hmac, os
from fastapi import FastAPI, Request, HTTPException
app = FastAPI()
@app.post("/webhook")
async def webhook(req: Request):
raw = await req.body()
expected = "sha256=" + hmac.new(
os.environ["BLUEREACHER_WEBHOOK_SECRET"].encode(),
raw, hashlib.sha256,
).hexdigest()
if req.headers.get("X-BlueReacher-Signature") != expected:
raise HTTPException(401)
event = await req.json()
# event["event"] == "message.received" carries the reply
return {"ok": True}- From there the reply routes wherever your stack wants it: a CRM update, a Slack ping, or straight back into an agent that drafts the answer.
What do Python teams pay to run this?
Pricing is flat: $249 per line per month with unlimited iMessages (50 opted-in / 30 cold new contacts a day) and no per-message metering, so volume never changes the bill.
- $1,949 per line per year comes to about $162.50 a month with the $449 activation waived. No A2P registration required, so nothing sits between your script and the first real send.
- White-glove onboarding covers the line, the API key, and the webhook registration, and a brk_test_ sandbox key lets the whole flow run before anything real sends.
Frequently asked questions
Is there a Python SDK for iMessage?
No SDK is needed. The Blue Reacher API is standard HTTPS with JSON and bearer auth, so the requests library covers it in a few lines: one POST to send, one GET for status, and a webhook route for replies. Full schemas live in the OpenAPI spec at docs.bluereacher.com.
Can Python send iMessages from any server?
Yes. Sends run through Blue Reacher's platform over the API, so your Python code runs anywhere: a server, a cron job, a notebook. Messages leave a dedicated iMessage line you own, with automatic RCS then SMS fallback.
How do I check whether a number can receive iMessage from Python?
POST up to 100 numbers to https://api.bluereacher.com/v1/capability and the response says iMessage or SMS per number. Checking before a batch keeps green bubbles out of a blue-bubble campaign.
Do I need A2P registration to text from Python?
No A2P registration required: no brand vetting, no campaign approval, no carrier queue. Pacing applies instead: 50 opted-in / 30 cold new contacts per line per day, with replies unmetered.
What does the API cost?
$249 per line per month, unlimited iMessages, or $1,949 per year (about $162.50/month, $449 activation waived). Lines pace at 50 opted-in / 30 cold new contacts a day; replies never metered. API, MCP server and webhooks are all included.
Send your first Python iMessage today
Book a demo and we'll issue your sandbox key on the call: you run the requests snippet yourself and watch the delivery states come back live.