문자 발송 API 연동 방법
센드엠 API는 REST 방식입니다. HTTPS로 JSON을 보내고 JSON을 받습니다. 별도 SDK 설치 없이 HTTP 요청이 가능한 언어라면 무엇이든 연동할 수 있습니다.
센드엠 API는 어떻게 연동하나요?
센드엠 API 서버는 https://api.sendm.co.kr 입니다. 모든 요청에 user-id(센드엠 아이디)와 api-key(API 신청 후 발급받은 키) 두 개의 헤더를 넣어 호출합니다.
문자 발송은 POST /v1/sms/send 에 JSON을 보내면 되고, 응답의 code 가 "0" 이면 접수 성공입니다. 함께 돌아오는 data.msgId 로 나중에 발송 결과를 조회합니다.
올바른 구조는 클라이언트 → 우리 서버(Java·Node.js·PHP 등) → 센드엠 API 입니다.
연동 전에 준비할 것
- 회원가입과 API 신청
API 신청 화면에서 신청하고 승인을 받습니다. 승인 후 인증키(
api-key)가 발급됩니다. - 발신번호 등록
보내는 사람으로 쓸 번호를 미리 등록·승인받아야 합니다. 등록되지 않은 번호를
callerNo로 보내면 발송되지 않습니다. 절차는 발신번호 등록 방법을 참고하세요. - 발송 IP 등록
API를 호출할 서버의 공인 IP를 등록합니다. 등록되지 않은 IP에서의 호출은 차단됩니다.
- 코인 충전
API 발송도 웹 발송과 동일하게 선불 코인에서 차감됩니다. 단가는 요금안내와 같습니다.
공통 요청 규격
모든 API가 같은 인증 헤더를 씁니다.
| 헤더 | 필수 | 설명 |
|---|---|---|
user-id | 필수 | sendm.co.kr 회원가입 아이디 |
api-key | 필수 | API 서비스 신청 후 발급받은 인증키 |
응답 형식 (모든 API 공통)
{
"code": "0", // "0" 이면 성공, 그 외는 실패
"message": "success", // 실패 시 사유 메시지
"data": { "msgId": 1 } // 발송 API 는 메시지 ID 를 돌려준다
}
code 는 문자열 "0" 입니다. 숫자 0과 비교하는 언어에서는 타입에 주의하세요. msgId 는 발송 결과를 조회할 때 쓰므로 저장해 두는 것을 권장합니다.
제공 엔드포인트
기준 주소는 https://api.sendm.co.kr 입니다.
| 기능 | 메서드 | 경로 | Content-Type |
|---|---|---|---|
| 문자 발송 (SMS·LMS) | POST | /v1/sms/send | application/json |
| 포토문자 발송 (MMS) | POST | /v1/mms/send | multipart/form-data |
| 알림톡 발송 | POST | /v2/kakao/sendAt | multipart/form-data |
| 발신번호 목록 조회 | GET | /v1/caller/callerNoList | application/json |
| 잔여 코인·발송 가능 건수 | GET | /v2/info/coinInfo | application/json |
| 문자 발송 목록 | GET | /v1/sms/sendList | application/json |
| 문자 발송 상세(수신자별 결과) | GET | /v1/sms/sendList/{msgId} | application/json |
| 예약 문자 취소 | GET | /v1/sms/cancel/{msgId} | application/json |
| 카카오 발송 목록 | GET | /v1/kakao/sendList | application/json |
| 카카오 발송 상세 | GET | /v1/kakao/sendList/{msgId} | application/json |
| 예약 카카오 취소 | GET | /v2/kakao/cancel/{msgId} | application/json |
문자 계열은 /v1, 알림톡 발송·취소와 잔여건수 조회는 /v2 입니다. 경로의 버전을 임의로 바꾸면 동작하지 않습니다.
문자 발송 (SMS·LMS)
| 파라미터 | 필수 | 기본값 | 설명 |
|---|---|---|---|
callerNo | 필수 | - | 발신번호. 사이트에 등록·승인된 번호여야 합니다 |
message | 필수 | - | 문자 내용 |
receiveNos | 필수 | - | 수신번호. 여러 건은 # 로 구분예) 010-0000-0001#010-0000-0002 |
smsType | 선택 | SMS | SMS 단문 / LMS 장문 |
title | 선택 | - | 제목. 장문(LMS)에서만 사용 |
adYn | 선택 | N | N 일반 / Y 광고 / E 선거 |
reserveYn | 선택 | N | N 즉시발송 / Y 예약발송 |
sendDate | 선택 | 현재시간 | 발송 시각. YYYYMMDDHHMM(24시간제)예) 202303182045 |
messageCd | 선택 | - | 문자 템플릿 코드. 지정하면 본문이 템플릿 내용으로 대체됩니다 |
kind | 선택 | - | 국제문자일 때만. I 국제문자 / L 국제문자 MMS |
country | 선택 | - | 국제문자일 때만. 국가코드(81, 86 등) |
단문(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-6959-8827",
"message": "주문이 접수되었습니다.",
"receiveNos": "010-0000-0001#010-0000-0002"
}
장문(LMS) 요청 예시 — 제목과 예약 시각 포함
{
"callerNo": "02-6959-8827",
"smsType": "LMS",
"title": "배송 안내",
"message": "주문하신 상품이 오늘 출고되었습니다. ...",
"receiveNos": "010-0000-0001",
"reserveYn": "Y",
"sendDate": "202303182045"
}
adYn 을 Y 로 보내세요. 광고로 지정하면 (광고) 표기와 무료 수신거부번호가 규정에 맞게 처리됩니다. 지켜야 할 기준은 광고문자 발송 방법에 정리되어 있습니다. 야간(21시~08시) 발송 제한도 API 발송에 동일하게 적용됩니다.
포토문자 발송 (MMS)
파일을 첨부해야 하므로 JSON이 아니라 multipart/form-data 로 보냅니다.
| 파라미터 | 필수 | 설명 |
|---|---|---|
smsType | 선택 | 기본값 MMS |
message | 선택 | 포토문자는 본문이 없어도 됩니다 |
attachFile01attachFile02attachFile03 | 선택 | 첨부 이미지. 최대 3장 |
이미지 규격(1500×1440px 이하, 장당 300KB 미만, JPG·JPEG·PNG)은 웹 발송과 같습니다. SMS·LMS·MMS 차이에서 확인하세요.
알림톡 발송
수신자마다 치환 내용이 다르므로 수신자 목록을 kakaoList 배열로 보냅니다.
| 파라미터 | 필수 | 설명 |
|---|---|---|
callerNo | 필수 | 발신번호(등록·승인된 번호) |
senderKey | 필수 | 카카오 채널 발신 프로필 키 |
tmplCd | 필수 | 승인된 알림톡 템플릿 코드 |
kakaoList | 필수 | 수신자·내용 리스트(JSON 배열 문자열) |
kakaoList[].receive | 필수 | 수신번호 |
kakaoList[].message | 필수 | 치환이 끝난 알림톡 내용. 승인된 템플릿과 내용이 일치해야 합니다 |
kakaoList[].btnMobUrlkakaoList[].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 상품이 출고되었습니다."
}
]
알림톡은 템플릿 사전 승인이 필요합니다. 채널 등록부터 템플릿 승인까지는 카카오 알림톡 시작하기를 참고하세요.
발송 결과와 잔여 건수 조회
잔여 코인·발송 가능 건수
GET /v2/info/coinInfo 는 유형별로 몇 건을 더 보낼 수 있는지 돌려줍니다.
{
"code": "0",
"data": {
"smsCnt": 13181, // SMS 발송 가능 건수
"lmsCnt": 4217, // LMS 발송 가능 건수
"mmsCnt": 1917, // MMS 발송 가능 건수
"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}(알림톡)를 호출하면 아직 발송되지 않은 예약 건을 취소합니다.
언어별 예제 코드
표준 HTTP 요청이라 특별한 라이브러리가 필요 없습니다.
이어서 보면 좋은 문서
최종 업데이트 : 2026년 9월 16일 · 「센드엠 API 연동정의서 v3.0」 기준