HTTP API Notifly HTTP API의 전체 요청량 제한은 초당 5,000회 입니다.
안정적인 서비스 이용을 위해 클라이언트별 초당 요청량을 50-100건 이내로 유지 해 주시기 바랍니다.
요청량 초과 시 4xx 응답 코드가 반환될 수 있습니다. 이를 방지하기 위해 지수 백오프 방식의 재시도 로직 구현이나 요청량 조절을 권장드립니다.
2024-04-05 부터, projectID
는 projectId
로, userID
는 userId
로 변경되었습니다.
(호환성을 위해 이전 필드명도 계속 사용 가능합니다.)
1. Authentication 이 endpoint 를 통해 인증 토큰을 받아올 수 있습니다. 인증 토큰은 notifly 서버 API 활용에 필수적입니다. 발급받은 인증 토큰의 유효기간은 1시간입니다. 과도한 API 호출을 방지하기 위해 1시간
이내의 재호출은 기존에 발급 받으신 토큰을 재활용 하시는 것을 권장해드립니다.
Endpoint POST https://api.notifly.tech/authenticate
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type
Request Body Parameter Type Required Description accessKey String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. 프러덕트 별로 하나의 Access Key가 생성됩니다. 문의 사항은 contact@notifly.tech 으로 이메일 부탁드립니다. secretKey String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. 프러덕트 별로 하나의 Secret Key가 생성됩니다. 문의 사항은 contact@notifly.tech 으로 이메일 부탁드립니다.
Parameter Value Status code 200 OK Content-Type application/json
Response Body { "data" : "{auth-key}" , "error" : null }
Sample Request POST https://api.notifly.tech/authenticate { "accessKey" : "{access_key}" , "secretKey" : "{secret-key}" }
2. Track Event 이 endpoint 를 통해 notifly 엔진에 이벤트 데이터를 보낼 수 있습니다. Notifly 엔진은 수신한 이벤트 데이터를 모으고 분석해 캠페인 진행 시 메시지 발송 타이밍, 사용자 세그먼트 설정 등에 활용할
수 있게 준비합니다.
Endpoint POST https://api.notifly.tech/track-event
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body Parameter Type Required Description projectId String Yes Notifly 팀에서 제공드리는 project ID 입니다. 문의 사항은 contact@notifly.tech 으로 이메일 부탁드립니다. userId String Yes 서비스 유저 ID eventName String Yes 이벤트명 eventParams Object No 이벤트 파라미터 값들 segmentationEventParamKeys List No 정교한 캠페인 집행을 위해 특정 파라미터들을 notifly 엔진에서 특수하게 처리합니다. 문의 사항은 contact@notifly.tech 으로 이메일 부탁드립니다.
한번에 여러 이벤트를 로깅 할 수도 있습니다. 같은 형식의 Object들을 Array 형태로 호출 해주시면 됩니다. 1회 호출당 최대 500개의 이벤트 까지만 로깅 가능합니다. Parameter Value Status code 200 OK Content-Type application/json
Response Body { "data" : "some-success-response-from-notifly-engine" , "error" : null }
Sample Request POST https://api.notifly.tech/track-event [ { "projectId" : "project-id" , "userId" : "user-id" , "eventName" : "event-name" , "eventParams" : { } , "segmentationEventParamKeys" : [ ] } ]
3. Set User Properties 이 endpoint 를 통해 notifly 엔진에 사용자 속성들을 등록할 수 있습니다. 등록된 속성값들은 캠페인 진행 시 사용자 세그먼트 설정에 활용하여 보다 효율적인 마케팅이 가능합니다.
Endpoint POST https://api.notifly.tech/set-user-properties
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body Parameter Type Required Description projectId String Yes Notifly 팀에서 제공드리는 project ID 입니다. 문의 사항은 contact@notifly.tech 으로 이메일 부탁드립니다. userId String Yes 유저 ID userProperties Object Yes 업데이트 할 사용자 속성값들
한번에 여러 사용자의 정보를 업데이트 할 수도 있습니다. 같은 형식의 Object들을 Array 형태로 호출 해주시면 됩니다. 1회 호출당 최대 1,000명의 사용자 까지만 업데이트 가능합니다. 이메일과 전화번호 정보는 userProperties
에 반드시 $email
, $phone_number
를 키값으로 정의해주어야 정상 등록됩니다. 아래 Example를 참고해주세요.
Parameter Value Status code 200 OK Content-Type application/json
Response Body { "data" : "업데이트 된 row count" , "error" : null }
Sample Request POST https://api.notifly.tech/set-user-properties [ { "projectId" : "project-id" , "userProperties" : { "$email" : "user1@example.com" , "$phone_number" : "010-5555-5555" } , "userId" : "user-id-1" } , { "projectId" : "{project-id}" , "userProperties" : { "$email" : "user2@example.com" , "$phone_number" : "010-7777-7777" } , "userId" : "user-id-2" } ]
4. Delete Users 이 endpoint 를 통해 notifly에 등록된 사용자들을 삭제할 수 있습니다.
Endpoint DELETE https://api.notifly.tech/users
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body Parameter Type Required Description projectId String Yes Notifly 팀에서 제공드리는 project ID 입니다. 문의 사항은 contact@notifly.tech 으로 이메일 부탁드립니다. userId String No 삭제할 유저 ID userProperties Object No 삭제할 유저의 사용자 속성 - $email String No 삭제할 유저의 이메일 주소 - $phone_number String No 삭제할 유저의 전화번호
한번에 여러 사용자의 정보를 삭제 할 수도 있습니다. 같은 형식의 Object들을 Array 형태로 호출 해주시면 됩니다. 1회 호출당 최대 1,000명의 사용자 까지만 삭제 가능합니다. 유저 ID, 이메일, 전화번호를 기준으로 삭제할 수 있습니다. 전화번호는 정확히 일치해야 합니다. (010-1234-1234 != 01012341234) Parameter Value Status code 200 OK Content-Type application/json
Response Body { "data" : "삭제된 row count" , "error" : null }
Sample Request DELETE https://api.notifly.tech/users { "projectId" : "{project-id}" , "userId" : "{user-id}" }
5. Campaign Triggering 이 endpoint 를 통해 캠페인을 트리거링할 수 있습니다. 등록된 유저 및 디바이스의 속성 뿐만 아니라 API Request Body의 파라미터까지 모두 사용하여 메시지를 개인화할 수 있습니다.
주의 사항 HTTP API를 이용한 캠페인 발송의 경우, 캠페인의 발송 시간 유형이 API 기반 발송 으로 설정되어있는 경우에만 사용 가능합니다. Endpoint POST https://api.notifly.tech/projects/{projectId}/campaigns/{campaignId}/send
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. campaignId String Yes 캠페인 리스트의 캠페인 목록을 클릭하여 상세보기 팝업 상단에서 확인하실 수 있습니다.
Request Body Parameter Type Required Description recipients List Yes 수신자 목록(최대 1000명) - type String No 수신자의 유형입니다. (기본값: user-id
). 현재 user-id
, phone-number
, email
만 지원합니다. - userId String No 메시지를 발송할 유저의 ID 입니다. type
이 user-id
인 경우 필수입니다. - phoneNumber String No 메시지를 발송할 유저의 전화번호 입니다. type
이 phone-number
인 경우 필수입니다. - email String No 메시지를 발송할 유저의 이메일 주소 입니다. type
이 email
인 경우 필수입니다. - eventParams Object No 이벤트 파라미터를 포함하는 객체 입니다. 해당 파라미터로 메시지를 개인화시킬 수 있습니다.
현재 API 기반 발송은 다음 채널에 대해 지원됩니다.
푸시 알림 웹 푸시 알림 카카오 알림톡 카카오 친구톡 문자 메시지 이메일 설정된 캠페인의 발송 채널마다 지원되는 수신자 유형이 다를 수 있습니다. 만약 캠페인의 발송 채널이 지원하지 않는 수신자 유형을 사용하면, API 응답으로 400 Bad Request가 반환됩니다.
푸시 알림: user-id
유형의 수신자만 지원됩니다. 웹 푸시 알림: user-id
유형의 수신자만 지원됩니다. 카카오 알림톡: user-id
및 phone-number
유형의 수신자를 지원합니다. 카카오 친구톡: user-id
및 phone-number
유형의 수신자를 지원합니다. 문자 메시지: user-id
및 phone-number
유형의 수신자를 지원합니다. 이메일: user-id
, email
유형의 수신자만 지원됩니다. 수신자 유형이 user-id
가 아닌 경우, Notifly 서버는 유저 데이터베이스에서 해당 유저에 대한 정보를 받아오지 않고, 요청 payload에 명시되어있는 정보로만 발송을 시도합니다.
따라서, 수신자 유형이 user-id
가 아닌 경우 유저 기반 메시지 개인화 기능 을 사용하실 수 없습니다. 예를 들어, 이 경우 캠페인의 메시지 내용에 {{ user["name"] }} 님 안녕하세요
라는 구문이 들어있다면, 개인화는 실패하고 님 안녕하세요
라는 메시지가 발송됩니다.
이벤트 패러미터는 모든 유형에 대해 사용 가능합니다. 더 자세한 API 기반 발송 캠페인 예시는 이 곳 을 참고해주세요.
API 기반 발송은 중복 발송을 방지하기 위해 수신자의 중복 여부를 체크합니다. 동일한 수신자가 여러 번 포함되어 있는 경우, 중복된 수신자는 한 번만 발송됩니다. 다음은 채널 별 중복 제거 규칙입니다.
푸시 알림: 동일한 디바이스 토큰일 경우, 하나의 디바이스 토큰에만 메시지를 발송합니다. 웹 푸시 알림: 동일한 디바이스 토큰일 경우, 하나의 디바이스 토큰에만 메시지를 발송합니다. 카카오 알림톡: 동일한 전화번호일 경우, 하나의 전화번호에만 메시지를 발송합니다. 카카오 친구톡: 동일한 전화번호일 경우, 하나의 전화번호에만 메시지를 발송합니다. 문자 메시지: 동일한 전화번호일 경우, 하나의 전화번호에만 메시지를 발송합니다. 이메일: 동일한 이메일 주소일 경우, 하나의 이메일 주소에만 메시지를 발송합니다. Response Status Code Content-Type Description Example Response 200 OK application/json 캠페인이 정상적으로 트리거 되었습니다. {"code": 200, "success":true,"error":null}
400 Bad Request application/json 잘못된 요청입니다. {"code": 400, "success":false,"error":"Bad request: some-error-message"}
401 Unauthorized application/json 토큰이 만료되었거나, 인증 정보가 유효하지 않습니다. {"code": 401, "success":false,"error":"Unauthorized: Invalid token"}
405 Method Not Allowed application/json 지원되지 않는 HTTP Method 입니다. {"code": 405, "success":false,"error":"Method not allowed: some-error-message"}
413 Payload Too Large application/json 요청 payload가 너무 큽니다. {"code": 413, "success":false,"error":"Payload too large: some-error-message"}
500 Internal Server Error application/json 노티플라이 서버 오류입니다. 지속적으로 500 에러가 발생한다면, 노티플라이 팀에 문의해주세요. {"code": 500, "success":false,"error":"some-error-message"}
501 Not Implemented application/json 아직 지원되지 않는 기능입니다. {"code": 501, "success":false,"error":"Not implemented: some-error-message"}
Sample Request POST https://api.notifly.tech/campaign/{projectId}/{campaignId}/send { "recipients" : [ { "userId" : "alice" , "eventParams" : { "messageTitle" : "Hello Alice!" , "messageBody" : "How are you?" } } , { "userId" : "bob" , "eventParams" : { "messageTitle" : "Hello Bob!" , "messageBody" : "How are you?" } } ] }
6. Campaign Statistics Retrieval 이 endpoint를 통해 캠페인의 발송 현황을 조회하실 수 있습니다.
Endpoint GET https://api.notifly.tech/projects/{projectId}/campaigns/{campaignId}/stats
Specifications Parameter Value Description Content-Type application/json Request body MIME type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. campaignId String Yes 캠페인 리스트의 캠페인 목록을 클릭하여 상세보기 팝업 상단에서 확인하실 수 있습니다.
Query Parameters Parameter Type Required Description start String Yes 조회 시작일자 (yyyy-MM-ddTHH:mm:ss.sssZ
형식, UTC 기준) end String Yes 조회 종료일자 (yyyy-MM-ddTHH:mm:ss.sssZ
형식, UTC 기준)
Response Status Code Content-Type Description Example Response 200 OK application/json 캠페인 통계를 정상적으로 조회한 경우 { "data": { "lastCollectedAt": "2024-10-29 04:00:00", "stats": [...] }, "error": null }
400 Bad Request application/json 잘못된 요청 파라미터가 있는 경우 { "data": null, "error": "Invalid project ID" }
401 Unauthorized application/json 인증 토큰이 유효하지 않거나 누락된 경우 { "data": null, "error": "Unauthorized: Invalid Authorization Token" }
500 Internal Server Error application/json 서버 오류가 발생한 경우. 지속적인 500 오류는 Notifly 팀에 문의 { "data": null, "error": "Internal Server Error: some-error-message" }
Response Body { "data" : { "lastCollectedAt" : "2024-10-29 04:00:00" , "stats" : [ { "metricName" : "구매_이벤트" , "metricType" : "conversion" , "conversionType" : "sales_conversion" , "totalSum" : 930832 , "dailySums" : [ { "date" : "2024-09-30" , "sum" : 0 , "dimensionSums" : [ { "dimensionKey" : "이름" , "dimensionValue" : "이름1" , "sum" : 0 } , ... ] } , ... ] } , { "metricName" : "구매_이벤트" , "metricType" : "conversion" , "conversionType" : "total_count_conversion" , "totalCount" : 15 , "dailyCounts" : [ { "date" : "2024-09-30" , "count" : 0 , "dimensionCounts" : [ { "dimensionKey" : "이름" , "dimensionValue" : "이름1" , "count" : 0 } , ... ] } , ... ] } , { "metricName" : "구매_이벤트" , "metricType" : "conversion" , "conversionType" : "direct_count_conversion" , "totalCount" : 3 , "dailyCounts" : [ { "date" : "2024-09-30" , "count" : 0 , "dimensionCounts" : [ { "dimensionKey" : "이름" , "dimensionValue" : "이름1" , "count" : 0 } , ... ] } , ... ] } , { "metricName" : "send_success" , "metricType" : "standard" , "totalCount" : 550 , "dailyCounts" : [ { "date" : "2024-10-28" , "count" : 250 , "dimensionCounts" : [ { "dimensionKey" : "region" , "dimensionValue" : "us-east" , "count" : 100 } , { "dimensionKey" : "region" , "dimensionValue" : "us-west" , "count" : 150 } ] } , { "date" : "2024-10-29" , "count" : 300 , "dimensionCounts" : [ { "dimensionKey" : "region" , "dimensionValue" : "us-east" , "count" : 200 } , { "dimensionKey" : "region" , "dimensionValue" : "us-west" , "count" : 100 } ] } ] } ] } , "error" : null }
Field Type Description lastCollectedAt String 최종 집계 시간. KST 기준 날짜와 시간(yyyy-MM-dd HH:mm:ss
형식)으로 반환됩니다. stats Array 캠페인 발송 현황 데이터 배열 - metricName String 집계된 메트릭의 이름 (예: send_success
, send_failure
, push_click
등). 메트릭 이름에 대한 설명은 Standard Metric 종류 를 참조하세요. - metricType String 메트릭의 타입 (standard
또는 conversion
) - conversionType String 전환 지표의 타입 (direct_count_conversion
또는 total_count_conversion
또는 sales_conversion
). metricType이 conversion
인 경우만 존재. - totalCount (totalSum) Number 지정된 기간 동안 해당 메트릭이 누적된 총 횟수 (전환 매출액 (sales_convesion)
에 대해서는 합) - dailyCounts (dailySums) Array 일별로 집계된 메트릭 데이터 - date String 집계 날짜 (yyyy-MM-dd
형식, KST 기준) - count (sum) Number 해당 날짜에 발생한 메트릭 횟수 (전환 매출액 (sales_convesion)
에 대해서는 합) - dimensionCounts (dimensionSums) Array 대시보드 구성 - 사용자 속성을 입력한 경우 속성별로 집계된 메트릭 데이터 - dimensionKey String 사용자 속성 키 - dimensionValue String 사용자 속성 값 - count (sum) Number 해당 속성 값에 대한 메트릭 횟수 (전환 매출액 (sales_convesion)
에 대해서는 합)
Standard Metric 종류 Metric Name Description send_success 발송 성공 send_failure 발송 실패 rendering_failure 개인화 메시지 렌더링 실패 pending 발송 시도(집계 중) push_delivered 푸시알림 수신 push_click 푸시알림 클릭 failover_text_message_send_success 대체 문자 메시지 발송 성공 failover_text_message_send_failure 대체 문자 메시지 발송 실패 email_send 이메일 발송 email_delivery 이메일 도달 email_open 이메일 오픈 email_click 이메일 클릭 email_bounce 이메일 반송 email_complaint 이메일 수신 거부 email_rendering_failure 이메일 렌더링 실패 in_app_message_show 앱 팝업 노출 in_web_message_show 웹 팝업 노출 main_button_click 팝업 메인버튼 클릭 close_button_click 팝업 닫기 버튼 클릭 hide_in_app_message_button_click 인앱 팝업 다시(특정 기간) 보지 않기 버튼 클릭 cancelled 취소 이벤트로 인한 발송 취소 skipped__noisy_filter 중복 발송으로 인한 발송 취소 skipped__fatigue_management 피로도 관리로 인한 발송 취소 skipped__forbidden_timing_filter 금지된 발송 시간으로 인한 발송 취소 skipped__excluded_user_filter 발신 제외 유저로 인한 발송 취소 skipped__aborted_message 메시지 Abort로 인한 발송 취소(Connected Contents) skipped__global_frequency_limit_filter 발송량 제한 조건으로 인한 발송 취소
Sample Request GET https://api.notifly.tech/projects/{projectId}/campaigns/{campaignId}/stats?start=2024-10-27T15:00:00.000Z&end=2024-10-29T14:59:59.999Z
Campaign Statisticas API 변경 사항
2025-07-06 부터, conversionType 필드가 추가되었습니다.
7. Send Text Message 이 endpoint 를 통해 문자 메시지(SMS, LMS, MMS)를 보낼 수 있습니다.
주의 사항 HTTP REST API를 이용한 문자 발송은 Notifly 문자 자체 발송 설정이 되어있을 경우에만 가능합니다. 발신 번호는 자체 발송 설정에 입력된 번호가 사용 됩니다. 아직 API를 이용한 발송 결과에 대한 통계는 UI로 제공 되지 않습니다. 정보가 필요하실 경우 contact@notifly.tech 으로 이메일 부탁드립니다. Endpoint POST https://api.notifly.tech/messages/text-message
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. type String Yes 메시지 유형 (sms
, lms
또는 mms
) title String No 본문 제목(lms, mms에만 사용) body String Yes 본문 내용 sendNo String No 여러 발신 번호가 등록되어 있을 경우 발송할 번호 recipientList List Yes 수신자 목록(최대 1000명) - recipientNo String Yes 수신 번호
Response Status Code Content-Type Example Response 200 OK application/json {"success":true}
400 Bad Request application/json {"error":"some-error-message"}
405 Method Not Allowed application/json {"error":"Method not allowed"}
413 Payload Too Large application/json {"error":"Payload Too Large"}
500 Internal Server Error application/json {"error":"Internal Server Error"}
Sample Request POST https://api.notifly.tech/messages/text-message { "projectId" : "project-id" , "type" : "sms" , "body" : "Message Body" , "recipientList" : [ { "recipientNo" : "01012345678" } , { "recipientNo" : "01045671234" } ] }
8. Manage Text Message 080 Block Service 이 섹션에서는 080 수신 거부 서비스와 관련된 API를 설명합니다.
8.1 Find Recipients Endpoint GET https://api.notifly.tech/projects/{projectId}/messages/text-message/blockservice/recipients
Specifications Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes 프로젝트 ID
Query Parameters Parameter Type Required Description unsubscribeNo String Yes 080 수신 거부 번호 (최대 25자) recipientNo String No 수신 거부 대상자 번호 (최대 25자) startRequestDate String No 수신 거부 요청 시작값(yyyy-MM-dd HH:mm:ss) endRequestDate String No 수신 거부 요청 종료값(yyyy-MM-dd HH:mm:ss) pageNum Integer No 페이지 번호(기본값 : 1) pageSize Integer No 검색 수(기본값 : 15, 최대 1000)
Parameter Value Status code 200 OK Content-Type application/json
Response Body { "pageNum": 1, "pageSize": 15, "totalCount": 1, "data": [ { "unsubscribeNo": "0808888888", "recipientNo": "01000000000", "requestDate": "2018-05-14 17:07:29.0" }, { "unsubscribeNo": "0808888888", "recipientNo": "010012341234", "requestDate": "2018-05-14 17:07:29.0" }, ... ] }
Sample Request GET https://api.notifly.tech/projects/{projectId}/messages/text-message/blockservice/recipients?unsubscribeNo=0800000000&pageNum=1&pageSize=15
8.2 Register Recipients Endpoint POST https://api.notifly.tech/projects/{projectId}/messages/text-message/blockservice/recipients
Specifications Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes 프로젝트 ID
Request Body Parameter Type Required Description unsubscribeNo String Yes 080 수신거부번호 (최대 25자) recipientNoList List Yes 수신 거부 대상자 번호 (최대 10개)
Parameter Value Status code 200 OK Content-Type application/json
Sample Request POST https://api.notifly.tech/projects/{projectId}/messages/text-message/blockservice/recipients { "unsubscribeNo" : "0800000000" , "recipientNoList" : [ "0100000000" , "0100000001" ] }
8.3 Remove Recipients Endpoint DELETE https://api.notifly.tech/projects/{projectId}/messages/text-message/blockservice/recipients/removes
Specifications Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes 프로젝트 ID
Query Parameters Parameter Type Required Description unsubscribeNo String Yes 080 수신 거부 번호 (최대 20자) recipientNoList String Yes 삭제할 수신 거부 번호 (콤마로 구분)
Parameter Value Status code 200 OK Content-Type application/json
Sample Request DELETE https://api.notifly.tech/projects/{projectId}/messages/text-message/blockservice/recipients/removes?unsubscribeNo=0800000000&recipientNoList=0100000000,0100000001
9.Send Kakao Alimtalk Message 이 endpoint 를 통해 카카오 알림톡 메시지를 발송할 수 있습니다. 알림톡 템플릿 코드와 수신자 리스트를 사용하여 메시지를 전송합니다.
주의 사항 Endpoint POST https://api.notifly.tech/messages/kakao-alimtalk
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. templateId String Yes 등록한 발송 템플릿 ID (알림톡 템플릿 리스트 에서 확인 가능) channelId String No 발송할 카카오 채널 ID resendSendNo String No 대체 발송 발신 번호 (Notifly 문자 자체 발송 이 설정된 번호) senderGroupingKey String No 발신 그룹핑 키(최대 100자) recipientList List Yes 수신자 목록(최대 1000명) - recipientNo String Yes 수신 번호 (최대 15자) - templateParameter Object No 템플릿 파라미터, 치환할 변수가 포함된 경우 필수 - resendParameter ResendParameter No 대체 발송 정보
ResendParameter Parameter Type Required Description isResend Boolean No 발송 실패 시, 문자 대체 발송 여부. 기본값은 false. resendType String No 대체 발송 타입(SMS, LMS). 템플릿 본문 길이에 따라 타입이 구분됩니다. resendTitle String No LMS 대체 발송 제목. 기본값은 플러스친구 ID입니다. resendContent String No 대체 발송 내용. 기본값은 메시지 본문과 웹링크 버튼명 - 웹링크 Mobile 링크입니다.
Response Status Code Content-Type Example Response 200 OK application/json {"success":true}
400 Bad Request application/json {"error":"some-error-message"}
405 Method Not Allowed application/json {"error":"Method not allowed"}
413 Payload Too Large application/json {"error":"Payload Too Large"}
500 Internal Server Error application/json {"error":"Internal Server Error"}
Sample Request POST https://api.notifly.tech/messages/kakao-alimtalk { "projectId" : "project-id" , "templateId" : "template-id" , "recipientList" : [ { "recipientNo" : "01012345678" , "templateParameter" : { "user_name" : "Notifly User" } } , { "recipientNo" : "01056781234" , "templateParameter" : { "user_name" : "Notifly Customer" } } ] }
10. Manage Kakao Alimtalk Template 10.1 템플릿 리스트 조회 Endpoint
GET https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates
Specifications Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다.
Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Query Parameters Parameter Type Required Description channelId
String No 알림톡 채널 ID. 등록된 채널이 여러개일 경우 사용됩니다. 넘기지 않을 경우 먼저 등록된 채널로 지정 됩니다. templateCode
String No 템플릿 코드 templateName
String No 템플릿 이름 templateStatus
String No 템플릿 상태 코드 pageNum
Integer No 페이지 번호(Default: 1) pageSize
Integer No 조회 건수(Default: 15, Max: 1000)
Template Status Code Code Description TSC01 요청 TSC02 검수 중 TSC03 승인 TSC04 반려
Sample Request GET https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates
Response { "resultCode" : 0 , "resultMessage" : "Success" , d "templateListResponse" : { "templates" : [ { "plusFriendId" : "String" , "senderKey" : "String" , "plusFriendType" : "String" , "templateCode" : "String" , "kakaoTemplateCode" : "String" , "templateName" : "String" , "templateMessageType" : "String" , "templateEmphasizeType" : "String" , "templateContent" : "String" , "templateExtra" : "String" , "templateAd" : "String" , "templateTitle" : "String" , "templateSubtitle" : "String" , "templateHeader" : "String" , "templateItem" : { "list" : [ { "title" : "String" , "description" : "String" } ] , "summary" : { "title" : "String" , "description" : "String" } } , "templateItemHighlight" : { "title" : "String" , "description" : "String" , "imageUrl" : "String" } , "templateRepresentLink" : { "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" } , "templateImageName" : "String" , "templateImageUrl" : "String" , "buttons" : [ { "ordering" : 1 , "type" : "String" , "name" : "String" , "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" , "bizFormId" : 1 , "pluginId" : "String" } ] , "quickReplies" : [ { "ordering" : 1 , "type" : "String" , "name" : "String" , "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" , "bizFormId" : 1 } ] , "comments" : [ { "id" : 1 , "content" : "String" , "userName" : "String" , "createdAt" : "String" , "attachment" : [ { "originalFileName" : "String" , "filePath" : "String" } ] , "status" : "String" } ] , "status" : "String" , "statusName" : "String" , "securityFlag" : true , "categoryCode" : "String" , "createDate" : "String" , "updateDate" : "String" } ] , "totalCount" : 100 } }
10.2 템플릿 등록 Endpoint
POST https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates
Specifications Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다.
Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body { "channelId" : "String" , "templateName" : "String" , "templateContent" : "String" , "templateMessageType" : "String" , "templateEmphasizeType" : "String" , "templateExtra" : "String" , "templateTitle" : "String" , "templateSubtitle" : "String" , "templateHeader" : "String" , "templateItem" : { "list" : [ { "title" : "String" , "description" : "String" } ] , "summary" : { "title" : "String" , "description" : "String" } } , "templateItemHighlight" : { "title" : "String" , "description" : "String" , "imageUrl" : "String" } , "templateRepresentLink" : { "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" } , "templateImageName" : "String" , "templateImageUrl" : "String" , "securityFlag" : "Boolean" , "categoryCode" : "String" , "buttons" : [ { "ordering" : "Integer" , "type" : "String" , "name" : "String" , "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" , "bizFormId" : "Integer" , "pluginId" : "String" } ] , "quickReplies" : [ { "ordering" : "Integer" , "type" : "String" , "name" : "String" , "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" , "bizFormId" : "Integer" } ] }
필드 설명 Parameter Type Required Description channelId
String No 알림톡 채널 ID. 등록된 채널이 여러개일 경우 사용됩니다. 넘기지 않을 경우 먼저 등록된 채널로 지정 됩니다. templateCode
String Yes 템플릿 코드 (최대 20자), Unique한 코드를 직접 생성해서 보내주세요. 콭솔에서는 9자의 랜덤한 문자열을 생성해서 사용 하고 있습니다. templateName
String Yes 템플릿명 (최대 150자) templateContent
String Yes 템플릿 본문 (최대 1000자) templateMessageType
String No 템플릿 메시지 유형 (BA
: 기본형, EX
: 부가 정보형, AD
: 채널 추가형, MI
: 복합형, 기본값: BA
) templateEmphasizeType
String No 템플릿 강조 표시 타입 (NONE
: 기본, TEXT
: 강조 표시, IMAGE
: 이미지형, ITEM_LIST
: 아이템리스트형, 기본값: NONE
) templateExtra
String No 템플릿 부가 정보 (템플릿 메시지 유형이 EX
또는 MI
일 경우 필수) templateTitle
String No 템플릿 제목 (최대 50자, Android: 2줄, 23자 이상 말줄임 처리, iOS: 2줄, 27자 이상 말줄임 처리) templateSubtitle
String No 템플릿 보조 문구 (최대 50자, Android: 18자 이상 말줄임 처리, iOS: 21자 이상 말줄임 처리) templateHeader
String No 템플릿 헤더 (최대 16자) templateItem
Object No 아이템 정보 templateItem.list
List of Objects No 아이템 리스트 (최소 2개, 최대 10개) templateItem.list.title
String Yes 아이템 타이틀 (최대 6자) templateItem.list.description
String Yes 아이템 디스크립션 (최대 23자) templateItem.summary
Object Yes 아이템 요약 정보 templateItem.summary.title
String Yes 요약 타이틀 (최대 6자) templateItem.summary.description
String Yes 요약 디스크립션 (변수 및 화폐 단위, 숫자, 쉼표, 마침표만 사용 가능, 최대 14자) templateItemHighlight
Object No 아이템 하이라이트 templateItemHighlight.title
String Yes 하이라이트 타이틀 (최대 30자, 섬네일 이미지가 있을 경우 21자) templateItemHighlight.description
String Yes 하이라이트 디스크립션 (최대 19자, 섬네일 이미지가 있을 경우 13자) templateItemHighlight.imageUrl
String Yes 섬네일 이미지 URL templateRepresentLink
Object Yes 대표 링크 templateRepresentLink.linkMo
String Yes 모바일 웹 링크 (최대 500자) templateRepresentLink.linkPc
String No PC 웹 링크 (최대 500자) templateRepresentLink.schemeIos
String No iOS 앱 링크 (최대 500자) templateRepresentLink.schemeAndroid
String No 안드로이드 앱 링크 (최대 500자) templateImageName
String No 이미지명 (업로드한 파일명) templateImageUrl
String No 이미지 URL securityFlag
Boolean No 보안 템플릿 여부 (OTP 등 보안 메시지일 경우 설정, 기본값: false
) categoryCode
String No 템플릿 카테고리 코드 (템플릿 카테고리 조회 API 참고, 기본값: 999999
) buttons
List of Objects No 버튼 리스트 (최대 5개) buttons.ordering
Integer Yes 버튼 순서 (1~5) buttons.type
String Yes 버튼 타입 (WL
: 웹 링크, AL
: 앱 링크, DS
: 배송 조회, BK
: 봇 키워드, MD
: 메시지 전달, BC
: 상담톡 전환, BT
: 봇 전환, AC
: 채널 추가, BF
: 비즈니스폼, P1
: 이미지 보안 전송 플러그인 ID, P2
: 개인정보이용 플러그인 ID, P3
: 원클릭 결제 플러그인 ID) buttons.name
String Yes 버튼 이름 (최대 14자) buttons.linkMo
String 조건부 모바일 웹 링크 (WL
타입일 경우 필수, 최대 500자) buttons.linkPc
String No PC 웹 링크 (WL
타입일 경우 선택, 최대 500자) buttons.schemeIos
String 조건부 iOS 앱 링크 (AL
타입일 경우 필수, 최대 500자) buttons.schemeAndroid
String 조건부 안드로이드 앱 링크 (AL
타입일 경우 필수, 최대 500자) buttons.bizFormId
Integer 조건부 비즈니스폼 ID (BF
타입일 경우 필수) buttons.pluginId
String No 플러그인 ID (최대 24자) quickReplies
List of Objects No 바로연결 리스트 (최대 5개) quickReplies.ordering
Integer Yes 바로연결 순서 (필수) quickReplies.type
String Yes 바로연결 타입 (WL
: 웹 링크, AL
: 앱 링크, BK
: 봇 키워드, BC
: 상담톡 전환, BT
: 봇 전환, BF
: 비즈니스폼) quickReplies.name
String Yes 바로연결 이름 (최대 14자) quickReplies.linkMo
String 조건부 모바일 웹 링크 (WL
타입일 경우 필수, 최대 500자) quickReplies.linkPc
String No PC 웹 링크 (WL
타입일 경우 선택, 최대 500자) quickReplies.schemeIos
String 조건부 iOS 앱 링크 (AL
타입일 경우 필수, 최대 500자) quickReplies.schemeAndroid
String 조건부 안드로이드 앱 링크 (AL
타입일 경우 필수, 최대 500자) quickReplies.bizFormId
Integer 조건부 비즈니스폼 ID (BF
타입일 경우 필수)
주의 사항 템플릿 메시지 유형 이 EX
또는 MI
일 경우, templateExtra
필드를 반드시 포함해야 합니다.템플릿 강조 표시 타입 이 TEXT
일 경우, templateTitle
과 templateSubtitle
필드를 필수로 포함해야 합니다.템플릿 강조 표시 타입 이 IMAGE
일 경우, templateImageName
과 templateImageUrl
필드를 필수로 포함해야 합니다.템플릿 아이템 리스트 는 최소 2개에서 최대 10개까지 포함할 수 있습니다.버튼 타입 에 따라 필수 필드가 다릅니다. 예를 들어, WL
타입의 버튼은 linkMo
가 필수이며, AL
타입의 버튼은 schemeIos
및 schemeAndroid
가 필수입니다.빠른 연결(Quick Replies) 역시 버튼과 유사하게 타입에 따라 필수 필드가 다릅니다.Parameter Value Status code 200 OK Status code 400 Bad Request Status code 500 Internal Server Error
Response Body { "resultCode" : 0 , "resultMessage" : "Success" }
필드 설명 Field Type Description resultCode
Integer 결과 코드 resultMessage
String 결과 메시지
Sample Request POST https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates { "channelId" : "channel-id" , "templateCode" : "template-code" , "templateName" : "template-name" , "templateContent" : "This is a template content." , "templateMessageType" : "BA" , "templateEmphasizeType" : "NONE" , "templateTitle" : "Template Title" , "templateSubtitle" : "Template Subtitle" , "templateItem" : { "list" : [ { "title" : "Item 1" , "description" : "Description 1" } , { "title" : "Item 2" , "description" : "Description 2" } ] , "summary" : { "title" : "Summary Title" , "description" : "Summary Description" } } , "templateRepresentLink" : { "linkMo" : "http://example.com" , "linkPc" : "http://example.com" , "schemeIos" : "app://example" , "schemeAndroid" : "app://example" } , "categoryCode" : "999999" , "buttons" : [ { "ordering" : 1 , "type" : "WL" , "name" : "Visit Site" , "linkMo" : "http://example.com" , "linkPc" : "http://example.com" } ] , "quickReplies" : [ { "ordering" : 1 , "type" : "WL" , "name" : "Help" , "linkMo" : "http://example.com/help" , "linkPc" : "http://example.com/help" } ] }
10.3 템플릿 수정 Endpoint
PUT https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates/{templateCode}
Specifications Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. templateCode String Yes 수정할 템플릿 코드
Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body 템플릿 등록과 동일한 형식으로 요청 본문을 구성합니다. 다만, templateCode
는 URL의 Path Parameter로 전달되므로 본문에서는 제외할 수 있습니다.
{ "channelId" : "String" , "templateName" : "String" , "templateContent" : "String" , "templateMessageType" : "String" , "templateEmphasizeType" : "String" , "templateExtra" : "String" , "templateTitle" : "String" , "templateSubtitle" : "String" , "templateHeader" : "String" , "templateItem" : { "list" : [ { "title" : "String" , "description" : "String" } ] , "summary" : { "title" : "String" , "description" : "String" } } , "templateItemHighlight" : { "title" : "String" , "description" : "String" , "imageUrl" : "String" } , "templateRepresentLink" : { "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" } , "templateImageName" : "String" , "templateImageUrl" : "String" , "securityFlag" : true , "categoryCode" : "String" , "buttons" : [ { "ordering" : 1 , "type" : "String" , "name" : "String" , "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" , "bizFormId" : "Integer" , "pluginId" : "String" } ] , "quickReplies" : [ { "ordering" : 1 , "type" : "String" , "name" : "String" , "linkMo" : "String" , "linkPc" : "String" , "schemeIos" : "String" , "schemeAndroid" : "String" , "bizFormId" : "Integer" } ] }
필드 설명 템플릿 등록과 동일한 필드 설명을 참고하세요. 단, templateCode
는 URL 경로에서 지정되므로 본문에서는 제외됩니다.
주의 사항 템플릿 수정 시, 템플릿 메시지 유형 및 템플릿 강조 표시 타입 에 따른 필수 필드를 준수해야 합니다. 템플릿 아이템 리스트 , 버튼 , 빠른 연결 등은 필요에 따라 포함하거나 제외할 수 있습니다.버튼 타입 에 따라 필수 필드가 다르므로 주의하여 입력해야 합니다.Parameter Value Status code 200 OK Status code 400 Bad Request Status code 500 Internal Server Error
Response Body { "resultCode" : 0 , "resultMessage" : "Success" }
필드 설명 Field Type Description resultCode
Integer 결과 코드 resultMessage
String 결과 메시지
Sample Request PUT https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates/{templateCode} { "channelId" : "Channel ID" , "templateName" : "Updated Template Name" , "templateContent" : "Updated template content." , "templateMessageType" : "EX" , "templateEmphasizeType" : "TEXT" , "templateExtra" : "Additional information." , "templateTitle" : "Updated Title" , "templateSubtitle" : "Updated Subtitle" , "templateItem" : { "list" : [ { "title" : "New Item 1" , "description" : "New Description 1" } , { "title" : "New Item 2" , "description" : "New Description 2" } ] , "summary" : { "title" : "New Summary Title" , "description" : "New Summary Description" } } , "templateRepresentLink" : { "linkMo" : "http://newexample.com" , "linkPc" : "http://newexample.com" , "schemeIos" : "newapp://example" , "schemeAndroid" : "newapp://example" } , "categoryCode" : "888888" , "buttons" : [ { "ordering" : 1 , "type" : "AL" , "name" : "Open App" , "schemeIos" : "app://open" , "schemeAndroid" : "app://open" } ] , "quickReplies" : [ { "ordering" : 1 , "type" : "WL" , "name" : "Support" , "linkMo" : "http://newexample.com/support" , "linkPc" : "http://newexample.com/support" } ] }
10.4 템플릿 삭제 Endpoint
DELETE https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates/{templateCode}?channelId=${channelId}
Specifications Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. templateCode String Yes 삭제할 템플릿 코드
Query Parameters Parameter Type Required Description channelId
String No 알림톡 채널 ID. 등록된 채널이 여러개일 경우 사용됩니다. 넘기지 않을 경우 먼저 등록된 채널로 지정 됩니다.
Parameter Value Description Content-Type application/json Request body의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Parameter Value Status code 200 OK Status code 400 Bad Request Status code 500 Internal Server Error
Response Body { "resultCode" : 0 , "resultMessage" : "Success" }
필드 설명 Field Type Description resultCode
Integer 결과 코드 resultMessage
String 결과 메시지
Sample Request DELETE https://api.notifly.tech/projects/{projectId}/messages/kakao-alimtalk/templates/{templateCode}
11. Send Kakao Friendtalk Message 이 endpoint 를 통해 카카오 친구톡 메시지를 발송할 수 있습니다. 프렌드톡 메시지는 수신자 목록, 광고 여부, 메시지 유형 등을 설정하여 전송합니다.
주의 사항 Endpoint POST https://api.notifly.tech/messages/kakao-friendtalk
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Request Body Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. channelId String No 여러 카카오 채널이 등록되어 있을 경우 발송 할 채널 ID. messageType String Yes 메시지 타입. (현재 text
타입만 지원합니다.) isAd Boolean No 광고 여부 recipientList List Yes 수신자 목록(최대 1000명) - recipientNo String Yes 수신 번호 - content.text String Yes 본문 내용
Response Status Code Content-Type Example Response 200 OK application/json {"success":true}
400 Bad Request application/json {"error":"some-error-message"}
405 Method Not Allowed application/json {"error":"Method not allowed"}
413 Payload Too Large application/json {"error":"Payload Too Large"}
500 Internal Server Error application/json {"error":"Internal Server Error"}
Sample Request POST https://api.notifly.tech/messages/kakao-friendtalk { "projectId" : "project-id" , "messageType" : "text" , "isAd" : false , "recipientList" : [ { "recipientNo" : "01012345678" , "content" : { "text" : "test" } } ] }
12. User Journey Triggering 이 endpoint 를 통해 유저 여정을 트리거링할 수 있습니다. 등록된 유저 및 디바이스의 속성 뿐만 아니라 API Request Body의 파라미터까지 모두 사용하여 메시지를 개인화할 수 있습니다.
주의 사항 HTTP API를 이용한 유저 여정 진입의 경우, 유저 여정의 진입 시점 유형이 API 기반 진입 으로 설정되어있는 경우에만 사용 가능합니다. Endpoint POST https://api.notifly.tech/projects/{projectId}/user-journeys/{userJourneyId}/enter
Specifications Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes Notifly의 설정 페이지에서 확인하실 수 있습니다. userJourneyId String Yes 유저 여정 상세 페이지에서 확인하실 수 있습니다.
Request Body Parameter Type Required Description users List Yes 유저 여정에 진입할 유저 목록(최대 1000명) - userId String Yes 유저 여정에 진입할 유저의 ID 입니다. - eventParams Object No 이벤트 파라미터를 포함하는 객체 입니다. 해당 파라미터로 메시지를 개인화시킬 수 있습니다.
Response Status Code Content-Type Description Example Response 200 OK application/json 유저 여정에 정상적으로 진입되었습니다. {"code": 200, "success":true,"error":null}
400 Bad Request application/json 잘못된 요청입니다. {"code": 400, "success":false,"error":"Bad request: some-error-message"}
401 Unauthorized application/json 토큰이 만료되었거나, 인증 정보가 유효하지 않습니다. {"code": 401, "success":false,"error":"Unauthorized: Invalid token"}
500 Internal Server Error application/json 노티플라이 서버 오류입니다. 지속적으로 500 에러가 발생한다면, 노티플라이 팀에 문의해주세요. {"code": 500, "success":false,"error":"some-error-message"}
Sample Request POST https://api.notifly.tech/projects/{projectId}/user-journeys/{userJourneyId}/enter { "users" : [ { "userId" : "alice" , "eventParams" : { "messageTitle" : "Hello Alice!" , "messageBody" : "How are you?" } } , { "userId" : "bob" , "eventParams" : { "messageTitle" : "Hello Bob!" , "messageBody" : "How are you?" } } ] }
13. Campaign Event Data Export API (Beta) 13.1 Campaign Event Data Export 요청 이 endpoint를 통해 캠페인/유저 여정 이벤트 데이터를 비동기적으로 추출 요청할 수 있습니다. Response로 받은 export_id를 사용하여 요청에 대한 결과를 조회할 수 있습니다.
(이 요청은 요청데이터당 과금이 되는 유료 API 입니다. 가격은 노티플라이에 문의해주세요.)
Endpoint POST https://api.notifly.tech/projects/{projectId}/campaign-event-data/exports
Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes Notifly 설정 페이지에서 확인 가능
Request Body Parameter Type Required Description start String Yes 조회 시작일자 (yyyy-MM-ddTHH:mm:ss.sssZ, UTC 기준) end String Yes 조회 종료일자 (yyyy-MM-ddTHH:mm:ss.sssZ, UTC 기준, 조회 시작일자로부터 최대 일주일 이내)
Response Status Code Content-Type Description Example Response 200 OK application/json Export 요청 성공 { "export_id": "xyz123" }
400 Bad Request application/json 요청 파라미터 오류 (날짜 형식, 범위 오류 등) { "error": "InvalidRequest", "message": "..." }
401 Unauthorized application/json 인증 실패 { "error": "Unauthorized" }
500 Internal Server Error application/json 서버 내부 오류 { "error": "InternalServerError", "message": "..." }
Response Body Sample Request POST https://api.notifly.tech/projects/{projectId}/campaign_event_data/exports { "start" : "2025-06-01T00:00:00.000Z" , "end" : "2025-06-07T23:59:59.999Z" }
13.2 Campaign Event Data Export 결과 조회 Export 요청으로 얻은 export_id를 활용해 비동기로 생성된 데이터를 페이지 당 최대 1000개 단위로 조회합니다. 데이터가 생성중이라면 요청에 대한 응답 코드로 202를 반환합니다.
페이지네이션 방식 이 API는 페이지 기반 페이지네이션을 사용합니다:
페이지 번호 : 0부터 시작하는 정수 값페이지 크기 : 각 페이지당 최대 1,000개의 이벤트 데이터 (마지막 페이지는 1000개 미만의 데이터를 포함할 수 있음)전체 페이지 수 : total_page_count
필드로 제공유효한 페이지 범위 : 0 ~ (total_page_count - 1)예를 들어, total_page_count
가 5인 경우:
유효한 페이지: 0, 1, 2, 3, 4 각 페이지는 최대 1,000개의 이벤트 데이터를 포함 마지막 페이지(페이지 4)는 1,000개 미만의 데이터를 포함할 수 있음 Endpoint GET https://api.notifly.tech/projects/{projectId}/campaign-event-data/exports/{exportId}/result?page={page}
Parameter Value Description Content-Type application/json Request body 의 MIME Type Authorization {auth-key} Authentication endpoint 를 통해 수령한 인증 토큰
Path Parameters Parameter Type Required Description projectId String Yes Notifly 설정 페이지에서 확인 가능 exportId String Yes Export 요청 시 발급된 ID
Query Parameters Parameter Type Required Description page Number Yes 0부터 시작하는 페이지 번호 (범위 : 0 ~ total_page_count -1
)
Response Status Code Content-Type Description Example Response 200 OK application/json 해당 페이지 데이터 조회 성공 { "status": "success", "data": [...], "total_page_count": 3 }
202 Accepted application/json 데이터 생성 중 { "status": "processing", "message": "Data is being generated." }
404 Not Found application/json 존재하지 않는 projectId나 exportId { "status": "not_found", "message": "The specified project_id and export_id could not be found." }
416 Range Not Satisfiable application/json 잘못된 page 요청 { "status": "invalid_page", "message": "The requested page does not exist." }
500 Internal Server Error application/json 서버 내부 오류 { "status": "error", "message": "An error occurred while processing the data." }
Response Body (200 OK) { "status" : "success" , "data" : [ { "user_id" : "user_12345" , "notifly_user_id" : "notifly_user_abcde" , "device_id" : "ios_device_98765" , "notifly_device_id" : "notifly_device_xyz" , "channel" : "push_notification" , "event_name" : "send_success" , "failure_reason" : null , "resource_title" : "6월 신규 혜택 안내" , "resource_type" : "campaign" , "campaign_id" : "camp_202406_promo" , "experiment_group_name" : "A" , "user_journey_id" : null , "user_journey_node_id" : null , "time" : "1749373994000000" , "message_data" : { "title" : "지금 확인하고 혜택 받기!" , "body" : "6월 신규 회원님만을 위한 특별 이벤트 🎁" , "link" : "link://link/feed?id=1243" } } ] , "total_page_count" : 1 }
Sample Request GET https://api.notifly.tech/projects/{projectId}/campaign_event_data/exports/{exportId}/result?page=0
Event Name의 종류 이벤트 이름 이벤트 의미 설명 send_success 발송 성공 노티플라이 발송 엔진에서 발송 시도를 성공 send_failure 발송 실패 발송 시도 실패 건수. 일부 채널(문자, 카카오 친구톡 및 알림톡)은 실패 원인(failure_reason) 별도 제공 rendering_failure 개인화 메시지 렌더링 실패 - pending 발송 시도(집계 중) 일부 채널(문자, 카카오 친구톡 및 알림톡)에 대해서 발송 시도 후, 수신 결과 집계가 진행중인 상태 push_delivered 푸시알림 수신 사용자에게 푸시알림이 도달 push_click 푸시알림 클릭 - failover_text_message_send_success 대체 문자 메시지 발송 성공 발송 실패 시 대체 문자로 발송 성공 failover_text_message_send_failure 대체 문자 메시지 발송 실패 대체 문자 발송 실패 email_send 이메일 발송 - email_delivery 이메일 도달 수신함에 도달 이메일을 열지 않아도 도달한 것으로 판단 email_open 이메일 오픈 - email_click 이메일 본문 링크 클릭 - email_bounce 수신 불가로 반송된 이메일 반송 - email_complaint 이메일 수신 거부 수신자가 스팸으로 신고 email_rendering_failure 이메일 렌더링 실패 - in_app_message_show 앱 팝업 노출 - in_web_message_show 웹 팝업 노출 - main_button_click 팝업 메인버튼 클릭 - close_button_click 팝업 닫기 버튼 클릭 - hide_in_app_message_button_click 인앱 팝업 다시 보지 않기 클릭 - link_open 링크 오픈 트래킹 링크 클릭. 중복 클릭도 집계됨 cancelled 취소 이벤트로 인한 발송 취소 취소 이벤트 발생으로 예약 발송이 중단된 경우 skipped__noisy_filter 중복 발송으로 인한 발송 취소 단시간 내 동일 유저에 중복 발송 방지 skipped__fatigue_management 피로도 관리로 인한 발송 취소 피로도 관리 설정으로 인한 취소 skipped__forbidden_timing_filter 금지된 발송 시간으로 인한 발송 취소 발송 금지 시간 조건으로 인한 취소 skipped__kakao_forbidden_timing 카카오 금지 시간으로 인한 발송 취소 카카오 광고 메시지 금지 시간에 해당 skipped__excluded_user_filter 발신 제외 유저로 인한 발송 취소 특정 유저 제외 조건에 해당하는 경우 skipped__aborted_message 메시지 Abort로 인한 발송 취소 - skipped__global_frequency_limit_filter 발송량 제한 조건으로 인한 발송 취소 프로젝트의 발송량 제한에 의해 취소