DESENVOLVEDORES

API RunixCloud

Integre autenticação, projetos, pool de recursos, arquivos, métricas e recursos administrativos ao seu próprio fluxo com exemplos prontos em quatro linguagens.

RESTJSON e text/plain
Bearer tokenAutenticação protegida
WebSocketExecução avançada
CORS abertoIntegração entre origens

Base URL

https://runixcloud.online/api

Quando o projeto estiver publicado em outro domínio, utilize a origem configurada para a sua instalação. Em desenvolvimento, o proxy local usa http://localhost:3000/api.

Autenticação

Authorization: Bearer <token>

Registro e login são públicos. Os demais recursos da API exigem o token retornado pela autenticação; endpoints administrativos exigem uma conta admin.

Runtimes disponíveis

Node.js20 · 22 · 24
Python3.11 · 3.12 · 3.13
Java17 · 21 · 25
Ruststable

Na criação de projeto você escolhe nome, runtime, versão e a parcela de RAM, CPU e disco reservada no pool da conta. O deploy por ZIP é feito em seguida pelo endpoint dedicado.

REFERÊNCIA COMPLETA

Endpoints e exemplos

Pesquise por recurso, filtre por categoria e troque a linguagem dos exemplos sem sair da página.

GET/health
Público

Health check

Confirma que a API HTTP está respondendo.

Sucesso 200
Resposta
{"status":"ok"}
Node.js
const response = await fetch('https://runixcloud.online/health', {
  method: 'GET',
});

console.log(await response.text());
POST/api/auth/register
Público

Registrar usuário

Cria uma conta no plano inicial disponível.

Body
{
  "email": "user@example.com",
  "password": "password123"
}
A senha precisa ter pelo menos 8 caracteres.
Sucesso 201Erros 400 · 409 · 500
Resposta
{"token":"<jwt>"}
Node.js
const response = await fetch('https://runixcloud.online/api/auth/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "email": "user@example.com",
    "password": "password123"
  })
});

console.log(await response.text());
POST/api/auth/login
Público

Login

Valida email/senha e devolve JWT e role.

Body
{
  "email": "user@example.com",
  "password": "password123"
}
Sucesso 200Erros 401 credenciais inválidas
Resposta
{"token":"<jwt>","role":"user"}
Node.js
const response = await fetch('https://runixcloud.online/api/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "email": "user@example.com",
    "password": "password123"
  })
});

console.log(await response.text());
GET/api/me
Bearer JWT

Conta atual

Retorna identidade, role, suspensão e plano.

Sucesso 200
Resposta
{"id":"<uuid>","email":"user@example.com","role":"user","suspended":false,"plan":"Pro"}
Node.js
const response = await fetch('https://runixcloud.online/api/me', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/pool
Bearer JWT

Pool de recursos

Capacidade total, reservada e livre da conta. Projetos reservam recursos deste pool.

Sucesso 200
Resposta
{"plan":"Pro","memory_mb":4096,"used_memory_mb":1280,"free_memory_mb":2816,"cpu":4,"used_cpu":2,"free_cpu":2,"disk_mb":20480,"used_disk_mb":3072,"free_disk_mb":17408,"max_servers":10,"used_servers":2,"free_servers":8}
Node.js
const response = await fetch('https://runixcloud.online/api/pool', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/account
Bearer JWT

Perfil completo

Retorna perfil, Discord conectado e prefixo da API key.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/account', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/account
Bearer JWT

Atualizar perfil

Atualiza nome de exibição e avatar.

Body
{
  "username": "Samuel",
  "avatar": "https://example.com/avatar.png"
}
Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/account', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "username": "Samuel",
    "avatar": "https://example.com/avatar.png"
  })
});

console.log(response.status);
POST/api/account/password
Bearer JWT

Alterar senha

Troca a senha local da conta.

Body
{
  "password": "uma-senha-forte"
}
Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/account/password', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "password": "uma-senha-forte"
  })
});

console.log(response.status);
POST/api/account/apikey
Bearer JWT

Gerar API key

Substitui a chave de API e exibe o segredo uma única vez.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/account/apikey', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
DELETE/api/account/apikey
Bearer JWT

