Kakao Friendtalk shut down (2025-12-31) — migrating to Brand Message
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/sendKakao 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.
What is happening now
| 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 |
When to migrate
Migrate now if you need
- Template-based rich types —
FL(list),FC(commerce),FM(composite),FP(premium video),FA(carousel) - Non-friend recipients —
targeting: NorI - A broadcast to all consenting channel friends —
targeting: F, no recipient list
None of these were possible with Friendtalk. Migrating is less about the shutdown than about gaining capability.
You can stay put if
- You send free-form types (
FT/FI/FW) to individual recipients
That 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 you do not want the substitution
If having Friendtalk requests silently become Brand Messages is not acceptable, do not call Friendtalk at all — send SMS instead.
Message type mapping
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.
Migrating
Before — Friendtalk to individual recipients
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' }],
});
After — Brand Message with a template
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.
Campaign lookups split too
# 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.
Checklist
- [ ] Found every Friendtalk call site (
friendtalk,friends/send) - [ ] Classified each:
FT/FI/FWto individuals → leave as is - [ ] Identified the ones needing rich types, non-friend targeting or broadcast → migrate
- [ ] Registered Brand Message templates and captured their
friendTemplateUuid - [ ] Set
adFlag: 'Y'on promotional sends and checked the advertising rules - [ ] Reporting queries both endpoints
- [ ] SDK upgraded to 1.2.1 or later (the release that reflects the shutdown)
Next
자주 묻는 질문
- Does existing Friendtalk code break?
- No. The /api/v2/friends/send endpoint stays and calls keep succeeding. From 2026-01-01 what actually goes out is a free-form Brand Message that Kakao substitutes automatically.
- So can I do nothing?
- Nothing breaks today, but you must move to Brand Message if you need template-based rich types, non-friend targeting, or a broadcast to all consenting channel friends. New work should start on Brand Message.
- Is there a case where I should keep using the Friendtalk endpoint?
- Yes. Free-form body types (FT, FI, FW) sent to individual recipients still go only through /api/v2/friends/send. The brand-message endpoint returns NOT_A_BRAND_MESSAGE for that combination.
- Do I have to change the message type codes to BT, BI and so on?
- No. Send the Friendtalk codes (FT, FI, FW, FL, FC, FM, FP, FA) and the server converts them. The mapping is one to one.