Documentação do NYX Labs
Licenciamento por key, por conta ou pelos dois — com planos Free/Pago, trial, licença offline e cobrança PIX nas suas credenciais.
Começar em 5 minutos
- Crie o app em Novo app. Você recebe o
App IDe osegredo(revelável depois, com senha). - Instale a SDK da sua linguagem (C++, C#, Python, Node.js ou Lua — pasta
Site/sdkdo repositório). - Chame
init→login/license→checka cada 30–60 s. - A tela Integração mostra “conectado” assim que o primeiro
/initchegar.
const auth = new NyxAuth({ appId, appSecret: process.env.NYX_APP_SECRET, baseUrl: 'https://api.nyxmenu.com' });
await auth.init({ version: '1.0.0' });
await auth.login(user, password); // ou auth.license(key), ou auth.register(user, password) no plano gratuito
await auth.entitlements(); // planos Free/Pago
if (auth.hasFeature('export_4k')) { /* ... */ }Protocolo assinado
Toda chamada ao Client API é POST e assinada com o segredo do app. As SDKs fazem tudo isso por você; os detalhes valem se for implementar em outra linguagem.
canonical = METHOD \n PATH+QUERY \n TIMESTAMP \n NONCE \n sha256hex(BODY) \n sha256hex(SESSION \n HWID)
x-nyx-signature = hex( HMAC_SHA256(appSecret, canonical) )
Resposta: x-nyx-response-signature = hex( HMAC_SHA256(appSecret, NONCE \n STATUS \n sha256hex(corpo)) )| Header | Quando | Descrição |
|---|---|---|
| x-nyx-app | sempre | App ID |
| x-nyx-timestamp / nonce / signature | sempre | Janela de ±60 s e nonce único (anti-replay) |
| x-nyx-session | após /init | Token opaco de sessão |
| x-nyx-hwid | com trava de HWID | Identificador da máquina |
Valide a assinatura da resposta e recuse a resposta sem o header: um servidor falso (hosts/DNS) não conhece o segredo e o omitiria.
Client API
| Rota | Descrição |
|---|---|
| POST /api/v1/client/init | Handshake: versão, integridade (hash) e abertura de sessão |
| /register | Cria a conta. Com key, ou sem key no plano gratuito (modo contas/híbrido) |
| /login · /license · /upgrade | Usuário+senha · só a key · aplica nova key (empilha o tempo) |
| /check | Heartbeat — ban, expiração, kill switch e revogação chegam aqui |
| /entitlements | Licença efetiva e entitlements do usuário |
| /trial | Trial do plano (1 por usuário e 1 por máquina) |
| /license/offline | Token offline assinado (Ed25519) |
| /file | URL assinada (60 s) de arquivo protegido, conforme o nível |
| /checkout/prices · /checkout · /checkout/status | Compra via PIX dentro do app |
| /var · /log · /ban · /logout | Variável server-side · log · auto-ban · sair |
Planos e entitlements
No modo Contas ou Híbrido você define planos (tiers), por exemplo free e pro. Cada plano tem nível (acesso a variáveis/arquivos), dispositivos, offline, trial e entitlements — flags, números ou textos.
{ "license": { "state": "active", "tier": { "code": "pro" }, "level": 5, "lifetime": false,
"expiresAt": "2026-12-01T00:00:00Z",
"features": { "export_4k": true, "max_projects": 50, "badge": "PRO" } } }O usuário pode ter várias licenças ao mesmo tempo: vale o maior nível, as flags combinam (OU), os números pegam o maior e o texto vem do plano de maior nível. Quando o Pro vence, a conta volta ao Free sozinha.
Licença offline
Para apps que precisam rodar sem internet. O servidor assina um token Ed25519 preso à máquina (HWID), que expira no menor entre o teto do plano, o teto do tier e o fim da licença. Valide com a chave pública do app (aba Integração), embutida no binário.
token = base64url(payloadJSON) + "." + base64url(signature)
payload = { v, app, sub, lid, tier, level, features, hwid, iat, exp }Rotacionar a chave (Integração → senha) invalida todos os tokens antigos.
Cobrança PIX (Efí e Mercado Pago)
Você conecta as suas credenciais; o dinheiro cai direto na sua conta — o NYX Labs nunca toca nele. Há duas formas de vender: dentro do app (/checkout, a licença cai na conta) ou pela página hospedada /c/seu-endereco (o comprador recebe uma key por e-mail e na tela).
Toda confirmação de pagamento é re-consultada na API do provedor (valor, referência e estado). O webhook sozinho nunca libera nada, e um job a cada minuto cobre avisos perdidos.
SellerAPI (Ultra)
Chaves nxs_live_… com escopos, app opcional, IPs permitidos e validade. A chave vai no header — nunca na URL.
POST /api/v1/seller/keys
Authorization: Bearer nxs_live_...
Idempotency-Key: 5b7c... (obrigatório em criações)
{ "appId": "…", "amount": 10, "durationDays": 30, "tierId": "…" }| Rota | Escopo |
|---|---|
| GET /apps · /stats | stats:read |
| GET /keys · POST /keys · /keys/:id/ban|unban|delete | keys:read / keys:write |
| GET /users · /users/:id · POST /users/:id/ban|unban|reset-hwid|extend | users:read / users:write |
| POST /licenses/grant · /licenses/:id/revoke|extend | licenses:write |
| GET /sessions · POST /sessions/:id/kill | sessions:read / sessions:write |
| GET /variables · PUT /variables/:name | variables:read / variables:write |
| GET /charges | charges:read |
Limite de 120 req/min por chave. Repetir uma criação com o mesmo Idempotency-Key (24 h) devolve a mesma resposta — um bot que repete a chamada não gera keys em dobro. Mesma chave com corpo diferente é recusada.
Revenda com saldo (Ultra)
Crie revendedores, recarregue créditos e defina a tabela de custo (plano + duração → créditos). Cada revendedor tem uma chave nxr_… e gera keys por POST /api/v1/reseller/keys; o custo é debitado de forma atômica (nunca fica negativo, mesmo com requisições simultâneas) e registrado no extrato.
Webhooks
Eventos assinados com HMAC (x-nyx-signature, x-nyx-timestamp) para o seu servidor. Destinos internos são bloqueados.
| Evento | Quando |
|---|---|
| user.register / user.login / user.ban / user.expire | Ciclo de vida do usuário |
| key.create / key.redeem / key.ban | Keys |
| license.granted / license.revoked / license.expired | Licenças |
| trial.started | Trial iniciado |
| charge.created / charge.paid / charge.expired | Cobranças PIX |
| quota.reached | Um limite do plano foi atingido |
| session.blocked / security.alert | Bloqueios e alertas |
Segurança
- Keys só existem como HMAC; segredos reversíveis (app, credenciais de pagamento, variáveis) ficam cifrados com AES-256-GCM e AAD por linha.
- Sessão do painel com refresh rotativo e detecção de reuso, CSRF, 2FA e dispositivos confiáveis.
- Isolamento total entre contas: um app só é visível ao dono (e à equipe autorizada).
- Plano vencido: 7 dias de graça (painel só leitura, seus apps continuam), depois o Client API responde “indisponível”.