본문 바로가기

문자 발송 API 연동 방법

센드엠 API는 REST 방식입니다. HTTPS로 JSON을 보내고 JSON을 받습니다. 별도 SDK 설치 없이 HTTP 요청이 가능한 언어라면 무엇이든 연동할 수 있습니다.

적용 버전 「센드엠 API 연동정의서 v3.1」 · 작성 센드엠 고객지원팀 · 작성일 2026년 9월 16일 · 최종 수정 2026년 10월 21일 · 최종 검증일 2026년 10월 21일

처음 연동하는 순서

센드엠 API는 어떻게 연동하나요?

센드엠 API 서버는 https://api.sendm.co.kr 입니다. 모든 요청에 user-id(센드엠 아이디)와 api-key(API 신청 후 발급받은 키) 두 개의 헤더를 넣어 호출합니다.

문자 발송은 POST /v1/sms/send 에 JSON을 보내면 되고, 응답의 code 가 "0" 이면 접수 성공입니다. 함께 돌아오는 data.msgId 로 나중에 발송 결과를 조회합니다.

반드시 백엔드(서버)에서 호출하세요. 브라우저에서 직접 호출하면 아이디와 인증키가 HTML·JS 소스에 그대로 드러납니다. 요청 IP도 사용자마다 달라 IP 등록이 소용없어집니다.
올바른 구조는 클라이언트 → 우리 서버(Java·Node.js·PHP 등) → 센드엠 API 입니다.

연동 전에 준비할 것

API 발송 전 준비 항목
항목확인할 내용어디서
API 신청·승인승인되면 인증키(api-key)가 발급됩니다. 승인 전에는 호출할 수 없습니다.API 신청
발신번호등록·승인된 번호만 callerNo 로 쓸 수 있습니다.발신번호 등록 방법
발송 서버 IPAPI를 호출할 서버의 공인 IP를 등록합니다. 등록되지 않은 IP는 차단됩니다.API 설정
잔액API 발송도 선불 코인에서 차감됩니다. 단가는 웹 발송과 같습니다.요금안내
브라우저 접속 IP와 서버 발송 IP는 다를 수 있습니다. 등록할 IP는 지금 보고 있는 PC의 IP가 아니라 API를 호출하는 서버의 공인 IP입니다. 서버를 늘리거나 옮기면 다시 등록하세요.

인증과 환경

모든 API가 같은 인증 헤더를 씁니다. 키는 서버의 환경변수나 설정 파일에서 읽고, 소스와 예제에 실제 값을 넣지 마세요.

센드엠 API 공통 헤더
헤더필수설명
user-id필수sendm.co.kr 회원가입 아이디
api-key필수API 서비스 신청 후 발급받은 인증키

요청 헤더 예시

user-id: YOUR_SENDM_ID
api-key: YOUR_API_KEY
응답 필드 (모든 API 공통)
필드설명
code"0" 이면 성공, 그 외는 실패
message실패 시 사유 메시지
data.msgId발송 API가 돌려주는 메시지 ID

응답 형식 (모든 API 공통)

{
  "code": "0",
  "message": "success",
  "data": { "msgId": 1 }
}

code 는 문자열 "0" 입니다. 숫자 0과 비교하는 언어에서는 타입에 주의하세요. msgId 는 결과 조회에 필요하니 꼭 저장해 두세요.

제공 엔드포인트

기준 주소는 https://api.sendm.co.kr 입니다.

센드엠 REST API 엔드포인트 목록
기능메서드경로Content-Type
문자 발송 (SMS·LMS)POST/v1/sms/sendapplication/json
포토문자 발송 (MMS)POST/v1/mms/sendmultipart/form-data
알림톡 발송POST/v2/kakao/sendAtmultipart/form-data
발신번호 목록 조회GET/v1/caller/callerNoListapplication/json
잔여 코인·발송 가능 건수GET/v2/info/coinInfoapplication/json
문자 발송 목록GET/v1/sms/sendListapplication/json
문자 발송 상세(수신자별 결과)GET/v1/sms/sendList/{msgId}application/json
예약 문자 취소GET/v1/sms/cancel/{msgId}application/json
카카오 발송 목록GET/v1/kakao/sendListapplication/json
카카오 발송 상세GET/v1/kakao/sendList/{msgId}application/json
예약 카카오 취소GET/v2/kakao/cancel/{msgId}application/json

