로그인

SMS 인증 API

번호 구매, 코드 확인, 취소를 HTTP 요청 하나로 처리해요. 가상번호 업계에서 널리 쓰는 handler_api 방식이라 가입 프로그램과 봇에 주소와 키만 넣으면 바로 연결돼요.

API 키 받기

로그인한 뒤 계정 화면의 API 메뉴에서 키를 만들어요. 키는 만들 때 한 번만 보여 주니 바로 저장하세요. API는 웹 화면과 같은 잔액, 같은 가격을 써요.

기본 주소

https://nuviosms.com/stubs/handler_api.php?api_key=API_KEY&action=...

주요 요청

action하는 일응답 예
getBalance잔액 확인ACCESS_BALANCE:12.50
getPrices&service=telegram&country=gb서비스·국가별 가격과 남은 번호{"gb":{"telegram":{"cost":0.207,"count":8877728}}}
getNumber&service=telegram&country=gb번호 구매ACCESS_NUMBER:ID:PHONE
getStatus&id=ID코드 확인STATUS_WAIT_CODE / STATUS_OK:CODE
setStatus&id=ID&status=8번호 취소 (코드가 오기 전, 전액 환불)ACCESS_CANCEL
setStatus&id=ID&status=3같은 번호로 코드 한 번 더 받기ACCESS_RETRY_GET
setStatus&id=ID&status=6사용 끝내기ACCESS_ACTIVATION

요청 항목

이름필수설명
api_key모두계정 화면에서 만든 API 키
action모두getBalance, getPrices, getNumber, getStatus, setStatus
servicegetNumber서비스 코드 (예: telegram, whatsapp, google). 서비스 목록 페이지 주소와 같아요
countrygetNumber나라 코드 두 글자 (예: gb, us, id)
idgetStatus, setStatusgetNumber 가 돌려준 번호 ID (N-로 시작)
statussetStatus8 취소, 3 코드 한 번 더, 6 끝내기, 1 준비

응답 글자와 뜻

응답뜻돈
ACCESS_NUMBER:ID:PHONE번호를 받았어요번호 값이 빠져요
STATUS_WAIT_CODE코드를 기다리는 중이에요그대로
STATUS_OK:CODE코드가 왔어요결제 완료
STATUS_WAIT_RETRY:CODE다음 코드를 기다리는 중이에요 (앞 코드 함께)추가 요금 없음
STATUS_CANCEL취소됐거나 시간이 끝났어요코드가 없었다면 환불됨
ACCESS_CANCEL취소했어요전액 환불
ACCESS_RETRY_GET같은 번호로 코드를 한 번 더 기다려요추가 요금 없음
ACCESS_ACTIVATION번호 사용을 끝냈어요그대로
NO_BALANCE잔액을 충전하면 바로 받아요빠지지 않음
NO_NUMBERS지금 그 나라 번호를 줄 수 없어요빠지지 않음
NO_ACTIVATIONS열린 번호가 20개예요빠지지 않음
EARLY_CANCEL_DENIED코드를 받은 번호는 취소 대신 끝내기(6)그대로
BAD_KEYAPI 키가 맞지 않아요빠지지 않음
BAD_SERVICE / BAD_COUNTRY서비스나 나라 코드가 맞지 않아요빠지지 않음
NO_ACTIVATION번호 ID 를 찾지 못했어요그대로
TOO_MANY_REQUESTS분당 300번을 넘었어요빠지지 않음

언어별 예제

import time, requests

BASE = "https://nuviosms.com/stubs/handler_api.php"
KEY = "API_KEY"

def call(**p):
    return requests.get(BASE, params={"api_key": KEY, **p}, timeout=30).text

r = call(action="getNumber", service="telegram", country="gb")
if not r.startswith("ACCESS_NUMBER"):
    raise SystemExit(r)
_, num_id, phone = r.split(":")
print("Number:", phone)

for _ in range(240):                      # 20 minutes
    s = call(action="getStatus", id=num_id)
    if s.startswith("STATUS_OK"):
        print("Code:", s.split(":")[1])
        call(action="setStatus", id=num_id, status=6)
        break
    time.sleep(5)

이렇게 써요

  • getNumber로 번호를 받고, 가입 화면에 번호를 넣은 뒤 getStatus를 5초 간격으로 불러요.
  • STATUS_OK:코드가 오면 그 코드를 입력하고 setStatus 6으로 끝내요.
  • 20분 안에 코드가 오지 않으면 번호 값은 잔액으로 자동 환불돼요.
  • 요청은 분당 300번까지 보내요.