Português

API de verificação por SMS

Última modificação em 2026/11/03

Executando consultas à API

Duas APIs compartilham uma chave: uma API REST com JSON e o formato de ativação por SMS que muitas ferramentas já usam. Crie a chave na página Chave da API do console; ela é mostrada uma vez. Limite: 300 solicitações por minuto por chave. Cada pedido tem uma janela de código de 20 minutos, igual ao console.

# 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"
Códigos de serviço e país

Os códigos de serviço são os nomes nas URLs das páginas de serviço, por exemplo kakaotalk, line, wechat, zalo, naver, shopee e whatsapp. Os códigos de país são códigos ISO em letras minúsculas: kr, jp, id, ph, vn, th, us. GET /services e GET /countries retornam as listas completas.

Fluxo típico
  1. Peça um número com o serviço e o país. Salve o id.
  2. Insira o número no aplicativo e peça para enviar o SMS.
  3. Leia o pedido a cada 4 segundos até que um código esteja disponível.
  4. Precisa de mais um SMS? Solicite outro código e leia novamente. Concluído: finalize o pedido.
  5. Nenhum código? Cancele para um reembolso total. Sem uma chamada, o reembolso ocorre automaticamente quando a janela termina.

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);
Retornar códigos de erro

API REST

Os erros vêm como JSON: {"error":{"code","message"}} com esses status HTTP:

400Campo ausente ou inválido (missing_filter, bad_json).
401Nenhuma chave ou chave incorreta (no_key, bad_key).
402Saldo insuficiente (no_balance).
404Serviço, país, pedido ou endpoint desconhecido.
409O pedido não pode fazer isso agora (has_code, not_ready, too_many_open, no_numbers).
429Mais de 300 solicitações em um minuto (rate_limited).

Formato de ativação por SMS

BAD_KEYChave API ausente ou incorreta.
BAD_ACTIONAção desconhecida.
BAD_SERVICECódigo de serviço desconhecido.
BAD_COUNTRYO serviço não é vendido nesse país.
NO_BALANCESaldo insuficiente.
NO_NUMBERSNenhum número disponível no momento. Tente novamente em instantes.
NO_ACTIVATIONID de ativação desconhecido ou não pertence a você.
EARLY_CANCEL_DENIEDUm código já chegou, então a ativação não pode ser cancelada.
TOO_MANY_REQUESTSMais de 300 solicitações em um minuto.
NO_ACTIVATIONSJá há 20 ativações abertas.

Métodos da API REST

https://virtualsns.com/api/v1

GET/services

Cada código de serviço com seu nome, tipo e menor preço. Nenhuma chave necessária.

curl "https://virtualsns.com/api/v1/services"
{"services":[{"code":"kakaotalk","name":"KakaoTalk","category":"social","from":"0.06"}]}
GET/countries

Cada código de país (ISO, minúsculo) com seu nome e código de discagem. Nenhuma chave necessária.

curl "https://virtualsns.com/api/v1/countries"
{"countries":[{"code":"kr","name":"South Korea","dial_code":"82"}]}
GET/prices

Preços em USD. Adicione serviço, país ou ambos. Nenhuma chave necessária.

curl "https://virtualsns.com/api/v1/prices?service=line&country=jp"
{"prices":[{"service":"line","country":"jp","price":"5.40"}]}
GET/balance

Seu saldo em USD.

curl "https://virtualsns.com/api/v1/balance" \
  -H "Authorization: Bearer YOUR_KEY"
{"balance":"25.00","currency":"USD"}
POST/orders

Compra um número (201). Retorna o pedido com o número de telefone e o horário em que a janela termina.

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

Um pedido com seu status e todos os códigos recebidos. Statuses: aguardando, recebido, finalizado, reembolsado, cancelado.

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

Seus pedidos abertos (status=all para os últimos 100).

curl "https://virtualsns.com/api/v1/orders?status=open" \
  -H "Authorization: Bearer YOUR_KEY"
{"orders":[...]}
POST/orders/AC-7K2M9QX4PB/resend

Solicita outro código no mesmo número, após o primeiro código e enquanto a janela estiver aberta. Sem custo adicional.

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

Fecha um pedido que recebeu seu código.

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

Cancela antes que um código chegue. O valor total volta para o seu saldo.

curl -X POST https://virtualsns.com/api/v1/orders/AC-7K2M9QX4PB/cancel \
  -H "Authorization: Bearer YOUR_KEY"
{"order":{"status":"canceled","refunded":"8.40"}}

Métodos do formato de ativação por SMS

https://virtualsns.com/stubs/handler_api.php

Método getBalance

Seu saldo em USD.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getBalance
ACCESS_BALANCE:12.50
Método getServicesList

Códigos de serviço que você pode comprar (JSON).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getServicesList
{"status":"success","services":[{"code":"line","name":"LINE"}]}
Método getCountries

Códigos de países (ISO, minúsculo) e códigos de discagem (JSON).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getCountries
{"jp":{"name":"Japan","dial":"81"}}
Método getPrices

Preços em USD por país e serviço. Ambos os filtros são opcionais.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getPrices&service=line&country=jp
{"jp":{"line":{"cost":5.4,"count":100}}}
Método getNumber

Compra um número. Retorna o ID de ativação e o número com seu código de país.

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=line&country=jp
ACCESS_NUMBER:AC-7K2M9QX4PB:819012345678
Método getStatus

STATUS_WAIT_CODE (nenhum código ainda), STATUS_OK:<code>, STATUS_WAIT_RETRY:<último código> (outro código solicitado), STATUS_CANCEL (cancelado ou reembolsado).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=getStatus&id=AC-7K2M9QX4PB
STATUS_OK:482913
Método setStatus

status=1 pronto (ACCESS_READY), 3 outro código (ACCESS_RETRY_GET), 6 finalizado (ACCESS_ACTIVATION), 8 cancelamento com reembolso total enquanto nenhum código chegou (ACCESS_CANCEL).

GET https://virtualsns.com/stubs/handler_api.php?api_key=KEY&action=setStatus&id=AC-7K2M9QX4PB&status=3
ACCESS_RETRY_GET
API de Verificação por SMS para Números do KakaoTalk, LINE e WeChat