Revogar API key

Revoga a chave de API atual.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/account/apikey', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
GET/api/plans
Público

Planos públicos

Lista planos públicos, recursos, preços e disponibilidade de checkout.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/plans', {
  method: 'GET',
});

console.log(await response.text());
GET/api/billing
Bearer JWT

Resumo da cobrança

Retorna plano atual, vigência e histórico recente de cobranças.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/billing', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/billing/coupons/preview
Bearer JWT

Validar cupom

Valida um cupom no servidor e retorna valor original, desconto e total final. Cupons recorrentes ativos também podem ser aplicados automaticamente.

Body
{
  "plan_id": "uuid-do-plano",
  "cycle": "monthly",
  "code": "RUNIX20"
}
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/billing/coupons/preview', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "plan_id": "uuid-do-plano",
    "cycle": "monthly",
    "code": "RUNIX20"
  })
});

console.log(await response.text());
POST/api/billing/checkout/:planId
Bearer JWT

Iniciar Checkout Pro

Cria uma preferência no Mercado Pago e uma ordem local vinculada ao usuário.

Body
{
  "cycle": "monthly"
}
cycle aceita monthly ou annual. A ativação do plano depende do webhook validado e da consulta server-side do pagamento.
Sucesso 201Erros 409 plano menor que recursos reservados · 503 provedor indisponível
Node.js
const response = await fetch('https://runixcloud.online/api/billing/checkout/:planId', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "cycle": "monthly"
  })
});

console.log(await response.text());
GET/api/billing/orders/:id
Bearer JWT

Consultar cobrança

Consulta o estado da ordem local. Pagamentos aprovados em espera podem ser reconciliados novamente.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/billing/orders/SERVER_ID', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/webhooks/mercadopago
Público

Webhook Mercado Pago

Recebe eventos de pagamento, valida X-Signature e consulta o pagamento no Mercado Pago antes de entregar o plano.

Sucesso 200Erros 401 assinatura inválida
Node.js
const response = await fetch('https://runixcloud.online/api/webhooks/mercadopago', {
  method: 'POST',
});

console.log(await response.text());
GET/api/runtimes
Bearer JWT

Runtimes disponíveis

Catálogo real de runtimes e versões aceitas.

Sucesso 200
Resposta
{"node":{"name":"Node.js","versions":["20","22","24"]},"python":{"name":"Python","versions":["3.11","3.12","3.13"]},"java":{"name":"Java","versions":["17","21","25"]},"rust":{"name":"Rust","versions":["stable"]}}
Node.js
const response = await fetch('https://runixcloud.online/api/runtimes', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/servers
Bearer JWT

Listar projetos

Lista os projetos e suas reservas individuais.

Sucesso 200
Resposta
[{"id":"<uuid>","name":"api","runtime":"node","version":"22","status":"online","memory_mb":256,"cpu":1,"disk_mb":512,"start_command":"node index.js"}]
Node.js
const response = await fetch('https://runixcloud.online/api/servers', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers
Bearer JWT

Criar projeto

Reserva recursos do pool e cria um container parado, pronto para receber o deploy.

Body
{
  "name": "api",
  "runtime": "node",
  "version": "22",
  "memory_mb": 256,
  "cpu": 1,
  "disk_mb": 512,
  "start_command": "node index.js"
}
A reserva é transacional. Criações simultâneas não podem consumir o mesmo saldo livre.
Sucesso 201Erros 400 configuração inválida · 403 pool insuficiente · 409 concorrência
Resposta
{"id":"<uuid>","status":"offline"}
Node.js
const response = await fetch('https://runixcloud.online/api/servers', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "name": "api",
    "runtime": "node",
    "version": "22",
    "memory_mb": 256,
    "cpu": 1,
    "disk_mb": 512,
    "start_command": "node index.js"
  })
});

console.log(await response.text());
POST/api/servers/:id/deploy
Bearer JWT

Deploy de ZIP

Extrai um pacote .zip diretamente em /workspace. Se houver uma única pasta raiz, ela é removida automaticamente.

