Todo lo que haces con clics en el panel (encender el servidor, enviar un comando a la consola, editar un archivo) también se puede hacer con una solicitud HTTP. Es lo que permite que un bot de Discord reinicie el servidor de Minecraft con un comando, que un script vuelva a encender el servidor si se cae o que una rutina guarde un archivo de configuración cada día.
Esta guía muestra cómo crear la clave que da ese acceso y cómo usarla en las operaciones más comunes.
La clave actúa en nombre de tu cuenta. No tiene permisos separados: lo que tú puedes hacer en el panel, ella también puede, en todos los servidores de la cuenta. Las operaciones más usadas son:
say, whitelist add o save-all.El panel puede mostrar las etiquetas en portugués; el nombre original va entre paréntesis.
bot de discord. Son al menos 4 caracteres, y es ese nombre el que te dirá, meses después, qué clave borrar.La ventana Tu clave API (Sua Chave API) muestra la clave completa, que empieza con ptlc_. Cópiala y guárdala en un lugar seguro: no se vuelve a mostrar. Si la pierdes, borra la clave y crea otra.
Cada llamada tiene que indicar en qué servidor actuar. El identificador aparece en la barra de direcciones cuando abres el servidor en el panel:
https://app.redhosting.com.br/server/1a2b3c4d
El identificador es la parte después de /server/; en el ejemplo, 1a2b3c4d. Los ejemplos de abajo usan TU_SERVIDOR en su lugar y TU_CLAVE en lugar de la clave.
Cada solicitud lleva la clave y la indicación de que la conversación es en JSON. Este comando lista los servidores de la cuenta y confirma que la clave funciona:
curl https://app.redhosting.com.br/api/client \
-H "Authorization: Bearer TU_CLAVE" \
-H "Accept: application/json"
La respuesta trae un elemento por servidor. El campo identifier de cada uno es el mismo identificador del paso anterior.
curl https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR/resources \
-H "Authorization: Bearer TU_CLAVE" \
-H "Accept: application/json"
El campo current_state indica el estado: running, starting, stopping u offline. En resources vienen la memoria y el disco en bytes y la CPU en porcentaje.
curl -X POST https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR/power \
-H "Authorization: Bearer TU_CLAVE" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"signal": "restart"}'
El signal acepta start, stop, restart y kill. Prefiere stop: apaga con calma y deja que el servidor guarde lo que está en memoria. kill corta en el acto, como desenchufar, y puede corromper el mundo o archivos abiertos.
curl -X POST https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR/command \
-H "Authorization: Bearer TU_CLAVE" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"command": "say Reinicio en 5 minutos"}'
El comando llega a la consola exactamente como si lo hubieras escrito ahí. El servidor tiene que estar encendido; apagado, la respuesta es un error 502.
Para listar una carpeta:
curl "https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR/files/list?directory=/" \
-H "Authorization: Bearer TU_CLAVE" \
-H "Accept: application/json"
Para leer un archivo (la respuesta es el contenido puro, no JSON):
curl "https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR/files/contents?file=/server.properties" \
-H "Authorization: Bearer TU_CLAVE"
Para escribir, el cuerpo de la solicitud es todo el contenido nuevo del archivo, que se reemplaza:
curl -X POST "https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR/files/write?file=/motd.txt" \
-H "Authorization: Bearer TU_CLAVE" \
-H "Accept: application/json" \
--data-binary @motd.txt
Resumen de las direcciones. Todas empiezan con https://app.redhosting.com.br/api/client/servers/TU_SERVIDOR:
| Acción | Método | Dirección |
|---|---|---|
| Estado y consumo | GET | /resources |
| Encender, apagar, reiniciar | POST | /power |
| Comando en la consola | POST | /command |
| Listar carpeta | GET | /files/list?directory=/ |
| Leer archivo | GET | /files/contents?file=/ruta |
| Escribir archivo | POST | /files/write?file=/ruta |
| Listar copias de seguridad | GET | /backups |
Un script en Node.js (versión 18 o más reciente) que comprueba el estado y enciende el servidor cuando lo encuentra apagado. La clave viene de una variable de entorno, no escrita en el código: así no termina en GitHub junto con el resto.
const PANEL = 'https://app.redhosting.com.br/api/client';
const SERVER = 'TU_SERVIDOR';
const headers = {
Authorization: `Bearer ${process.env.PANEL_API_KEY}`,
Accept: 'application/json',
'Content-Type': 'application/json',
};
async function check() {
const response = await fetch(`${PANEL}/servers/${SERVER}/resources`, { headers });
if (!response.ok) throw new Error(`La API respondió ${response.status}`);
const { attributes } = await response.json();
if (attributes.current_state === 'offline') {
await fetch(`${PANEL}/servers/${SERVER}/power`, {
method: 'POST',
headers,
body: JSON.stringify({ signal: 'start' }),
});
console.log('El servidor estaba apagado: encendiéndolo.');
}
}
check().catch((error) => console.error(error.message));
Ejecutado cada pocos minutos con una tarea programada del sistema, vuelve a encender el servidor tras una caída. No lo ejecutes con un intervalo demasiado corto: mira el límite de solicitudes en la siguiente sección.
| Respuesta | Qué significa | Qué hacer |
|---|---|---|
| 401 | La clave no fue aceptada. | Comprueba que copiaste la clave entera, con ptlc_, y que la cabecera es Authorization: Bearer. Una clave borrada en el panel deja de funcionar al instante. |
| 403 | La clave funciona, pero no aquí. | La IP desde la que salió la solicitud no está en IP permitidas, o tu cuenta es subusuaria del servidor sin permiso para esa acción. |
| 404 | Servidor o archivo no encontrado. | Comprueba el identificador de 8 caracteres y la ruta del archivo, que empieza con /. |
| 409 | El servidor no puede hacer eso ahora. | Se está instalando, transfiriendo o está suspendido. Espera a que termine. |
| 429 | Demasiadas solicitudes. | El panel acepta hasta 256 solicitudes por minuto por cuenta. Espacia las llamadas. |
| 502 | El servidor tiene que estar encendido. | Ocurre al enviar un comando con el servidor apagado. Enciéndelo antes. |
.env que esté en el .gitignore, nunca dentro del código.Antes de poner el script en marcha
stop, y no kill, para apagar.
/server/.