API de Servidor GPU (RESTful)

La API de Trooper AI ofrece acceso integral al manejo de servidores con GPU, incluyendo aprovisionamiento, monitoreo, migración y funciones administrativas. Esta API RESTful permite gestionar programáticamente su infraestructura de servidores con GPU, crear y supervisar pedidos de servidor, manejar plantillas y realizar tareas administrativas.

Los puntos finales de la API y la documentación de la API están actualmente en fase Beta. Contáctenos ante cualquier inconveniente: Contacto de Soporte.

Encuentras tu clave de la API en el Consola de API.

Prueba en el Entorno de Pruebas de la API

Aconsejo profesional: Simplemente entrega esta documentación a tu Agente de Desarrollo LLM y este la integrará en tu código.


Resumen

Obtén una breve descripción de los fundamentos de la API como URL, autenticación y más:

URL base

Código
https://james.trooper.ai

Autenticación

La mayoría de los puntos finales requieren autenticación con token Bearer usando tu clave API de Trooper:

HTTP
Authorization: Bearer YOUR_API_KEY

Obtén tu clave de API desde el Consola de la API.

Formato de respuesta

Todas las respuestas de la API están en formato JSON. Las respuestas exitosas suelen incluir:

  • success: Booleano que indica éxito de la operación
  • Campos de datos adicionales específicos del punto final

Las respuestas de error incluyen:

  • error: Cadena que describe el error
  • next: Campo opcional que sugiere la siguiente acción (ej. «login»)

Puntos de extremo públicos

Obtener estado de prueba

GET /api/probar

Punto de extremo de prueba simple para verificar la conectividad de la API.

Solicitud

HTTP
GET /api/test

Respuesta exitosa (200)

JSON
{
  "test": "meinstring5"
}

Obtener servidores GPU disponibles (Públicos)

Obtener /api/servidoresgpudisponibles

Obtener todas las configuraciones de servidores GPU públicamente disponibles.

Solicitud

HTTP
GET /api/blibs
Authorization: Bearer YOUR_API_KEY  # Optional - includes your private networks if provided

Respuesta exitosa (200)

JSON
[
  {
    "id": 1,
    "name": "powerai.example",
    "gpu_type": "RTX 4090",
    "gpu_num": 1,
    "gpu_ram": 24,
    "cpu_cores": 8,
    "cpu_ram": 32,
    "hdd": 500,
    "price_h": 0.85,
    "is_public": 1,
    "country_code": "DE",
    "is_available": true,
    "available_hosts": ["ai18", "ai89"],
    "fitCount": 2,
    "maxPossibleInstances": 5
  }
]

Respuesta de error (500)

JSON
{
  "error": "Error fetching Blibs"
}

Puntos de Extremos con Autenticación Requerida

Obtener servidores privados de GPU

OBTENER /api/servidores-gpu-privados

Obtener servidores de GPU accesibles para tu cuenta, incluyendo configuraciones privadas.

Solicitud

HTTP
GET /api/blibs-private
Authorization: Bearer YOUR_API_KEY

Respuesta exitosa (200)

JSON
[
  {
    "id": 2,
    "name": "RTX 4090 Dual Private",
    "gpu_type": "RTX 4090",
    "gpu_num": 2,
    "gpu_ram": 24,
    "cpu_cores": 16,
    "cpu_ram": 64,
    "hdd": 1000,
    "price_h": 1.65,
    "is_public": 1,
    "country_code": "DE"
  }
]

Respuesta de error (401)

JSON
{
  "error": "Missing or invalid Authorization header"
}

Crear pedido de servidor

POST /orden/api

Crea un nuevo pedido de servidor con GPU. Debes enviar el precio proporcionado; de lo contrario, el pedido no será aceptado. Esto garantiza que el precio actual coincida con tus expectativas.

Abrir Consola de API y Probar

Solicitud

HTTP
POST /api/order
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "blib_id": 1,
  "price_h": 0.85,
  "total_price": 0.85,
  "terms_accepted": true,
  "contract_interval": "HOUR",
  "second_partition_percentage": 20,
  "templates": [
    {
      "id": 1,
      "name": "PyTorch Environment"
    }
  ]
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "orderId": 123
}

Respuesta de error (400)

JSON
{
  "error": "You must accept the terms and conditions."
}

Respuesta de error (400)

JSON
{
  "error": "Invalid or missing contract interval."
}

Obtener tus órdenes de servidor

OBTENER /api/órdenes

Obtenga todos sus pedidos de servidor con información detallada.

Al manejar los estados del servidor, considere la interrelación entre desired_status y current_status. Por ejemplo, un servidor podría tener un desired_status de "detener", pero su current_status podría seguir en "ejecutándose" si el proceso de detención está en curso. Su aplicación debe considerar estas transiciones y manejarlas según corresponda.

