Creating a Node Walkthrough
This document will walk you through everything you need to know to create a node on Voltage via the API. First we'll describe the process then show a complete code example.


Here's the general process of creating a node via our API:
  1. 1.
    Call the /node/create endpoint to create a node with your settings
  2. 2.
    Call the /node endpoint every 5 or 10 seconds to check on the status of the node. It's first status is provisioning.
  3. 3.
    After it's provisioned it will switch to status waiting_init. This means the node is waiting to be initialized. Now you should call /v1/genseed on the node to generate a seed for yourself.
  4. 4.
    Once you have a seed, you can initialize the wallet. Call the /v1/initwallet endpoint on the node. Pass in it the seed created in step #3 and a password. YOU MUST ALSO SET stateless_init: true! If you don't then you won't be able to access the node. This will return a macaroon in the API response.
  5. 5.
    After your node is initialized, you can encrypt the seed and macaroon to your password used for the node.
  6. 6.
    Use the /node/upload_seed and /node/macaroon endpoints to backup your encrypted seed and macaroon. (Give the macaroon a name of admin)
  7. 7.
    That's it! Your node's status should now be running and you can use your macaroon to connect. We use TLS Certificates that are signed by a trusted Certificate Authority so it's not required to supply it when connecting. However, there are some applications that require it nonetheless. If you encounter one, you can get your node's certificate with the /node/cert endpoint.


Here is an example script written in Node.js. This script would create a node, initialize it, and upload the encrypted backups.
const axios = require('axios')
const crypto = require('crypto-js')
// Define your variables
let apiKey = "YOUR_API_KEY_HERE"
let nodeName = "voltage-example"
let nodePassword = "YOUR_SECURE_PASSWORD"
async function main() {
console.log("Creating your node...")
voltageHeaders = {
// Create the Node
creationBody = {
network: "testnet",
purchased_type: "ondemand",
type: "standard",
name: nodeName,
settings: {
alias: nodeName,
autocompaction: false,
autopilot: false,
color: "#EF820D",
grpc: true,
keysend: true,
rest: true,
whitelist: [
wumbo: true
response = await makeRequest('POST', 'https://api.voltage.cloud/node/create', creationBody, voltageHeaders)
nodeId = response.node_id
console.log("Created the node: "+nodeId)
// Wait until the node is waiting_init
do {
statusBody = {
node_id: nodeId
response = await makeRequest('POST', 'https://api.voltage.cloud/node', statusBody, voltageHeaders)
nodeStatus = response.status
nodeApi = response.api_endpoint
console.log("Found node's status of "+nodeStatus)
// Wait 5 seconds before checking again
await new Promise(r => setTimeout(r, 5000))
while (nodeStatus !== "waiting_init")
// Get a seed for the node
response = await makeRequest('GET', 'https://' + nodeApi + ':8080/v1/genseed', {}, {})
seedPhrase = response.cipher_seed_mnemonic
console.log("Got seed phrase: "+seedPhrase)
// Initialize the node
console.log("Initializing wallet with password: "+nodePassword)
initBody = {
wallet_password: Buffer.from(nodePassword).toString('base64'),
cipher_seed_mnemonic: seedPhrase,
stateless_init: true
response = await makeRequest('POST', 'https://'+nodeApi+':8080/v1/initwallet', initBody, {})
nodeMacaroon = response.admin_macaroon
console.log("Got Node's Macaroon: "+nodeMacaroon)
// Encrypt the Macaroon and Seed
encryptedSeed = crypto.AES.encrypt(
encryptedMacaroon = crypto.AES.encrypt(
// Backup Seed and Macaroon
let macBody = {
node_id: nodeId,
macaroon: encryptedMacaroon,
name: "admin"
response = await makeRequest('POST', 'https://api.voltage.cloud/node/macaroon', macBody, voltageHeaders)
console.log("Uploaded macaroon")
let seedBackBody = {
node_id: nodeId,
seed: encryptedSeed
response = await makeRequest('POST', 'https://api.voltage.cloud/node/upload_seed', seedBackBody, voltageHeaders)
console.log("Uploaded seed")
console.log("Successfully created your node!")
function makeRequest(method, url, data, headers) {
return new Promise(function (resolve, reject) {
method: method,
url: url,
headers: headers,
data: data
(response) => {
var result = response.data
(error) => {
Copy link