Send a Kakao Brand Message — the successor to Friendtalk

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

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 friendTemplateUuid from 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.

이 문서에서 쓰는 패키지

관련 문서