Solicitud

HTTP
GET /api/orders
Authorization: Bearer YOUR_API_KEY

Parámetros de consulta

  • machine_name (opcional): Filtrar por nombre de máquina específico

Respuesta exitosa (200)

JSON
[
  {
    "order_id": 123,
    "serverId": 123,
    "title": "My PyTorch Server",
    "status": "running",
    "status_user": "running",
    "server_name": "gpu-server-01",
    "machine_name": "ai99_trooperai_000123",
    "ip": "192.168.1.100",
    "ssh_port": 22001,
    "price_h": 0.85,
    "paid_until": "2025-09-26T14:30:00.000Z",
    "contract_interval": "HOUR",
    "is_locked": false,
    "is_low_priority": false,
    "blib_name": "RTX 4090 Single",
    "blib_gpu_type": "RTX 4090",
    "blib_gpu_num": 1,
    "country_code": "DE",
    "template_installs": [
      {
        "id": 1,
        "template_name": "PyTorch Environment",
        "status": 1,
        "status_readable": "Completed"
      }
    ]
  }
]

Respuesta de error (401)

JSON
{
  "error": "Missing or invalid Authorization header",
  "next": "login"
}

Actualizar estado del servidor

POST /estado-de-pedido-api

Actualiza el estado de tu pedido del servidor (en ejecución, detenido, reiniciado, congelado).

Establecer "migration_allowed": true Si aprueba la migración del alojamiento al pasar de un estado congelado a uno en ejecución, este proceso puede tardar entre 10 y 90 minutos e implicará cambios en el rango de puertos y posiblemente en el modelo o velocidad de la CPU.

Solicitud

HTTP
POST /api/order-status
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "serverId": 123,
  "desired_status": "running",
  "migration_allowed": false
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "updated": 1
}

Respuesta de error (403)

JSON
{
  "success": false,
  "error": "Server is locked and cannot be modified"
}

Actualizar título del servidor

POST /api/título-pedido

Actualizar el título de visualización de tu servidor.

Solicitud

HTTP
POST /api/order-title
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "serverId": 123,
  "title": "My New Server Title"
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "message": "Title updated successfully"
}

Bloquear/Desbloquear Servidor

POST /api/bloquear-pedido

Bloquear o desbloquear un servidor para evitar/permitir cambios de estado.

Solicitud

HTTP
POST /api/order-lock
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "serverId": 123,
  "is_locked": true
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "updated": 1
}

Obtener credenciales del servidor

POST /api/credenciales

Obtener credenciales SSH y detalles de conexión para tu servidor.

Solicitud

HTTP
POST /api/credentials
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "serverId": 123
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "ssh_password": "generated-password"
}

Respuesta de error (403)

JSON
{
  "error": "Access denied or server not found"
}

Obtener historial de estado del servidor

Obtener /api/historial-estado-pedido

Obtener los últimos 5 cambios de estado para un pedido de servidor.

Solicitud

HTTP
GET /api/order-status-history?order_id=123
Authorization: Bearer YOUR_API_KEY

Respuesta exitosa (200)

JSON
{
  "success": true,
  "history": [
    {
      "id": 1,
      "status_user": "running",
      "status_txt": "Server started successfully",
      "status_since": "2025-09-25T10:30:00.000Z"
    },
    {
      "id": 2,
      "status_user": "stopped",
      "status_txt": "Server stopped by user",
      "status_since": "2025-09-25T08:15:00.000Z"
    }
  ]
}

Puntos finales de migración

La migración se utiliza para llevar tu servidor de GPU a una configuración diferente. No recomendamos usarla en producción, pero puedes intentarlo si lo deseas.

Obtener opciones de migración

OBTENER /api/opciones-migración

Obtener configuraciones de servidor disponibles para migración.

Solicitud

HTTP
GET /api/migration-options?order_id=123
Authorization: Bearer YOUR_API_KEY

Respuesta exitosa (200)

JSON
{
  "success": true,
  "currentOrder": {
    "id": 123,
    "title": "My Server",
    "status": "running",
    "contract_interval": "HOUR",
    "paid_until": "2025-09-26T14:30:00.000Z"
  },
  "currentBlib": {
    "id": 1,
    "name": "RTX 4090 Single",
    "gpu_type": "RTX 4090",
    "gpu_num": 1,
    "price_h": 0.85
  },
  "availableBlibs": [
    {
      "id": 2,
      "name": "RTX 4090 Dual",
      "gpu_type": "RTX 4090",
      "gpu_num": 2,
      "price_h": 1.65,
      "is_available": true,
      "additionalCostPerCycle": 0.80
    }
  ]
}

Calcular costo de migración

POST /api/costo-migración

Calcular el costo para migrar a una configuración de servidor diferente.

