SMS 인증 API
마지막 수정일: 2026/11/03
API 요청 보내기
두 가지 API가 하나의 키를 공유해요: JSON 형식의 REST API와 이미 많은 도구에서 사용하는 SMS 액티베이션 형식이에요. 콘솔의 API 키 페이지에서 키를 생성할 수 있고, 키는 한 번만 표시돼요. 제한: 키당 분당 300회 요청 가능해요. 각 주문은 콘솔과 동일하게 20분의 코드 대기 시간을 가져요.
# REST API (JSON) curl https://virtualsns.com/api/v1/balance -H "Authorization: Bearer YOUR_KEY" # SMS activation format curl "https://virtualsns.com/stubs/handler_api.php?api_key=YOUR_KEY&action=getBalance"
서비스 및 국가 코드
서비스 코드는 우리 서비스 페이지 주소에 사용되는 이름이에요. 예를 들어 카카오톡, 라인, 위챗, 잘로, 네이버, 쇼피, 왓츠앱 등이 있어요. 국가 코드는 소문자 ISO 코드예요: kr, jp, id, ph, vn, th, us 등. GET /services와 GET /countries를 통해 전체 목록을 확인할 수 있어요.
일반적인 흐름
- 서비스와 국가로 번호를 주문하세요. id를 저장하세요.
- 앱에 번호를 입력하고 SMS를 보내도록 요청하세요.
- 코드가 올 때까지 4초마다 주문 상태를 확인하세요.
- SMS를 한 번 더 받으시겠어요? '다른 코드 요청'을 선택한 후 다시 확인하세요. 완료되면 주문을 종료하세요.
- 인증 코드가 안 왔나요? 취소하면 전액 환불받을 수 있어요. 전화 없이도 대기 시간이 끝나면 자동으로 환불이 진행돼요.
Python
import os, time, requests
API = "https://virtualsns.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['VIRTUALSNS_KEY']}"}
order = requests.post(f"{API}/orders", headers=H,
data={"service": "kakaotalk", "country": "kr"}).json()["order"]
print("Use this number:", order["phone"])
while True:
o = requests.get(f"{API}/orders/{order['id']}", headers=H).json()["order"]
if o["code"] or o["status"] in ("refunded", "canceled"):
break
time.sleep(4)
print("Code:", o["code"])Node.js
const API = "https://virtualsns.com/api/v1";
const H = { Authorization: `Bearer ${process.env.VIRTUALSNS_KEY}` };
const { order } = await fetch(`${API}/orders`, {
method: "POST", headers: H,
body: new URLSearchParams({ service: "line", country: "jp" }),
}).then((r) => r.json());
console.log("Use this number:", order.phone);
let o = order;
while (!o.code && !["refunded", "canceled"].includes(o.status)) {
await new Promise((r) => setTimeout(r, 4000));
({ order: o } = await fetch(`${API}/orders/${order.id}`, { headers: H }).then((r) => r.json()));
}
console.log("Code:", o.code);오류 코드
REST API
에러는 JSON으로 오는데요: {"error":{"code","message"}} 이런 HTTP 상태와 함께요:
| 400 | 필터가 없거나 잘못된 필드예요 (missing_filter, bad_json). |
| 401 | 키가 없거나 잘못된 키예요 (no_key, bad_key). |
| 402 | 크레딧이 부족해요 (no_balance). |
| 404 | 알 수 없는 서비스, 국가, 주문 또는 엔드포인트예요. |
| 409 | 현재 주문을 처리할 수 없어요 (has_code, not_ready, too_many_open, no_numbers). |
| 429 | 1분에 300건 이상의 요청이 들어왔어요 (rate_limited). |
SMS 인증 형식
| BAD_KEY | API 키가 없거나 잘못되었어요. |
| BAD_ACTION | 알 수 없는 작업이에요. |
| BAD_SERVICE | 알 수 없는 서비스 코드예요. |
| BAD_COUNTRY | 해당 국가에서는 서비스를 제공하지 않아요. |
| NO_BALANCE | 크레딧이 부족해요. |
| NO_NUMBERS | 지금은 사용 가능한 번호가 없어요. 잠시 후에 다시 시도해 보세요. |
| NO_ACTIVATION | 알 수 없거나 본인 것이 아닌 액티베이션 ID예요. |
| EARLY_CANCEL_DENIED | 이미 인증 코드가 도착해서 액티베이션을 취소할 수 없어요. |
| TOO_MANY_REQUESTS | 1분에 300건 이상의 요청이 있어요. |
| NO_ACTIVATIONS | 인증 번호 20건이 이미 열려 있어요. |
REST API 메소드
https://virtualsns.com/api/v1
GET/services
모든 서비스 코드와 이름, 종류, 최저 가격을 확인할 수 있어요. 키가 필요하지 않아요.
curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}GET/countries
모든 국가 코드(ISO, 소문자)와 국가명, 전화번호 앞번호가 표시돼요. 키는 필요 없어요.
curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}GET/prices
USD 기준 가격이에요. 서비스나 국가를 추가하세요. 키는 필요 없어요.
curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}GET/balance
보유 크레딧 (USD)
curl "https://virtualsns.com/api/v1/balance" \ -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}POST/orders
인증용 번호를 구매해요 (201). 전화번호와 대기 시간이 끝나는 시간을 반환해요.
curl -X POST https://virtualsns.com/api/v1/orders \ -H "Authorization: Bearer YOUR_KEY" \ -d service=kakaotalk -d country=kr
{"order":{"id":"AC-7K2M9QX4PB","service":"kakaotalk","country":"kr","phone":"+821023456789","status":"waiting","code":null,"expires_at":"2026-11-03T12:20:00.000Z"},"window_minutes":20}GET/orders/AC-7K2M9QX4PB
한 건의 주문과 그 상태, 수신된 모든 인증 코드를 확인할 수 있어요. 상태: 대기 중, 수신 완료, 완료, 환불됨, 취소됨.
curl "https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB" \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"id":"AC-7K2M9QX4PB","status":"received","code":"482193","sms":"[Kakao] Verification code [482193]"}}GET/orders
진행 중인 주문 (최근 100건, status=all로 조회)
curl "https://virtualsns.com/api/v1/orders?status=open" \ -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}POST/orders/AC-7K2M9QX4PB/resend
첫 번째 코드 이후, 대기 시간이 남아 있는 동안 같은 번호로 다른 코드를 요청할 수 있어요. 추가 요금은 없어요.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/resend \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"received","waiting_for_resend":true}}POST/orders/AC-7K2M9QX4PB/finish
인증 코드를 받은 주문을 닫아요.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/finish \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"finished"}}POST/orders/AC-7K2M9QX4PB/cancel
코드가 도착하기 전에 취소할 수 있어요. 전체 금액이 크레딧으로 돌아가요.
curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \ -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}SMS 인증 형식 메소드
https://virtualsns.com/stubs/handler_api.php
메소드 getBalance
보유 크레딧 (USD)
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
메소드 getServicesList
구매 가능한 서비스 코드 (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}메소드 getCountries
국가 코드 (ISO, 소문자)와 전화번호 접두사 (JSON).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}메소드 getPrices
국가와 서비스별 USD 가격이에요. 두 필터 모두 선택 사항이에요.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}메소드 getNumber
인증용 번호를 구매해요. 액티베이션 ID와 국가 코드가 포함된 번호를 반환해요.
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
메소드 getStatus
STATUS_WAIT_CODE (아직 코드 없음), STATUS_OK:<code>, STATUS_WAIT_RETRY:<last code> (다른 코드 요청됨), STATUS_CANCEL (취소 또는 환불됨).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
메소드 setStatus
status=1 준비됨 (ACCESS_READY), 3 다른 코드 요청 (ACCESS_RETRY_GET), 6 완료 (ACCESS_ACTIVATION), 8 코드 도착 전 취소 및 전액 환불 (ACCESS_CANCEL).
GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET