바이브 코더를 위한 SMS 게이트웨이 API
SMS8은 본인의 안드로이드를 기반으로 구축된 개발자용 SMS 게이트웨이입니다. Claude Code, Cursor, Windsurf 또는 curl에서 SMS, MMS, OTP, USSD를 발송할 수 있습니다. 키 하나, 베이스 URL 하나, JSON 입력과 JSON 출력.
샌드박스
여기서 바로 SMS 게이트웨이를 사용해 보세요. API 키를 붙여 넣고, 전화번호와 메시지를 입력한 뒤 발송 버튼을 누르세요. 사용자를 대신해 /services/send.php로 POST 요청을 보내고 실제 JSON 응답을 표시한 다음, 탭을 전환해 동일한 요청을 curl, PHP, JavaScript, Python 또는 Claude Code / Cursor 프롬프트로 가져갈 수 있습니다.
테스트 & 복사
실제 SMS 1건이 발송되며 크레딧 1개가 사용됩니다. API 키는 브라우저 밖으로 나가지 않습니다. 요청은 app.sms8.io로 직접 전송됩니다.
개요
SMS8 SMS 게이트웨이는 하나의 호스트에서 기능별로 단일 엔드포인트를 제공합니다. 경로 파라미터나 중첩 리소스가 없습니다. 모든 동작은 form-encoded 필드를 포함한 단일 POST입니다.
- 베이스 URL:
https://app.sms8.io/services/ - 메서드: 모든 엔드포인트에서
POST - 본문:
application/x-www-form-urlencoded - 응답:
application/json - 인증: 본문의
key=YOUR_SMS8_API_KEY
mcp.sms8.io에 있는 MCP 서버를 추가하세요. AI 어시스턴트가 대신 이러한 엔드포인트를 호출합니다. AI 도구 섹션을 참고하세요.
인증
모든 요청은 POST 본문에 API 키를 전송합니다. 키는 계정별이며 모든 엔드포인트에 대해 권한을 부여합니다. 대시보드의 API 페이지 app.sms8.io/api.php에서 키를 받을 수 있으며 언제든지 재생성할 수 있습니다. 이전 키는 즉시 무효화됩니다.
# 모든 요청에서
key=YOUR_SMS8_API_KEY
mcp.sms8.io의 MCP 서버는 동일한 키를 Bearer 헤더(Authorization: Bearer YOUR_SMS8_API_KEY)로 받습니다. 헤더 기반 인증만 지원하는 도구에 유용합니다.
첫 SMS 보내기
페어링된 안드로이드의 기본 기기를 사용해 한 번호로 메시지를 보냅니다. YOUR_SMS8_API_KEY와 수신 번호를 교체하세요.
curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "number=+11234567890" \ -d "message=SMS8에서 보내는 메시지"
응답 형식
모든 엔드포인트의 응답은 success 래퍼에 페이로드를 감쌉니다.
{
"success": true,
"data": {
"messages": [
{
"ID": "1",
"number": "+11234567890",
"message": "Hello from SMS8",
"deviceID": "1",
"simSlot": "0",
"status": "Pending",
"type": "sms",
"sentDate": "2026-05-24T10:30:00+00:00",
"deliveredDate": null,
"groupID": "…"
}
]
}
}
오류
실패 시 success는 false이며 본문에는 구조화된 error 객체가 포함됩니다.
{
"success": false,
"error": {
"code": 401,
"message": "Invalid API key"
}
}
| 코드 | 의미 |
|---|---|
| 400 | 파라미터 누락 또는 형식 오류 |
| 401 | API 키 누락 또는 잘못된 키 |
| 402 | 메시지 크레딧 부족 |
| 403 | 이 계정 또는 요금제에서 허용되지 않은 동작 |
| 404 | 리소스를 찾을 수 없음 (예: 알 수 없는 메시지 ID) |
| 429 | 요청 제한 도달, 속도를 줄이고 재시도 |
| 500 | 서버 오류, 재시도하세요 |
SMS & MMS 발송
/services/send.php
단건, 배치, 목록 브로드캐스트, MMS
하나의 엔드포인트가 네 가지 발송 모드를 다룹니다. 단건 메시지, 배치(번호별로 다른 메시지), 연락처 목록 브로드캐스트, 그리고 첨부가 있는 MMS입니다. 어떤 필드를 보내느냐에 따라 모드가 결정됩니다.
| 필드 | 타입 | 설명 |
|---|---|---|
| key | string | API 키, 필수 |
| number | string | E.164 형식 전화번호, 단건/일괄 모드용 콤마 구분 목록 가능 |
| message | string | 메시지 본문, number 또는 listID와 함께 필수 |
| messages | JSON | 실제 배치 모드용 {number, message, type, attachments} 배열 |
| listID | int | 이 목록의 모든 연락처에게 발송 |
| devices | JSON|int | 단일 ID, JSON 배열, 또는 SIM이 지정된 "2|0" 형식 |
| option | 0|1|2 | 라우팅 참고: 지정 기기, 모든 기기, 또는 모든 SIM |
| useRandomDevice | 0|1 | 선택된 기기에서 무작위로 하나 선택 |
| prioritize | 0|1 | 큐 우선 처리 (OTP, 응답 등) |
| type | sms|mms | 기본값 sms |
| attachments | string | 콤마로 구분된 이미지 URL (MMS 전용) |
| schedule | unix ts | 이 시점에 미래 발송 |
한 번의 호출로 배치 발송
curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d 'messages=[{"number":"+1...","message":"hi 1"},{"number":"+1...","message":"hi 2"}]' \ -d "option=2"
연락처 목록에 브로드캐스트
curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "listID=1" \ -d "message=오늘 밤 세일 종료"
메시지 조회
/services/read-messages.php
ID, 그룹, 상태, 기기, 시간별 조회
| 필드 | 타입 | 설명 |
|---|---|---|
| key | string | API 키, 필수 |
| id | int | ID로 단일 메시지 조회 |
| groupId | string | 발송 시 반환된 그룹 ID, 배치에 유용 |
| status | string | Received, Sent, Pending, Failed |
| deviceID | int | 기기로 필터 |
| simSlot | int | 첫 번째 SIM은 0, 두 번째는 1 |
| startTimestamp | unix ts | 이상 (시작 시각 포함) |
| endTimestamp | unix ts | 이하 (종료 시각 포함) |
# 기기 8의 SIM 0에서 지난 24시간 동안 수신된 SMS curl https://app.sms8.io/services/read-messages.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "status=Received" \ -d "deviceID=8" \ -d "simSlot=0" \ -d "startTimestamp=$(( $(date +%s) - 86400 ))"
재발송
/services/resend.php
ID, 그룹, 상태별 재시도
read-messages와 동일한 필터 구조를 사용합니다. 단일 ID, 그룹 내 모든 메시지, 또는 지정한 시간 범위 내 특정 상태의 모든 메시지를 재시도할 수 있습니다.
연락처
/services/manage-contacts.php
추가, 재구독, 구독 취소
| 필드 | 타입 | 설명 |
|---|---|---|
| key | string | API 키, 필수 |
| listID | int | 대상 연락처 목록, 필수 |
| number | string | 연락처 전화번호, 필수 |
| name | string | 표시 이름 (추가 시에만) |
| resubscribe | 0|1 | 이전에 구독 취소된 경우 재구독 |
| unsubscribe | 0|1 | 목록에서 제거 |
기기
/services/get-devices.php
페어링된 안드로이드 기기 목록
활성화된 모든 기기와 모델명, SIM 슬롯, 기본 기기 플래그를 반환합니다. 발송 호출에서 devices를 구성하기 전에 유용합니다.
USSD
/services/send-ussd-request.php
예: *150# 잔액 확인
/services/read-ussd-requests.php
전송한 USSD 요청 조회
페어링된 기기에서 통신사 USSD 코드를 실행하고 응답을 받아옵니다. 선불 요금 잔액 확인이나 통신사 메뉴에 유용합니다.
수신 웹훅
대시보드의 API 페이지에서 웹훅 URL을 설정하세요. SMS8은 수신된 모든 SMS를 HMAC-SHA256 서명과 함께 해당 URL로 POST합니다. 따라서 수신자는 페이로드가 SMS8에서 왔으며 변조되지 않았음을 검증할 수 있습니다.
AI 도구에서는 MCP의 create_webhook 도구를 통해 웹훅을 등록하세요. URL은 저장 전에 SSRF 차단 목록과 대조해 검증됩니다.
기기 & SIM 라우팅
모든 발송 엔드포인트는 동일한 라우팅 컨트롤을 사용합니다. 이를 조합해 여러 휴대폰과 SIM에 부하를 분산할 수 있습니다.
| option | 동작 |
|---|---|
| 0 | devices에 지정한 ID를 그대로 사용합니다. SIM 슬롯은 "2|0" (기기 2, SIM 0) 형식을 사용합니다. |
| 1 | 활성화된 모든 기기를 사용하며 기기별 기본 SIM을 씁니다. 배치는 기기들에 분산됩니다. |
| 2 | 활성화된 모든 기기와 모든 SIM을 사용합니다. 듀얼 SIM 휴대폰에서 최대 처리량을 얻을 수 있습니다. |
useRandomDevice=1로 설정하면 선택된 기기에서 무작위로 하나의 발신자를 고르며, OTP에 유용합니다.
예약 발송
schedule에 unix 타임스탬프를 전달하면 발송을 지연시킬 수 있습니다. 동일한 메시지를 여러 번호로 예약할 수도 있고, 배치를 미래 일정으로 예약할 수도 있습니다. 둘 다 가능합니다.
크레딧 잔액
/services/send.php를 key 필드만 포함해 호출하세요. 응답의 credits 필드는 남은 크레딧 또는 "Unlimited"를 반환합니다.
Claude Code, Cursor & Windsurf에서 사용하기
SMS8은 위 모든 REST 엔드포인트를 JSON-RPC 도구로 감싼 MCP 서버를 mcp.sms8.io에서 제공합니다. 동일한 API 키를 쓰며 별도의 계정이 필요 없습니다.
// ~/.config/claude/mcp-servers.json (Claude Code) // ~/.cursor/mcp.json (Cursor) // ~/.codeium/windsurf/mcp_config.json (Windsurf) { "mcpServers": { "sms8": { "url": "https://mcp.sms8.io", "transport": "http", "headers": { "Authorization": "Bearer YOUR_SMS8_API_KEY" } } } }
| MCP 도구 | 래핑하는 엔드포인트 |
|---|---|
| send_sms | /services/send.php |
| send_otp | OTP 저장소 + /services/send.php |
| verify_otp | OTP 저장소, 상수 시간 비교 |
| get_messages | /services/read-messages.php |
| list_devices | /services/get-devices.php |
| create_webhook | 사용자 웹훅 URL (SSRF 검증) |
| setup_sms8 | 계정 + 기기 핸드셰이크 |
PHP SDK
app.sms8.io/api.php 대시보드에서는 API 키가 미리 채워진 완전한 PHP 클래스를 렌더링합니다. sendSingleMessage, sendMessages, sendMessageToContactsList, getMessageByID, getMessagesByStatus, resendMessageByID, addContact, unsubscribeContact, getBalance, sendUssdRequest, getDevices 메서드를 포함합니다.
$msg = sendSingleMessage("+11234567890", "SMS8에서 보내는 메시지"); $msg = sendSingleMessage("+11234567890", "기기 1에서 발송", 1); $msg = sendSingleMessage("+11234567890", "SIM 0에서 발송", "1|0"); $msg = sendSingleMessage("+11234567890", "2분 뒤 발송", null, strtotime("+2 minutes"));
C# SDK
완전한 C# API 클래스도 대시보드에 미리 채워져 있습니다. PHP SDK와 동일한 인터페이스를 제공하며 .NET / Unity / Xamarin 프로젝트에 바로 사용할 수 있습니다.
SMS.API.SendSingleMessage("+11234567890", "SMS8에서 보내는 메시지"); var msg = SMS.API.SendSingleMessage("+11234567890", "기기 1에서 발송", "1"); var msgs = SMS.API.SendMessages(messages, SMS.API.Option.USE_ALL_SIMS);
curl 레시피
# OTP 스타일 메시지를 우선순위로 발송 curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "number=+11234567890" \ -d "message=인증번호는 482910입니다" \ -d "prioritize=1" \ -d "devices=1" # 메시지 크레딧 확인 curl https://app.sms8.io/services/send.php \ -d "key=YOUR_SMS8_API_KEY" # 연락처 추가, 이미 있으면 재구독 curl https://app.sms8.io/services/manage-contacts.php \ -d "key=YOUR_SMS8_API_KEY" \ -d "listID=1" \ -d "number=+11234567890" \ -d "name=Alex" \ -d "resubscribe=1"
FAQ
SMS8 SMS 게이트웨이 API란 무엇인가요?
SMS와 MMS 발송, 연락처 관리, USSD 실행, 인박스 조회를 수행하는 HTTP API입니다. 모든 엔드포인트는 https://app.sms8.io/services/ 하위의 POST이며 key 파라미터로 인증합니다. 메시지는 페어링된 안드로이드 휴대폰을 통해 라우팅되므로 A2P 10DLC나 메시지당 비용이 없습니다.
Claude Code, Cursor, Windsurf에서 어떻게 사용하나요?
mcp.sms8.io의 MCP 서버를 AI 도구에 추가하고 SMS8 API 키를 Bearer 토큰으로 사용하세요. MCP는 동일한 REST 엔드포인트를 send_sms, send_otp, verify_otp 같은 JSON-RPC 도구로 감쌉니다. AI 도구 섹션을 참고하세요.
Twilio 번호 없이 발송할 수 있나요?
네. SMS8은 본인의 안드로이드 휴대폰과 SIM 카드를 게이트웨이로 사용합니다. Twilio 번호, A2P 10DLC 등록, 통신사 메시지당 비용이 필요 없습니다.
수신 SMS를 어떻게 받나요?
대시보드의 API 페이지에서 웹훅 URL을 설정하세요. SMS8은 수신된 모든 SMS를 HMAC 서명과 함께 해당 URL로 POST하므로 페이로드를 검증할 수 있습니다.
어떤 속도 제한이 적용되나요?
SMS 처리량은 페어링된 기기의 속도와 요금제의 월간 사용량에 따라 결정됩니다. OTP 흐름에는 24시간당 번호별 5회 한도와 구성 가능한 재발송 쿨다운이 추가로 적용됩니다.
API 키를 어떻게 교체하나요?
대시보드 app.sms8.io/api.php에서 재생성하세요. 이전 키는 즉시 무효화됩니다.