nodes

browse available compute nodes and operator apis

get available nodes

// Get all online nodes
const { data, pagination } = await client.getNodes({
  status: 'online',
  page: 1,
  limit: 20,
});

// Each node includes:
// - Hardware specs (CPU, RAM, GPU, storage)
// - Location (region, country)
// - Pricing (hourly rate in cents)
// - Current capacity

filter by requirements

// Filter by hardware requirements
const gpuNodes = await client.getNodes({
  hasGpu: true,
  minGpuVram: 24000,      // 24GB VRAM
  minCpuCores: 8,
  minRamMb: 32000,        // 32GB RAM
  minDiskGb: 100,
});

// Filter by location and price
const usNodes = await client.getNodes({
  region: 'us-east',
  maxHourlyRate: 200,     // Max $2.00/hour
});

// Combine filters
const ideal = await client.getNodes({
  status: 'online',
  hasGpu: true,
  minGpuVram: 16000,
  region: 'eu-west',
  maxHourlyRate: 150,
});

get node details

// Get specific node details
const node = await client.getNode('node_abc123');

console.log(node.specs.cpuModel);    // "AMD Ryzen 9 5950X"
console.log(node.specs.cpuCores);    // 16
console.log(node.specs.ramMb);       // 65536
console.log(node.gpus[0].name);      // "NVIDIA RTX 4090"
console.log(node.gpus[0].vramMb);    // 24576
console.log(node.hourlyRateCents);   // 150
console.log(node.region);            // "us-east"

operator apis

if you're a node operator, you can manage your nodes programmatically:

// Register as an operator (one-time)
await client.registerAsOperator({
  displayName: 'My GPU Farm',
  email: 'operator@example.com',
});

// Register a new node
const { node, apiKey } = await client.registerNode({
  name: 'GPU Server 1',
  specs: {
    cpuModel: 'AMD Ryzen 9 5950X',
    cpuCores: 16,
    ramMb: 65536,
    diskGb: 2000,
  },
  gpus: [{
    name: 'NVIDIA RTX 4090',
    vramMb: 24576,
    cudaVersion: '12.3',
  }],
  region: 'us-east',
  hourlyRateCents: 150,
});

// Save the API key - used by the node agent!
console.log(`API Key: ${apiKey}`);

// List your operator nodes
const { nodes } = await client.getOperatorNodes({
  status: 'online',
});

// Update node settings
await client.updateNode('node_abc123', {
  name: 'GPU Server 1 - Updated',
  hourlyRateCents: 175,
  status: 'maintenance',
});

// Regenerate API key (if compromised)
const { apiKey: newKey } = await client.regenerateNodeApiKey('node_abc123');

node types

interface Node {
  id: string;
  operatorId: string;
  name: string;
  status: 'online' | 'offline' | 'maintenance' | 'draining';
  specs: NodeSpecs;
  gpus: NodeGpu[];
  region: string;
  country: string;
  hourlyRateCents: number;
  activeDeployments: number;
  maxDeployments: number;
  uptimePercent: number;
}

interface NodeSpecs {
  cpuModel: string;
  cpuCores: number;
  cpuThreads: number;
  ramMb: number;
  diskGb: number;
  diskType: 'ssd' | 'nvme' | 'hdd';
  networkSpeedMbps: number;
  os: string;
  dockerVersion: string;
}

interface NodeGpu {
  name: string;
  brand: 'nvidia' | 'amd' | 'intel';
  vramMb: number;
  cudaCores?: number;
  cudaVersion?: string;
}