문자 계열은 /v1, 알림톡 발송·취소와 잔여건수 조회는 /v2 입니다. 경로의 버전을 임의로 바꾸면 동작하지 않습니다.

첫 요청 예제 문자 발송 (SMS·LMS)

아래 요청은 고객님 서버에서 실행합니다. 예시 값은 실제 발신번호·수신번호·인증키로 바꿔 쓰세요.

POST /v1/sms/send 요청 파라미터
파라미터필수기본값설명
callerNo필수-발신번호. 사이트에 등록·승인된 번호여야 합니다
message필수-문자 내용
receiveNos필수-수신번호. 여러 건은 # 로 구분
예) 010-0000-0001#010-0000-0002
smsType선택SMSSMS 단문 / LMS 장문
title선택-제목. 장문(LMS)에서만 사용
adYn선택NN 일반 / Y 광고 / E 선거
reserveYn선택NN 즉시발송 / Y 예약발송
sendDate선택현재시간발송 시각. YYYYMMDDHHMM(24시간제)
예) 202303182045 (형식 예시. 지난 시각입니다)
messageCd선택-문자 템플릿 코드. 지정하면 본문이 템플릿 내용으로 대체됩니다
kind선택-국제문자일 때만. I 국제문자 / L 국제문자 MMS
country선택-국제문자일 때만. 국가코드. 현재 86(중국)만 지원하며, 그 외 국가코드는 102 로 거부됩니다

단문(SMS) 요청 예시

POST https://api.sendm.co.kr/v1/sms/send
Content-Type: application/json
user-id: YOUR_SENDM_ID
api-key: YOUR_API_KEY

{
  "callerNo": "02-0000-0000",
  "message": "주문이 접수되었습니다.",
  "receiveNos": "010-0000-0001#010-0000-0002"
}

장문(LMS) 요청 예시 제목과 예약 시각 포함

{
  "callerNo": "02-0000-0000",
  "smsType": "LMS",
  "title": "배송 안내",
  "message": "주문하신 상품이 오늘 출고되었습니다. ...",
  "receiveNos": "010-0000-0001",
  "reserveYn": "Y",
  "sendDate": "YYYYMMDDHHMM"
}

sendDate 에는 현재보다 뒤의 시각을 넣으세요. 표의 예시 값을 그대로 복사하면 지난 시각이 됩니다. 02-0000-0000 은 등록한 발신번호로, 010-0000-0001 은 실제 수신번호로 바꿔 서버에서 실행하세요.

광고문자는 adYn 을 Y 로 보내세요. API는 본문을 그대로 발송합니다. 웹 발송 화면과 달리 (광고) 표기·광고주명·무료 수신거부번호를 자동으로 붙이지 않으므로 message 에 직접 넣어야 합니다. 지켜야 할 기준은 광고문자 발송 방법에 정리되어 있습니다. 야간(21시~08시) 발송 제한도 API 발송에 동일하게 적용됩니다.

언어별 예제

같은 요청을 언어별 HTTP 코드로 정리했습니다. 공식 SDK가 아니라 표준 HTTP 호출 예제입니다.

포토문자 발송 (MMS)

파일을 첨부해야 하므로 JSON이 아니라 multipart/form-data 로 보냅니다.

POST /v1/mms/send 문자 발송과 다른 항목만
파라미터필수설명
smsType선택기본값 MMS
message선택포토문자는 본문이 없어도 됩니다
attachFile01
attachFile02
attachFile03
선택첨부 이미지. 최대 3장

이미지는 JPG·JPEG·PNG만 받습니다. 1,500×1,440px보다 크면 서버가 비율을 유지해 줄이고 JPG로 변환하며, 변환 후 용량 합계가 1MB를 넘으면 거부합니다(801 여러 장, 802 한 장). 통신사 전달 안정성을 위해 장당 300KB 이하로 보내는 것을 권장합니다. 웹 발송 기준은 SMS·LMS·MMS 차이에서 확인하세요.

알림톡 발송

수신자마다 치환 내용이 다르므로 수신자 목록을 kakaoList 배열로 보냅니다.