Sucesso 200Erros 400 ZIP inválido · 413 acima de 64 MB
Resposta
{"status":"deployed"}
Node.js
import { readFile } from 'node:fs/promises';

const form = new FormData();
form.append('file', new Blob([await readFile('./project.zip')]), 'project.zip');

const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/deploy', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer ' + TOKEN },
  body: form
});
console.log(response.status, await response.text());
POST/api/servers/:id/redeploy
Bearer JWT

Redeploy de ZIP

Valida o ZIP, substitui todo o /workspace e preserva o estado do serviço. Se estava online, reinicia após a publicação; se estava parado, permanece parado.

Sucesso 200Erros 400 ZIP inválido ou falha de publicação · 413 acima de 64 MB
Resposta
{"status":"redeployed","restarted":true}
Node.js
import { readFile } from 'node:fs/promises';

const form = new FormData();
form.append('file', new Blob([await readFile('./project.zip')]), 'project.zip');

const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/redeploy', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer ' + TOKEN },
  body: form
});
console.log(response.status, await response.text());
GET/api/servers/:id
Bearer JWT

Detalhar projeto

Retorna runtime, estado, comando e recursos reservados.

Sucesso 200Erros 404
Resposta
{"id":"<uuid>","name":"api","status":"online","memory_mb":256,"cpu":1,"disk_mb":512,"start_command":"node index.js"}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PATCH/api/servers/:id
Bearer JWT

Atualizar projeto

Altera nome e/ou redistribui RAM, CPU e disco sem ultrapassar o pool da conta.

Body
{
  "name": "api-prod",
  "memory_mb": 512,
  "cpu": 1,
  "disk_mb": 1024
}
Sucesso 204Erros 400 · 403 pool insuficiente · 409 concorrência
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "name": "api-prod",
    "memory_mb": 512,
    "cpu": 1,
    "disk_mb": 1024
  })
});

console.log(response.status);
DELETE/api/servers/:id
Bearer JWT

Excluir projeto

Remove o container e devolve os recursos reservados ao pool.

Sucesso 204Erros 404 · 500
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
POST/api/servers/:id/start
Bearer JWT

Start projeto

Executa start no container. Stop/restart/kill persistem um snapshot de logs antes da ação.

Sucesso 200Erros 404 · 500
Resposta
{"status":"online"}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/start', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/stop
Bearer JWT

Stop projeto

Executa stop no container. Stop/restart/kill persistem um snapshot de logs antes da ação.

Sucesso 200Erros 404 · 500
Resposta
{"status":"offline"}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/stop', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/restart
Bearer JWT

Restart projeto

Executa restart no container. Stop/restart/kill persistem um snapshot de logs antes da ação.

Sucesso 200Erros 404 · 500
Resposta
{"status":"online"}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/restart', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/kill
Bearer JWT

Kill projeto

Executa kill no container. Stop/restart/kill persistem um snapshot de logs antes da ação.

Sucesso 200Erros 404 · 500
Resposta
{"status":"killed"}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/kill', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/servers/:id/logs
Bearer JWT

Saída atual

Retorna as últimas 500 linhas de stdout/stderr, com timestamps.

Sucesso 200
Resposta
{"logs":"..."}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/logs', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/servers/:id/log-history
Bearer JWT

Histórico de logs

Retorna até 10 snapshots persistidos das execuções anteriores.

Sucesso 200
Resposta
{"items":[{"id":"<uuid>","reason":"stop","logs":"...","created_at":"<timestamp>"}]}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/log-history', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/servers/:id/stats
Bearer JWT

Estatísticas

Snapshot de CPU e memória direto do Docker.

Sucesso 200
Resposta
{"cpu_percent":1.25,"memory_usage":104857600,"memory_limit":268435456}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/stats', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/servers/:id/files
Bearer JWT

Listar arquivos

Lista um nível de /workspace usando a API de archive do Docker; funciona também com container parado.

Querypath=/workspace
Sucesso 200
Resposta
{"files":[{"name":"index.js","type":"f","size":"124"}]}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/files?path=/workspace', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/servers/:id/files/content
Bearer JWT

