SNSOTP OTP API
SMS 인증을 위한 REST API예요. 182개의 서비스 중 하나와 154개 국가 중 하나에서 번호를 주문하고, 주문에서 일회용 코드를 읽어요. 그리고 20분 안에 코드가 도착하지 않으면 전체 금액을 돌려받을 수 있어요.
모든 엔드포인트는 쿼리 파라미터(GET) 또는 폼 필드 또는 JSON(POST)으로 파라미터를 받아요. 응답은 JSON 형식이고, 금액은 소수점 두 자리까지의 USD 문자열로, 시간은 ISO 8601 형식의 UTC로 표시돼요.
https://snsotp.com/api/v1
콘솔에서 가져온 API 키를 Authorization: Bearer sok_...로 보내세요.
인증
콘솔의 API 페이지에서 키를 생성해요. sok_로 시작하며 한 번만 표시되므로 환경 변수에 저장해 두세요. 키를 교체하면 이전 키는 즉시 중지돼요. /services, /countries, /prices 호출은 키 없이도 작동해요.
Authorization: Bearer sok_your_key_here
키는 key 쿼리 파라미터나 폼 필드로도 보낼 수 있어요. 헤더를 설정할 수 없는 도구에서 유용해요.
빠른 시작
번호를 주문해 앱에 입력한 뒤, 코드가 올 때까지 주문을 폴링하세요. 같은 흐름을 네 가지 언어로 보여 드려요:
# 1. Order a number for whatsapp in US
curl -X POST https://snsotp.com/api/v1/orders \
-H "Authorization: Bearer $SNSOTP_KEY" \
-d service=whatsapp -d country=us
# 2. Read the code (poll every 3 to 5 seconds)
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \
-H "Authorization: Bearer $SNSOTP_KEY"GET/services
모든 서비스의 코드와 최저 가격 · 키 없음
주문할 수 있는 모든 서비스와 코드(다른 호출에서 service로 사용하세요), 카테고리, 그리고 국가별 최저 가격을 확인할 수 있어요. API 키가 필요하지 않아요.
curl https://snsotp.com/api/v1/services
{
"services": [
{ "code": "whatsapp", "name": "WhatsApp", "category": "social", "from": "0.09" },
{ "code": "telegram", "name": "Telegram", "category": "social", "from": "0.03" }
]
}GET/countries
모든 국가의 코드와 국가 번호 · 키 없음
모든 국가의 코드(ISO 3166 alpha-2 소문자, country 값으로 사용)와 국가 번호예요. 키가 필요 없어요.
curl https://snsotp.com/api/v1/countries
{
"countries": [
{ "code": "us", "name": "United States", "dial_code": "1" },
{ "code": "gb", "name": "United Kingdom", "dial_code": "44" }
]
}GET/prices
서비스, 국가 또는 둘 다에 대한 가격 · 키 없음
한 서비스에 대해 모든 국가에서, 한 국가에 대해 모든 서비스에서, 또는 한 쌍에 대해 주문당 가격이에요. 최소 하나의 필터를 보내세요. API 키가 필요 없어요.
매개변수
servicestring
서비스 코드, 예: whatsapp
countrystring
국가 코드, 예: us
curl "https://snsotp.com/api/v1/prices?service=whatsapp&country=us"
{
"prices": [
{ "service": "whatsapp", "country": "us", "price": "0.93" }
]
}GET/balance
USD 기준 크레딧 · 키 필요
USD 크레딧 잔액이에요.
curl https://snsotp.com/api/v1/balance \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"balance": "42.50",
"currency": "USD"
}POST/orders
서비스와 국가를 골라 번호 주문 · 키 필요
번호를 주문하고 가격을 차감해요. 응답에는 전체 번호(phone)와 국가 코드를 제외한 번호(number)가 포함돼요. 주문은 20분 동안 열려 있어요; 이 시간 동안 코드가 도착하지 않으면 가격이 자동으로 크레딧으로 환불돼요. 응답 상태는 201이에요.
매개변수
servicestring필수
GET /services에서 가져온 서비스 코드
countrystring필수
GET /countries에서 가져온 국가 코드
curl -X POST https://snsotp.com/api/v1/orders \ -H "Authorization: Bearer $SNSOTP_KEY" \ -d service=whatsapp -d country=us
{
"order": {
"id": "OT-7K2M9QX4PB",
"service": "whatsapp",
"country": "us",
"phone": "+13475550182",
"number": "3475550182",
"dial_code": "1",
"price": "0.93",
"status": "waiting",
"code": null,
"sms": null,
"codes": [],
"expires_at": "2026-11-03T12:20:00.000Z"
},
"window_minutes": 20
}GET/orders/{id}
하나의 주문에 대한 상태, 코드 및 SMS 텍스트 · 키 필요
하나의 주문과 그 상태, 최신 코드, 최신 SMS 텍스트, 그리고 지금까지 받은 모든 코드를 확인할 수 있어요. 상태가 waiting인 동안 3~5초마다 폴링하세요.
매개변수
idpath필수
POST /orders에서 가져온 주문 ID
curl https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": {
"id": "OT-7K2M9QX4PB",
"service": "whatsapp",
"country": "us",
"phone": "+13475550182",
"number": "3475550182",
"price": "0.93",
"status": "received",
"code": "284913",
"sms": "Your WhatsApp code is 284913",
"expires_at": "2026-11-03T12:20:00.000Z"
}
}GET/orders
열린 주문 (또는 status=all로 모든 주문) · 키 필요
진행 중인 주문을 최신순으로 확인할 수 있어요. 모든 상태의 최근 주문을 보려면 status=all을 추가하세요.
매개변수
statusstring
open (기본값) 또는 all
limitnumber
1~100, 기본값 50
curl "https://snsotp.com/api/v1/orders?status=open" \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"orders": [
{ "id": "OT-7K2M9QX4PB", "service": "whatsapp", "status": "received", "code": "284913" }
]
}POST/orders/{id}/resend
같은 번호로 다른 코드 받기 · 키 필요
첫 코드 뒤, 코드 대기 시간 안에 같은 번호로 다른 코드를 추가 비용 없이 요청해요. 그다음 앱에서 새 SMS를 보내게 하세요. 도착할 때까지 waiting_for_resend가 true예요.
매개변수
idpath필수
주문 ID
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/resend \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "received", "waiting_for_resend": true }
}POST/orders/{id}/finish
코드를 사용한 후 주문 종료 · 키 필요
코드를 받아 사용한 주문을 닫아요. 완료는 선택이에요: 열린 주문은 코드 대기 시간이 끝나면 자동으로 닫혀요.
매개변수
idpath필수
주문 ID
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/finish \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "finished" }
}POST/orders/{id}/cancel
코드 전 취소 시 전액 환불 · 키 필요
코드가 도착하기 전에 주문을 취소하면 전체 금액이 즉시 크레딧으로 돌아가요. 코드가 도착한 후에는 취소 요청에 has_code 응답이 와요.
매개변수
idpath필수
주문 ID
curl -X POST https://snsotp.com/api/v1/orders/OT-7K2M9QX4PB/cancel \ -H "Authorization: Bearer $SNSOTP_KEY"
{
"order": { "id": "OT-7K2M9QX4PB", "status": "canceled", "refunded": "0.93" }
}주문 상태
waiting번호가 준비되었지만 아직 SMS가 도착하지 않았어요. 취소가 가능해요.received최소 하나의 인증 코드가 도착했어요. code와 sms에는 가장 최근 코드가 저장되어 있어요.finished코드 수신 후, 완료 시 또는 코드 대기 시간이 종료된 후에 닫혔어요.refunded20분 안에 코드가 도착하지 않았어요. 전체 금액이 크레딧으로 돌아왔어요.canceled코드가 도착하기 전에 취소했어요. 전체 금액이 크레딧으로 돌아왔어요.
오류
에러는 HTTP 상태와 함께 안정적인 코드와 읽기 쉬운 메시지가 포함된 본문을 사용해요.
- 400
missing_filter, bad_json필수 값이 누락되었거나 본문을 읽을 수 없어요. - 401
no_key, bad_key키가 누락되었거나, 잘못되었거나, 삭제되었어요. - 402
no_balance이 주문을 하기에는 크레딧이 부족해요. 콘솔에서 크레딧을 충전하세요. - 404
unknown_service, unknown_country, not_sold, not_found인증 코드나 주문이 존재하지 않거나, 해당 조합이 판매되지 않았어요. - 409
too_many_open, has_code, not_ready, no_numbers해당 작업이 주문 상태와 맞지 않거나, 현재 사용 가능한 번호가 없어요(요금이 청구되지 않아요). - 429
rate_limited한 키로 1분에 300회를 넘게 요청했어요.
{
"error": {
"code": "no_balance",
"message": "Not enough credit. Add credit in the console."
}
}요청 한도
- 키당 분당 300회 요청이 가능해요. 이를 초과하면 API는 해당 분 동안 429 rate_limited로 응답해요.
- 계정당 최대 20개의 주문을 열 수 있어요. 새로운 주문을 하려면 기존 주문을 완료하거나 취소하세요.
- 주문을 3~5초마다 폴링하세요. 코드는 보통 1분 이내에 도착해요.
SMS 액티베이션 형식
널리 쓰이는 handler_api.php 형식으로 작성한 스크립트도 같은 API 키로 작동해요. 기본 주소만 https://snsotp.com/stubs/handler_api.php로 바꾸고 액션은 그대로 두세요. 서비스와 국가 코드는 REST API와 같아요.
getBalanceACCESS_BALANCE:42.50
getServicesList서비스 JSON 목록
getCountries국가 JSON 맵
getPricesservice, country (선택 사항)JSON {country: {service: {cost, count}}}
getNumberservice, countryACCESS_NUMBER:<id>:<phone>
getStatusidSTATUS_WAIT_CODE, STATUS_OK:<code>, STATUS_WAIT_RETRY:<code>, STATUS_CANCEL
setStatusid, status 1 / 3 / 6 / 8ACCESS_READY, ACCESS_RETRY_GET, ACCESS_ACTIVATION, ACCESS_CANCEL
curl "https://snsotp.com/stubs/handler_api.php\ ?api_key=$SNSOTP_KEY&action=getNumber\ &service=telegram&country=gb" ACCESS_NUMBER:OT-3QF8ZK2W7M:447700900182
setStatus 값: 1 준비, 3 다른 코드, 6 완료, 8 전체 환불로 취소.