POST /v2/kakao/sendAt 요청 파라미터
파라미터필수설명
callerNo필수발신번호(등록·승인된 번호)
senderKey필수카카오 채널 발신 프로필 키
tmplCd필수승인된 알림톡 템플릿 코드
kakaoList필수수신자·내용 리스트(JSON 배열 문자열)
kakaoList[].receive필수수신번호
kakaoList[].message필수치환이 끝난 알림톡 내용. 승인된 템플릿과 내용이 일치해야 합니다
kakaoList[].btnMobUrl
kakaoList[].btnPcUrl
선택버튼 연결 모바일 / PC URL
kakaoList[].reYn선택알림톡 실패 시 문자로 대체 발송할지 (Y/N, 기본 N)
kakaoList[].reType조건부reYn=Y 일 때 필수. SMS / LMS
kakaoList[].reTitle조건부reType=LMS 일 때 대체 문자 제목 (최대 40자)
kakaoList[].reMsg조건부reYn=Y 일 때 필수. 대체 문자 내용
reserveYn / sendDate선택문자 발송과 동일

알림톡 kakaoList 예시

[
  {
    "receive":  "010-0000-0001",
    "message":  "홍길동님, 주문번호 A1234 상품이 출고되었습니다.",
    "reYn":     "Y",
    "reType":   "LMS",
    "reTitle":  "배송 안내",
    "reMsg":    "홍길동님, 주문번호 A1234 상품이 출고되었습니다."
  }
]

알림톡은 템플릿 사전 승인이 필요합니다. 채널 등록부터 템플릿 승인까지는 카카오 알림톡 시작하기를 참고하세요.

접수 확인

발송 API의 응답은 "접수"까지만 알려 줍니다. 수신자에게 전달됐는지는 최종 결과 조회로 따로 확인합니다.

접수와 최종 결과의 차이
단계확인 방법뜻
접수발송 응답 code 가 "0"센드엠이 요청을 받았습니다. 전달 성공이 아닙니다.
최종 결과GET /v1/sms/sendList/{msgId}통신사 리포트로 수신자별 성공·실패가 정해집니다.

접수 성공 응답 예시

{
  "code": "0",
  "message": "success",
  "data": { "msgId": 1 }
}
접수 성공을 수신 성공으로 표시하지 마세요. msgId 를 저장해 두고 최종 결과로 상태를 바꾸세요. 응답을 받지 못하고 시간초과가 나면 같은 요청을 바로 다시 보내지 마세요. 이미 접수됐을 수 있으니 GET /v1/sms/sendList 로 접수 여부를 먼저 확인합니다.

최종 결과 조회

잔여 코인·발송 가능 건수

GET /v2/info/coinInfo 는 유형별로 몇 건을 더 보낼 수 있는지 돌려줍니다.

잔여 건수 조회 응답 필드
필드설명
data.smsCntSMS 발송 가능 건수
data.lmsCntLMS 발송 가능 건수
data.mmsCntMMS 발송 가능 건수
data.atCnt알림톡 발송 가능 건수
data.totalCoin총 보유 코인

응답 예시

{
  "code": "0",
  "data": {
    "smsCnt": 13181,
    "lmsCnt": 4217,
    "mmsCnt": 1917,
    "atCnt": 13181,
    "totalCoin": 105448
  }
}

발송 결과 조회

발송 시 받은 msgId 로 GET /v1/sms/sendList/{msgId} 를 호출하면 요청 건수와 성공·실패·대기 건수, 그리고 수신자별 결과코드를 확인할 수 있습니다.

발송 상세 조회 주요 응답 필드
필드설명
data.totalCnt총 발송 요청 건수
data.successCnt전송 성공 건수
data.failCnt전송 실패 건수
data.waitCnt전송 대기 건수. 통신사 사정으로 최대 48시간 대기할 수 있습니다
list[].receiveNo수신자 번호
list[].resultCd결과코드
list[].resultCdNm결과 성공/실패 표기
발송 직후 조회하면 대부분 대기 상태입니다. 결과는 통신사 리포트가 와야 확정됩니다. 보내자마자 조회하지 말고 간격을 두고 확인하세요. resultCd 값의 의미와 조치 방법은 문자 발송 실패 원인과 결과코드에서 설명합니다.

예약 발송 취소