Ler arquivo

Lê até 32 MB de um arquivo do workspace.

Querypath=/workspace/index.js
Sucesso 200 text/plainErros 404
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/files/content?path=/workspace/index.js', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/files
Bearer JWT

Salvar arquivo de texto

Cria ou sobrescreve conteúdo textual.

Body
{
  "path": "/workspace/index.js",
  "content": "console.log(\"RunixCloud\")\n"
}
O editor JSON continua limitado a 2 MiB.
Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/files', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "path": "/workspace/index.js",
    "content": "console.log(\"RunixCloud\")\n"
  })
});

console.log(response.status);
POST/api/servers/:id/files/upload
Bearer JWT

Upload de arquivo

Envia um arquivo binário para o diretório informado.

Querypath=/workspace
Sucesso 201Erros 413 acima de 32 MB
Resposta
{"name":"logo.png","path":"/workspace/logo.png","size":12345}
Node.js
import { readFile } from 'node:fs/promises';

const form = new FormData();
form.append('file', new Blob([await readFile('./arquivo.bin')]), 'arquivo.bin');

const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/files/upload?path=/workspace', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer ' + TOKEN },
  body: form
});
console.log(response.status, await response.text());
GET/api/servers/:id/files/download
Bearer JWT

Download de arquivo

Baixa um arquivo como application/octet-stream.

Querypath=/workspace/logo.png
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/files/download?path=/workspace/logo.png', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/folders
Bearer JWT

Criar diretório

Cria diretório no workspace.

Body
{
  "path": "/workspace/src"
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/folders', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "path": "/workspace/src"
  })
});

console.log(await response.text());
DELETE/api/servers/:id/files
Bearer JWT

Excluir arquivo/diretório

Remove recursivamente dentro do workspace. A operação requer o container em execução porque utiliza exec.

Querypath=/workspace/old
Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/files?path=/workspace/old', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
GET/api/servers/:id/network
Bearer JWT

Rede do projeto

Retorna subdomínio, porta da aplicação, porta publicada e URL pública.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/network', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/servers/:id/network
Bearer JWT

Alterar subdomínio

Atualiza o subdomínio único associado ao projeto.

Body
{
  "subdomain": "meu-app"
}
Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/network', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "subdomain": "meu-app"
  })
});

console.log(response.status);
GET/api/servers/:id/env
Bearer JWT

Variáveis de ambiente

Retorna as variáveis gerenciadas pelo painel.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/env', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/servers/:id/env
Bearer JWT

Salvar variáveis

Salva variáveis e informa se o projeto precisa ser reiniciado.

Body
{
  "variables": {
    "NODE_ENV": "production"
  }
}
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/env', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "variables": {
      "NODE_ENV": "production"
    }
  })
});

console.log(await response.text());
GET/api/servers/:id/backups
Bearer JWT

Listar backups

Lista backups persistidos do workspace.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/backups', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/backups
Bearer JWT

Criar backup

Gera um backup do workspace atual.

Body
{
  "name": "antes-da-atualizacao"
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/backups', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "name": "antes-da-atualizacao"
  })
});

console.log(await response.text());
POST/api/servers/:id/backups/:backupId/restore
Bearer JWT

Restaurar backup

Restaura o workspace a partir de um backup existente.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/backups/:backupId/restore', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
DELETE/api/servers/:id/backups/:backupId
Bearer JWT

Excluir backup

Remove o arquivo e o registro do backup.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/backups/:backupId', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
GET/api/servers/:id/backups/:backupId/download
Bearer JWT

Baixar backup

Baixa o arquivo de backup.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/backups/:backupId/download', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/metrics/services/:id
Bearer JWT

Métricas históricas

Retorna amostras históricas de CPU e memória.

Queryhours=72
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/metrics/services/SERVER_ID?hours=72', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/reinstall
Bearer JWT

Reinstalar workspace

Limpa os arquivos do workspace mantendo recursos, rede e registro do projeto.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/reinstall', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/minecraft
Bearer JWT

Criar servidor Minecraft

Reserva recursos do pool e cria um servidor Minecraft gerenciado.

