Voltar
Referência da API

Referência da API

Atualizado em 2026-06-29

Endpoints públicos do portal consumidos pelo BrutusForge Client durante o boot/phone-home. Ambos exigem Content-Type: application/json.

POST /api/licenses/activate

Primeira ativação de licença. Vincula o HWID e retorna um JWT Ed25519 assinado. Rate limit: 5 req/min por IP.

Body

{
  "licenseKey": "BF-XXXX-XXXX-XXXX-XXXX",
  "hwid": "sha256:<hex>",
  "instanceId": "<uuid>",
  "version": "1.0.0-rc1"
}

Response 200

{
  "token": "<JWT Ed25519>",
  "signingKeyId": "ed25519-2026-04-18"
}

Erros

  • 403 UNAUTHORIZED — licença não existe, HWID diverge ou status inválido
  • 403 HWID_MISMATCH — licença vinculada a outra máquina (use minha conta para transferir)
  • 400 — body inválido (Zod)
  • 429 — rate limit

POST /api/licenses/validate

Phone-home diário. Verifica o status remotamente e rotaciona o JWT (TTL 1 dia). Rate limit: 30 req/min por IP.

Body

{
  "tenantId": "<cuid>",
  "token": "<JWT anterior>",
  "hwid": "sha256:<hex>"
}

Response 200

{
  "token": "<JWT renovado>",
  "signingKeyId": "ed25519-2026-04-18"
}

Erros

  • 403 REVOKED — licença revogada no portal
  • 403 SUSPENDED — licença suspensa temporariamente
  • 403 EXPIRED — passou do vencimento
  • 403 HWID_MISMATCH — HWID não bate

JWT Claims

{
  "iss": "brutusforge.io",
  "aud": "brutusforge-api",
  "sub": "<licenseId>",
  "iat": 1234567890,
  "exp": 1234654290,
  "tier": "L1",
  "tenantId": "<cuid>",
  "hwid": "sha256:<hex>",
  "features": ["*"],
  "maxClusters": null,
  "buyerEmail": "<email>",
  "purchaseId": "<gatewayOrderId>"
}

O header inclui kid (key id) para rotação futura. O cliente verifica a assinatura com LICENSE_SERVER_PUBLIC_KEY (Ed25519, 32 bytes base64url).