- Built for AI agents
- Real-time inbound webhooks
- Receive unlimited messages⁴
- Reply to anyone who messages you first
- Full API access
- Dedicated phone number
- Cannot initiate new conversations
Build an iMessage chatbot with the Vercel Chat SDK
Send and receive iMessage, RCS, and SMS through Vercel's Chat SDK with the chat-adapter-blooio community adapter — native tapbacks, typing indicators, read receipts, and capability checks included.
Everything the Chat SDK expects, on iMessage
The adapter implements Chat SDK's standard interface so your bot works the same way it does on Slack, Discord, or the web — just over iMessage.
Quickstart
Install the adapter, wire it into your Chat instance, and point your Blooio webhook at the route.
pnpm add chat-adapter-blooio # npm i chat-adapter-blooio # yarn add chat-adapter-blooio
import { Chat } from "chat";
import { createBlooioAdapter } from "chat-adapter-blooio";
export const chat = new Chat({
userName: "my-bot",
adapters: {
blooio: createBlooioAdapter(),
},
});import { chat } from "@/lib/bot";
export async function POST(request: Request) {
await chat.initialize();
return chat.webhooks.blooio(request);
}await chat.send("blooio", threadId, "Hello from the bot!");Common recipes
import type { BlooioAdapter } from "chat-adapter-blooio";
const adapter = chat.getAdapter("blooio") as BlooioAdapter;
await adapter.addReaction(threadId, messageId, "love");
await adapter.removeReaction(threadId, messageId, "love");const adapter = chat.getAdapter("blooio") as BlooioAdapter;
await adapter.sendMediaMessage(
threadId,
"https://example.com/photo.jpg",
"Check this out"
);const result = await adapter.checkCapabilities("+15551234567");
// { contact: "+15551234567",
// capabilities: { imessage: true, sms: true } }const client = adapter.getClient();
await client.request("GET", "/contacts", undefined, { limit: "50" });
await client.request("POST", "/groups", {
name: "Team",
members: ["+15551234567"],
});Signed, verified webhooks
Blooio signs every webhook with HMAC-SHA256. When you set a webhook secret, the adapter verifies the X-Blooio-Signature header automatically and rejects stale timestamps.
- message.received — incoming iMessage/RCS/SMS
- message.sent / delivered / failed / read
- message.reaction — tapbacks on your messages
X-Blooio-Signature: t=<unix_ts>,v1=<hmac_sha256_hex>
createBlooioAdapter({
webhookSecret: "whsec_...",
timestampToleranceSec: 600, // 10 minutes
allowedProtocols: ["imessage"], // optional filter
});6 lines → $195/line
Simple, transparent pricing
Choose the plan that fits your volume and scale as you grow.
Dedicated
Maximum scale with tiered pricing
Number of lines
Save more as you scale. Best value: 6+ lines → $195/line
- Inquire about FaceTime audio & video calling
- Number pools
- Auto-scaling (inquire to activate)
- Auto-unbanning (inquire to activate)
- Volume pricing discounts
- Dedicated account manager
- Priority incident response
- Migration onboarding support
- Multi-organization number discounts
- Built for AI agents
- Real-time inbound webhooks
- Receive unlimited messages⁴
- Reply to anyone who messages you first
- Full API access
- Dedicated phone number
- Cannot initiate new conversations
Dedicated
Maximum scale with tiered pricing
Number of lines
Save more as you scale. Best value: 6+ lines → $195/line
- Inquire about FaceTime audio & video calling
- Number pools
- Auto-scaling (inquire to activate)
- Auto-unbanning (inquire to activate)
- Volume pricing discounts
- Dedicated account manager
- Priority incident response
- Migration onboarding support
- Multi-organization number discounts
Concierge
Need a hands-on implementation? Let our team build it for you.
Frequently asked questions
What is the Vercel Chat SDK iMessage adapter?+
It is a community adapter (chat-adapter-blooio) that lets a Vercel Chat SDK bot send and receive iMessage, RCS, and SMS through Blooio's hosted gateway. You build your bot once and Blooio handles delivery over Apple's iMessage network.
How do I build an iMessage chatbot with the Chat SDK?+
Install chat-adapter-blooio, register createBlooioAdapter() in your Chat instance, expose a webhook route that calls chat.webhooks.blooio(request), and set your BLOOIO_API_KEY. From there you use the standard Chat SDK postMessage interface to reply over iMessage.
Does the adapter support iMessage tapbacks and typing indicators?+
Yes. The adapter maps common emoji names to Blooio's six tapback types and supports both adding and removing reactions. It also sends typing indicators and read receipts so the conversation behaves like a native iMessage thread.
Can I check whether a contact supports iMessage before sending?+
Yes. Call checkCapabilities(phoneNumber) on the adapter to see whether a contact supports iMessage, SMS, or both, then route your message accordingly.
Are message editing and unsend supported?+
No. iMessage does not support editing or unsending messages via API, so editMessage throws and deleteMessage is a no-op. Everything else in the Chat SDK messaging interface is supported.
Ship your iMessage chatbot today
Grab a Blooio API key, drop in the Chat SDK adapter, and start replying over iMessage, RCS, and SMS from a single codebase.
Related Guides
Build an iMessage Bot
Create automated iMessage bots for customer support, sales, and notifications.
Read guideSend iMessage Programmatically
Step-by-step guide to sending iMessages via API from your application.
Read guideConnect ChatGPT to iMessage
Build an AI-powered iMessage assistant using OpenAI, Blooio webhooks, and n8n.
Read guideiMessage for Business
Send and receive business iMessages at scale with the Blooio API — higher open rates than SMS or email.
Read guide