Free
US$ 0 / mês
Sem pagamento
- 1 projeto
- 100 licenças ativas
- 20 builds por mês
- 2 API keys
Emita keys de licença, prenda cada uma a um dispositivo e revogue no meio da sessão. Seu loader confere com o Surf antes de cada download.
Plano Free: 1 projeto, 100 licenças ativas, 20 builds por mês.
Demonstração · key e dispositivo de exemplo
Uma licença sozinha não abre nada. Toda requisição percorre a mesma corrente, e qualquer elo pode fechá-la.
Crie uma licença e receba uma key SURF, mostrada uma única vez. O Surf guarda apenas o hash.
POST /api/v1/products/:id/licenses 201 SURF-7F3KQ2-…
A primeira ativação prende a key a um dispositivo, e o limite de dispositivos vale mesmo com requisições simultâneas.
POST /api/v1/activate 201 DEV-3fa94c1b7e02
Seu loader troca a key e o dispositivo por um token de runtime de vida curta, 15 minutos por padrão. As renovações têm teto.
POST /api/v1/runtime/authenticate 201 srt_•••• 900 s
Toda requisição protegida confere de novo a licença, a ativação, o dispositivo e o produto. Suspenda ou revogue a key e a próxima requisição falha.
GET /api/v1/runtime/session 200 autorizado
O loader baixa o build concluído mais recente e o confere pelo SHA-256.
GET /api/v1/runtime/artifact 200 sha256 conferido
Os builds passam pelo Surf Protect a caminho do seu loader. Seu código-fonte nunca é armazenado nem registrado em log.
Maior código por job: Free 1 MiB, Pro 5 MiB, Studio 20 MiB.
Três credenciais que nunca substituem uma à outra: uma para você, uma para os seus servidores, uma para o seu loader.
Você, no navegador. Projetos, licenças, keys e cobrança.
Authorization: Bearer <session> Seus servidores. Escopo por recurso, opcionalmente restrita a um projeto.
X-Surf-API-Key: surf_live_… Seu loader. Uma licença em um dispositivo, conferida a cada requisição.
Authorization: Bearer srt_… local HttpService = game:GetService("HttpService")
local response = HttpService:RequestAsync({
Url = "https://surfauth.me/api/v1/runtime/authenticate" ,
Method = "POST",
Headers = { ["Content-Type"] = "application/json" },
Body = HttpService:JSONEncode({
licenseKey = LICENSE_KEY,
deviceId = DEVICE_ID,
}),
})
local session = HttpService:JSONDecode(response.Body).data
-- session.token travels as "Authorization: Bearer srt_…"
Eventos como license.created, activation.deactivated e build.completed, assinados com HMAC-SHA256 e reenviados com backoff.
Contadores diários por projeto e produto: autenticações, ativações, builds e downloads.
As API keys carregam só os escopos que você concede, de projects:read a analytics:read, e expiram em 90 dias por padrão.
Todo plano inclui licenciamento, autenticação em runtime e entrega protegida.
US$ 0 / mês
Sem pagamento
US$ 15 / mês
ou US$ 150 por ano
US$ 49 / mês
ou US$ 490 por ano
Crie a conta no painel, ou vá de um terminal vazio a uma licença funcionando em três requisições.
POST /api/v1/auth/register POST /api/v1/auth/login POST /api/v1/projects → …/products → …/licenses