REST e JSON simples
Sete endpoints em https://noirsms.com/api/v1: saldo, países, serviços, números e cancelar, reenviar e finalizar um número.
Se você já usa a Noir SMS no navegador, a API é o mesmo serviço sem precisar clicar: uma chave de API, o saldo que você já tem e um JSON com o número, o status e todos os SMS recebidos. Esta página é a visão geral para desenvolvedores; a referência campo a campo fica em /pt/api/docs/. Assim como no painel, a API serve para verificar as suas próprias contas legítimas, ou as contas dos seus clientes se você revende seguindo as mesmas regras.
A API da Noir SMS é uma API REST (v1) em https://noirsms.com/api/v1 que faz por código o que o painel faz na mão: você chama POST /numbers com um serviço e um país, coloca o número retornado no app que está verificando e lê o código com GET /numbers/{id} ou recebe por um webhook sms.received assinado. Usa os mesmos preços e o mesmo saldo do painel, sem taxa extra, permite 120 requisições por minuto por chave e reembolsa o número automaticamente se nenhum SMS chegar em 20 minutos. Referência completa: https://noirsms.com/pt/api/docs/.
Sete endpoints em https://noirsms.com/api/v1: saldo, países, serviços, números e cancelar, reenviar e finalizar um número.
Gere a chave na página API do painel. As compras usam o seu saldo normal, com os mesmos preços e sem taxa de API.
Consulte GET /numbers/{id} a cada 3 a 5 segundos, ou configure um webhook HTTPS e receba sms.received assinado com HMAC-SHA256.
Sem SMS em 20 minutos, o status vira expired e o valor volta automaticamente. Você também pode cancelar 2 minutos após a compra.
Entre na sua conta, abra a página API do painel e gere uma chave. As chaves começam com nsk_live_ e aparecem só uma vez, então guarde a sua num gerenciador de segredos ou numa variável de ambiente. Cada conta tem uma chave; gerar uma nova desativa a antiga na hora, e é assim que você troca uma chave vazada.
Envie a chave em toda requisição, no cabeçalho Authorization: Bearer nsk_live_SUA_CHAVE ou no cabeçalho X-API-Key. Corpos de requisição e resposta são JSON, os preços são em dólares americanos e os horários em ISO 8601 (UTC). Chame a API só a partir do seu servidor: uma chave dentro de uma página web ou de um app pode ser extraída e gastar o seu saldo.
Primeiro, veja o que dá para comprar. GET /countries lista os países com números em estoque agora, e GET /services?country=us devolve o código de cada serviço (wa para WhatsApp, tg para Telegram, go para Google e assim por diante) com o preço que você paga e o estoque. Os preços podem mudar durante o dia, então leia em tempo de execução.
Depois, compre com POST /numbers, enviando service, country e, se quiser, max_price. Se o preço atual estiver acima de max_price, a compra é recusada com HTTP 409 e nada é cobrado. Uma compra bem-sucedida responde 201 com o objeto do número:
curl -X POST https://noirsms.com/api/v1/numbers \
-H "Authorization: Bearer nsk_live_SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"service": "wa", "country": "us", "max_price": 1.50}'Polling é a opção mais simples: chame GET /numbers/{id} a cada 3 a 5 segundos até o status mudar. Respeite o limite de 120 requisições por minuto por chave: com uma requisição a cada 4 segundos, cada número aberto usa cerca de 15 requisições por minuto.
O webhook escala melhor. Configure uma URL HTTPS na página API do painel e a Noir SMS envia um POST com type sms.received assim que detecta um SMS num número comprado pela API. Toda entrega traz o cabeçalho X-NoirSMS-Signature com um timestamp t e uma assinatura v1, que é o HMAC-SHA256 em hexadecimal do timestamp, um ponto e o corpo bruto, usando o seu segredo de webhook. Valide a assinatura, rejeite timestamps com mais de 5 minutos e responda com qualquer status 2xx. Muitas integrações usam o webhook pela velocidade e um polling de vez em quando como garantia.
Os erros vêm com um status HTTP e um corpo JSON como {"error": {"code": "...", "message": "..."}}. Decida pelo code, não pelo texto da mensagem.
Este script compra um número dos EUA para WhatsApp, mostra o número, consulta até o código chegar, marca o número como finalizado e devolve o código. Se o número expirar ou for cancelado, retorna null e o saldo já foi reembolsado. POST /numbers/{id}/finish é opcional, mas libera o número mais cedo. POST /numbers/{id}/resend pede um segundo código num número aberto, sem custo.
// Node.js 18+ (fetch nativo). Rode no seu servidor, nunca no navegador.
const BASE = 'https://noirsms.com/api/v1';
const headers = { Authorization: 'Bearer nsk_live_SUA_CHAVE', 'Content-Type': 'application/json' };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
async function getCode(service, country) {
const res = await fetch(BASE + '/numbers', { method: 'POST', headers, body: JSON.stringify({ service, country }) });
const num = await res.json();
if (!res.ok) throw new Error(num.error.code); // ex.: insufficient_balance, no_numbers
console.log('Digite este número no app:', num.phone);
while (true) {
await sleep(4000); // consulta a cada 3 a 5 segundos
const n = await (await fetch(BASE + '/numbers/' + num.id, { headers })).json();
if (n.status === 'received') {
await fetch(BASE + '/numbers/' + num.id + '/finish', { method: 'POST', headers });
return n.sms[0].code;
}
if (n.status === 'expired' || n.status === 'canceled') return null; // reembolsado
}
}
getCode('wa', 'us').then((code) => console.log('Código:', code));
Não. Os endpoints GET, como /balance, /countries e /services, são gratuitos. Uma compra usa saldo real, mas é reembolsada automaticamente se nenhum SMS chegar, e você pode cancelar 2 minutos após a compra.
Não. Cada número custa o mesmo que no painel e sai do mesmo saldo. Não há assinatura nem taxa de API.
Não. Você escolhe o serviço e o país; o número dentro do país é atribuído a partir do estoque disponível.
Qualquer linguagem que faça requisições HTTPS com JSON. As docs em /pt/api/docs/ mostram curl e exemplos em Node.js e Python para validar a assinatura do webhook. Também há um arquivo OpenAPI em /api/openapi.json para gerar um cliente pronto.
Para verificar as suas próprias contas legítimas, testar os fluxos de SMS do seu app e revender para clientes que sigam a mesma Política de Uso Aceitável. Criação de contas em massa, spam, burlar banimentos e burlar verificações de bancos ou KYC são proibidos.
Crie uma conta grátis, adicione saldo e gere a sua chave de API na página API do painel.
Use a API da Noir SMS só para as suas próprias contas legítimas ou, como revendedor, para clientes que sigam a mesma Política de Uso Aceitável. Criação de contas em massa ou automatizada, spam, burlar banimentos e burlar verificações de bancos, fintechs ou de identidade são proibidos e levam ao encerramento da conta.