사이드 메뉴
시작하기
로그인
커뮤니케이션
광고
쉬운 메시지광고: 메시지광고 운영
이 문서는 카카오모먼트 쉬운 메시지광고의 메시지광고 운영 API 사용 방법을 안내합니다.
메시지광고는 메시지 유형에 따라 구성 요소가 상이해 사용 가능한 파라미터가 서로 다릅니다. 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
쉬운 메시지광고는 아래 유형의 메시지를 발송할 수 있습니다. 각 메시지 유형별 세부 사항은 카카오비즈니스 채널 메시지 가이드를 참고합니다.
| 이름 | 메시지 유형 |
|---|---|
| 기본 텍스트 | BASIC_TEXT_MESSAGE |
| 와이드 이미지 | WIDE_MESSAGE |
| 와이드 리스트 | WIDE_LIST_MESSAGE |
| 캐러셀 커머스 | CAROUSEL_COMMERCE_MESSAGE |
| 캐러셀 피드 | CAROUSEL_FEED_MESSAGE |
메시지 유형별 구성 요소의 필드 경로, 규격, 필수 여부 정보에 대해 안내합니다.
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrl |
| X |
홍보 문구message.title |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrl |
| O |
홍보 문구message.title |
| O |
아이템 모바일 랜딩 URLmessage.items.mobileLandingUrl |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrl |
| O* |
타이틀message.title |
| O |
아이템 홍보 문구message.items.title |
| O* |
아이템 모바일 랜딩 URLmessage.items.mobileLandingUrl |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
- 인트로와 캐러셀(1~6)으로 구분
- 인트로 포함 시 캐러셀1 필수, 미포함 시 캐러셀1~2 필수
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.introCarousel.title |
| O |
홍보 이미지message.introCarousel.imageUrl |
| O |
홍보 문구message.introCarousel.description |
| O |
인트로 모바일 랜딩 URLmessage.introCarousel.mobileLandingUrl |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.carousels.title |
| O |
홍보 이미지message.carousels.imageUrl |
| O |
홍보 문구message.carousels.description |
| O |
캐러셀 모바일 랜딩 URLmessage.carousels.mobileLandingUrl |
| O |
가격 정보message.carousels.priceAmount |
| O |
통화 정보message.carousels.priceCurrencyCode |
| O |
할인 가격 정보message.carousels.discountedPriceAmount |
| X |
버튼1message.carousels |
| O |
버튼2message.buttons |
| X |
- 캐러셀1~2 필수, 캐러셀3~6은 선택
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.carousels.title |
| O |
홍보 이미지message.carousels.imageUrl |
| O |
홍보 문구message.carousels.description |
| O |
버튼1message.buttons |
| O |
버튼2message.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/v1/message-ads/message | 비즈니스 토큰 |
카카오톡 채널에서 발송될 메시지광고 내용을 저장합니다.
메시지 유형(type)에 따라 파라미터의 사용 가능 여부와 필수 여부가 다릅니다. 관련된 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 생성된 메시지의 상세 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
이 API는 사용자 계정과 광고계정마다 1초에 1회만 요청 가능하도록 제한되어 있습니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/message" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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 | 인증 방식 |
|---|---|---|
PATCH | https://apis.moment.kakao.com/openapi/message/v1/message-ads/${MESSAGE_AD_ID}/message | 비즈니스 토큰 |
카카오톡 채널에서 발송될 메시지광고 내용을 수정합니다.
메시지 수정 정책은 아래와 같습니다.
- 기존의 메시지와 동일한 포맷이어야 합니다.
- 발송 시간 5분 전 이후부터는 메시지의 이름만 수정 가능합니다. 이름을 제외한 다른 파라미터는 무시됩니다.
- 메시지 집행 가이드와 맞지 않는 이미지와 문구는 사용할 수 없습니다.
메시지 유형(type)에 따라 파라미터의 사용 가능 여부와 필수 여부가 다릅니다. 관련된 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 PATCH로 요청합니다. 요청 성공 시 응답은 수정된 메시지의 상세 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/${MESSAGE_AD_ID}/message" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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/v1/message-ads/${MESSAGE_AD_ID}/send-test | 비즈니스 토큰 |
메시지 테스트 발송을 요청합니다.
발송 시 홍보문구 영역에 [테스트 발송]이 추가되어 발송됩니다. 친구 관계인 전화번호 대상으로만 발송되며 사용자 계정, 광고계정마다 1분에 1회씩 테스트 발송이 가능합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답 본문은 없습니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/${MESSAGE_AD_ID}/send-test" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation | 비즈니스 토큰 |
메시지 발송 시작 시간과 발송 대상을 설정합니다.
발송 시작 시간은 예약 일시 기준 5분 후부터 1분 단위로 설정 가능합니다. 단, 모수 생성이 완료되어야 발송이 시작되므로 시작 일시를 1시간 이내로 설정하는 경우 모수 규모에 따라 시작 일시보다 발송이 지연될 수 있습니다.
발송 시작 일시는 08:00부터 20:59까지 설정 가능하며, 20시 59분 이후 발송되지 않은 메시지는 익일 오전 8시 이후 발송됩니다.
메시지 타겟 설정 여부에 따라 메시지 발송 비용이 상이합니다.
- 논타겟: 디바이스/타게팅 정보를 설정하지 않은 메시지, 15원
- 타겟: 디바이스/타게팅 정보 중 1개라도 설정한 메시지, 20원(단, 지역 타입 Domestic(국내만) 설정한 경우 15원)
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 JSON 객체로 메시지광고 발송 예약 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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 |
| 이름 | 타입 | 설명 |
|---|---|---|
| genderType | String | 성별 전체 선택 유형, 아래 중 하나
|
| genders | String[] | 성별M: 남자F: 여자중요: genderType이 NOT_ALL인 경우만 요청 가능 |
| ageType | String | 연령 전체 선택 유형, 아래 중 하나
|
| ages | String[] | 연령대15: 15~1920: 20~2425: 25~2930: 30~3435: 35~3940: 40~4445: 45~4950: 50~5455: 55~5960: 60~6465: 65~69중요: ageType이 NOT_ALL인 경우만 요청 가능 |
| locationType | String | 지역 선택 유형, 아래 중 하나
|
| depth1Locations | Depth1Location[] | 데모그래픽 > 행정구역 > 시/도 시/도 조회 참고 중요: locationType이 AREA인 경우만 요청 가능중요: depth1Locations, depth2Locations, depth3Locations 모두 또는 개별 요청 가능 |
| depth2Locations | Depth2Location[] | 데모그래픽 > 행정구역 > 시/군/구 시/군/구 조회 참고 중요: locationType이 AREA인 경우만 요청 가능중요: depth1Locations, depth2Locations, depth3Locations 모두 또는 개별 요청 가능 |
| depth3Locations | Depth3Location[] | 데모그래픽 > 행정구역 > 동/읍/면 동/읍/면 조회 참고 중요: locationType이 AREA인 경우만 요청 가능중요: depth1Locations, depth2Locations, depth3Locations 모두 또는 개별 요청 가능 |
| 이름 | 타입 | 설명 |
|---|---|---|
| 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 형식 |
| 이름 | 타입 | 설명 |
|---|---|---|
| genderType | String | 성별 전체 선택 유형, 아래 중 하나
|
| genders | String[] | 성별M: 남자F: 여자 |
| ageType | String | 연령 전체 선택 유형, 아래 중 하나
|
| ages | String[] | 연령대15: 15~1920: 20~2425: 25~2930: 30~3435: 35~3940: 40~4445: 45~4950: 50~5455: 55~5960: 60~6465: 65~69 |
| locationType | String | 지역 선택 유형, 아래 중 하나
|
| depth1Locations | Location[] | 데모그래픽 > 행정구역 > 시/도 시/도 조회 참고 |
| depth2Locations | Depth2Location[] | 데모그래픽 > 행정구역 > 시/군/구 시/군/구 조회 참고 |
| depth3Locations | Depth3Location[] | 데모그래픽 > 행정구역 > 동/읍/면 동/읍/면 조회 참고 |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"deviceTypes": [],"targeting": {"genderType": "ALL","ageType": "ALL","locationType": "ALL"},"date": "2023-10-11 17:00"}'
응답: 타겟
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1164368618878062593","deviceTypes": ["IOS","ANDROID"],"targeting": {"genderType": "NOT_ALL","genders": ["F","M"],"ageType": "NOT_ALL","ages": ["15","20"],"locationType": "AREA","depth1Locations": ["I"],"depth2Locations": ["F1406"],"depth3Locations": []},"price": 20,"contractCount": 10,"totalBudget": 200,"totalBudgetWithVAT": 220.0,"date": "2023-10-20 17:00"}
응답: 논타겟
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/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation | 비즈니스 토큰 |
메시지광고 발송 예약을 상세 조회합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 GET으로 요청합니다. 요청 성공 시 응답은 메시지광고 발송 예약의 상세 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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-1164368618878062593","deviceTypes": ["IOS","ANDROID"],"targeting": {"genderType": "NOT_ALL","genders": ["F","M"],"ageType": "NOT_ALL","ages": ["15","20"],"locationType": "AREA","depth1Locations": ["I"],"depth2Locations": ["F1406"],"depth_3_Locations": []},"price": 20,"contractCount": 10,"totalBudget": 200,"totalBudgetWithVAT": 220.0,"date": "2023-10-20 17:00"}
| 메서드 | URL | 인증 방식 |
|---|---|---|
PATCH | https://apis.moment.kakao.com/openapi/message/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation | 비즈니스 토큰 |
메시지 발송 시작 시간과 발송 대상을 수정합니다.
발송 예약 수정은 발송 시작 시간 5분 전까지 가능합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 PATCH로 요청합니다. 요청 성공 시 응답은 JSON 객체로 메시지광고 발송 예약 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"deviceTypes": [],"targeting": {"genderType": "ALL","ageType": "ALL","locationType": "ALL"},"date": "2023-10-11 17:00"}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1164365415201558529","deviceTypes": ["ANDROID","IOS"],"targeting": {"genderType": "ALL","genders": [],"ageType": "ALL","ages": [],"locationType": "ALL","depth1Locations": [],"depth2Locations": [],"depth3Locations": []},"price": 15,"contractCount": 10,"totalBudget": 150,"totalBudgetWithVAT": 165.0,"date": "2023-10-20 17:00"}
| 메서드 | URL | 인증 방식 |
|---|---|---|
GET | https://apis.moment.kakao.com/openapi/message/v1/message-ads/sending-reservation/location | 비즈니스 토큰 |
메시지광고 발송 예약 시 지역 설정에 활용할 상세 정보를 조회합니다.
전체 목록은 행정구역 타입 정보 CSV 파일(다운로드)을 참고합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 GET으로 요청합니다. 요청 성공 시 응답은 타게팅 지역 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/sending-reservation/location" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json"
요청: 지역 코드 지정
curl -v -G GET "https://apis.moment.kakao.com/openapi/message/v1/message-ads/sending-reservation/location" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation/targeting-price | 비즈니스 토큰 |
발송 가능한 모수 및 단가를 조회합니다.
기존 messageAdId 설정 값을 조회에 반영하거나 기존 발송 예약에 영향을 주지 않으며, 단순히 해당 API 요청 조건을 참고하여 타게팅의 모수와 단가를 조회합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 타게팅 모수 및 단가 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/${MESSAGE_AD_ID}/sending-reservation/targeting-price" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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{"messageAdId": "msg-ad-1164046062704201728","price": 15,"contractCount": 2,"totalBudget": 30,"totalBudgetWithVAT": 33.0}
| 메서드 | URL | 인증 방식 |
|---|---|---|
PUT | https://apis.moment.kakao.com/openapi/message/v1/message-ads/${MESSAGE_AD_ID}/finish | 비즈니스 토큰 |
메시지광고를 종료합니다.
발송 중인 메시지는 발송 중단되고, 발송 예정 메시지는 발송 취소됩니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 PUT으로 요청합니다. 요청 성공 시 응답은 본문 없이 HTTP 200 상태 코드만 반환합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | 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/v1/message-ads/${MESSAGE_AD_ID}/finish" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-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
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v1/message-ads/images | 비즈니스 토큰 |
메시지광고에 사용할 홍보 이미지를 업로드합니다.
최소 1건에서 최대 100건을 한번에 요청할 수 있습니다.
카카오는 메시지 정책에 맞는 이미지 정책과 사이즈 여부를 확인 후 내부의 안정적인 저장소로 저장합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다.
요청 성공 시 메시지광고 발송에 사용할 수 있는 이미지 URL을 받을 수 있습니다. 실패 시 에러 코드에서 원인을 확인합니다.
메시지 내용에 포함할 이미지만 업로드해야 합니다. 이외 목적으로 이미지 업로드 시 광고계정 운영 제재 등 불이익을 받을 수 있습니다. 또한, 가능한 메시지 발송 시점에 맞춰 이미지를 업로드할 것을 권장합니다. 응답 이미지 URL은 영구적으로 사용할 수 없으며, 등록한 이미지는 카카오 시스템 사정에 의해 통보없이 삭제될 수 있습니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| files | Multipart file[] | 업로드할 이미지 파일 파일 형식: JPG, JPEG, PNG 권장 사이즈: 800x400(2:1 비율), 800x800(1:1 비율), 800x600(4:3 비율) 용량: 10MB 이하 | O |
| 이름 | 타입 | 설명 |
|---|---|---|
| - | UploadImagesResult[] | 업로드 성공 이미지 정보 |
| 이름 | 타입 | 설명 |
|---|---|---|
| url | String | 이미지 주소 |
| originalFileName | String | 이미지 파일명 |
| success | Boolean | 업로드 성공 여부 |
요청
curl -X POST "http://apis.moment.kakao.com/openapi/message/v1/message-ads/images" \-H 'accept: application/json' \-H 'kakao-account-id: 235' \-H 'Content-Type: multipart/form-data' \-F 'files=@450x450.jpg' \-F 'files=@1280x720.jpeg'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8[{"orginalFileName":"450x450.jpg","url":"https://t1.kakaocdn.net/b2/creative/50878/1b56de0d3d93cccae9549ac8126b5402.jpg","success":true},{"orginalFileName":"1280x720.jpeg","url":"https://t1.kakaocdn.net/b2/creative/50878/4869085763adee4ecdf2f06f90758427.jpeg","success":true}]
- 메시지 유형(
type)별 필수 파라미터 정보는 메시지 유형별 구성 요소 참고
| 이름 | 타입 | 설명 |
|---|---|---|
| type | String | 메시지 유형, 아래 중 하나 지정 필수
|
| title | String | 메시지 홍보 문구 |
| items | Item[] | 아이템 정보 |
| buttons | Button[] | 버튼 정보 |
| couponBook | CouponBook[] | 쿠폰 정보 |
| introCarousel | IntroCarousel | 인트로 정보 |
| carousels | Carousel[] | 캐러셀 정보 |
| adFlag | Boolean | 광고성 메시지
|
| shareFlag | Boolean | 공유하기 사용 여부
중요: 연령인증 필요 메시지 여부( ageVerification) 값이 true인 경우 사용 불가 |
| 이름 | 타입 | 설명 |
|---|---|---|
| imageUrl | String | 아이템 이미지 URL, 메시지 내 포함할 홍보 이미지 URL |
| title | String | 아이템 홍보 문구 |
| pcLandingUrl | String | 아이템 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 입력 |
| mobileLandingUrl | String | 아이템 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 입력 |
| 이름 | 타입 | 설명 |
|---|---|---|
| title | String | 버튼명 |
| pcLandingUrl | String | 버튼 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 버튼 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| couponBookTitleType | String | 쿠폰 유형, 아래 중 하나
|
| couponBookTitle | String | 쿠폰 타이틀, 쿠폰 유형(couponBookTitleType)값에 따라 아래 값 입력 가능
FREE_GIFT, UPGRADE: 최대 7자 |
| title | String | 쿠폰 상세 설명(최대: 12자) |
| pcLandingUrl | String | 쿠폰 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 쿠폰 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| title | String | 인트로 타이틀(최대 25자) |
| description | String | 인트로 홍보 문구(최대 50자) |
| imageUrl | String | 인트로 홍보 영역 이미지 URL |
| pcLandingUrl | String | 인트로 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 인트로 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| title | String | 캐러셀 타이틀 |
| description | String | 캐러셀 홍보 문구 |
| imageUrl | String | 캐러셀 홍보 영역 이미지 URL |
| pcLandingUrl | String | 캐러셀 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 캐러셀 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| shareFlag | Boolean | 캐러셀 공유하기 사용 여부
중요: ageVerification 값이 true인 경우 사용 불가 |
| buttons | Button[] | 캐러셀 버튼 정보 |
| priceAmount | Integer | 캐러셀 가격 정보 |
| priceCurrencyCode | String | 캐러셀 통화 정보, 아래 중 하나
|
| discountedPriceAmount | Integer | 캐러셀 할인 가격 정보, priceAmount 보다 1% 이상 작은 값 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| messageAdId | String | 메시지광고 번호, 최초 생성 시 부여된 메시지 식별용 번호 |
| name | String | 메시지 이름(최대: 50자), 최초 생성 시 미입력한 경우 자동 생성 규칙이 적용된 값 |
| type | String | 메시지 유형, 아래 중 하나
|
| title | String | 메시지 홍보 문구 |
| items | Item[] | 아이템 정보 |
| buttons | Button[] | 버튼 정보 |
| couponBook | CouponBook[] | 쿠폰 정보 |
| introCarousel | IntroCarousel | 인트로 정보 |
| carousels | Carousel[] | 캐러셀 정보 |
| ageVerification | Boolean | 연령인증 메시지 여부
|
| adFlag | Boolean | 광고성 메시지
|
| shareFlag | Boolean | 공유하기 사용 여부
중요: ageVerification 값이 true인 경우 사용 불가 |