The messaging infrastructure your product can grow on.
SendiMessage runs dedicated messaging lines for your business and delivers over iMessage where recipients support it, with SMS fallback. Send from one clean API or an official SDK, hold real two-way conversations in a shared team inbox, and react to delivery and reply events with webhooks.
Built for the teams that send the messages.
A predictable path for every message.
You POST a message and get a message_handle with status QUEUED immediately. The final status is readable from the API and pushed to your webhook endpoint as an outbound event.
Everything the messaging lifecycle needs.
Two portals, included with every line.
The team inbox
A shared, auto-refreshing workspace for the people who actually talk to customers: iMessage-style threads with media, message templates with variables, a company address book with opt-out control, and live per-line quota bars.
The admin portal
Everything an administrator needs: sent/received analytics split by iMessage vs SMS, per-line traffic and quota stats, API key management, webhook endpoints, and your invoices as PDFs.
Paced like a human, protected like infrastructure.
Every line sends at a human pace — randomized gaps between messages and longer pauses before brand-new conversations — so your number builds a healthy sending reputation. Quotas apply only to first contacts: replies inside existing conversations are never throttled, and live remaining counts are visible per line.
Room to grow beyond SMS.
The same infrastructure is being built to support more channels. These are not available yet:
Follow every message from request to reply.
See how one API request moves through validation, routing, delivery, and the return webhook.
{
"number": "+15555550123",
"content": "Your order has shipped."
}API request
Your application sends one request to the SendiMessage API — no channel juggling, no per-carrier logic.
{
"number": "+15555550123",
"content": "Your order has shipped."
}Validation
The API key, messaging line, and destination are verified. The request is accepted and queued — never sent inline.
{
"message_handle": "msg_01H...",
"status": "QUEUED"
}Routing
SendiMessage picks the best channel for the destination — iMessage when it's available, with SMS fallback standing by.
{
"imessage": "checking",
"sms_fallback": "ready"
}Sending
The selected channel carries the message to the device. Every attempt is recorded, so the status always reflects reality.
{
"service": "imessage",
"state": "sending"
}Sent
Your line confirms the send and the service actually used — visible via the API and pushed as an outbound event.
{
"message_handle": "msg_01H...",
"status": "SENT",
"service": "imessage"
}Customer reply
When the customer replies, SendiMessage receives the inbound message and resolves it to your line and organization.
{
"direction": "inbound",
"content": "Thanks, received."
}Webhook
A signed event is delivered back to your endpoint, so your application stays in sync — request to reply, one loop.
// "receive" event → your endpoint // SendiMessage-Signature verified
One request, one loop — validated, routed, delivered, and confirmed back to your application. That's the whole integration.
Request a LineKnow what happened to every message.
Drag the timeline or use arrow keys to see each state — and the webhook it emits.
Status SENT — the service used (iMessage or SMS) is recorded on the message.
One line for every workflow.
One active, dedicated messaging number or sending channel provisioned for a customer. Run as many as your business needs.
Estimate for active lines only. Message usage and other fees may apply.
Less infrastructure to manage.
See what changes when messaging is managed for you.
- One API
- Managed lines
- Automatic routing
- SMS fallback
- Unified webhooks
- Direct integration support