WhatsApp, Telegram, Line, Kakao, Viber, Zalo, and SMS. One API for all.
Auto-retry failed messages on alternative channels. WhatsApp to Telegram to SMS.
Scoped API keys, IP allowlists, rate limiting, and full audit logging.
whatsappWhatsApptelegramTelegramlineLinekakaoKakao Talk (NHN Cloud)viberViberzaloZalosmsSMSSign up and create an API key from the API Keys dashboard.
curl -X POST https://your-domain.com/api/v1/messages/send \
-H "Authorization: Bearer cpk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"to": "+919876543210",
"channel": "whatsapp",
"content": "Hello from MessageHub API!"
}'curl https://your-domain.com/api/v1/messages/msg_abc123 \
-H "Authorization: Bearer cpk_live_your_api_key"
# Response:
# { "data": { "id": "msg_abc123", "status": "delivered", "channel": "whatsapp" } }All API requests require a Bearer token in the Authorization header.
Authorization: Bearer cpk_live_your_api_keyAPI keys start with cpk_live_ for production or cpk_test_ for sandbox.
/api/v1/messages/sendmessages:send/api/v1/messages/batchmessages:send/api/v1/messages/:messageIdmessages:read/api/v1/content/distributecontent:distribute/api/v1/webhooks/deliverypublictostringrequiredRecipient phone number or platform ID (e.g. +919876543210)channelstringrequiredChannel: whatsapp, telegram, line, kakao, viber, zalo, smscontentstringText content of the messagecontentTypestringMessage type: text (default), template, mediatemplateIdstringTemplate name (required if contentType is template)templateParamsobjectTemplate parameters as key-value pairsmediaUrlstringURL of media to attachfallbackobjectSmart fallback configuration (see Fallback Chains tab)const response = await fetch('https://your-domain.com/api/v1/messages/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer cpk_live_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '+919876543210',
channel: 'whatsapp',
content: 'Hello! Your order #1234 has been shipped.',
}),
});
const data = await response.json();
console.log(data);
// { data: { messageId: "msg_abc123", channel: "whatsapp", status: "sent" } }import requests
response = requests.post(
'https://your-domain.com/api/v1/messages/send',
headers={
'Authorization': 'Bearer cpk_live_your_api_key',
'Content-Type': 'application/json',
},
json={
'to': '+919876543210',
'channel': 'whatsapp',
'content': 'Hello! Your order #1234 has been shipped.',
}
)
print(response.json())await fetch('https://your-domain.com/api/v1/messages/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer cpk_live_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '+919876543210',
channel: 'whatsapp',
contentType: 'template',
templateId: 'order_confirmation',
templateParams: {
customer_name: 'Rajesh',
order_id: '1234',
delivery_date: '2026-02-15',
},
}),
});// AlimTalk - Transactional notification (requires Kakao-approved template)
await fetch('https://your-domain.com/api/v1/messages/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer cpk_live_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '+821012345678',
channel: 'kakao',
contentType: 'template',
templateId: 'order_confirm_001',
templateParams: {
'고객명': 'Kim Minjun',
'주문번호': 'ORD-5678',
'상품명': 'Galaxy Watch 7',
'금액': '399,000',
},
}),
});
// Brand Message - Marketing (replaced FriendTalk, Dec 2025)
await fetch('https://your-domain.com/api/v1/messages/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer cpk_live_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '+821012345678',
channel: 'kakao',
content: '특별 할인! 30% 쿠폰을 지금 받아가세요.',
contentType: 'brandmessage',
}),
});Rate limit headers are included in every response:
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 594
X-RateLimit-Reset: 1707400800