사이드 메뉴
시작하기
로그인
커뮤니케이션
광고
메시지광고 운영
이 문서는 카카오모먼트 메시지광고의 메시지광고 운영 API 사용 방법을 안내합니다.
메시지광고는 메시지 유형에 따라 구성 요소가 상이해 사용 가능한 파라미터가 서로 다릅니다. 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
메시지광고는 아래 유형의 메시지를 발송할 수 있습니다. 각 메시지 유형별 세부 사항은 카카오비즈니스 채널 메시지 가이드를 참고합니다.
| 이름 | 메시지 유형 |
|---|---|
| 기본 텍스트 | BASIC_TEXT_MESSAGE |
| 와이드 이미지 | WIDE_MESSAGE |
| 와이드 리스트 | WIDE_LIST_MESSAGE |
| 캐러셀 커머스 | CAROUSEL_COMMERCE_MESSAGE |
| 캐러셀 피드 | CAROUSEL_FEED_MESSAGE |
| 프리미엄 동영상 | PREMIUM_VIDEO_MESSAGE |
| 카탈로그 | CATALOG_MESSAGE |
메시지 유형별 구성 요소의 필드 경로, 규격, 필수 여부 정보에 대해 안내합니다.
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrl |
| X |
타이틀message.messageTitle |
| X |
홍보 문구message.description |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrl |
| O |
타이틀message.messageTitle |
| X |
홍보 문구message.description |
| O |
소재 랜딩message.items.landing |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrl |
| O* |
타이틀message.messageTitle |
| O |
아이템 홍보 문구message.items.description |
| O* |
소재 랜딩message.items.landing |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
- 인트로와 캐러셀(1~6)으로 구분
- 인트로 포함 시 캐러셀1 필수, 미포함 시 캐러셀1~2 필수
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.introCarousel.messageTitle |
| O |
홍보 이미지message.introCarousel.imageUrl |
| O |
홍보 문구message.introCarousel.description |
| O |
인트로 랜딩 URLmessage.introCarousel.landing |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.carousels.messageTitle |
| O |
홍보 이미지message.carousels.imageUrl |
| O |
홍보 문구message.carousels.description |
| O |
캐러셀 랜딩 URLmessage.carousels.landing |
| O |
가격 정보message.carousels.priceAmount |
| O |
통화 정보message.carousels.priceCurrencyCode |
| O |
할인 가격 정보message.carousels.discountedPriceAmount |
| X |
버튼1message.carousels |
| O |
버튼2message.buttons |
| X |
더보기message.moreButton |
| X |
- 캐러셀1~2 필수, 캐러셀3~6은 선택
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.carousels.messageTitle |
| O |
홍보 이미지message.carousels.imageUrl |
| O |
홍보 문구message.carousels.description |
| O |
버튼1message.buttons |
| O |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
더보기message.moreButton |
| X |
| 구성 요소 및 필드 경로 | 규격 |
|---|---|
홍보 동영상message.items.video.url | 사용자가 등록한 홍보 동영상 URL |
홍보 동영상 자동 썸네일message.items.video.autoThumbnailUrl | 자동으로 생성된 홍보 동영상 썸네일 업로드 썸네일이 없는 경우 썸네일 설정됨 |
홍보 동영상 업로드 썸네일message.items.video.uploadThumbnailUrl | 사용자가 등록한 홍보 동영상 업로드 썸네일 |
타이틀message.messageTitle | 글자 수: 최대 20자, 링크 입력 불가, 개행 불가 |
홍보 문구message.description | 글자 수: 최대 76자, 링크 입력 불가, 개행 최대 5개 |
버튼message.buttons |
|
쿠폰message.couponBook |
|
- 아이템1~3 필수, 아이템4~7은 선택
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.catalog.messageTitle |
| O |
홍보 문구message.catalog.description |
| X |
아이템 홍보 영역message.catalog.imageUrl |
| O* |
아이템 타이틀message.items.title |
| O* |
아이템 홍보 문구message.item.description |
| O* |
아이템 가격명message.pricelabel.title |
| O |
소재 랜딩message.items.landing |
| O |
버튼1message.buttons |
| X |
쿠폰message.couponBook |
| X |
- 이미지
- 포멧:
JPG,JPEG,PNG - 크기: 가로
80px초과(권장:800x400,800x800,800x600) - 용량:
10MB이하 - 비율: 가로:세로 비율
1:2.5미만(권장:2:1,1:1,4:3)
- 포멧:
URL에 UTF-8 코드로 인코딩(Encoding)되지 않은 특수문자나 한글이 포함될 경우, iOS 기기의 카카오톡 인앱브라우저에서 광고가 정상 랜딩되지 않을 수 있습니다. 아래는 랜딩 오류가 발생할 수 있는 특수문자의 예시입니다.
%|“
또한 파라미터 및 매크로 치환이 필요한 딥링크(Deeplink) 형식의 URL은 공식 지원하지 않습니다.
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v2/message-ads/message | 비즈니스 토큰 |
카카오톡 채널에서 발송될 메시지광고 내용을 저장합니다.
메시지 유형(type)에 따라 파라미터의 사용 가능 여부와 필수 여부가 다릅니다. 관련된 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
비즈니스 토큰과 광고계정 ID, 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 생성된 메시지의 상세 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
이 API는 사용자 계정과 광고계정마다 1초에 1회만 요청 가능하도록 제한되어 있습니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| name | String | 메시지 이름 최대 50자 | X |
| ageVerification | Boolean | 연령인증 필요 메시지 여부
| X |
| message | Message | 생성할 메시지 정보 | O |
- ResponseMessage 객체로 응답
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v2/message-ads/message" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"name": "메시지광고_테스트_베이직_텍스트","ageVerification": false,"message": {"type": "BASIC_TEXT_MESSAGE","description": "홍보문구","shareFlag": true,"adFlag": true,"items": [{"imageUrl": "https://partner.com/img/message/001.jpg"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"couponBook": {"couponBookTitleType": "UPGRADE","couponBookTitle": "쿠폰 타이틀","title": "쿠폰 상세 설명","pcLandingUrl": "https://daum.net","mobileLandingUrl": "https://daum.net"}}}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1402922220759433217","name": "메시지광고_테스트_베이직_텍스트","type": "BASIC_TEXT_MESSAGE","description": "홍보문구","items": [{"imageUrl": "https://partner.com/img/message/001.jpg"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"couponBook": {"title": "쿠폰 상세 설명","pcLandingUrl": "https://daum.net","mobileLandingUrl": "https://daum.net","couponBookTitle": "쿠폰 타이틀","couponBookTitleType": "UPGRADE"},"ageVerification": false,"adFlag": true,"shareFlag": true}
| 메서드 | URL | 인증 방식 |
|---|---|---|
PATCH | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/message | 비즈니스 토큰 |
카카오톡 채널에서 발송될 메시지광고 내용을 수정합니다.
메시지 수정 정책은 아래와 같습니다.
- 기존의 메시지와 동일한 포맷이어야 합니다.
- 발송 시간 5분 전 이후부터는 메시지의 이름만 수정 가능합니다. 이름을 제외한 다른 파라미터는 무시됩니다.
- 메시지 집행 가이드와 맞지 않는 이미지와 문구는 사용할 수 없습니다.
메시지 유형(type)에 따라 파라미터의 사용 가능 여부와 필수 여부가 다릅니다. 관련된 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
비즈니스 토큰과 광고계정 ID, 카카오톡 채널 프로필 ID를 헤더에 담아 PATCH로 요청합니다. 요청 성공 시 응답은 수정된 메시지의 상세 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| name | String | 메시지 이름 최대 50자 | X |
| ageVerification | Boolean | 연령인증 필요 메시지 여부
false로 자동 설정 | X |
| message | Message | 생성할 메시지 정보 | O |
- ResponseMessage 객체로 응답
요청
curl -X PATCH "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/message" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"name": "메시지광고_테스트_베이직_텍스트","ageVerification": false,"message": {"type": "BASIC_TEXT_MESSAGE","title": "홍보문구 변경","shareFlag": true,"adFlag": false,"items": [{"imageUrl": "https://partner.com/img/message/001.jpg"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"couponBook": {"couponBookTitleType": "UPGRADE","couponBookTitle": "쿠폰 타이틀","title": "쿠폰 상세 설명","pcLandingUrl": "https://daum.net","mobileLandingUrl": "https://daum.net"}}}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1195179794616258561","name": "메시지광고_테스트_베이직_텍스트","type": "BASIC_TEXT_MESSAGE","title": "홍보문구 변경","items": [{"imageUrl": "https://t1.kakaocdn.net/b2/creative/56493/3912ceec1584f2ec1ccf8fad73145254.jpg"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"couponBook": {"title": "쿠폰 상세 설명","pcLandingUrl": "https://daum.net","mobileLandingUrl": "https://daum.net","couponBookTitle": "쿠폰 타이틀","couponBookTitleType": "UPGRADE"},"ageVerification": false,"adFlag": false,"shareFlag": true}
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/send-test | 비즈니스 토큰 |
메시지 테스트 발송을 요청합니다.
발송 시 홍보문구 영역에 [테스트 발송]이 추가되어 발송됩니다. 친구 관계인 전화번호 대상으로만 발송되며 사용자 계정, 광고계정마다 30초에 1회씩 테스트 발송이 가능합니다.
비즈니스 토큰과 광고계정 ID, 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답 본문은 없습니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| phoneNumbers | String | 발송 대상 전화번호, 010-1234-5678 형식 | O |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/send-test" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"phoneNumbers": ["014-0042-4549"]}'
응답
HTTP/1.1 200 OKContent-Length: 0Content-Type: application/json;charset=UTF-8
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation | 비즈니스 토큰 |
메시지 발송 시작 시간과 발송 대상을 설정합니다.
발송 시작 시간은 예약 일시 기준 5분 후부터 1분 단위로 설정 가능합니다. 단, 모수 생성이 완료되어야 발송이 시작되므로 시작 일시를 1시간 이내로 설정하는 경우 모수 규모에 따라 시작 일시보다 발송이 지연될 수 있습니다.
발송 시작 일시는 08:00부터 20:50까지 설정 가능하며, 20시 55분 이후 발송되지 않은 메시지는 익일 오전 8시 이후 발송됩니다.
메시지 타겟 설정 여부에 따라 메시지 발송 비용이 상이합니다.
- 논타겟: 디바이스/타게팅 정보를 설정하지 않은 메시지, 15원
- 타겟: 디바이스/타게팅 정보 중 1개라도 설정한 메시지, 20원(단, 지역 타입 Domestic(국내만) 설정한 경우 15원)
비즈니스 토큰과 광고계정ID, 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 JSON 객체로 메시지광고 발송 예약 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| targeting | Targeting | 타게팅 성별, 연령, 지역 타게팅 설정 가능 | O |
| date | String | 발송 시작 일시, yyyy-MM-dd'T'HH:mm 형식 | O |
| immediateSend | Boolean | 즉시 발송 여부
| X |
| pushAlarm | Boolean | 푸시 알림 발송 여부
| X |
| trackId | String | 전환 추적 설정, 메시지 전환 지표 제공을 위한 픽셀&SDK 설정 | X |
| sendRate | Integer | 분산발송 여부 분산발송을 하지 않으려면 0 설정 분산발송 하려면 분산 주기 건수 입력, 아래 중 하나: 100, 500, 1000, 1500, 2000 | X |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| type | String | 타게팅 타입 종류
| O |
| devices | String[] | 디바이스 선택 유형, 아래 중 하나
| X |
| demographics | Demographics[] | 성별, 연령, 지역 정보 | X |
| customs | CustomTargeting[] | 맞춤타겟 지정 | X |
| friendPeriod | FriendPeriod[] | 친구기간 설정 설정한 기간 동안 채널 친구가 된 사용자에게만 발송 | X |
| ufoInterests | Set<UfoInterest> | 맞춤타겟 > 카카오 데이터 > 카테고리 > 관심사 맞춤타겟 카테고리 타입 조회 참고 | X* |
| ufoBusinessTypes | Set<UfoBusinessType> | 맞춤타겟 > 카카오 데이터 > 카테고리 > 업종 맞춤타겟 카테고리 타입 조회 참고 | X* |
| 이름 | 타입 | 설명 |
|---|---|---|
| messageAdId | String | 메시지광고 번호, 최초 생성 시 부여된 메시지 식별용 번호 |
| deviceTypes | String[] | 디바이스 유형
|
| targeting | Targeting | 타게팅 정보 |
| price | Long | 발송 단가(단위: 원), 아래 중 하나
|
| contractCount | Integer | 구매발송수, 메시지광고 발송 예약 건 수 |
| totalBudget | Long | 구매 금액, 메시지광고 발송 예약 총 금액 |
| totalBudgetWithVAT | Long | VAT 포함 구매 금액, totalBudget에 VAT를 포함한 금액 |
| date | String | 발송 시작 일시, yyyy-MM-dd'T'HH:mm 형식 |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"targeting": {"type": "DIRECT","friendPeriod": {"startDate": "2023-01-02","endDate": "2025-06-27"},"customs": [{"type": "SYNCAPP","referenceId": 192594,"inclusionType": "EXCLUDE"},{"type": "PLUSFRIEND","referenceId": 54746,"inclusionType": "EXCLUDE"},{"type": "COHORT","referenceId": 101407,"inclusionType": "INCLUDE"},{"type": "PLUSFRIENDGROUP","referenceId": 3302,"inclusionType": "INCLUDE"}]},"immediateSend": true,"pushAlarm": true,"trackId": "1498114409013397398"}'
응답: 타겟
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1389380653606703104","targeting": {"type": "DIRECT","devices": [],"businessTypes": [],"interests": [],"demographics": {"genders": [],"ages": [],"locationType": "ALL","depth1Locations": [],"depth2Locations": [],"depth3Locations": []},"friendPeriod": {"startDate": "2023-01-02","endDate": "2025-06-27"},"customs": [{"type": "PLUSFRIENDGROUP","referenceId": "3302","inclusionType": "INCLUDE","name": "123"},{"type": "SYNCAPP","referenceId": "192594","inclusionType": "EXCLUDE","name": "테스트 채널 1"},{"type": "COHORT","referenceId": "101407","inclusionType": "INCLUDE","name": "반응고객"},{"type": "PLUSFRIEND","referenceId": "54746","inclusionType": "EXCLUDE","name": "테스트 채널2"}]},"price": 20,"contractCount": 10,"totalBudget": 200,"totalBudgetWithVAT": 220.0,"date": "2025-07-01 08:07","trackId": "1498114409013397398","sendRate": 0,"pushAlarm": true,"immediateSend": true}
응답: 논타겟
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": 30,"deviceTypes": ["IOS","ANDROID"],"targeting": {"genderType": null,"genders": null,"ageType": null,"ages": null,"locationType": null,"depth1Locations": null,"depth2Locations": null,"depth3Locations": null},"price": 15,"contractCount": 10,"totalBudget": 150,"totalBudgetWithVAT": 165.0,"date": "2023-10-11 17:00"}
| 메서드 | URL | 인증 방식 |
|---|---|---|
GET | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation | 비즈니스 토큰 |
메시지광고 발송 예약을 상세 조회합니다.
비즈니스 토큰과 광고계정ID, 카카오톡 채널 프로필 ID를 헤더에 담아 GET으로 요청합니다. 요청 성공 시 응답은 메시지광고 발송 예약의 상세 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 |
|---|---|---|
| messageAdId | String | 메시지광고 번호 최초 생성 시 부여된 메시지 식별용 번호 |
| deviceTypes | String[] | 디바이스 유형, 아래 중 하나 지정 가능(빈 배열 지정 시 모두 선택)
|
| targeting | Targeting | 타게팅 성별, 연령, 지역 타게팅 설정 가능 |
| price | Long | 발송 단가(단위: 원), 아래 중 하나
|
| contractCount | Integer | 구매발송수, 메시지광고 발송 예약 건 수 |
| totalBudget | Long | 구매 금액, 메시지광고 발송 예약 총 금액 |
| totalBudgetWithVAT | Long | VAT 포함 구매 금액, totalBudget에 VAT를 포함한 금액 |
| date | String | 발송 시작 일시, yyyy-MM-dd'T'HH:mm 형식 |
요청
curl -X GET "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json"
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1389380653606703104","targeting": {"type": "DIRECT","devices": [],"businessTypes": [],"interests": [],"demographics": {"genders": [],"ages": [],"locationType": "ALL","depth1Locations": [],"depth2Locations": [],"depth3Locations": []},"friendPeriod": {"startDate": "2023-01-02","endDate": "2025-06-27"},"customs": [{"type": "PLUSFRIENDGROUP","referenceId": "3302","inclusionType": "INCLUDE","name": "123"},{"type": "SYNCAPP","referenceId": "192594","inclusionType": "EXCLUDE","name": "테스트 채널 1"},{"type": "COHORT","referenceId": "101407","inclusionType": "INCLUDE","name": "반응고객"},{"type": "PLUSFRIEND","referenceId": "54746","inclusionType": "EXCLUDE","name": "테스트 채널2"}]},"price": 20,"contractCount": 10,"totalBudget": 200,"totalBudgetWithVAT": 220.0,"date": "2025-07-01 08:07","trackId": "1498114409013397398","sendRate": 0,"pushAlarm": true,"immediateSend": true}
| 메서드 | URL | 인증 방식 |
|---|---|---|
PATCH | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation | 비즈니스 토큰 |
메시지 발송 시작 시간과 발송 대상을 수정합니다.
발송 예약 수정은 발송 시작 시간 5분 전까지 가능합니다.
비즈니스 토큰과 광고계정ID, 카카오톡 채널 프로필 ID를 헤더에 담아 PATCH로 요청합니다. 요청 성공 시 응답은 JSON 객체로 메시지광고 발송 예약 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| deviceTypes | String[] | 디바이스 유형, 아래 중 하나 지정 가능(빈 배열 지정 시 모두 선택)
| O |
| targeting | Targeting | 타게팅 성별, 연령, 지역 타게팅 설정 가능 | O |
| date | String | 발송 시작 일시, yyyy-MM-dd'T'HH:mm 형식 | O |
| 이름 | 타입 | 설명 |
|---|---|---|
| messageAdId | String | 메시지광고 번호 최초 생성 시 부여된 메시지 식별용 번호 |
| deviceTypes | String[] | 디바이스 유형, 아래 중 하나 지정 가능(빈 배열 지정 시 모두 선택)
|
| targeting | Targeting | 타게팅 성별, 연령, 지역 타게팅 설정 가능 |
| price | Long | 발송 단가(단위: 원), 아래 중 하나
|
| contractCount | Integer | 구매발송수, 메시지광고 발송 예약 건 수 |
| totalBudget | Long | 구매 금액, 메시지광고 발송 예약 총 금액 |
| totalBudgetWithVAT | Long | VAT 포함 구매 금액, totalBudget에 VAT를 포함한 금액 |
| date | String | 발송 시작 일시, yyyy-MM-dd'T'HH:mm 형식 |
요청
curl -X PATCH "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"targeting": {"type": "DIRECT","friendPeriod": {"startDate": "2023-01-02","endDate": "2025-06-27"},"customs": [{"type": "SYNCAPP","referenceId": 192594,"inclusionType": "EXCLUDE"},{"type": "PLUSFRIEND","referenceId": 54746,"inclusionType": "EXCLUDE"},{"type": "COHORT","referenceId": 101407,"inclusionType": "INCLUDE"},{"type": "PLUSFRIENDGROUP","referenceId": 3302,"inclusionType": "INCLUDE"}]},"immediateSend": true,"pushAlarm": true,"trackId": "1498114409013397398"}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1389380653606703104","targeting": {"type": "DIRECT","devices": [],"businessTypes": [],"interests": [],"demographics": {"genders": [],"ages": [],"locationType": "ALL","depth1Locations": [],"depth2Locations": [],"depth3Locations": []},"friendPeriod": {"startDate": "2023-01-02","endDate": "2025-06-27"},"customs": [{"type": "PLUSFRIENDGROUP","referenceId": "3302","inclusionType": "INCLUDE","name": "123"},{"type": "SYNCAPP","referenceId": "192594","inclusionType": "EXCLUDE","name": "테스트 채널 1"},{"type": "COHORT","referenceId": "101407","inclusionType": "INCLUDE","name": "반응고객"},{"type": "PLUSFRIEND","referenceId": "54746","inclusionType": "EXCLUDE","name": "테스트 채널2"}]},"price": 20,"contractCount": 10,"totalBudget": 200,"totalBudgetWithVAT": 220.0,"date": "2025-07-01 08:07","trackId": "1498114409013397398","sendRate": 0,"pushAlarm": true,"immediateSend": true}
| 메서드 | URL | 인증 방식 |
|---|---|---|
GET | https://apis.moment.kakao.com/openapi/message/v2/message-ads/sending-reservation/location | 비즈니스 토큰 |
메시지광고 발송 예약 시 지역 설정에 활용할 상세 정보를 조회합니다.
전체 목록은 행정구역 타입 정보 CSV 파일(다운로드)을 참고합니다.
비즈니스 토큰과 광고계정ID, 카카오톡 채널 프로필 ID를 헤더에 담아 GET으로 요청합니다. 요청 성공 시 응답은 타게팅 지역 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| codes | String | 지역 코드 쉼표(,)로 구분된 문자열로 여러 개의 지역 코드 지정 가능 (예: A7000A001,Q20000025) | X |
| 이름 | 타입 | 설명 |
|---|---|---|
| id | String | 시/도별 값 |
| name | String | 시/도별 값의 depth1Name |
| children | Childeren[] | 하위 지역 데이터 쿼리 파라미터 codes 사용 시 미제공 |
| deprecated | Boolean | 지역 정보의 삭제 여부, true인 경우 삭제된 지역이며 쿼리 파라미터에 codes를 포함한 경우에만 응답에 포함 |
| 이름 | 타입 | 설명 |
|---|---|---|
| id | String | 지역 값 |
| name | String | 지역 이름 |
| children | Childeren[] | 하위 지역 데이터 |
| deprecated | Boolean | 지역 정보의 삭제 여부, true인 경우 삭제된 지역이며 쿼리 파라미터에 codes를 포함한 경우에만 응답에 포함 |
요청
curl -X GET "https://apis.moment.kakao.com/openapi/message/v2/message-ads/sending-reservation/location" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json"
요청: 지역 코드 지정
curl -v -G GET "https://apis.moment.kakao.com/openapi/message/v2/message-ads/sending-reservation/location" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d "codes=A7000A001,Q20000025"
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"id": "A","name": "강원특별자치도","children": [{"id": "A7000","name": "강릉시","children": [{"id": "A7000A001","name": "강남동"}]}...],...}
응답: 지역 코드 지정
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8[{"id": "A7000A001","name": "강원특별자치도 강릉시 강남동","deprecated": true},{"id": "Q20000025","name": "세종특별자치시 세종시 해밀동","deprecated": false}]
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation/targeting-price | 비즈니스 토큰 |
발송 가능한 모수 및 단가를 조회합니다.
기존 messageAdId 설정 값을 조회에 반영하거나 기존 발송 예약에 영향을 주지 않으며, 단순히 해당 API 요청 조건을 참고하여 타게팅의 모수와 단가를 조회합니다.
비즈니스 토큰과 광고계정ID, 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 타게팅 모수 및 단가 정보를 포함합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| deviceTypes | String[] | 디바이스 유형, 아래 중 하나 지정 가능(빈 배열 지정 시 모두 선택)
| X |
| targeting | Targeting | 타게팅 | 0 |
| 이름 | 타입 | 설명 |
|---|---|---|
| messageAdId | String | 메시지광고 번호, 최초 생성 시 부여된 메시지 식별용 번호 |
| price | Long | 발송 단가(단위: 원), 아래 중 하나
|
| contractCount | Integer | 구매발송수, 메시지광고 발송 예약 건 수 |
| totalBudget | Long | 구매 금액, 메시지광고 발송 예약 총 금액 |
| totalBudgetWithVAT | Long | VAT 포함 구매 금액, totalBudget에 VAT를 포함한 금액 |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/sending-reservation/targeting-price" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"deviceTypes": [],"targeting": {"genderType": "ALL","ageType": "ALL","locationType": "ALL"}}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8"price": 15,{"messageAdId": "msg-ad-1164046062704201728","contractCount": 2,"totalBudget": 30,"totalBudgetWithVAT": 33.0}
| 메서드 | URL | 인증 방식 |
|---|---|---|
PUT | https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/finish | 비즈니스 토큰 |
메시지광고를 종료합니다.
발송 중인 메시지는 발송 중단되고, 발송 예정 메시지는 발송 취소됩니다.
비즈니스 토큰과 광고계정 ID, 카카오톡 채널 프로필 ID를 헤더에 담아 PUT으로 요청합니다. 요청 성공 시 응답은 본문 없이 HTTP 200 상태 코드만 반환합니다. 실패 시 에러 코드에서 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| adAccountId | adAccountId: ${AD_ACCOUNT_ID}광고계정 ID | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
요청
curl -X PUT "https://apis.moment.kakao.com/openapi/message/v2/message-ads/${MESSAGE_AD_ID}/finish" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "adAccountId: ${AD_ACCOUNT_ID}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json"
응답
HTTP/1.1 200 OKContent-Length: 0Content-Type: application/json;charset=UTF-8