SMS Nitro

Verificação por SMS em Node.js

Um módulo ES completo que usa o fetch nativo do Node.js 18+: compra um número temporário, espera o código e encerra o pedido, com os tipos TypeScript da resposta.

Como receber um código de verificação por SMS em Node.js?

Chame fetch com o cabeçalho X-Api-Key: POST /v1/orders para receber o número, consulte GET /v1/orders/{id} a cada 4 segundos até messages trazer o SMS, leia messages.at(-1).code e chame POST finish. Cancele se nada chegar, para liberar o valor reservado.

Preparação

  • Node.js 18 ou mais recente (fetch nativo e await no nível superior em arquivos .mjs).
  • Nenhuma dependência para instalar.
  • Exporte a chave: export SMSNITRO_API_KEY=...

Script completo

activation.mjs
// Node.js 18+ (global fetch). Save as activation.mjs and run: node activation.mjs
const API = "https://smsnitro.com/api/v1";
const headers = { "X-Api-Key": process.env.SMSNITRO_API_KEY, "Content-Type": "application/json" };

async function api(method, path, body) {
  const res = await fetch(API + path, { method, headers, body: body && JSON.stringify(body) });
  const data = await res.json();
  if (!res.ok) throw new Error(`${res.status}: ${data.detail}`);
  return data;
}

const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

const { balance } = await api("GET", "/balance");
console.log("Balance:", balance, "USD");

let order = await api("POST", "/orders", { product: "telegram", country: "usa" });
console.log("Number:", order.phone, "order", order.id);

const deadline = Date.now() + 600_000; // numbers stay reserved for up to 20 minutes
let done = false;
while (!done && Date.now() < deadline) {
  order = await api("GET", `/orders/${order.id}`);
  if (order.messages.length) {
    console.log("Code:", order.messages.at(-1).code);
    await api("POST", `/orders/${order.id}/finish`);
    done = true;
  } else if (["CANCELED", "TIMEOUT", "BANNED", "FINISHED"].includes(order.status)) {
    console.log("Ended without SMS:", order.status, "(not charged)");
    done = true;
  } else {
    await sleep(4000); // poll every 3 to 5 seconds
  }
}
if (!done) {
  await api("POST", `/orders/${order.id}/cancel`); // refund the frozen amount
  console.log("No SMS: cancelled and refunded");
}

Tipos TypeScript

O objeto de pedido que todos os endpoints de pedido retornam. Os preços vêm como string decimal: converta com Number() só para exibir.

types.ts
type Sms = { sender: string; text: string; code: string; received_at: string };
type Order = {
  id: number;
  phone: string;
  status: "PENDING" | "RECEIVED" | "FINISHED" | "CANCELED" | "TIMEOUT" | "BANNED";
  price: string;          // decimal string, USD
  expires: string | null; // ISO 8601, UTC
  messages: Sms[];
  awaiting_resend: boolean;
  server: number;
};

Páginas relacionadas

Receba seu código de verificação agora

Recarregue a partir de R$ 15 no Pix, escolha o app e o país e leia o SMS no navegador. Cobrado só quando o código chega.

Pegar um número