API para desenvolvedores

Compre números e receba códigos SMS direto do seu sistema, usando o mesmo saldo da sua conta no site.

Sua chave de API

Entre na sua conta para gerar a sua chave de API.

Entrar / Criar conta

Como funciona

Endereço base: https://sms-verification-2fa.com/wp-json/blazerd-api/v1

  1. Escolha país e serviço: GET /countries e GET /services?country=ID devolvem os ids e o preço atual.
  2. Compre: POST /orders com service, country e max_price (o máximo que você aceita pagar). Você recebe o número.
  3. Aguarde o SMS: consulte GET /orders/{id} a cada 5 segundos até o status virar FINISHED. O código vem em code.
  4. Não chegou? Depois de cancelable_at (2 min), chame POST /orders/{id}/cancel e o valor volta ao saldo. Se você não fizer nada, o reembolso é automático após expires_at (20 min).
Você só paga pelo SMS recebido: pedido cancelado ou expirado sem SMS é devolvido integralmente ao saldo.

Endpoints

Troque SUA_CHAVE pela sua chave. Respostas de sucesso são JSON; erros seguem o formato da seção Erros.

GET /balance

Seu saldo em USD.

curl -s "https://sms-verification-2fa.com/wp-json/blazerd-api/v1/balance" -H "X-API-Key: SUA_CHAVE"
{"balance": 12.5, "currency": "USD"}

GET /countries

Lista de países. Use o id no parâmetro country.

curl -s "https://sms-verification-2fa.com/wp-json/blazerd-api/v1/countries" -H "X-API-Key: SUA_CHAVE"
[{"id": 73, "name": "Brazil"}, {"id": 187, "name": "USA"}, ...]

GET /services?country={id}

Serviços disponíveis no país, com preço atual em USD (price) e quantidade aproximada em estoque (stock). A lista é atualizada a cada ~3 minutos.

curl -s "https://sms-verification-2fa.com/wp-json/blazerd-api/v1/services?country=73" -H "X-API-Key: SUA_CHAVE"
[{"id": "wa", "name": "Whatsapp", "price": 0.35, "stock": 1520}, {"id": "tg", "name": "Telegram", "price": 0.42, "stock": 870}, ...]

POST /orders

Compra um número. Campos do JSON:

CampoObrigatórioDescrição
servicesimid do serviço (de /services), ex.: "wa".
countrysimid do país (de /countries), ex.: 73.
max_pricesimPreço máximo em USD que você aceita pagar (entre 0.20 e 100). Você nunca paga mais que isso; normalmente paga o price de /services. Seu saldo precisa cobrir esse valor.
refrecomendadoIdentificador único seu (até 64 caracteres: letras, números, _ . : -). Se a conexão cair, repita a mesma requisição com o mesmo ref: você recebe o mesmo pedido, sem comprar de novo (válido por 24 h).
curl -s -X POST "https://sms-verification-2fa.com/wp-json/blazerd-api/v1/orders" \
  -H "X-API-Key: SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"service": "wa", "country": 73, "max_price": 0.35, "ref": "pedido-0001"}'

Resposta 201 (ou 200 quando é a repetição de um ref já usado):

{
  "id": "635468024",
  "phone": "5511987654321",
  "service": "wa",
  "service_name": "Whatsapp",
  "country": 73,
  "country_name": "Brazil",
  "price": 0.35,
  "status": "PENDING",
  "code": null,
  "created_at": 1790000000,
  "cancelable_at": 1790000120,
  "expires_at": 1790001200,
  "ref": "pedido-0001"
}
phone vem só com dígitos, já com o código do país (sem o +). Use um timeout de pelo menos 60 segundos na compra.

GET /orders/{id}

Consulta o pedido (mesmo formato acima). Enquanto estiver PENDING, consulte a cada 5 segundos. Quando chegar o SMS, status vira FINISHED e code traz o código.

curl -s "https://sms-verification-2fa.com/wp-json/blazerd-api/v1/orders/635468024" -H "X-API-Key: SUA_CHAVE"
{"id": "635468024", "phone": "5511987654321", ..., "status": "FINISHED", "code": "123456", ...}

POST /orders/{id}/cancel

Cancela um pedido sem SMS e devolve o valor ao saldo. Só é permitido depois de cancelable_at (2 min após a compra). Resposta: o pedido com status CANCELLED. Se o SMS chegou antes do cancelamento, você recebe o erro 409 not_cancelable com o pedido (e o código) em data.order.

curl -s -X POST "https://sms-verification-2fa.com/wp-json/blazerd-api/v1/orders/635468024/cancel" -H "X-API-Key: SUA_CHAVE"

Status do pedido

StatusSignificado
PENDINGAguardando o SMS. Consulte a cada 5 s.
FINISHEDSMS recebido; o código está em code. Valor cobrado, não pode ser cancelado.
CANCELLEDCancelado sem SMS; o valor voltou ao saldo (cancelado por você ou automaticamente após expires_at).

Erros

Todo erro tem o status HTTP abaixo e este formato. Use o campo code no seu programa; message é só para leitura humana.