Body
{
  "name": "survival",
  "software": "paper",
  "version": "1.21.4",
  "memory_mb": 1024,
  "cpu": 1,
  "disk_mb": 4096,
  "eula": true
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "name": "survival",
    "software": "paper",
    "version": "1.21.4",
    "memory_mb": 1024,
    "cpu": 1,
    "disk_mb": 4096,
    "eula": true
  })
});

console.log(await response.text());
GET/api/minecraft/jars
Público

Versões Minecraft

Lista versões disponíveis para um software Minecraft.

Querysoftware=paper
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/jars?software=paper', {
  method: 'GET',
});

console.log(await response.text());
GET/api/minecraft/:id/eula
Bearer JWT

Consultar EULA

Retorna se a EULA foi aceita.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/eula', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/minecraft/:id/eula
Bearer JWT

Aceitar EULA

Registra a aceitação e aplica ao servidor.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/eula', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/minecraft/:id/properties
Bearer JWT

Server properties

Lê propriedades gerenciáveis do servidor.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/properties', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/minecraft/:id/properties
Bearer JWT

Salvar propriedades

Atualiza propriedades e prepara o servidor para o próximo start.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/properties', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/minecraft/:id/version
Bearer JWT

Trocar versão/software

Altera software/versão do servidor e pode reiniciar o container.

Body
{
  "software": "paper",
  "version": "1.21.4",
  "restart": true
}
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/version', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "software": "paper",
    "version": "1.21.4",
    "restart": true
  })
});

console.log(await response.text());
GET/api/minecraft/:id/addons
Bearer JWT

Listar add-ons

Lista plugins ou mods instalados.

Querytype=plugins
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/addons?type=plugins', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/minecraft/:id/addons/upload
Bearer JWT

Enviar add-on

Envia um arquivo .jar para plugins ou mods.

Querytype=plugins
Sucesso 201
Node.js
import { readFile } from 'node:fs/promises';

const form = new FormData();
form.append('file', new Blob([await readFile('./arquivo.bin')]), 'arquivo.bin');

const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/addons/upload?type=plugins', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer ' + TOKEN },
  body: form
});
console.log(response.status, await response.text());
DELETE/api/minecraft/:id/addons
Bearer JWT

Excluir add-on

Remove plugin ou mod informado.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/addons', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
POST/api/minecraft/:id/command
Bearer JWT

Comando RCON

Executa comando do jogo via RCON; não expõe shell do host.

Body
{
  "command": "say Olá"
}
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/minecraft/SERVER_ID/command', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "command": "say Olá"
  })
});

console.log(await response.text());
GET/api/tickets
Bearer JWT

Meus tickets

Lista chamados da conta.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/tickets', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/tickets
Bearer JWT

Abrir ticket

Cria um chamado de suporte.

Body
{
  "subject": "Ajuda no deploy",
  "category": "technical",
  "priority": "normal",
  "message": "Descrição do problema"
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/tickets', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "subject": "Ajuda no deploy",
    "category": "technical",
    "priority": "normal",
    "message": "Descrição do problema"
  })
});

console.log(await response.text());
POST/api/tickets/:id/reply
Bearer JWT

Responder ticket

Adiciona mensagem do cliente ao chamado.

Body
{
  "message": "Informações adicionais"
}
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/tickets/SERVER_ID/reply', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "message": "Informações adicionais"
  })
});

console.log(await response.text());
GET/api/workspaces
Bearer JWT

Workspaces

Lista espaços de equipe acessíveis à conta.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/workspaces', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/workspaces
Bearer JWT

Criar workspace

Cria um espaço de colaboração.

Body
{
  "name": "Equipe principal",
  "description": "Projetos compartilhados"
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/workspaces', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "name": "Equipe principal",
    "description": "Projetos compartilhados"
  })
});

console.log(await response.text());
POST/api/workspaces/:id/invite
Bearer JWT

Convidar membro

Gera convite para um email e uma função.

Body
{
  "email": "dev@example.com",
  "role": "developer"
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/workspaces/SERVER_ID/invite', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "email": "dev@example.com",
    "role": "developer"
  })
});

