文档菜单
A PRACTICAL GUIDE
Send a Kakao Brand Message — the successor to Friendtalk
Send Brand Messages to channel friends, non-friends, or every consenting friend at once. How targeting splits the request path, and when to keep using the Friendtalk endpoint.
이 문서의 목차
POST /api/v2/brand-messages/send이 가이드는 아직 번역되지 않아 English 문서를 표시합니다.
Brand Message is the KakaoTalk channel for marketing and promotional messages. Unlike Alimtalk, which is informational only, it can carry advertising — and unlike Friendtalk, it can reach people who are not channel friends.
v2 only. This endpoint does not exist on v1.
Prerequisites
- A Kakao sender profile key (
kakaoSenderKey) → Registering a sending number - A
friendTemplateUuidfrom a Brand Message template registered in the console - For promotional sends,
adFlag: "Y"and compliance with the advertising rules
targeting decides the path
targeting |
Audience | Mode | contacts |
|---|---|---|---|
M |
Channel friends | Single (BRAND_BASIC) |
required |
N |
Not channel friends | Single (BRAND_BASIC) |
required |
I |
Specified audience | Single (BRAND_BASIC) |
required |
F |
All consenting channel friends | Broadcast (BRAND_GROUP) |
not used |
F names no recipients, so the response carries acceptance only, not a send count. Check results through the campaign lookup.
Message types
Send the Friendtalk code; the server converts it.
| You send | Becomes | Content |
|---|---|---|
FT |
BT |
Text |
FI |
BI |
Image |
FW |
BW |
Wide image |
FL |
BL |
List |
FC |
BC |
Commerce |
FM |
BM |
Composite |
FP |
BP |
Premium video |
FA |
BA |
Carousel |
The important exception: sending FT/FI/FW with M/N/I returns NOT_A_BRAND_MESSAGE here. Free-form bodies to individual recipients still go through /api/v2/friends/send. See Friendtalk shut down.
Examples by language
Node.js / TypeScript
// Single send — channel friends
await sendgo.brandMessage.send({
targeting: 'M',
messageType: 'FL',
friendTemplateUuid: '9cd5460b-6458-4edc-9b11-c26d3013c340',
adFlag: 'Y',
contacts: [{ contact: '01012345678', var1: '29,000원' }],
});
// Single send — people who are not channel friends
await sendgo.brandMessage.send({
targeting: 'N',
messageType: 'FM',
friendTemplateUuid: '9cd5460b-6458-4edc-9b11-c26d3013c340',
adFlag: 'Y',
contacts: [{ contact: '01012345678' }],
});
// Broadcast — every consenting channel friend, no contacts
await sendgo.brandMessage.broadcast({
messageType: 'FW',
friendTemplateUuid: '9cd5460b-6458-4edc-9b11-c26d3013c340',
adFlag: 'Y',
});
// Campaign results
const list = await sendgo.brandMessage.campaigns({ count: 10 });
const one = await sendgo.brandMessage.campaign(campaignId);
Python
client.brand_message.send(
targeting="M",
message_type="FL",
friend_template_uuid="9cd5460b-6458-4edc-9b11-c26d3013c340",
ad_flag="Y",
contacts=[{"contact": "01012345678", "var1": "29,000원"}],
)
PHP · Laravel
<?php
$sendgo->brandMessage->send([
'targeting' => 'M',
'messageType' => 'FL',
'friendTemplateUuid' => '9cd5460b-6458-4edc-9b11-c26d3013c340',
'adFlag' => 'Y',
'contacts' => [['contact' => '01012345678', 'var1' => '29,000원']],
]);
REST
curl -X POST https://sendgo.io/api/v2/brand-messages/send \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"kakaoSenderKey": "your_kakao_sender_key",
"targeting": "F",
"messageType": "FW",
"friendTemplateUuid": "9cd5460b-6458-4edc-9b11-c26d3013c340",
"adFlag": "Y",
"scheduleType": "DIRECTLY"
}'
SMS fallback
Brand Message supports replaceSms: "Y" too. Supply smsSubject, smsContent and senderKey alongside it.
await sendgo.brandMessage.send({
targeting: 'M',
messageType: 'FL',
friendTemplateUuid: '...',
replaceSms: 'Y',
smsSubject: '[Summer sale]',
smsContent: 'Check out our summer offers.',
contacts: [{ contact: '01012345678' }],
});
Campaign lookup
Broadcasts only confirm acceptance, so results come from a separate call.
# List, defaults to the last 90 days
curl "https://sendgo.io/api/v2/brand-messages?count=30" -H "Authorization: Bearer $TOKEN"
# Detail — use campaignId from the send response
curl "https://sendgo.io/api/v2/brand-messages/$CAMPAIGN_ID" -H "Authorization: Bearer $TOKEN"
This returns Brand Message campaigns (BRAND_GROUP, BRAND_BASIC) only. Friendtalk campaigns live at /api/v2/friends.
Next
자주 묻는 질문
- How is Brand Message different from Friendtalk?
- Brand Message is the successor channel. Unlike Friendtalk it can reach people who are not channel friends, broadcast to every consenting friend without a recipient list, and use template-based rich types such as list, carousel and commerce. Friendtalk shut down on 2025-12-31.
- Is the Friendtalk API gone?
- The endpoint remains. Free-form body types (FT, FI, FW) sent to individual recipients still go only through /api/v2/friends/send, and the brand-message endpoint returns NOT_A_BRAND_MESSAGE for that combination. What actually goes out is a Brand Message that Kakao substitutes.
- Should I change the message type codes to BT or BI?
- No. Send the Friendtalk codes (FT, FI, FW, FL, FC, FM, FP, FA) and the server converts them one to one.
- Does a broadcast need a recipient list?
- No. With targeting set to F the audience is every consenting channel friend, so you omit contacts. The response reports acceptance rather than a delivered count.
이 문서에서 쓰는 패키지
관련 문서
이메일 · SMTP 연동 — 발신 인증, 뉴스레터와 자동화 수신함 →
일반 발송 승인이 완료된 이메일 서비스입니다. 발신 인증과 앱의 발송 가능 상태를 확인하고 SMTP, HTTP API와 자동화 수신함을 연동하세요.
Send a Kakao Alimtalk — PHP, Node.js, Python, Java, Go examples →
Send Kakao Alimtalk with an approved template code. Runnable code for Laravel, Node.js, Python, PHP, Java, Go, Ruby and .NET, plus every required field and why sends fail.
Send SMS, LMS and MMS in South Korea — code examples →
Send Korean SMS (90 bytes), LMS (long text) and MMS (with images) through Sendgo. Type selection, byte counting, verification-code patterns and advertising rules.
SMS fallback when a Kakao Alimtalk fails →
Use replaceSms so a text message goes out when the Alimtalk cannot be delivered. Required fields, cost implications, and the mistake that silently sends nothing.
Bulk Alimtalk sending and per-recipient variables →
Send one template to many recipients with different values each, in batches. Batch sizing, partial failures, queue patterns and the data hygiene that prevents most incidents.
Scheduling an Alimtalk or SMS — scheduleType and at →
Send at a specific time with scheduleType SCHEDULED. Timestamp format, the KST timezone trap, and how scheduling interacts with the advertising night ban.