A real US phone number, bound to your workspace, addressable from any HTTP client. Send blue-bubble messages from your backend and get every reply as a webhook โ in under a second.
# one call. real iMessage. curl -X POST https://api.lokimessages.com/api/chats/$CHAT/messages \ -H "Authorization: Bearer lok_live_โฆ" \ -H "Content-Type: application/json" \ -d '{"text": "Your table is ready ๐"}' # replies arrive at your webhook <1s later { "event": "message.received", "text": "great, walking over now" }
By the numbers
REST endpoints
Chats, messages, polls, reactions, attachments, locations, read receipts โ the whole surface.
Inbound webhook latency
Replies, receipts, and reactions hit your endpoint as structured JSON in under a second.
Send and receive
Not a blast tool. A real conversation channel your backend can hold open indefinitely.
Gray routes
Our own Mac fleet, our own registered US numbers. No resellers between you and delivery.
Why iMessage
Feels human
iMessage is where your users already talk to the people they trust. Loki Messages gives your backend the same vocabulary โ not just text, but every gesture of a real conversation.
Reliable
Behind the API is a fleet of real Macs speaking real iMessage, with registered US numbers, session keep-alive, health monitoring, and automatic retries. You never think about any of it.
{ "event": "message.received", "chat_id": "c3a1โฆ", "sender": "+1415โฆ", "text": "great, walking over now", "attachments": [], "received_at": "2026-06-11T18:02:11Z" }
Honest pricing
Per-message pricing makes you afraid of your own users replying. Our plans are flat โ start free in the sandbox, upgrade when you go to production, and let the conversation run.
The surface
Full two-way iMessage from a real US phone number bound to your workspace. Text, media, and threaded replies โ one REST call each.
Start a group with any set of handles in one POST and message into it like any other chat โ with read status per participant.
React to any message with the classic tapbacks or any emoji, and receive every reaction your users send as a webhook event.
Create real iMessage polls in any chat and watch the votes come back โ the cleanest structured input a text thread can collect.
Start and stop the typing indicator, mark chats read, and query read status per message. The small signals that make a thread feel alive.
Upload once, send anywhere. Images, PDFs, and files in both directions, with download URLs on everything inbound.
Request and receive live locations per handle. The primitive behind every "where are you?" and "what's near me?" flow.
Read any message's full reply thread as a single resource โ context your bot or support tool can reason about.
Chats ride iMessage by default and can run over SMS where you need reach โ same endpoints, same webhooks.
For developers
| POST | /api/chats/:chatId/messages | Send text, media, or replies to a chat |
| GET | /api/chats/:chatId/messages | Page through a chat's history |
| POST | /api/chats | Create a chat โ direct or group |
| POST | /api/messages/:messageId/reactions | Tapback any message |
| POST | /api/chats/:chatId/polls | Create a native iMessage poll |
| POST | /api/chats/:chatId/typing | Show the typing indicator |
| POST | /api/attachments/upload | Upload media to send anywhere |
| POST | /api/locations/request | Ask a handle for their live location |
| GET | /api/messages/:messageId/thread | Read a full reply thread |
| POST | /api/chats/:chatId/read | Mark a chat as read |
| GET | /api/chats/:chatId/read-status | Who has read what, per chat |
One key, the whole surface
Authenticate with your lok_ API key, hit
api.lokimessages.com, and treat conversations as a
resource. Consistent JSON in and out, predictable errors, and a
dashboard that shows every message's delivery lifecycle when you
need to debug at 2am.
How it works
Sign in, and we bind a real, registered US phone number to your workspace. Registration, sessions, and delivery health are our problem from day one.
POST to api.lokimessages.com with your lok_ API key. Text, media, polls, reactions, locations โ every iMessage primitive is an endpoint.
Point a webhook at your backend and every inbound message, receipt, reaction, and poll vote arrives as structured JSON, in under a second.
Use cases
AI agents
Give your agent a contact card instead of a web app. Users text it like a friend โ no install, no login wall, no churn at the app store.
Booked: Friday 7:30pm, table for 4 at Lindo ๐Notifications
2FA codes, fraud alerts, and order updates in the thread users check 80 times a day โ with read receipts so you know they landed.
Your verification code is 281-009. It expires in 10 minutes.Hospitality
Confirmations, reminders, and "your table is ready" pings as a real conversation โ guests reply, your system answers.
Your table is ready! Walk to the host stand whenever ๐ชCoaching
Daily check-ins, streaks, and nudges as texts from a coach, with polls for the daily plan and a tapback to log the win.
Day 21 ๐ฅ Same time tomorrow? Vote: 6am / 7am / rest daySocial
Move matches and members from the app into the thread they'll actually answer โ and keep the conversation data flowing back.
You two matched! Want me to suggest a first spot nearby?Commerce
Receipts that can answer questions, delivery updates that take replies, and "reorder the usual?" as a one-tap poll.
Order's out for delivery โ 25 min. Reorder next week? ๐Beside โ our own consumer concierge โ runs every conversation through this exact API. When delivery so much as flickers, we feel it before any customer does.
Loki Labs ยท Warsaw
FAQ
Yes. Messages are sent from real Apple hardware we operate, through real registered US phone numbers. To your user it's a normal iMessage conversation: blue bubble, tapbacks, typing dots, read receipts, the lot.
Yes. A registered US phone number is bound to your workspace when you sign up. It's yours for the life of the account โ conversations, contact entries, and reply history all accrue to it.
Under a second, typically well under. Every inbound message, reaction, read receipt, and poll vote is delivered to your endpoint as structured JSON with sender, chat, and attachment metadata already resolved.
Inbound media arrives in the webhook with a download URL. Outbound, you upload once via POST /api/attachments/upload and reference the attachment in any number of messages.
Yes โ create a group with any set of handles in one call, send into it, react, run polls, and read per-participant read status. (Participant add/remove after creation isn't exposed; that's an iMessage-protocol limitation, not a plan limit.)
Plans are flat, not per-message: a free tier for building and a production plan at $49/month. Details on the pricing page. If you're doing serious volume, talk to us.
SMS APIs rent you carrier routes for 160-character one-way blasts. Loki Messages is a full iMessage conversation surface: rich media, reactions, polls, threads, receipts โ the channel your users treat as personal, not promotional.
We run our own Mac fleet with session keep-alive, continuous health monitoring, latency probes, and per-message lifecycle tracking. When something degrades, our own products feel it first โ Beside, our consumer app, runs on this exact API.
We handle registration, delivery, retries, and inbound webhooks. You ship the product.