{"code": "no_funds", "message": "Saldo insuficiente: seu saldo precisa cobrir o max_price.", "data": {"status": 402}}
codeHTTPQuando aconteceO que fazer
invalid_request400Parâmetro ausente ou inválido.Corrija a requisição (veja a mensagem).
invalid_key401Chave ausente, errada, revogada ou enviada na URL.Envie o header X-API-Key; gere uma nova chave se preciso.
no_funds402Saldo menor que o max_price.Adicione saldo no site.
forbidden403API desativada ou conta bloqueada.Fale com o suporte.
not_found404Pedido não existe ou não é seu.Confira o id.
no_stock409Sem números agora para esse serviço/país.Tente de novo em 10–30 s ou use outro país.
price_above_max409O preço atual passou do seu max_price. data.current_price traz o preço atual, quando conhecido.Aumente o max_price ou tente mais tarde.
locked409Outra compra sua ainda está em andamento (é uma por vez).Aguarde 2 s e repita com o mesmo ref.
too_early409Cancelamento antes de 2 minutos.Aguarde data.retry_after segundos.
not_cancelable409O SMS já chegou.Use o código em data.order.code.
rate_limited429Muitas requisições.Aguarde data.retry_after segundos.
too_many_active429Você já tem 20 números aguardando SMS.Espere chegarem ou cancele alguns.
purchases_paused429Muitas compras sem SMS nas últimas 24 h (50 ou mais pedidos encerrados — recebidos ou cancelados — com menos de 5% recebidos).Aguarde; se precisar, fale com o suporte.
provider_error502Falha temporária no fornecedor. Na compra, nada foi cobrado. No cancelamento, o pedido continua PENDING (sem estorno ainda).Repita após data.retry_after segundos (na compra, com o mesmo ref).
internal_error500Erro interno.Tente de novo (se data.retry_after vier, aguarde esse tempo); se continuar, fale com o suporte.
rest_no_route404URL ou método errado.Confira o endereço e se é GET ou POST.

Limites

Exemplo completo (Python)

Compra um número de WhatsApp do Brasil, espera o SMS por até 3 minutos e cancela (com reembolso) se não chegar. Instale com pip install requests e defina a variável de ambiente BLZ_API_KEY com a sua chave.

import os
import time
import uuid

import requests

API = "https://sms-verification-2fa.com/wp-json/blazerd-api/v1"
KEY = os.environ["BLZ_API_KEY"]  # nunca escreva a chave direto no código


class ApiError(Exception):
    def __init__(self, status, body):
        self.status = status
        self.code = body.get("code")
        self.data = body.get("data") or {}
        super().__init__(f"{status} {self.code}: {body.get('message')}")


def api(method, path, **kwargs):
    r = requests.request(
        method,
        API + path,
        headers={"X-API-Key": KEY},
        timeout=60,              # a compra pode levar alguns segundos
        allow_redirects=False,   # sempre https; redirecionamento = URL errada
        **kwargs,
    )
    try:
        body = r.json()
    except ValueError:
        body = {"code": f"http_{r.status_code}", "message": r.text[:200]}
    if r.status_code >= 300:  # erro (ou redirecionamento = URL errada)
        raise ApiError(r.status_code, body)
    return body


# 1) Saldo e preço do serviço (WhatsApp = "wa", Brasil = 73)
print("Saldo: $", api("GET", "/balance")["balance"])
servicos = api("GET", "/services", params={"country": 73})
wa = next(s for s in servicos if s["id"] == "wa")
print(f"{wa['name']}: ${wa['price']} ({wa['stock']} disponíveis)")

# 2) Comprar. Em queda de conexão ou erro temporário, repete com o MESMO ref
#    (assim nunca compra duas vezes).
ref = str(uuid.uuid4())
pedido = None
for tentativa in range(10):
    try:
        pedido = api("POST", "/orders", json={
            "service": "wa",
            "country": 73,
            "max_price": wa["price"],
            "ref": ref,
        })
        break
    except ApiError as e:
        if e.code in ("no_stock", "locked", "rate_limited", "provider_error"):
            time.sleep(e.data.get("retry_after", 10))
            continue
        raise  # no_funds, price_above_max, invalid_request...
    except requests.RequestException:
        time.sleep(5)
if pedido is None:
    raise SystemExit("Não foi possível comprar agora.")
print("Número: +" + pedido["phone"])

# 3) Consultar a cada 5 s por até 3 minutos
limite = time.time() + 180
while pedido["status"] == "PENDING" and time.time() < limite:
    time.sleep(5)
    pedido = api("GET", f"/orders/{pedido['id']}")

if pedido["status"] == "FINISHED":
    print("Código recebido:", pedido["code"])
else:
    # 4) Não chegou: cancela e o valor volta para o saldo
    try:
        api("POST", f"/orders/{pedido['id']}/cancel")
        print("Cancelado e reembolsado.")
    except ApiError as e:
        if e.code == "not_cancelable":  # o SMS chegou no último instante
            print("Código recebido:", e.data["order"]["code"])
        else:
            raise
🌐 Translate
🌐 Translate Page