console.log(await response.text());
POST/api/workspaces/accept/:token
Bearer JWT

Aceitar convite

Aceita um convite válido de workspace.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/workspaces/accept/:token', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/servers/:id/exec
Bearer JWT

Executar comando

Endpoint avançado mantido para automações; o painel web não oferece terminal interativo.

Body
{
  "command": "node --version"
}
Sucesso 200
Resposta
{"output":"v22.x.x\n","exit_code":0}
Node.js
const response = await fetch('https://runixcloud.online/api/servers/SERVER_ID/exec', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "command": "node --version"
  })
});

console.log(await response.text());
WS/api/ws/server/:id/console
Bearer JWT

WebSocket request/response

Compatibilidade da Engine: recebe um comando e devolve output/exit_code. Não é usado pelo Console visual do painel.

Sucesso 101 Switching Protocols
Resposta
envia {"command":"pwd"} · recebe {"output":"/workspace\n","exit_code":0}
Node.js
import WebSocket from 'ws';

const ws = new WebSocket(
  'wss://runixcloud.online/api/ws/server/SERVER_ID/console',
  { headers: { Authorization: 'Bearer ' + TOKEN } }
);

ws.on('open', () => ws.send(JSON.stringify({ command: 'pwd' })));
ws.on('message', data => console.log(JSON.parse(data.toString())));
GET/api/admin/dashboard
Admin JWT

Resumo administrativo

Totais de contas/projetos e recursos reservados e contratados.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/dashboard', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/admin/users
Admin JWT

Contas e pools

Lista plano atual e consumo agregado de RAM/CPU/disco/projetos por conta.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/users', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PATCH/api/admin/users/:id
Admin JWT

Atualizar conta

Altera suspensão, role, senha e/ou plano. Impede downgrade abaixo dos recursos já reservados.

Body
{
  "plan_id": "<uuid>",
  "suspended": false,
  "billing_exempt": false
}
Sucesso 204Erros 409 plano menor que uso atual
Node.js
const response = await fetch('https://runixcloud.online/api/admin/users/SERVER_ID', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "plan_id": "<uuid>",
    "suspended": false,
    "billing_exempt": false
  })
});

console.log(response.status);
DELETE/api/admin/users/:id
Admin JWT

Excluir conta

Exclui a conta respeitando a proteção do último admin.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/admin/users/SERVER_ID', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
GET/api/admin/servers
Admin JWT

Todos os projetos

Projetos de todas as contas com recursos e proprietário.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/servers', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/admin/plans
Admin JWT

Listar planos

Capacidades dos pools.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/plans', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/admin/plans
Admin JWT

Criar plano

Cria um plano.

Body
{
  "Name": "Core",
  "MemoryMB": 1024,
  "CPU": 2,
  "DiskMB": 10240,
  "MaxServers": 3,
  "MonthlyPriceCents": 890,
  "AnnualPriceCents": 9078,
  "Currency": "BRL",
  "BillingEnabled": true,
  "IsPublic": true,
  "Description": "Plano principal",
  "Highlighted": true
}
Preços são enviados em centavos.
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/admin/plans', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "Name": "Core",
    "MemoryMB": 1024,
    "CPU": 2,
    "DiskMB": 10240,
    "MaxServers": 3,
    "MonthlyPriceCents": 890,
    "AnnualPriceCents": 9078,
    "Currency": "BRL",
    "BillingEnabled": true,
    "IsPublic": true,
    "Description": "Plano principal",
    "Highlighted": true
  })
});

console.log(await response.text());
PATCH/api/admin/plans/:id
Admin JWT

Atualizar plano

Substitui capacidades do plano.

Body
{
  "Name": "Core",
  "MemoryMB": 2048,
  "CPU": 2,
  "DiskMB": 20480,
  "MaxServers": 5,
  "MonthlyPriceCents": 1090,
  "AnnualPriceCents": 11118,
  "Currency": "BRL",
  "BillingEnabled": true,
  "IsPublic": true,
  "Description": "Plano atualizado",
  "Highlighted": true
}
Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/admin/plans/SERVER_ID', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "Name": "Core",
    "MemoryMB": 2048,
    "CPU": 2,
    "DiskMB": 20480,
    "MaxServers": 5,
    "MonthlyPriceCents": 1090,
    "AnnualPriceCents": 11118,
    "Currency": "BRL",
    "BillingEnabled": true,
    "IsPublic": true,
    "Description": "Plano atualizado",
    "Highlighted": true
  })
});