Solicitud

HTTP
POST /api/migration-cost
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "order_id": 123,
  "target_blib_id": 2
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "upgradeCost": 15.50,
  "remainingValue": 12.30,
  "totalDue": 3.20,
  "additionalCostPerCycle": 0.80,
  "nextBillingDate": "2025-09-26T14:30:00.000Z",
  "currentRate": {
    "amount": 0.85,
    "display": "€0.85/hour"
  },
  "newRate": {
    "amount": 1.65,
    "display": "€1.65/hour"
  }
}

Ejecutar Migración

POST /compra-de-migración/api

Ejecutar la migración hacia una nueva configuración de servidor.

IMPORTANTE Si envía datos inválidos aquí, nada está garantizado. El equipo de soporte no podrá restaurar su pedido si abusa de este punto final para comprar migraciones. Recomendamos usar el Panel UI (Dashboard).

Solicitud

HTTP
POST /api/buy-migration
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "order_id": 123,
  "target_blib_id": 2,
  "keep_data": true
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "message": "Migration initiated successfully",
  "new_order_id": 124
}

Respuesta de error (400)

JSON
{
  "error": "Insufficient budget for migration"
}

Gestión de Plantillas

Obtener plantillas disponibles

Obtener /api/plantillas

Obtener todas las plantillas de software disponibles.

Solicitud

HTTP
GET /api/templates
Authorization: Bearer YOUR_API_KEY  # Optional

Respuesta exitosa (200)

JSON
[
  {
    "id": 1,
    "name": "PyTorch Environment",
    "description": "Pre-configured PyTorch environment with CUDA support",
    "category": "Machine Learning",
    "is_public": true,
    "options": [
      {
        "id": 1,
        "name": "Python Version",
        "type": "select",
        "default_value": "3.9",
        "possible_values": "3.8,3.9,3.10"
      }
    ]
  }
]

Obtener configuración de plantilla

Obtener /api/configuracion-plantilla

Obtener la configuración de instalación del plantilla para un pedido específico.

Solicitud

HTTP
GET /api/template-config?order_id=123
Authorization: Bearer YOUR_API_KEY

Respuesta exitosa (200)

JSON
{
  "success": true,
  "templates": [
    {
      "install_id": 1,
      "template_id": 1,
      "template_name": "PyTorch Environment",
      "status": 1,
      "status_readable": "Completed",
      "config": {
        "python_version": "3.9"
      }
    }
  ]
}

Instalar Plantilla

POST /api/instalación-de-plantilla-agregar

Instalar una nueva plantilla en tu servidor.

Solicitud

HTTP
POST /api/template-install-add
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "order_id": 123,
  "template_id": 1,
  "config": {
    "python_version": "3.9"
  }
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "install_id": 5,
  "message": "Template installation queued"
}

Eliminar plantilla

POST /api/instalación-de-plantilla-eliminar

Eliminar una instalación de plantilla desde tu servidor.

Solicitud

HTTP
POST /api/template-install-delete
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "install_id": 5
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "message": "Template removal initiated"
}

Reintentar instalación de plantilla

POST /api/reintentar-instalación-de-plantilla

Reintentar la instalación fallida de una plantilla.

Solicitud

HTTP
POST /api/template-install-retry
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Cuerpo de la solicitud

JSON
{
  "install_id": 5
}

Respuesta exitosa (200)

JSON
{
  "success": true,
  "message": "Template installation retry initiated"
}

Códigos de error

Códigos de estado HTTP

  • 200 OK: Solicitud exitosa
  • 400 Solicitud Incorrecta: Parámetros de solicitud inválidos
  • 401 No autorizado: Autenticación faltante o inválida
  • 403 Prohibido: Permisos insuficientes
  • 404 No encontrado: Recurso no encontrado
  • Error interno del servidor 500: Error en el servidor

Mensajes de error comunes

  • "Missing or invalid Authorization header": Autenticación requerida
  • "Invalid Trooper key": La clave de la API es inválida
  • "Unauthorized access": Permisos insuficientes
  • "You must accept the terms and conditions": Términos no aceptados en la creación del pedido
  • "Invalid or missing contract interval": El intervalo de contrato debe ser HORA, SEMANA o MES
  • "Insufficient budget": Presupuesto insuficiente para la operación
  • "Server is locked and cannot be modified": El servidor está bloqueado para modificaciones

Límite de tasa

Los puntos finales de la API pueden estar sujetos a límites de tasa para evitar abusos. Si supera el límite de tasa, recibirá un código de estado 429. Implemente una lógica adecuada de reintento con retroceso exponencial.

Soporte

Para soporte de la API e inquietudes, comuníquese con: [email protected]

Consola de la API Abierta


Para cualquier pregunta relacionada con la API, contáctenos: Contacto de Soporte