GET /v1/sms/cancel/{msgId}(문자) 또는 GET /v2/kakao/cancel/{msgId}(알림톡)를 호출하면 아직 통신사로 넘어가지 않은 발송 대기건(예약 포함)을 실패 처리하고, 해당 건의 코인을 환불합니다. 결과 code 는 0 취소 완료, 99 취소할 정보 없음(없는 msgId·다른 계정 발송 건), 96 이미 발송되었거나 취소할 대기건 없음, 97 취소를 지원하지 않는 발송 경로(고객센터 문의)입니다.

응답 code 표

HTTP 상태는 오류가 나도 200 입니다. 성공·실패는 응답 본문의 code 로 판단합니다. "0" 이 아니면 message 를 함께 기록하세요.

API 응답 code 표 (문자·포토문자 발송, 조회 API)
code뜻해결 방법
0접수 성공 (success)-
97예약 발송(reserveYn=Y)인데 sendDate 가 없거나 12자리가 아님 (문자·알림톡. 포토문자는 197)sendDate 를 YYYYMMDDHHMM 12자리로 넣습니다. 지난 시각인지는 검사하지 않으니 현재보다 뒤 시각을 넣으세요
100헤더 없음 (No header information.)user-id·api-key 헤더를 넣습니다
101user-id 헤더 없음 · 광고문자 21시~08시 / 선거문자 23시~06시 발송 불가 · 문자 발송 불가 상태 · 포토문자에 첨부·내용 모두 없음 · 보유 코인 없음헤더를 넣거나, 예약발송으로 시간을 옮기거나, 발송 불가 상태면 고객센터에 문의합니다
102api-key 헤더 없음 · 휴대폰 인증 필요 · 국제문자 불가·지원하지 않는 국가코드헤더를 넣고, sendm.co.kr 내정보에서 휴대폰 인증을 마칩니다. 국제문자는 kind·country 값을 확인합니다
103user-id 가 없거나 API 승인 전 · api-key 불일치 · 등록되지 않은 발신번호 · 고객정보 오류 · 건당 코인 없음(smsType·adYn 값 오류 포함)API 승인 상태와 키 값을 다시 확인하고, callerNo 가 등록·승인된 번호인지 발신번호 목록 API로 확인합니다
104고객정보 오류 · 수신자 정보 없음 · 코인 없음수신번호와 잔여 코인을 확인합니다. 계속되면 고객센터 문의
105허용되지 않은 IP(Not an allowed IP address. [IP]) · 헤더 정보 오류 · 발송 단계의 고객정보 오류(Customer information is incorrect) · 보유 코인 부족(Insufficient User Coins.)응답 대괄호 안의 IP를 API 설정의 발송 IP에 등록합니다. 코인 부족이면 충전합니다
106필수 파라미터 없음(callerNo·receiveNos·message) · 요청 본문(JSON) 읽기 실패 · 파라미터 형식 오류Content-Type 과 JSON 형식, 경로의 {msgId} 값을 확인합니다
107발신번호 목록 조회에서 callerNo 12자리 초과 · 알림톡에서 kakaoList 없음 또는 유효한 수신자 없음검색값 길이를 줄이거나, kakaoList 와 수신번호를 확인합니다
108보유 코인이 발송에 필요한 코인보다 적음 (There are not enough coins to send.) · 발신번호 목록 조회에서는 callerNm 50자 초과 (callerNm length is not valid.)코인을 충전합니다. 발신번호 목록 조회라면 callerNm 을 50자 이하로 줄입니다
109발송 처리 실패 (발신번호 목록 조회에서는 repYn 값 오류)고객센터 문의
110선거문자는 선거회원만 발송 가능 · 발송 처리 실패선거문자는 회원 유형을 선거회원으로 바꾼 뒤 보냅니다
111 ~ 115발송 처리 실패 (114 는 수신자 없음 포함)고객센터 문의
197예약 시각 누락·오류reserveYn=Y 이면 sendDate 를 현재보다 뒤 시각으로 넣습니다
201 · 202문자 발송 실패고객센터 문의
740허용되지 않은 HTTP 메서드 (예: Request method 'PATCH' not supported)엔드포인트 표의 메서드(POST/GET)로 호출합니다
801 ~ 803포토문자 변환 후 이미지 용량 초과(801 여러 장 합계 1MB, 802 한 장 1MB) · 허용되지 않는 확장자·이미지 처리 오류(803)JPG·JPEG·PNG 파일인지 확인하고, 장당 300KB 이하로 줄여 다시 보냅니다
950발송이 제한된 단어 포함 (문자·알림톡)해당 단어를 빼고 다시 보냅니다. 판단이 어려우면 고객센터 문의
996일일 발송 한도 초과 (일일 발송량 초과로 발송이 불가능 합니다.). 오늘 발송 건수와 이번 요청 건수의 합이 계정의 일일 한도를 넘으면 요청 전체를 거부합니다(일부만 발송하지 않음, 코인 차감·발송 기록 없음)받는 사람 수를 줄여 한도 안에서 보내거나, 다음 날 보냅니다. 한도 상향은 고객센터에 문의합니다
999서버 내부 오류 (Fail Exception, 문자·조회 API)같은 요청을 반복하지 말고 발송 목록으로 접수 여부를 확인한 뒤 고객센터에 문의
알림톡 발송·예약 취소 API 응답 code 표
code뜻해결 방법
106알림톡 kakaoList 형식 오류 · kakaoList[n].message 누락 · reYn·reType·reMsg·reTitle 값 오류kakaoList 를 JSON 배열 문자열로 보내고, 대체 문자 값을 확인합니다
101 ~ 105알림톡 승인 템플릿 없음(103) · 미등록 발신번호(103) · 카카오 발송 불가 계정 · 휴대폰 인증 필요 · 고객정보 오류 · 문자 대체 발송 권한 없음(102)message 로 원인을 확인합니다. senderKey·tmplCd 가 검수 승인된 템플릿인지 확인합니다
700카카오 발송 정보 없음요청 값을 확인하고, 계속되면 고객센터 문의
800 ~ 802알림톡 보유 코인 없음·부족 (포토문자의 801·802 와 뜻이 다릅니다)코인을 충전합니다
996수신자 정보 없음(수신자 정보가 없습니다.) 또는 일일 발송 한도 초과(일일 발송량 초과로 발송이 불가능 합니다.). 같은 번호이므로 message 로 구분합니다수신자 정보를 확인합니다. 한도 초과라면 받는 사람 수를 줄이거나 다음 날 보내고, 한도 상향은 고객센터에 문의합니다
997수신번호 없음 · 보유 코인 없음수신번호와 잔여 코인을 확인합니다
998 · 999카카오 발송 처리 오류 (카카오 발송 중 오류가 발생하였습니다.). 알림톡의 999 는 문자 API 의 999(서버 내부 오류)와 뜻이 다릅니다같은 요청을 반복하지 말고 카카오 발송 목록으로 접수 여부를 확인한 뒤 고객센터에 문의
-1알림톡 서버 내부 오류 (Fail Exception)같은 요청을 반복하지 말고 접수 여부를 확인한 뒤 고객센터에 문의
99 · 96 · 97예약 취소(/v1/sms/cancel·/v2/kakao/cancel) 결과 — 99 취소할 정보 없음, 96 이미 발송되었거나 취소할 대기건 없음, 97 취소를 지원하지 않는 발송 경로msgId 를 확인합니다. 97 은 고객센터 문의