console.log(response.status);
DELETE/api/admin/plans/:id
Admin JWT

Excluir plano

Exclui somente plano sem usuários.

Sucesso 204Erros 409 plano em uso
Node.js
const response = await fetch('https://runixcloud.online/api/admin/plans/SERVER_ID', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
GET/api/admin/nodes
Admin JWT

Listar nodes

Lista nodes, heartbeat, capacidade e reservas usadas pelo scheduler.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/nodes', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/admin/nodes
Admin JWT

Criar node

Cadastra e testa um Docker Engine remoto. Em produção use HTTPS/TLS.

Body
{
  "Name": "node-1",
  "Hostname": "node-1",
  "Address": "https://10.0.0.2:2376",
  "Port": 2376,
  "Memory": 0,
  "Disk": 102400,
  "Weight": 100
}
Sucesso 201
Node.js
const response = await fetch('https://runixcloud.online/api/admin/nodes', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "Name": "node-1",
    "Hostname": "node-1",
    "Address": "https://10.0.0.2:2376",
    "Port": 2376,
    "Memory": 0,
    "Disk": 102400,
    "Weight": 100
  })
});

console.log(await response.text());
DELETE/api/admin/nodes/:id
Admin JWT

Excluir node

Exclui registro do node.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/admin/nodes/SERVER_ID', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
PATCH/api/admin/nodes/:id
Admin JWT

Atualizar node

Atualiza endpoint, peso, limites administrativos e habilitação do node.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/admin/nodes/SERVER_ID', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
POST/api/admin/nodes/:id/test
Admin JWT

Testar node

Executa heartbeat imediato e atualiza a capacidade detectada.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/nodes/SERVER_ID/test', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
POST/api/admin/servers/:id/move
Admin JWT

Migrar projeto

Copia o workspace e recria o container no node de destino preservando configuração e reserva.

Body
{
  "node_id": "<uuid>"
}
Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/servers/SERVER_ID/move', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + TOKEN,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "node_id": "<uuid>"
  })
});

console.log(await response.text());
GET/api/admin/billing
Admin JWT

Cobranças

Lista pagamentos recentes e totais processados pelo Mercado Pago.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/billing', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/admin/coupons
Admin JWT

Cupons

Lista cupons, usos confirmados, reservas e vínculos de desconto automático.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/coupons', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/admin/tickets
Admin JWT

Fila de suporte

Lista tickets de todas as contas.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/tickets', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/admin/tickets/:id
Admin JWT

Atender ticket

Atualiza status/prioridade e pode enviar resposta de suporte.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/tickets/SERVER_ID', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/admin/settings
Admin JWT

Configurações da plataforma

Retorna settings persistentes e status seguro das integrações, sem expor segredos.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/settings', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
PUT/api/admin/settings
Admin JWT

Salvar configurações

Atualiza configurações operacionais persistentes.

Sucesso 204
Node.js
const response = await fetch('https://runixcloud.online/api/admin/settings', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(response.status);
GET/api/admin/audit
Admin JWT

Auditoria

Lista até 200 registros de audit_logs.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/audit', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());
GET/api/admin/orphans
Admin JWT

Containers órfãos

Containers runix.managed sem registro correspondente.

Sucesso 200
Node.js
const response = await fetch('https://runixcloud.online/api/admin/orphans', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + TOKEN
  },
});

console.log(await response.text());

Execução avançada via WebSocket

Este endpoint permanece disponível para integrações e automações compatíveis com a Engine. O Console visual da RunixCloud não envia comandos: ele exibe somente stdout/stderr atuais.

Clientes Node.js, Python, Java e Rust podem autenticar o WebSocket com o header Authorization. O protocolo recebe {"command":"..."} e devolve saída e código de saída.