한국어

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를 통해 전체 목록을 확인할 수 있어요.

일반적인 흐름
  1. 서비스와 국가로 번호를 주문하세요. id를 저장하세요.
  2. 앱에 번호를 입력하고 SMS를 보내도록 요청하세요.
  3. 코드가 올 때까지 4초마다 주문 상태를 확인하세요.
  4. SMS를 한 번 더 받으시겠어요? '다른 코드 요청'을 선택한 후 다시 확인하세요. 완료되면 주문을 종료하세요.
  5. 인증 코드가 안 왔나요? 취소하면 전액 환불받을 수 있어요. 전화 없이도 대기 시간이 끝나면 자동으로 환불이 진행돼요.

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).
4291분에 300건 이상의 요청이 들어왔어요 (rate_limited).

SMS 인증 형식

BAD_KEYAPI 키가 없거나 잘못되었어요.
BAD_ACTION알 수 없는 작업이에요.
BAD_SERVICE알 수 없는 서비스 코드예요.
BAD_COUNTRY해당 국가에서는 서비스를 제공하지 않아요.
NO_BALANCE크레딧이 부족해요.
NO_NUMBERS지금은 사용 가능한 번호가 없어요. 잠시 후에 다시 시도해 보세요.
NO_ACTIVATION알 수 없거나 본인 것이 아닌 액티베이션 ID예요.
EARLY_CANCEL_DENIED이미 인증 코드가 도착해서 액티베이션을 취소할 수 없어요.
TOO_MANY_REQUESTS1분에 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
카카오톡, 라인, 위챗 인증용 SMS API