같은 번호가 처리 단계에 따라 다른 뜻으로 쓰입니다(예: 101 은 헤더 누락일 수도, 야간 발송 제한일 수도 있습니다). 원인은 message 로 구분하세요. 이 표는 요청 접수 단계의 code 이고, 수신자별 전달 결과(resultCd)는 문자 발송 실패 원인과 결과코드에서 설명합니다.

실패 응답 예시 — 허용되지 않은 IP

{
  "code": "105",
  "message": "Not an allowed IP address. [203.0.113.10]",
  "data": { "msgId": 0 }
}

실패 응답 예시 — 필수값 누락

{
  "code": "106",
  "message": "There is no receiveNos information.",
  "data": { "msgId": 0 }
}

실패하면 msgId 는 0 입니다. 203.0.113.10 은 예시 IP입니다.

조회 API 요청·응답 필드

발신번호 목록 GET /v1/caller/callerNoList

요청 파라미터 (쿼리스트링, 모두 선택)
파라미터필수설명
callerNo선택발신번호 검색(부분 일치). 하이픈 등 숫자 외 문자는 빼고 비교하며 숫자만 12자리 이하(초과 시 107)
callerNm선택발신번호 이름 검색(부분 일치). 50자 이하(초과 시 108)
repYn선택Y 대표번호 / N 그 외
응답 필드
필드설명
totalCount발신번호 개수
list[].callerNo발신번호
list[].callerNm발신번호 이름
list[].repYn대표번호 여부

문자 발송 목록 GET /v1/sms/sendList

요청 파라미터 (쿼리스트링, 모두 선택)
파라미터기본값설명
pageIndex1페이지 번호
pageUnit10한 페이지 건수
pageSize10페이지 묶음 크기
caller-발신번호로 거르기. 하이픈 없이 숫자만, 정확히 일치하는 번호만 조회됩니다
응답 필드 (list[] 한 건 = 발송 요청 한 번, 최근 등록 순)
필드설명
totalCount전체 발송 요청 수
list[].msgId메시지 ID (상세 조회에 사용)
list[].callerNo · smsType · adYn · reserveYn요청 때 보낸 값
list[].sendDate예약이면 예약 시각, 아니면 접수 시각 (YYYYMMDDHHMM)
list[].title · message제목·내용
list[].totalCnt · successCnt · failCnt · waitCnt요청·성공·실패·대기 건수

잔여 건수(/v2/info/coinInfo)와 발송 상세(/v1/sms/sendList/{msgId}) 필드는 최종 결과 조회에 있습니다. 전체 명세는 /openapi.json(OpenAPI 3.0)으로도 받을 수 있습니다.

제한과 주의

API 발송 제한 요약
항목기준
호출 위치서버에서만 호출. 브라우저 호출 금지
발송 IP등록한 서버 IP만 허용
광고문자adYn=Y, 야간(21시~08시) 발송 제한. (광고) 표기·무료 수신거부번호는 본문에 직접 넣기
알림톡승인된 템플릿과 내용이 같아야 함
MMS 이미지최대 3장, JPG·JPEG·PNG. 1,500×1,440px를 넘으면 서버가 줄여 JPG로 변환, 변환 후 합계 1MB 이하. 장당 300KB 이하 권장
결과 대기통신사 사정으로 최대 48시간
호출 조건
항목기준
문자 인코딩UTF-8
HTTP 상태항상 200. 성공 여부는 본문 code
발송 IP계정에 등록한 IP와 정확히 같은 주소만 허용(대역 지정 없음). 서버 IP가 바뀌면 먼저 등록하세요
호출 방식동시에 여러 요청을 보내지 말고, 응답을 받은 뒤 다음 요청을 보내 주세요. 받는 번호가 많으면 한 요청에 모아 보내세요
응답 대기응답 대기 시간은 30초를 권장합니다. 시간이 초과되면 같은 요청을 바로 다시 보내지 말고, 발송 내역 조회(sendList)로 접수 여부를 먼저 확인하세요(중복 발송 방지)
결과 조회결과 조회는 1분 이상 간격을 두세요
일일 발송 한도계정에 일일 발송 한도가 설정된 경우, 오늘 발송 건수와 이번 요청 건수의 합이 한도를 넘으면 요청 전체를 code "996"(일일 발송량 초과로 발송이 불가능 합니다.)으로 거부합니다(문자·포토문자·알림톡). 일부만 발송하지 않으며 코인 차감·발송 기록이 없고 msgId 는 0 입니다. 합이 한도와 같으면 발송됩니다
시간초과 뒤 무조건 다시 보내지 마세요. 접수 여부를 조회로 확인한 뒤 접수되지 않은 건만 다시 보냅니다.

막혔다면

아래 순서로 확인하세요.

  1. 승인API 신청이 승인됐나요?
  2. IP호출하는 서버의 공인 IP를 등록했나요?
  3. 번호callerNo 가 등록·승인된 발신번호인가요?
  4. 잔액보낼 만큼 코인이 있나요?
  5. 요청 형식경로 버전(/v1·/v2)과 Content-Type이 맞나요?

업무별 연동 참고 (주문·예약·인증·대량 공지)

업무마다 쓰는 API와 고객 시스템이 맡을 일을 정리했습니다. 요청·응답 형식은 위 표를 따릅니다.

