기업회원 신청 서류 안내
신청자 구분에 따라 재직증명서 또는 위임장을 함께 제출해 주세요.
신청자 구분에 따라 재직증명서 또는 위임장을 함께 제출해 주세요.
A PRACTICAL GUIDE
What happens to existing Friendtalk code now that the channel has ended, when you must migrate to Brand Message, and the one case where the Friendtalk endpoint is still the right call.
POST /api/v2/brand-messages/send이 가이드는 아직 번역되지 않아 English 문서를 표시합니다.
Kakao Friendtalk ended on 2025-12-31. Brand Message is the successor channel.
First thing to know: existing code does not break. The endpoint remains and calls still succeed. But what goes out is a Brand Message that Kakao substituted, so it is worth understanding what changed.
| Before 2025-12-31 | From 2026-01-01 | |
|---|---|---|
Calling /api/v2/friends/send |
Sends a Friendtalk | Succeeds, delivered as a free-form Brand Message |
| Endpoint removal | — | Not removed |
| New development | Friendtalk | Brand Message |
FL (list), FC (commerce), FM (composite), FP (premium video), FA (carousel)targeting: N or Itargeting: F, no recipient listNone of these were possible with Friendtalk. Migrating is less about the shutdown than about gaining capability.
FT/FI/FW) to individual recipientsThat combination should in fact keep using the Friendtalk endpoint. The brand-message endpoint answers NOT_A_BRAND_MESSAGE for it.
// Leave this alone — moving it to brandMessage returns NOT_A_BRAND_MESSAGE.
await sendgo.friendtalk.send({
messageType: 'FT',
content: 'Hello! Here is this week\'s update.',
contacts: [{ contact: '01012345678' }],
});
If having Friendtalk requests silently become Brand Messages is not acceptable, do not call Friendtalk at all — send SMS instead.
Send the Friendtalk code. The server converts.
| Friendtalk | Brand Message | 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 |
Do not rewrite FT to BT in your code. Keep sending FT.
await sendgo.friendtalk.send({
messageType: 'FI',
content: 'Check out this week\'s deals!',
imageUrl: 'https://cdn.example.com/banner.jpg',
adFlag: 'Y',
contacts: [{ contact: '01012345678' }],
});
Brand Message references a template registered in the console, so you need a friendTemplateUuid.
// Single send to channel friends
await sendgo.brandMessage.send({
targeting: 'M',
messageType: 'FL',
friendTemplateUuid: '9cd5460b-6458-4edc-9b11-c26d3013c340',
adFlag: 'Y',
contacts: [{ contact: '01012345678', var1: '29,000원' }],
});
// Broadcast to every consenting friend — no recipient list
await sendgo.brandMessage.broadcast({
messageType: 'FW',
friendTemplateUuid: '9cd5460b-6458-4edc-9b11-c26d3013c340',
adFlag: 'Y',
});
The big shift: the body no longer travels in the request. Friendtalk carried content per call; Brand Message rich types reference a registered template and you fill its variables.
# Brand Message campaigns (BRAND_GROUP, BRAND_BASIC)
GET /api/v2/brand-messages
# Friendtalk campaigns
GET /api/v2/friends
The brand-message list does not return Friendtalk campaigns. Reporting code that spans both channels has to query both.
friendtalk, friends/send)FT/FI/FW to individuals → leave as isfriendTemplateUuidadFlag: 'Y' on promotional sends and checked the advertising rules