주문·배송 알림

  • 쓰는 APIPOST /v1/sms/send 또는 /v2/kakao/sendAt 로 단계별(접수·출고·배송 완료)로 보냅니다. 결과는 GET /v1/sms/sendList/{msgId}, 알림톡은 /v1/kakao/sendList/{msgId} 로 조회합니다.
  • 문자 대체알림톡이 실패했을 때 문자로 대신 보내려면 kakaoList[].reYn=Y 와 reType·reMsg 를 넣습니다.
  • 고객 시스템주문번호·단계와 msgId 를 함께 저장합니다. 같은 주문의 같은 단계는 한 번만 보내도록 쇼핑몰 쪽에서 막습니다.
  • 취소·반품보내기 전에 주문 상태를 다시 확인합니다. 예약 발송한 알림은 발송 전이면 GET /v1/sms/cancel/{msgId} 로 취소합니다.

예약·방문 안내

  • 쓰는 API확정 안내는 바로 보내고, 방문 전 안내는 reserveYn=Y·sendDate(YYYYMMDDHHMM)로 예약 발송합니다.
  • 변경예약 발송 내용을 고치는 API는 없습니다. 발송 전이면 GET /v1/sms/cancel/{msgId}(알림톡은 /v2/kakao/cancel/{msgId})로 취소하고 새로 예약합니다. 이미 발송이 시작된 건은 취소할 수 없습니다.
  • 고객 시스템예약번호와 msgId 를 함께 저장합니다(취소에 필요). 보내기 직전 예약이 취소·변경되지 않았는지 다시 확인하고, 시간대·휴무 같은 발송 조건도 고객 시스템에서 판단합니다.

회원 인증 메시지

  • 쓰는 APIPOST /v1/sms/send 로 인증번호 문자를 보냅니다. GET /v1/sms/sendList/{msgId} 결과는 참고용이며 인증 판정에 쓰지 않습니다.
  • 고객 시스템예측할 수 없는 인증번호 발급, 유효시간, 새 번호 발급 시 이전 번호 무효화, 재요청 간격·입력 횟수 제한, 성공 후 재사용 차단을 직접 만듭니다. 센드엠은 이 기능을 제공하지 않습니다.
  • 보안인증번호를 로그나 URL에 남기지 않습니다. 같은 번호로 하루에 보낼 수 있는 횟수를 정해 두면 코인 낭비를 막을 수 있습니다.

대량 공지

  • 쓰는 APIPOST /v1/sms/send 의 receiveNos 에 수신번호를 # 로 이어 보냅니다. 요청당 수신자 수와 호출 한도는 연동 전에 고객센터로 문의하고, 그 안에서 나눠 요청합니다.
  • 결과요청마다 받은 msgId 를 저장하고, GET /v1/sms/sendList/{msgId} 의 list[] 로 수신자별 결과를 모읍니다.
  • 재발송실패한 번호만 골라 다시 보냅니다. 전체를 다시 보내면 이미 받은 분께 두 번 갑니다. 코인이 부족하면 발송을 멈추고 GET /v2/info/coinInfo 로 잔액을 확인합니다.
  • 예약reserveYn·sendDate 로 예약하고, 발송 전이면 GET /v1/sms/cancel/{msgId} 로 취소합니다.
네 업무 모두 공통입니다. 응답 code "0" 은 접수됐다는 뜻이고 전달 성공이 아닙니다. 시간초과로 응답을 못 받으면 바로 다시 보내지 말고 GET /v1/sms/sendList 로 접수 여부를 먼저 확인합니다. 중복 발송 방지는 고객 시스템에서 합니다. 최종 실패한 건은 코인으로 자동 환불됩니다.

이 글에서 답한 질문

API는 어디에서 호출해야 하나요?

반드시 우리 서버(백엔드)에서 호출해야 합니다. 브라우저에서 직접 호출하면 아이디와 인증키가 소스에 드러나고, 요청 IP가 사용자마다 달라 IP 등록이 소용없어집니다.

발송 IP는 어떤 주소를 등록하나요?

지금 보고 있는 PC의 IP가 아니라 API를 호출하는 서버의 공인 IP를 등록합니다. 서버를 늘리거나 옮기면 다시 등록하세요.

API로 보내면 요금이 다른가요?

같습니다. API 발송도 선불 코인에서 차감되고, 단가는 웹 발송과 같습니다.

연동 준비가 되셨나요?

API 신청 후 승인되면 인증키를 발급해 드립니다.

loading...