
[title] Self-Serve Infrastructure Cancellation Steps:
[path] /

# Withdraw Your Funds

The most important step before the Voltage deprecation is complete, August 31, 2026, is to withdraw all funds from your node. Steps 1–6 walk you through moving your Lightning funds to on-chain, withdrawing those funds, and closing your Lightning channels to ensure your node has a $0 balance.

Complete these steps BEFORE **August 11, 2026.**&#x20;

:::hint{type="info"}
We will not be directly supporting node migration from Voltage. Funds must be moved off the node by closing existing channels and withdrawing the balances.
:::

## Step 1: Navigate to Your Node

1. Go to **Infrastructure** in your account. Click the upper right icon on the page after logging in to find this button.&#x20;


::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/cOHmH-UpLVoU5sZToH8fE_image.png" size="70" isUploading="false" width="925" height="841" darkWidth="925" darkHeight="841" showCaption="false"}

2. Select your **node** from the list.
3. On your node dashboard, click **Unlock** to unlock the node.


::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/sQKsPeVlOuiSzBKSW7as7_image.png" size="70" isUploading="false" width="1122" height="804" darkWidth="1122" darkHeight="804" showCaption="false"}

## Step 2: Ensure You Have Your Seed Phrase

1. Ensure you have your Seed phrase in case you need to access your funds on an external LND node (should not be necessary if you follow the steps in this guide)
2. If you do not have your seed phrase, you can get it by clicking Backup & Export and then Seed Phrase Backup.&#x20;


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/MdGnEEjDKuIU-IQDa1V1K_image.png)

## Step 3: Check Your Balance

- Once unlocked, check whether your node shows a balance.
- **If there is no balance:** No further action is needed in ThunderHub. Skip to ***Deprovisioning Your Infrastructure*** below.
- **If there is a balance:** Continue to Step 3.


::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/aLMWKpfZVT1o3OgJxTIqQ_image.png" size="70" isUploading="false" width="1087" height="663" darkWidth="1087" darkHeight="663" showCaption="false"}

## Step 4: Open ThunderHub

1. Click **Create ThunderHub**.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/g9FA8U6k_iG3DJ_4w8vmo_image.png)

2. Wait for ThunderHub to finish provisioning.
3. &#x20;Enter your **node password.**


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/4HoAeJ7UdItme5vcDYBMO_image.png)

## Step 5: Close Your Lightning Channels

***Please close all channels by August 11, 2026 to ensure enough time before Voltage's full deprecation on August 31, 2026.***

1. In ThunderHub, look at the right side of the screen to see your **Lightning balance** and **on-chain balance**.


::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/kcG7jQ5Cwzp6OhOB2wkSu_image.png" size="70" isUploading="false" width="490" height="366" darkWidth="490" darkHeight="366" showCaption="false"}

2. If you have a **Lightning balance**, click **Channels** in the left sidebar.
3. You will see a list of open channels, each with an **X** button.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/c1FPeLNgJPZIVu8GK0Qu__image.png)

4. Click the **X** next to a channel. You will be prompted to select a fee rate choose:
   - **Cooperatively Close** *(always choose this unless it is not available)*
   - **Force Close** *(only use if cooperative close is not an option)*
5. Click Confirm Close.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/EEnUcvFtHXam08H7_0lTG_image.png)

6. Repeat for every channel until your channel list is empty.

## Step 6: Monitor Channel Closing

1. Click the **Pending** icon in ThunderHub to view closing transactions.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/fqr_-i5tiTdIC1Z98j3jB_image.png)

1. Wait for all transactions to be **confirmed on the blockchain**.
2. Once confirmed, refresh the page — your full balance will now appear as an **on-chain balance**.

## Step 7: Send Your On-Chain Funds to an External Wallet

1. In ThunderHub, go to **Home**.
2. In the on-chain area, click **Send**.


::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/xwX-TEoFjHI4neUxA3NM__image.png" size="70" isUploading="false" width="772" height="130" darkWidth="772" darkHeight="130" showCaption="false"}

3. Paste in the **Bitcoin address** you want to send your funds to.
4. Click **Send All** to select the full balance.
5. Choose your preferred **fee rate**.
6. Click **Send** to broadcast the transaction.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/9KY598XLB5GRMhElUYfga_image.png)

Your funds will be sent out of the node.

# Deprovisioning Your Infrastructure

## Step 1: Delete Your Node

1. Return to your node page.
2. Click **My Node**, then click **Delete Node**.
3. Confirm by clicking the **Delete Node** button.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/QaJ1hzK4_i0kJI_pv34Ru_image.png)

## Step 2: Downgrade Your Plan *(Optional)*

- Go to your **team account** and switch from the **Personal plan** to the **Essentials plan**.
- Note: This will be handled automatically once the service is fully shut down on August 31, 2026. If this step is not completed, billing will continue until August 31, 2026.&#x20;


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/XGi39UUZRbs_Z0g3zTlY__image.png)

## Step 3: Export BTCPay Server Records *(If Applicable)*

If you use **BTCPay Server** and want to keep a record of your transaction history:

1. Go to your **BTCPay Server dashboard**.
2. Click **Invoices**.
3. Export your invoice history as a **CSV file**.


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/nFbrYaOIdRnITDQ-LxVQA_image.png)

:::BlockQuote
BTCPay Server does not hold any keys or funds, so no fund withdrawal is needed there.
:::

## Step 4: LNbits *(If Applicable)*

- All **LNbits** funds are tied directly to your Lightning node.
- Once you withdraw your node's on-chain balance in Step 6, those funds are included automatically.
- No separate action is needed in LNbits.

[title] Self-Serve Infrastructure Migration Options
[path] /

This page provides a starting point as you plan to migrate your Voltage self-serve infrastructure. The resources listed are third-party products and projects and are not affiliated with or supported by Voltage. Before migrating funds or production workflows, evaluate each option's custody model, hosting model, support, fees, and migration requirements. To ensure a smooth transition, please complete your migration and deprovision your Voltage infrastructure by **August 31, 2026**.

If you're interested in continuing on Voltage's infrastructure and have growing transaction volume or infrastructure needs, please [complete this form](https://voltage.cloud/infrastructure-deprecation) to connect with our Sales team.

## Quick Fit Map

- App-connected Lightning, Lightning Address, Nostr Wallet Connect, or browser payments: Alby Hub and Alby Extension.
- Mobile-first Lightning wallet or node operations: Lexe and ZEUS.
- Developer-operated Lightning daemon or payment API: phoenixd and moneydevkit.
- Merchant checkout, invoices, POS, or payment links: BTCPay Server and Zaprite.
- LNbits apps, wallets, accounts, or extensions: LNbits.

## Alternative Options

### Alby Hub and Alby Extension

For app-connected Lightning, Nostr Wallet Connect, Lightning Address, or browser-based payment workflows.

- Alby Hub: https\://getalby.com/alby-hub&#x20;
- Alby Extension: https\://getalby.com/alby-extension

### Lexe and ZEUS

For mobile-first Lightning setups or users who want self-custodial wallet/node control from mobile.

- Lexe: https\://www\.lexe.app/
- ZEUS: https\://zeusln.com/

### phoenixd and moneydevkit

For developers who want to operate a Lightning daemon or build Bitcoin/Lightning payment flows directly into an application.

- phoenixd: https\://github.com/ACINQ/phoenixd
- moneydevkit: https\://moneydevkit.com/

### BTCPay Server and Zaprite

For merchant payment workflows such as checkout, invoices, POS, payment links, and payment events.

- BTCPay Server: https\://btcpayserver.org/
- Zaprite: https\://zaprite.com/

### LNbits

For teams relying on LNbits wallets, accounts, extensions, or APIs. Confirm backend, hosting, extension compatibility, and data/configuration migration.

- LNbits: https\://lnbits.com/

## Before Choosing

- Confirm whether the option is custodial or self-custodial.
- Check hosting, support, fees, backup, and recovery expectations.
- Test the replacement with small amounts before moving production funds or customer traffic.


[title] Security Disclaimer
[path] /

# Security Disclaimer

At Voltage, we understand the paramount importance of securing your data and maintaining compliance. We are currently pursuing SOC 2 certification to demonstrate the ways in which we adhere to the most rigorous standards of security and privacy, ensuring that your information is protected at all times.

## A Team of Seasoned Professionals

Our team at Voltage is comprised of experienced security experts who have honed their skills at industry-leading companies such as Twitter, SalesForce, Lightning Labs, Fold, and more. Their expertise and background in the field play an integral role in maintaining and enhancing our security posture, giving you peace of mind knowing that your data is in capable hands.

## Robust and Secure Infrastructure

We've built Voltage on a solid foundation by partnering with industry leaders to provide a secure and reliable infrastructure. Our infrastructure partners are dedicated to upholding the highest security standards, further reinforcing the overall security of our platform.

## State-of-the-Art Encryption for Your Data

Voltage employs cutting-edge encryption technologies to safeguard your data both in transit and at rest. By utilizing the latest encryption algorithms and techniques, we ensure that your data remains secure and confidential at all times.

## Independently Verified Security Controls

To offer added confidence in our security practices, Voltage's security controls are undergoing rigorous evaluation by an independently verified, third-party auditor. These external evaluations serve as a testament to our commitment to protecting your data and upholding the highest security standards.

At Voltage, we hold security in the highest regard, and we continuously work to enhance our security measures and maintain compliance. When you choose Voltage, you can trust that your data is in safe and reliable hands.

## FAQ

### Can you fill out our security assessment?

Unfortunately, as a small team we don't have a lot of bandwidth to fill out custom security assessments. We'll do our best to answer questions and provide support to unblock any requirements if you reach out to us at [security@voltage.cloud](mailto\:security@voltage.cloud).

### What end-user data do you collect and why?

The end user data that is collected is the 'email’ of all Voltage users. We collect this for access and authentication to our service.

### How long do you keep my data?

We keep your data indefinitely unless you request deletion by contacting us directly. Voltage retains data as long as Voltage has a need for its use, or to meet regulatory or contractual requirements. Once data is no longer needed, it is securely disposed of or archived. Voltage in consultation with legal counsel may determine retention periods for data.

### How can I request access, transfer or deletion of my data?

Contact us at [security@voltage.cloud](mailto\:security@voltage.cloud) and we can help.

[title] Macaroons
[path] Lightning Nodes/Node Guides/

## Understanding Macaroons

Macaroons are flexible, decentralized authorization credentials used for fine-grained access control. Unlike traditional tokens, macaroons include embedded caveats that specify conditions under which they are valid. This allows for:

- **Detailed Permissions**
- Macaroons can define precise access rights, such as time limits or specific resource access.
- **Delegation and Attenuation**
- They support creating new macaroons with restricted permissions from an existing one, ideal for safely delegating access.
- **Cryptographic Security**
- Macaroons are signed and cryptographically secure, ensuring they can't be tampered with.

In **LND** (Lightning Network Daemon), macaroons manage permissions for accessing node services, providing secure and granular control over actions like creating invoices and making payments.

**Learn more about macaroons in LND:**
[https://docs.lightning.engineering/lightning-network-tools/lnd/macaroons](https://docs.lightning.engineering/lightning-network-tools/lnd/macaroons)

## Your Voltage Node Macaroons

**You can find your pregenerated macaroons in your Voltage dashboard on the 'Macaroon Bakery' page:**

![macaroon bakery](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/amqehXI_0EOw3Y5dDepw7_image.png "macaroon bakery")

## Generating and Revoking Macaroons with LNCLI

Voltage surfaces macaroons via your node's dashboard but if you want more fine grained control you can access your node's full rpc interface through ([LNCLI (Self Host)](docId:_KBYUaUC4HsHWNpDB_4WN)) and generate or revoke macaroons.&#x20;
*See how in the two documents below:*

[Generate Macaroons with lncli](docId\:NYl5SY770RBKX1-itJ5vf)

[Revoke macaroons with lncli](docId:5Y1pewxX0TXy_bsjA6Cno)

[title] Outbound Liquidity
[path] Lightning Nodes/Node Guides/

In order to make payments on the lightning network, your node will need to have channels with good peers, and have outbound liquidity. When a channel is opened, the initiator will have all the funds on their side, because they are the one who allocated funds to the creation of the channel in the first place.&#x20;

In this guide we will be talking about Thunderhub and Terminal Web. Both can be accessed on your node's home dashboard:



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/R_NWLFQNK5iiMR4KXenGO_image.png)

Your outbound is your peer's inbound, and vice versa. On Thunderhub this is displayed as a blue and green. Blue = Your outbound. Green = Your inbound. Your peer will see these in opposite. Example:



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/9D4WTdRudVUiycI9_jKjJ_image.png)

To open channels, the first thing you must do is send funds to the on chain wallet of your lightning node. You can do this in one of the two dashboards built into Voltage: Thunderhub, or Terminal Web.

For Thunderhub, click receive on the chain side (anchor icon), and then Create Address:



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/52GbjllsZvCdbCOlSJO4I_image.png)

When the address appears, you may send funds to it.&#x20;

On Terminal Web, click Dashboard --> Receive --> On chain --> Generate Address. For instructions on how to get Terminal Web set up if you haven't done so already, check out the doc [Start Terminal Web](docId\:bMsgSDJDmKqtGTejTHYhE).



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/n6gLASFQKF_BnHP3ZTNjz_image.png)

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/2SLg6CseWlAy79jvXChcF_image.png)

Once funds are on your node's on chain wallet, you can now open a channel. First, you must choose a peer and get their connection string. To keep things simple, usually the top 200 ranked nodes on https\://terminal.lightning.engineering are good peers. When you pick one, copy their connection string. Example:



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/1JRubMJFOyqEJbno8u2qb_image.png)

When you have the string copied, you can now open a channel.

## On Thunderhub:&#x20;

Click Open under quick actions, and then click Open > :

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/ZbFPji_7B49mHcVv4VGyS_image.png)

You will now need to fill in some information. Let's go over it:


![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/9a7Sz8mQWQ6sVKphsaRfA_image.png)

**Is New Pear**: If you have never peered with them before, click Yes, and you can paste in the connection string. If you have peered with them before, select No, and then select them from the drop down list.

**Max Size**: Do you want to use all of your on chain funds for the channel?

**Channel Size**: If you select No for Max Size, then enter in the size of the channel. Some things to keep in mind: the size you choose will be the size the channel will always be. We do not recommend opening channels smaller than 1,000,000 sats in production.&#x20;

**Fee Rate**: The default fee you want to charge others on the network to forward payments through the channel. 10000ppm = 1%. This can be changed at any time.

**Base Fee**: The default fee you want to charge others on the network regardless of the size of payment being forwarded. If you leave blank, the default will be 1 sat.

**Fee**: This is the on chain fee for opening the channel. You can select auto, or type in the on chain fee rate yourself.

**Advanced**: A couple options you will likely never use.

Click *Open Channel*.

From here you can click Channels on the left side Thunderhub menu and in the upper-right you will see Pending. You can see the TXID here. After enough confirmations (Usually 6), the channel will appear in the open category in your Channels dashboard.&#x20;

## On Terminal Web:&#x20;

Click Dashboard --> Open Channel



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/w2s2hXNLs5cnpf-1IdK7y_image.png)

You must now enter the Alias or public key(connection string) of who you want to open a channel to. This is a bit different than Thunderhub, but mostly the same. Also enter the size of channel you want to open. We recommend no lower than 1,000,000sats.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/WTvOste8M0coLHrW7dOR0_image.png)

You will then be asked to enter a Local Base Fee and Local Fee Rate.&#x20;

**Local Fee Rate**: The default fee you want to charge others on the network to forward payments through the channel. 10000ppm = 1%. This can be changed at any time.

**Local Base Fee**: The default fee you want to charge others on the network regardless of the size of payment being forwarded. If you leave blank, the default will be 1 sat. 1000MSATS=1SAT

Click Next.

It will ask if you want the channel to be private. Private channels are not able to route payments for others on the network, and generally most nodes on the network do not like private channels for this reason. We recommend public channels so you can earn fees along with your peer. If you want to use private channels, we recommend contacting your peer first to make sure they are cool with it. Otherwise, they may close the channel sooner than you would like.

You will then be given an option to add another peer for another channel. This is an exclusive feature of Terminal Web that Thunderhub does not have. You can open multiple channels with a single transaction. As on chain fees go up, we think this is a great way to open many channels quickly and efficiently. Consider opening more at this time.

Click Next when you are done adding to the list of channels you are looking to open:



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/UMXyg43ni26CyHm8-_Wm1_image.png)

Finally, select the on chain fee rate for the channel open transaction, and click Open Channel. Wait for confirmations and you will have brand new channels!



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/THGO87XVbZ6IlWPljtMCo_image.png)


[title] LNCLI (Self Host)
[path] Lightning Nodes/Node Guides/

3Access the LNCLI command line tool and remotely access your Voltage node on your local machine. We have instructions on Bash based platforms Linux/Mac. If you are using Windows, we encourage you to seek direct assistance from Lightning Labs on their community support page at [lightningcommunity.slack.com](https://lightningcommunity.slack.com).

## LINUX/MAC

First, download your admin.macaroon from your node's Macaroon Bakery. Put the admin.macaroon file on the same machine as the machine you are going to be accessing lncli with and take note of the directory you save it to.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/6a5Gel1p1FeAWq2YM8nn1_image.png)

Ensure you have dependencies installed. Copy paste the following commands:

Linux(Ubuntu/Debian x86-64): `sudo apt install git`

For mac, do `brew install git`

Next, we need to install GO:

:::BlockQuote
wget https\://dl.google.com/go/go1.23.4.linux-amd64.tar.gz
sha256sum go1.23.4.linux-amd64.tar.gz | awk -F " " '\{ print $1 }'
:::

The final output of the command above should be

`7a75720c9b066ae1750f6bcc7052aba70fa3813f4223199ee2a2315fd3eb533d`

If it isn't, then the target REPO HAS BEEN MODIFIED, and you shouldn't install this version of Go. If it matches, then proceed to install Go:

:::BlockQuote
sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
:::

Great, next we need to install LND.

:::BlockQuote
git clone https\://github.com/lightningnetwork/lnd
cd lnd
make install
:::

Next we have to connect LNCLI to the bash path:

```none
export PATH=$PATH:/{System Username}/lnd/cmd/
export PATH=$PATH:/{System Username}/go/bin/
```

Now we can try getinfo and see if the connection is working:

```none
lncli --rpcserver=yournodename.m.voltageapp.io --tlscertpath="" 
--macaroonpath=/pathtothe/admin.macaroon/ getinfo
```

If you see no errors, you are connected to your node! You can now instead of `getinfo`, can use `-help` and that will show you a list of RPC calls available.

Click [here](https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md) for the full LND installation documentation.

If you need assistance with this please let us know on [Discord](https://voltage.cloud/discord) or at our [Support page](https://voltage.cloud/support).

[title] Inbound Liquidity
[path] Lightning Nodes/Node Guides/

## How do I get more Inbound Liquidity?

To receive on the Lightning Network, you will need inbound liquidity. If you have an Enterprise level node or higher, Voltage will ensure you have inbound liquidity with the primary Voltage routing node as needed, but you will likely need to source liquidity from other nodes to increase your reach on the network, and minimize payment failures.

Some of the most common ways to acquire inbound(feel free to use a combination of the following methods or find what works best for you):

1. **Lightning Loop.** Utilizing Loop, you can convert your outbound liquidity into inbound, by spending through your channels to the Loop service. The Loop service will then atomically send an on-chain transaction, minus a fee, to your node's on chain wallet for the amount that you are swapping. The funds can then be used to open more channels, or used however you see fit. You can access Loop directly through [Terminal Web](https://terminal.lightning.engineering). Check out our [Start Terminal Web](docId\:bMsgSDJDmKqtGTejTHYhE) guide if you need instructions on how to access. You can also use [Boltz.exchange](https://boltz.exchange) which functions similar to Loop but is a separate service.&#x20;
2. **Amboss Magma/Hydro**. [Amboss Magma](https://amboss.space/magma) is a liquidity market place that you can use to sorce inbound from other nodes. This is also known as liquidity leasing, where you pay another node on the network to open a channel to you, thus giving your node inbound liquidity. You can also use their [Hydro](https://amboss.space/hydro) service, to automate channel opens so your node is never short of inbound liquidity. To use Amboss, you must sign in using your node. We have explained how to do this in our [Sign a Message](docId:_UVSj0MJk7FLFQcrPxX5W) guide.&#x20;
3. **Lightning Network+**. [Lightning Network+](https://lightningnetwork.plus) is a liquidity sharing platform, where nodes on the network can enter into liquidity sharing agreements. These agreements do not require you to pay any fees. For example, you can enter an agreement with two other node runners where A opens a channel to B, B opens a channel to C, and C opens a channel to A. It is a very easy and cheap way to get inbound liquidity. The downside is that most agreements require your node to already have some channels before entering into a liquidity swap. This service also requires you to [Sign a Message](docId:_UVSj0MJk7FLFQcrPxX5W) to access.
4. **Use a LSP**. An LSP is a Liquidity Service Provider and there are a few out there. Some common ones are the [Olympus LSP](https://lsps1.olympusln.com/), [LNBIG](https://lnbig.com/#/), and [megalithic](https://megalithic.me/get_a_channel).
5. **Spending out of your node.** By spending out of your node, your outbound turns into inbound. This can be a common way to get inbound. You can also spend from your node into a lightning-enabled exchange such as [River](https://river.com) or [Strike](https://strike.me), which will move the liquidity from outbound to inbound on your node. Some popular gift card buying services are [The Bitcoin Company](https://thebitcoincompany.com/) and [Bitrefill](https://bitrefill.com).&#x20;

For more information on these methods, you can check out a short video on the topic on our Voltage youtube channel:

::embed[]{url="https://www.youtube.com/watch?v=Lzr0Pm9jq3o"}








[title] Sign a Message
[path] Lightning Nodes/Node Guides/

## How do I sign a message using my LND node?

There are several services that require authentication to sign in. For example, [Lightning Network+](https://lightningnetwork.plus) or [Amboss.space](https://amboss.space). To sign a message to log in to these services, follow the following steps:

1. Get the message to sign from the service you are looking to log in to. For example, in this screenshot we are looking to log in to Lightning Network+. Copy the message to sign by clicking the Copy button.

::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/zPjscC4J0JXUEpVVYpl5L_image.png" size="100" isUploading="false" width="805" height="593" darkWidth="805" darkHeight="593" showCaption="false" indent="2"}

2\. Access your Thunderhub dashboard. You can do this by clicking the Thunderhub icon on your Voltage node dashboard and logging in using your node password.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/CjFmv0-sfBOASi0TE2owO_image.png)

3\. Once on your Thunderhub dashboard, click Tools, and then click Sign.

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/jkPRCYFqMwJtWZxFR7Ro4_image.png)

4\. Paste in the message to sign from step 1, and then you will be given another string of characters.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/-3ay40dDBBQLynhxN1zRq_image.png)

5\. Copy this and paste the signature in the box to sign in to the service.&#x20;

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/-GMf_jY4TJnUH-SsID6Hf_image.png)


[title] Lightning Nodes
[path] /


[title] LND Node API
[path] Developer Resources/API Resources/

For LND nodes that run on Voltage, we expose the full LND API (gRPC and REST). This means you can interact with the node just like it was running on your own hardware. You can find the LND API Specification here:

### Click [LND API Reference ](https://lightning.engineering/api-docs/api/lnd/index.html)to see the entire API library for your LND node!

To interact with your node's APIs, you must first download your macaroon. This can be found on your node's home page under the 'Admin Macaroon' tile. Unlock your dashboard and click 'Download'. This very similar to an API Key. It is the means by which you authenitcate to the node's APIs.

# Base URL

The base URL for your node's API is unique to every node. You can find this in your node's dashboard in the Node Details tile.&#x20;

# Port

LND supports both gRPC and REST APIs. The gRPC port is 10009 and the REST port is 8080.

## Examples:

- [REST API Examples](docId:55r-fbwKtrM-GGxgNGaZt)
- [GRPC API Examples](docId\:AkzUpQD1qvSawrYAspwyI)


[title] REST API Examples
[path] Developer Resources/API Resources/LND Node API/

## Prerequisites:

- **Admin Macaroon** - The admin macaroon is an authentication token that allows you to interact with your LND node's gRPC API with administrative permissions. You can also grab a "Read Only" macaroon that wont have permissions to spend. You can find your Macaroons in your Voltage Dashboard by visiting **Manage Access** -> **Macaroon Bakery**

## Interacting With Your Node's LND REST API

::embed[]{url="https://youtu.be/srIUzxa6Iq8"}

Here are some code snippets demonstrating how to interact with some of the most common and popular LND API methods:


**GetInfo** - [https://lightning.engineering/api-docs/api/lnd/lightning/get-info](https://lightning.engineering/api-docs/api/lnd/lightning/get-info)

:::CodeblockTabs
```javascript
const REST_HOST = 'node-name.m.voltageapp.io:8080';
const MACAROON = 'your-macaroon-in-hex-format'; // Replace this with your actual macaroon in hex format

const getInfo = async () => {
  try {
    const response = await fetch(`https://${REST_HOST}/v1/getinfo`, {
      method: 'GET',
      headers: {
        'Grpc-Metadata-macaroon': MACAROON,
      },
    });
    const data = await response.json();
    console.log("getInfo", data)
  } catch (error) {
    console.error('Error:', error);
  }
};
```

```none
```
:::

**AddInvoice** - [https://lightning.engineering/api-docs/api/lnd/lightning/add-invoice](https://lightning.engineering/api-docs/api/lnd/lightning/add-invoice)

```javascript
const REST_HOST = 'node-name.m.voltageapp.io:8080';
const MACAROON = 'your-macaroon-in-hex-format'; // Replace this with your actual macaroon in hex format

const createInvoice = async () => {
  try {
    const response = await fetch(`https://${REST_HOST}/v1/invoices`, {
      method: 'POST',
      headers: {
        'Grpc-Metadata-macaroon': MACAROON,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        value: 1000, // Invoice amount in satoshis
        memo: 'Test invoice', // Optional memo for the invoice
      }),
    });
    const data = await response.json();
    setInvoice(data);
  } catch (error) {
    console.error('Error:', error);
  }
};
```

SendPaymentSync - [https://lightning.engineering/api-docs/api/lnd/lightning/send-payment-sync](https://lightning.engineering/api-docs/api/lnd/lightning/send-payment-sync)

```javascript
const REST_HOST = 'node-name.m.voltageapp.io:8080';
const MACAROON = 'your-macaroon-in-hex-format'; // Replace this with your actual macaroon in hex format

const payInvoice = async () => {
  try {
    const response = await fetch(`https://${REST_HOST}/v1/channels/transactions`, {
      method: 'POST',
      headers: {
        'Grpc-Metadata-macaroon': MACAROON,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        payment_request: 'lnbc...', // Paste the invoice's payment request here
        amt: 1000, // Amount to pay in satoshis
      }),
    });
    const data = await response.json();
    console.log("payInvoice", data)
  } catch (error) {
    console.error('Error:', error);
  }
};
```



- `POST /v1/channels/transactions`

  `: Pays an invoice by providing the payment request and the amount to pay.`
- `POST /v1/invoices`

  `: Creates a new invoice with a specified amount and optional memo.`
- `GET /v1/getinfo`

  `: Retrieves general information about your node.`

Make sure to replace the placeholders in the script with your actual macaroon file path, node URL, and the desired invoice details.

[title] Encrypted Data Backups
[path] Developer Resources/

This page describes how we utilize encrypted backups on the platform and how you can leverage this with our API.

## &#x20;Explainer

When creating nodes via our dashboard there's a lot that goes on behind the scenes to make sure your node is secure but still usable from the site. To acheive this, we backup the seed phrase and admin macaroon after they are encrypted client-side. This allows us to still display connection information and other functionality (like Thunderhub) without ever being able to actually see your credentials. Because we can't automate these tasks for you when creating nodes from the API, you will have to perform these backups yourself.

:::hint{type="info"}
You will not be able to use things like Connection tab or Thunderhub without backing up an encrypted macaroon.
:::

## Encryption Example

We use AES-256 when encrypting and decrypting the data. On our dashboard, we use the node's password as the secret key for encryption. Here's what that would look like in Node.js:

```javascript
import AES from 'crypto-js';
const encryptedString = AES.encrypt(base64MacaroonData, 'MySecretPassword').toString()
```

## Endpoints

Using the above encryption example, you are able to make encrypted strings of text for both your admin macaroon and seed phrase. With the Upload Seed and Upload Macaroon endpoints, you are able backup that encrypted data for later use.

[title] Dev Sandbox (MutinyNet)
[path] Developer Resources/

## Introduction

The purpose of Mutinynet is to have a zero risk environment for developers of a team to test and learn how lightning nodes might be able to interact with or be integrated into the existing business stack or to test specific API calls, etc. before moving to production. We highly recomend using this tool to ensure reliability before going live with a mainnet node. However, it is strongly encouraged to start a mainnet node as soon as possible with adequate liquidity to ensure transition from Mutinynet to Production goes smoothly. MutinyNet has no additional cost and can be used on the free Essentials plan or higher.&#x20;

::embed[]{url="https://www.youtube.com/watch?v=Cg13znoHmi8"}

## Deployment

To deploy a Mutinynet environment, be sure to go through the normal onboarding steps of creating a Voltage account and team. If you need an invite to a team, make an account and then have the Team owner send you an invite from the Team management dashboard. Once on the node select screen, click the New Instance button, choose Lightning node, and choose the Mutinynet option under Network and then click continue.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/aJzmEkCTQ9gLq0PZkew7Z_image.png)

The flow to setting up is very similar to mainnet. You will give your node a name, set an unlock password, and it will start up and bring you to the main Dashboard. Give it a few minutes to provision and complete initial chain-sync. If you would like to monitor this process in detail, you may click "Logs" on the left side menu.

Your remote connection information is on your new Mutinynet Dashboard under "Node Details" on the right side. Here you will find your API Endpoint, connection ports, and more.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/6daLEc_eSpsk9Ol3dhoOy_image.png)

You will now be able to quickly get a channel set up as well as simulated liquidity so you can begin integrating and testing your project, app, or service.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/aTrxeZUb2KXPYdPO7Uchl_image.png)

## Configuration

After the chain is synced, you can get your API endpoint and macaroon from the dashboard to be able to access your node. The usual UI interfaces are unavailable on mutinynet. We recommend turning Surge on by flipping the toggle at the top of the Dashboard to on, so you can get more detailed information on your node, channels, and testing environment.&#x20;

To get your node funded and ready to test, click Get Mutinynet coins.&#x20;

Select the amount you want. These MutinyNet coins act as ON-CHAIN funds that we will open a MutinyNet Lightning channel with. It could take up to 30 seconds for your on-chain MutinyNet coins to arrive. Once you see the coins in your balance, you can now click Open Channel. Unlike mainnet Lightning Network, your channel peer will be automatically chosen to keep things simple.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/tlsOuFazNjj0jSPZRcEz3_image.png)

When you are opening a channel, you will be able to select the amount of the total channel, and how much inbound you want in that channel (to enable receiving). This is represented by the "Amount to Push" percentage. For example, if I want to open a 500,000sat channel, and I push 20%, I will have 400,000sats on my side, and 100,000sats of inbound. Once you confirm this, it will take another aproximately 30 seconds for the channel to open.&#x20;



::Image[]{src="https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/x-vRZu32oQ0QC7grsNw3x_image.png" size="66" width="978" height="1024" position="center" showCaption="false"}

## Begin Integration and Testing

After this channel opens, you are ready to start testing! You will notice that the built in GUI interfaces available using mainnet are not available on mutinynet. At this point you will need to get your LND environment set up so you can begin connecting the node to your project or service.&#x20;

Be sure to get your *API Endpoint* from your Node Details page, and also your *macaroon* of choice from the Manage Access page from the left side menu.&#x20;

For instructions on how to deploy LND for the CLI, check out [LNCLI (Self Host)](docId:_KBYUaUC4HsHWNpDB_4WN) guide.&#x20;

An example rpc call with LNCLI will be:`lncli --rpcserver=node.u.voltaageapp.io macaroonpath=pathtomacaroon tlscertpath="" getinfo`

If you do not receive an error, then you have successfully ran a call to your node.

From here, the full LND API is available which you can access and start building with. You can check out the reference guide [here](https://lightning.engineering/api-docs/api/lnd/). An example of how python would be set up to work with your mutinynet node in REST is as follows:

```python
import base64, codecs, json, requests

REST_HOST = 'example.u.staging.voltageapp.io:8080'
MACAROON_PATH = 'path/to/admin.macaroon'
TLS_PATH = ''

url = f'https://{REST_HOST}/v1/balance/channels'
macaroon = codecs.encode(open(MACAROON_PATH, 'rb').read(), 'hex')
headers = {'Grpc-Metadata-macaroon': macaroon}
r = requests.get(url, headers=headers, verify=TLS_PATH)
print(r.json())
# {
#    "balance": <int64>,
#    "pending_open_balance": <int64>,
#    "local_balance": <Amount>,
#    "remote_balance": <Amount>,
#    "unsettled_local_balance": <Amount>,
#    "unsettled_remote_balance": <Amount>,
#    "pending_open_local_balance": <Amount>,
#    "pending_open_remote_balance": <Amount>,
# }
```

For reference, LND REST port is 8080 and gRPC port is 10009.&#x20;

More code samples including JS can be found at the [LND API reference](https://lightning.engineering/api-docs/api/lnd/). Keep in mind that MutinyNet coins have no value.

To contact the team or to find colaborators, you can join our discord [HERE](https://voltage.cloud/discord) or send us a support ticket [HERE](https://voltage.cloud/support).&#x20;

## Test a Payment

To test a payment, you can go to [https://signet-app.mutinywallet.com/](https://signet-app.mutinywallet.com/).

From there click "New Wallet"

Then click Receive your first sats.&#x20;

From there you can pick an amount and generate an invoice. Next you can send funds to that invoice from using your MutinyNet node. This is great for payment testing and you can also send from your signet-mutinywallet!&#x20;

## FAQ

### What exactly is Mutinynet?

The Mutinynet network is what is known as a Signet Test Environment. It uses a modified hardfork of Bitcoin to speed up and improve usability for Testing purposes. Compared to the traditional Testnet method, Mutinynet does not include the heacahces of finding peers, acquiring testnet coins, etc. which makes it an ideal testing environment for developers.

### When should I switch to mainnet?

It is important to make sure that when you switch from Mutinynet to mainnet, that your mainnet node has adequate real liquidity beforehand. If testing is going well, consider deploying a mainnet node to build out liquidity on a few weeks before going live.

### Can I choose who to open a channel with?

Mutinynet is used to test specifically various APIs or protocols you want to use on your app. For example, you will likely be using the LND API the most, with maybe LNURL support. To test these APIs in your project, there is no need to have to trouble yourself with choosing peers as if it was mainnet. One channel is enough to test the functions of these APIs in your project.&#x20;

### Can I have multiple Mutinynet nodes on Voltage?

If you are on Essentials tier, the max is 1. If you are using Starter or higher, the max is 4.&#x20;

### How do I switch from Mutinynet to Mainnet?

In your connection file (such as .env or .json depending on what you are building), simply switch out the API endpoint and macaroon file. This is all that must be done to switch your project to mainnet.&#x20;

### Can I still do testnet?

Due to ongoing Testnet sync issues and spam, Testnet is currently disabled on Voltage.&#x20;

### Where can I find more technical information on Mutinynet?

The Mutinynet repository can be found [HERE](https://github.com/MutinyWallet/mutiny-net?ref=blog.mutinywallet.com).


[title] Welcome
[path] /

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/RtpCns9v6iWwZIb4F8RMB_archbee-in-product-welcome.png)

::::hint{type="warning"}
## <font color="#fb7600">**Self-Serve Infrastructure Deprecation**</font>

On **August 31, 2026**, we will begin sunsetting Voltage’s self-serve infrastructure product. If you're interested in continuing on Voltage's infrastructure and have growing transaction volume or infrastructure needs, please complete [this form](https://voltage.cloud/infrastructure-deprecation) to connect with our Sales team.&#x20;

***

:::CtaButton{label="Migration Options" docId="_0rKHmm3le6HIfTAL61qI" openInNewTab="true"}

:::

:::CtaButton{label="Cancellation Steps" docId="RCDoiycKbyyPMoAh3oVrC" openInNewTab="true"}

:::
::::



[API Resources](docId\:h9E3RP82nxL5CirPnsXzV)

[Support](docId\:BUescfQoVSRYZsJfbrxwD)

[Security Disclaimer](docId\:uJACwDYwCExZYRDCye8pC)

[Node Security and Backups](docId\:B1N8dct40C3dUeLKmSVwG)


[title] Voltage API
[path] Developer Resources/API Resources/

Voltage has an API that you can use to manage your nodes. With this API you can create, stop, start, update your node. All the functionality that you see in our dashboard can be accomplished with the Voltage API. With our API, you can greatly extend the capabilities for the Voltage platform. For example, you can create nodes for your users directly in your own sites.

# Base URL

### https\://api.voltage.cloud



:::hint{type="info"}
Currently you must use HTTP 1.1 with this API. It does not suport HTTP 2.0
:::

# Authentication

To generate an API Key, navigate to your Team's home page. The menu on the left side will have an 'API' section. Expand that and click 'Keys'. Click the 'New Key' button and generate a new API Key. Give it a name and be sure to save the key as it will not be displayed again.

Once you have an API Key, you can use it in your API Requests with the `X-VOLTAGE-AUTH` header. All API Endpoints require authentication.

# Endpoints

:::ApiMethodV2
```json
{
  "name": "Get List of Nodes",
  "method": "GET",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes",
  "description": "Get a list of nodes owned by an organization.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "vGjdJ9o9Mn20jJOPluywk",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}'",
        "customLabel": ""
      },
      {
        "id": "lVKpIr208F7so_OtkJvW-",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'GET',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "7cNiQaGhqQDPE5tTlCeZ6",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar requestOptions = {\n   method: 'GET',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "0lM1DqFCKOBJXyuFTWUZs",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes\"\n\npayload = {}\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "8gF5l4JyvKhRjoI_38UI6",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "8gF5l4JyvKhRjoI_38UI6"
  },
  "results": {
    "languages": [
      {
        "id": "VNUwt0wpV5IeHHfk5K2C5",
        "language": "200",
        "customLabel": "",
        "code": "{\n   \"nodes\": [\n     {\n       \"node_name\": \"myvoltagenode\",\n       \"status\": \"running\",\n       \"node_id\": \"555c5108-7438-488d-b227-5f80baf8a23aN\",\n       \"expires\": \"never\",\n       \"created\": \"2024-01-08T00:49:55Z\",\n       \"type\": \"standard\",\n       \"purchased_type\": \"paid\",\n       \"purchase_status\": \"active\",\n       \"api_endpoint\": \"myvoltagenode.m.voltageapp.io\",\n       \"network\": \"mainnet\",\n       \"lnd_version\": \"0.17.4-beta\",\n       \"volt_version\": \"v0.5.0\",\n       \"update_available\": false\n     },\n     ...\n   ]\n}"
      },
      {
        "id": "kbY2IDo1Nx9D_9ROcV07i",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "VNUwt0wpV5IeHHfk5K2C5"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that you want to list nodes for. ",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "autoGeneratedAnchorSlug": "get-list-of-nodes",
  "legacyHash": "n2Hp38sHuPyDz1zufquuy"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Get a Node",
  "method": "GET",
  "url": "https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}",
  "description": "Get information about a specific node.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "ERsKC6crpSmlAs3M6jckR",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}'",
        "customLabel": ""
      },
      {
        "id": "omyBQ6W4sZZ7fE17cGSCq",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'GET',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "1wNiifWO5-i4dWuib7iwS",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar requestOptions = {\n   method: 'GET',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "QyN0NCX7s3pJ6JEaxEhxz",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}\"\n\npayload = {}\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "PuZjMBx8tBDVujL5yf2aX",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "ERsKC6crpSmlAs3M6jckR"
  },
  "results": {
    "languages": [
      {
        "id": "JQFXdPu6BBVPyBuXIFPf0",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_name\": \"myvoltagenode\",\n  \"status\": \"running\",\n  \"node_id\": \"7b12b510-8633-4c49-af2b-9cb5b73d6feeN\",\n  \"expires\": \"never\",\n  \"created\": \"2024-01-29T18:55:12Z\",\n  \"type\": \"standard\",\n  \"purchased_type\": \"paid\",\n  \"purchase_status\": \"active\",\n  \"lnd_version\": \"0.17.4-beta\",\n  \"volt_version\": \"v0.5.0\",\n  \"update_available\": false,\n  \"api_endpoint\": \"myvoltagenode.m.voltageapp.io\",\n  \"network\": \"mainnet\",\n  \"command_history\": [\n    {\n      \"action\": \"stop\",\n      \"time\": \"2024-01-29T18:55:12Z\"\n    },\n    {\n      \"action\": \"start\",\n      \"time\": \"2024-01-29T18:59:12Z\"\n    }\n  ],\n  \"settings\": {\n    \"autopilot\": false,\n    \"grpc\": true,\n    \"rest\": true,\n    \"keysend\": true,\n    \"alias\": \"myvoltagenode\",\n    \"color\": \"#EF820D\",\n    \"whitelist\": [\n      \"1.1.1.1\",\n      \"2.2.2.2\"\n    ],\n    \"wumbo\": false,\n    \"webhook\": \"\",\n    \"webhook_secret\": \"19cef4784ff04ff5bc8053d5847254e0\",\n    \"sphinx\": true,\n    \"minchansize\": \"\",\n    \"maxchansize\": \"\",\n    \"autocompaction\": true,\n    \"defaultfeerate\": \"\",\n    \"numgraphsyncpeers\": \"3\",\n    \"maxpendingchannels\": \"2\",\n    \"allowcircularroute\": false,\n    \"gccanceledinvoicesonthefly\": false,\n    \"gccanceledinvoicesonstartup\": false,\n    \"amp\": true,\n    \"wtclient\": false,\n    \"torskipproxyforclearnettargets\": false,\n    \"rpcmiddleware\": false,\n    \"optionscidalias\": false,\n    \"zeroconf\": false\n  }\n}"
      },
      {
        "id": "ZgHC06Vmdxw5mGEV8mCPB",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "ZgHC06Vmdxw5mGEV8mCPB"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that owns the node. ",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to get information for. ",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "autoGeneratedAnchorSlug": "get-a-node",
  "legacyHash": "1GhGqPUkcGhZSTIJffV2n"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Create a Node",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/{organization_id}/nodes",
  "description": "Create a new Lightning node.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "pDmzgB8PRnZKWO5PZHs1x",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}' \\\n--data '{\"name\":\"node-name\",\"network\":\"mainnet\",\"type\":\"standard\",\"settings\":{\"autopilot\": false,\"grpc\":true,\"rest\":true,\"keysend\":true,\"whitelist\":[],\"alias\":\"node-alias\",\"color\":\"#FF5000\"}}'",
        "customLabel": ""
      },
      {
        "id": "R97MZe6O_zSN6YhHpQM_N",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   },\n   body: JSON.stringify({\n      \"name\": \"node-name\",\n      \"network\": \"mainnet\",\n      \"type\": \"standard\",\n      \"settings\": {\n        \"autopilot\": false,\n        \"grpc\":true,\n        \"rest\":true,\n        \"keysend\":true,\n        \"whitelist\":[],\n        \"alias\":\"node-alias\",\n        \"color\":\"#FF5000\"\n      }\n   })\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "0gvaUsEnTBB54Dh232A2o",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar raw = JSON.stringify({\n   \"name\": \"node-name\",\n   \"network\": \"mainnet\",\n   \"type\": \"standard\",\n   \"settings\": {\n     \"autopilot\": false,\n     \"grpc\":true,\n     \"rest\":true,\n     \"keysend\":true,\n     \"whitelist\":[],\n     \"alias\":\"node-alias\",\n     \"color\":\"#FF5000\"\n   }\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "Z5gzItAh6PiNuyZ58y0QL",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes\"\n\npayload = json.dumps({\n   \"name\": \"node-name\",\n   \"network\": \"mainnnet\",\n   \"type\": \"standard\",\n   \"settings\": {\n     \"autopilot\": false,\n     \"grpc\":true,\n     \"rest\":true,\n     \"keysend\":true,\n     \"whitelist\":[],\n     \"alias\":\"node-alias\",\n     \"color\":\"#FF5000\"\n   }\n})\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "YFZQAzRAgrbulXLzXK9dw",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\nrequest.body = JSON.dump({\n   \"name\": \"node-name\",\n   \"network\": \"mainnet\",\n   \"type\": \"standard\",\n   \"settings\": {\n     \"autopilot\": false,\n     \"grpc\":true,\n     \"rest\":true,\n     \"keysend\":true,\n     \"whitelist\":[],\n     \"alias\":\"node-alias\",\n     \"color\":\"#FF5000\"\n   }\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "YFZQAzRAgrbulXLzXK9dw"
  },
  "results": {
    "languages": [
      {
        "id": "Jl-PMQrUGBGOduCGLpKtz",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"8ac52ac6-b205-4051-8ac6-c538c2f269a0N\",\n  \"owner_id\": \"2936b2c7-8980-442c-b037-4845ee6e84f1\",\n  \"network\": \"mainnet\",\n  \"created\": \"2024-01-10T19:21:57Z\",\n  \"purchased_type\": \"ondemand\",\n  \"type\": \"standard\",\n}"
      },
      {
        "id": "n4hIkog9p7ORsYMW9VYuV",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "Jl-PMQrUGBGOduCGLpKtz"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that owns the node. ",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "name",
        "kind": "required",
        "type": "string",
        "description": "User defined node name given at creation"
      },
      {
        "name": "network",
        "kind": "required",
        "type": "string",
        "description": "Network the node is running on. Can be either 'testnet' or 'mainnet'.",
        "children": []
      },
      {
        "name": "type",
        "kind": "required",
        "type": "string",
        "description": "Type of node, either 'standard' or 'professional'",
        "children": []
      },
      {
        "name": "version",
        "kind": "optional",
        "type": "string",
        "description": "Specific LND Version to create",
        "": "Specific LND Version to create"
      },
      {
        "name": "settings",
        "kind": "required",
        "type": "Object",
        "description": "Settings for the Lightning Node",
        "children": [
          {
            "name": "autopilot",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will turn on its autopilot feature"
          },
          {
            "name": "grpc",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will active the gRPC API"
          },
          {
            "name": "rest",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will active the REST API"
          },
          {
            "name": "keysend",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will enable the Keysend feature"
          },
          {
            "name": "whitelist",
            "kind": "required",
            "type": "Array",
            "description": "A list of IPs that are allowed to talk to your node"
          },
          {
            "name": "alias",
            "kind": "required",
            "type": "string",
            "description": "Your node's Alias on the peer to peer network"
          },
          {
            "name": "color",
            "kind": "required",
            "type": "string",
            "description": "Your node's Color on the peer to peer network"
          },
          {
            "name": "wumbo",
            "kind": "optional",
            "type": "Boolean",
            "description": "When enabled, LND will accept Wumbo channels"
          },
          {
            "name": "webhook",
            "kind": "optional",
            "type": "string",
            "description": "Your webhook endpoint if you wish to receive webhook events"
          },
          {
            "name": "minchansize",
            "kind": "optional",
            "type": "string",
            "description": "The minimum channel size your node will accept"
          },
          {
            "name": "maxchansize",
            "kind": "optional",
            "type": "string",
            "description": "The maximum channel size your node will accept"
          },
          {
            "name": "autocompaction",
            "kind": "optional",
            "type": "Boolean",
            "description": "When enabled, LND will automatically compact the databases on startup"
          },
          {
            "name": "defaultfeerate",
            "kind": "optional",
            "type": "string",
            "description": "Your default fee rate for your channels"
          },
          {
            "name": "basefee",
            "kind": "optional",
            "type": "string",
            "description": "Your base fee rate for your channels"
          },
          {
            "name": "amp",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables Atomic Multipath Payments"
          },
          {
            "name": "wtclient",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables the watchtower client"
          },
          {
            "name": "maxpendingchannels",
            "kind": "optional",
            "type": "string",
            "description": "Maximum number of pending channels allowed for a single peer"
          },
          {
            "name": "allowcircularroute",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, allows a payment to exit and enter the same channel"
          },
          {
            "name": "numgraphsyncpeers",
            "kind": "optional",
            "type": "string",
            "description": "Number of peers used for syncing the graph"
          },
          {
            "name": "gccanceledinvoicesonstartup",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, deletes cancelled invoices only when LND starts up"
          },
          {
            "name": "gccanceledinvoicesonthefly",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, deletes cancelled invoices while LND is running"
          },
          {
            "name": "torskipproxyforclearnettargets",
            "kind": "optional",
            "type": "Boolean",
            "description": "Optimization for clearnet peers. See LND Docs."
          },
          {
            "name": "rpcmiddleware",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables the rpcmiddleware, which can interecept certain rpc calls. See LND Docs."
          },
          {
            "name": "optionscidalias",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, and zeroconf is also enabled, it is possible to create zeroconf channels. See lnd docs."
          },
          {
            "name": "zeroconf",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, and optionscidalias is also enabled, it is possible to create zeroconf channels. See lnd docs."
          },
          {
            "name": "remotesigning",
            "kind": "optional",
            "type": "Boolean",
            "description": "Turn on or off remote signing"
          },
          {
            "name": "remotesigninghost",
            "kind": "optional",
            "type": "string",
            "description": "IP Address or Hostname of the remote signing instance"
          },
          {
            "name": "remotesigningmacaroon",
            "kind": "optional",
            "type": "string",
            "description": "Macaroon used for authentication to the remote signer"
          },
          {
            "name": "remotesigningcert",
            "kind": "optional",
            "type": "string",
            "description": "TLS Certificate of the remote signer"
          }
        ],
        "schema": [
          {
            "name": "autopilot",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will turn on its autopilot feature"
          },
          {
            "name": "grpc",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will active the gRPC API"
          },
          {
            "name": "rest",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will active the REST API"
          },
          {
            "name": "keysend",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will enable the Keysend feature"
          },
          {
            "name": "whitelist",
            "kind": "required",
            "type": "Array",
            "description": "A list of IPs that are allowed to talk to your node"
          },
          {
            "name": "alias",
            "kind": "required",
            "type": "string",
            "description": "Your node's Alias on the peer to peer network"
          },
          {
            "name": "color",
            "kind": "required",
            "type": "string",
            "description": "Your node's Color on the peer to peer network"
          },
          {
            "name": "wumbo",
            "kind": "optional",
            "type": "Boolean",
            "description": "When enabled, LND will accept Wumbo channels"
          },
          {
            "name": "webhook",
            "kind": "optional",
            "type": "string",
            "description": "Your webhook endpoint if you wish to receive webhook events"
          },
          {
            "name": "minchansize",
            "kind": "optional",
            "type": "string",
            "description": "The minimum channel size your node will accept"
          },
          {
            "name": "maxchansize",
            "kind": "optional",
            "type": "string",
            "description": "The maximum channel size your node will accept"
          },
          {
            "name": "autocompaction",
            "kind": "optional",
            "type": "Boolean",
            "description": "When enabled, LND will automatically compact the databases on startup"
          },
          {
            "name": "defaultfeerate",
            "kind": "optional",
            "type": "string",
            "description": "Your default fee rate for your channels"
          },
          {
            "name": "basefee",
            "kind": "optional",
            "type": "string",
            "description": "Your base fee rate for your channels"
          },
          {
            "name": "amp",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables Atomic Multipath Payments"
          },
          {
            "name": "wtclient",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables the watchtower client"
          },
          {
            "name": "maxpendingchannels",
            "kind": "optional",
            "type": "string",
            "description": "Maximum number of pending channels allowed for a single peer"
          },
          {
            "name": "allowcircularroute",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, allows a payment to exit and enter the same channel"
          },
          {
            "name": "numgraphsyncpeers",
            "kind": "optional",
            "type": "string",
            "description": "Number of peers used for syncing the graph"
          },
          {
            "name": "gccanceledinvoicesonstartup",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, deletes cancelled invoices only when LND starts up"
          },
          {
            "name": "gccanceledinvoicesonthefly",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, deletes cancelled invoices while LND is running"
          },
          {
            "name": "torskipproxyforclearnettargets",
            "kind": "optional",
            "type": "Boolean",
            "description": "Optimization for clearnet peers. See LND Docs."
          },
          {
            "name": "rpcmiddleware",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables the rpcmiddleware, which can interecept certain rpc calls. See LND Docs."
          },
          {
            "name": "optionscidalias",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, and zeroconf is also enabled, it is possible to create zeroconf channels. See lnd docs."
          },
          {
            "name": "zeroconf",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, and optionscidalias is also enabled, it is possible to create zeroconf channels. See lnd docs."
          },
          {
            "name": "remotesigning",
            "kind": "optional",
            "type": "Boolean",
            "description": "Turn on or off remote signing"
          },
          {
            "name": "remotesigninghost",
            "kind": "optional",
            "type": "string",
            "description": "IP Address or Hostname of the remote signing instance"
          },
          {
            "name": "remotesigningmacaroon",
            "kind": "optional",
            "type": "string",
            "description": "Macaroon used for authentication to the remote signer"
          },
          {
            "name": "remotesigningcert",
            "kind": "optional",
            "type": "string",
            "description": "TLS Certificate of the remote signer"
          }
        ]
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "create-a-node",
  "legacyHash": "8MFl8cuB6eVuz_wmCHzd5"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Upload an Encrypted Macaroon",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/macaroon",
  "description": "Upload an encrypted macaroon for a node for backup and dashboard functionality.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "Onkb-n0MDhn3YTKhITJlt",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/macaroon' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}' \\\n--data '{\"name\":\"invoice\",\"macaroon\":\"ZW5jcn...lwdGVkCg==\"}'",
        "customLabel": ""
      },
      {
        "id": "kmOMy_RfUOKMJccxZYnzV",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/macaroon',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   },\n   body: JSON.stringify({\n      \"name\": \"invoice\",\n      \"macaroon\": \"ZW5jcn...lwdGVkCg==\"\n   })\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "wW_bW_RJRtLGXJVUxIrw-",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar raw = JSON.stringify({\n   \"name\": \"invoice\",\n   \"macaroon\": \"ZW5jcn...lwdGVkCg==\"\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/macaroon/{organization_id}/{node_id}\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "ysdC0hSBkV0GZtzYMuw1w",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/macaroon\"\n\npayload = json.dumps({\n   \"name\": \"invoice\",\n   \"macaroon\": \"ZW5jcn...lwdGVkCg==\"\n})\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "ptqA6ulhf065j-BSCF9qW",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/macaroon\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\nrequest.body = JSON.dump({\n   \"name\": \"invoice\",\n   \"macaroon\": \"ZW5jcn...lwdGVkCg==\"\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "ptqA6ulhf065j-BSCF9qW"
  },
  "results": {
    "languages": [
      {
        "id": "W8J3niL5sVM0r8HhveQQl",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"7b12b510-8633-4c49-af2b-9cb5b73d6feeN\",\n  \"name\": \"invoice\",\n  \"created\": \"2024-01-29T18:55:12Z\"\n}"
      },
      {
        "id": "VIQTcdyRr09f5n2WvOB6S",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "W8J3niL5sVM0r8HhveQQl"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that owns the node. ",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to backup a macaroon for.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "macaroon",
        "kind": "required",
        "type": "string",
        "description": "Encrypted string of the macaroon. DO NOT UPLOAD UNENCRYPTED DATA.",
        "children": []
      },
      {
        "name": "name",
        "kind": "required",
        "type": "string",
        "description": "Name of the macaroon you're backing up.",
        "children": []
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "upload-an-encrypted-macaroon",
  "legacyHash": "5uMDGjmCZ3CZML3ZHUNRz"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Upload an Encrypted Seed",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/seed",
  "description": "Upload an encrypted seed phrase for a node for backup.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "TnLxDDkgA1nY_zSKF8-Fb",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/seed' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}' \\\n--data '{\"seed\":\"ZW5jcn...lwdGVkCg==\"}'",
        "customLabel": ""
      },
      {
        "id": "MCz5mGPdHTzLi5o0Fu9PY",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/seed',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   },\n   body: JSON.stringify({\n      \"seed\": \"ZW5jcn...lwdGVkCg==\"\n   })\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "YW2fSsfmJN_MGOZnYjA0l",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar raw = JSON.stringify({\n   \"seed\": \"ZW5jcn...lwdGVkCg==\"\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/seed\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "OeitGIxkfPY_tng9HXxQj",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/seed\"\n\npayload = json.dumps({\n   \"seed\": \"ZW5jcn...lwdGVkCg==\"\n})\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "nFruxHGuih_-Yck1aNMbT",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/seed\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\nrequest.body = JSON.dump({\n   \"seed\": \"ZW5jcn...lwdGVkCg==\"\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "nFruxHGuih_-Yck1aNMbT"
  },
  "results": {
    "languages": [
      {
        "id": "tapjPDP7n9guxmoOCr7Ex",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"f8f2256d-d443-4d73-8f9c-cae0831e55cfN\",\n  \"node_name\": \"myvoltagenode\",\n  \"seed\": \"kljdlkjfklahelkjhlkjh==\"\n}"
      },
      {
        "id": "23d9_caNNLn9HO6VApJW2",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "23d9_caNNLn9HO6VApJW2"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that you want to list nodes for.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to backup a seed for.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "seed",
        "kind": "required",
        "type": "string",
        "description": "Encrypted string of the seed. DO NOT UPLOAD UNENCRYPTED DATA."
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "autoGeneratedAnchorSlug": "upload-an-encrypted-seed",
  "legacyHash": "ch54M4nL-D4RGB42DUSdN"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Update a Node's Whitelist",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/whitelist",
  "description": "Update the IP Addresses that are allowed to talk to a node's APIs",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "gXTCSKaP3I2G7Y2iHKNwz",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/whitelist' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}' \\\n--data '{\"whitelist\":[\"1.2.3.4\"]}'",
        "customLabel": ""
      },
      {
        "id": "GBeM6H9gRhQO1ogki6XJz",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/whitelist',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   },\n   body: JSON.stringify({\n      \"whitelist\": [\n        \"1.2.3.4\"\n      ]\n   })\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "CrEJbAc4OXR8e09dd0HlP",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar raw = JSON.stringify({\n   \"whitelist\": [\n     \"1.2.3.4\"\n   ]\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/whitelist\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "ofP5KWcRfUV17sSDIyuL6",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/whitelist\"\n\npayload = json.dumps({\n   \"whitelist\": [\n     \"1.2.3.4\"\n   ]\n})\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "9ImgWxiXF0Zr2318LJpXB",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/whitelist\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\nrequest.body = JSON.dump({\n   \"whitelist\": [\n     \"1.2.3.4\"\n   ]\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "9ImgWxiXF0Zr2318LJpXB"
  },
  "results": {
    "languages": [
      {
        "id": "kTQiMBverhGrBpRczorkb",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"7b12b510-8633-4c49-af2b-9cb5b73d6feeN\",\n  \"whitelist\": [\n    \"1.1.1.1\",\n    \"2.2.2.2\"\n  ]\n}"
      },
      {
        "id": "VrwLONguQPiEhewaIKF2b",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "VrwLONguQPiEhewaIKF2b"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization owns the node.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "whitelist",
        "kind": "required",
        "type": "Array",
        "description": "List of IP Addresses that are allowed to talk to your node"
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "autoGeneratedAnchorSlug": "update-a-nodes-whitelist",
  "legacyHash": "XdW5vbzkuEcl8raMnzOXs"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Get a Certificate for a Node",
  "method": "GET",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/cert",
  "description": "Get the TLS Certificate for a Node.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "N1_nMs3fkq53YWq6tQfer",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/cert' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}'",
        "customLabel": ""
      },
      {
        "id": "mamO0y2OI9su8T1l-QWm9",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'GET',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id]/cert',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "Ow580zV6OGUJ4JEmxgz7l",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar requestOptions = {\n   method: 'GET',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/cert\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "mA2SSz-eVMX-T6ap5MsFr",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/cert\"\n\npayload = {}\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "SV_UB-GLG59Zk0Wwz8Qwt",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/cert\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Get.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "SV_UB-GLG59Zk0Wwz8Qwt"
  },
  "results": {
    "languages": [
      {
        "id": "YCRJJft3mcXdrPTT5M528",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"7b12b510-8633-4c49-af2b-9cb5b73d6feeN\",\n  \"tls_cert\": \"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdnRENDQkdpZ0F3SUJBZ0lRSE5wVmxDS3RmMGZoU1Y5UGtjOEJhVEFOQmdrcWhraUc5dzBCQVF3RkFEQkwKTVFzd0NRWURWUVFHRXdKQlZERVFNQTRHQTFVRUNoTUhXbVZ5YjFOVFRERXFNQ2dHQTFVRUF4TWhXbVZ5YjFOVApUQ0JTVTBFZ1JHOXRZV2x1SUZObFkzVnlaU0JUYVhSbElFTkJNQjRYRFRJeE1ERXlPVEF3TURBd01Gb1hEVEl4Ck1EUXlPVEl6TlRrMU9Wb3dKREVpTUNBR0ExVUVBeE1aWWk1MExuTjBZV2RwYm1jdWRtOXNkR0ZuWldGd2NDNXAKYnpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTHZ0bEJWYkpCRmN3eVFEb1ZYdgpLZmJMaHlrTDFBYm80MWRHTmtaaHN2bHk5T3FlaUtOdmY1U05PTko4R2JZUTZPUG5qT0VqQjJ3N1Qwb3l6MUtVCjZKd3RJeVA2WTdpbG9vblhRbzUzd21CZDk3RTRKa2xZOVBPcndnWlpBeTJNdmFqT1h2TDRmWXZNODJNaHQrdHMKZXhlV2FJVFI3NCtJM1I5WWRMbldlMlAzN3c2S1RSUWNMemMzaEpnaHU3MFF3eWhhSE1mMlBlcUdwUmsxQlc4aApKYTd1dGRELzhKV0FWbWhBTFhzL0Q2bzgzaXpXQ0xwWU1wcUtWeEdnbndaV2dEQ2s4aWVOOUFHUFJmSVRKblhPCkZjaUF4LzV0ckxBSjdyMnl5Y2JKemN3V0xqTmlCeWJDSnRLanlHZVp1TUlPTWY0Sm4xSTkxVTJPOG1TOXNNRWcKZ2prQ0F3RUFBYU9DQW9Vd2dnS0JNQjhHQTFVZEl3UVlNQmFBRk1qWmVHaWkyUmxvMVQxeTNsOEtQdHkxaG9hbQpNQjBHQTFVZERnUVdCQlJuNHlYWVBLVTU0c0JVdVNzRXlqSlpPMm1kbERBT0JnTlZIUThCQWY4RUJBTUNCYUF3CkRBWURWUjBUQVFIL0JBSXdBREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd1NRWUQKVlIwZ0JFSXdRREEwQmdzckJnRUVBYkl4QVFJQ1RqQWxNQ01HQ0NzR0FRVUZCd0lCRmhkb2RIUndjem92TDNObApZM1JwWjI4dVkyOXRMME5RVXpBSUJnWm5nUXdCQWdFd2dZZ0dDQ3NHQVFVRkJ3RUJCSHd3ZWpCTEJnZ3JCZ0VGCkJRY3dBb1kvYUhSMGNEb3ZMM3BsY205emMyd3VZM0owTG5ObFkzUnBaMjh1WTI5dEwxcGxjbTlUVTB4U1UwRkUKYjIxaGFXNVRaV04xY21WVGFYUmxRMEV1WTNKME1Dc0dDQ3NHQVFVRkJ6QUJoaDlvZEhSd09pOHZlbVZ5YjNOegpiQzV2WTNOd0xuTmxZM1JwWjI4dVkyOXRNSUlCQkFZS0t3WUJCQUhXZVFJRUFnU0I5UVNCOGdEd0FIWUFmVDd5CitJLy9pRlZvSk1MQXlwNVNpWGtyeFE1NENYOHVhcGRvbVg0aThOY0FBQUYzVDRDeUJ3QUFCQU1BUnpCRkFpQkoKOC9oY0pGOFU4RHJ0a1ZNamVvWDlBSzUxMDFqNm4xWXc3empaa3dvK1BBSWhBTkdWZkFWdFFPUzlmTmNuWWRIZApRSDlEdVdUU2ZXR09NeThFS3M4bGdTdkhBSFlBbENDOEhvN1ZqV3lJY3grQ2l5SXNEZEhhVFY1c1Q1UTlZZHRPCkwxaE5vc0lBQUFGM1Q0Q3pVQUFBQkFNQVJ6QkZBaUVBN1VhL3Q5RnBiVUVMaDM2YWtJdERhYUJYZzF2TmgxU2MKaGV4Q3pTcUNNK2tDSUVYSmVpbFB1bkJseVdhQWRJSUU3QWtUWHlzUGlyQXFUWWIrUkVvYTZnd1lNQ1FHQTFVZApFUVFkTUJ1Q0dXSXVkQzV6ZEdGbmFXNW5Mblp2YkhSaFoyVmhjSEF1YVc4d0RRWUpLb1pJaHZjTkFRRU1CUUFECmdnSUJBQWdaditweTZuMmkzSW92ck5wcjFvaW9pcVE2Z0NqQ2ErWi8rQzc1UFZxTFpvTkNnL291azlhTS9DSE4KUjhQMVJFd0F3MVVIKy8vV0MwUm53VkNOUUFFMU5KMG5aOS9qTytCb05XSXduK1NBYU1EU0xtUkpjemtPU2p0TApvL2FjOUlLb0IwWktoYnhyK3FIaSs0QWhVMmV2UHh2T3orY3NXZ041cU9vSnRkcjVRWmU4Z3UrMytrQkxUNEJCClYvUEVxTGE3SGhjUHBwcDZkNmdHQ29nTFdIbUd6RHdtSnltK2JLenJzL252N1pPc3FJbko0a0pCZ0o3NlhFQWYKYVV4bkhZMUJoR1JjTk9KNWFhM2xYRXM5Ty81NmlOeXFNYjkrVEJFMlhUTWRXNEVQRE9qYVNERDN0MUx0KzBMSQovZUZxWkVVdmhnQVVPblBWRUpJZHJrRnZ5SHEydmNpaXRxUENZWmZTWTdXNy9OZ1dCWXZnaFNEeGJEYklUZjRECnRsWWh3aEg4VG9wS0pJN1k2UTBpRVdYaktuVnhtUTRmeHp2anZVQno5ODJmY1lOSnRzY0YxbktxUHIzTzc1ekYKVThsNEVSM1Rpd3ByTVNNdHB3MGdGNnkvYXhsdnZENkVPclRNd2VmcXRuUDJYTW4zaktWUXJuZzl4aFZXcHk0TworVW5mWXJBWDgxcjVSK2lQMW9mQ2xkS0xmaDRwUCsvalVua1ZaYXRRNlp5THJvQnpibFdNTnZHNXhkeTFwTkQ0ClJxOVhsUk8xQWtlYThld1JGcHRRMzBrQVhhLzlDcXM0emxyV0hiR2ptNXpKWk9sU0lmNWJFSXo2OEtNUTVsY2QKTlFVSzFNVU9yZ0UwWVRZcmxwdzhtNnJlZFZEblFwSXBRZjFaWkJWQmFxUzM0NEE4Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlHMVRDQ0JMMmdBd0lCQWdJUWJGV3IyOUFIa3NlZEJ3ellFWjdXdnpBTkJna3Foa2lHOXcwQkFRd0ZBRENCCmlERUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2s1bGR5QktaWEp6WlhreEZEQVNCZ05WQkFjVEMwcGwKY25ObGVTQkRhWFI1TVI0d0hBWURWUVFLRXhWVWFHVWdWVk5GVWxSU1ZWTlVJRTVsZEhkdmNtc3hMakFzQmdOVgpCQU1USlZWVFJWSlVjblZ6ZENCU1UwRWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhrd0hoY05NakF3Ck1UTXdNREF3TURBd1doY05NekF3TVRJNU1qTTFPVFU1V2pCTE1Rc3dDUVlEVlFRR0V3SkJWREVRTUE0R0ExVUUKQ2hNSFdtVnliMU5UVERFcU1DZ0dBMVVFQXhNaFdtVnliMU5UVENCU1UwRWdSRzl0WVdsdUlGTmxZM1Z5WlNCVAphWFJsSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBaG1semZxTzFNZGdqCjRXM2RwQlBUVkJYMUF1dmNBeUcxZmwwZFVudy9NZXVlQ1d6UldUaGVaMzVMVm85MWtMSTNERFZhWktXK1RCQXMKSkJqRWJZbU13Y1dTVFdZQ2c1MzM0U0YwK2N0REFzRnhzWCtyVERoOWtTckcvNG1wNk9TaHViTGFFSVVKaVpvNAp0ODczVHVTZDBXajVEV3QzRHRwQUc4VDM1bC92K3hyTjh1YjhQU1NvWDVWa2d3K2pXZjRLUXROdlVGTERxOG1GCldoVW5QTDZqSEFBRFhwdnM0bFROWXdPdHg5eVF0YnB4d1N0N1FKWTErSUNybVJKQjZCdUtSdC9qZkRKRjlKc2MKUlFWbEhJeFFkS0FKbDdvYVZuWGdEa3F0azJxZGRkM2tDRFhkNzRndjgxM0c5MXo3Q2pzR3lKOTNvSklsTlMzVQpnRmJENlY1NEpNZ1ozclNtb3RZYno5OG9aeFg3TUtidENtMWFKL3EraFR2MllLMXlNeHJuZmNpZUttT1lCYkZECmhuVzVPNlJNQTcwM2RCSzkyajZYUk4yRXR0TGtRdXVqWmd5K2pYUkt0YVdNSWxrTmtXSm1PaUhtRXJRbmdIdnQKaU5rSWNqSnVtcTFkZEZYNGlhVEk0MGE2emd2SUJ0eEZlRHMyUmZjYUg3M2VyN2N0TlVVcWdRVDVyRmdKaE1tRgp4NzZyUWdCNU9aVWtvZGI1azJleDdQK0d1NEo4NmJTMTUwOTRVdVljVjA5aFZla25tVGg1RXg5Q0JLaXBMUzJXCjJ3S0Jha2YrYVZZbk5DVTZTMG5BU3F0MnhyWnBHQzF2N3Y2RGh1ZXB5eUp0bjNxU1YyUG9CaVU1U3FsK2FBUnAKd1VpYlFNR200NGdqeU5EcURsVnArU2hMUWxVSDl4OENBd0VBQWFPQ0FYVXdnZ0Z4TUI4R0ExVWRJd1FZTUJhQQpGRk41djFxcUswclBWSURoMkp2QW5mS3lBMmJMTUIwR0ExVWREZ1FXQkJUSTJYaG9vdGtaYU5VOWN0NWZDajdjCnRZYUdwakFPQmdOVkhROEJBZjhFQkFNQ0FZWXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFkQmdOVkhTVUUKRmpBVUJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXdJZ1lEVlIwZ0JCc3dHVEFOQmdzckJnRUVBYkl4QVFJQwpUakFJQmdabmdRd0JBZ0V3VUFZRFZSMGZCRWt3UnpCRm9FT2dRWVkvYUhSMGNEb3ZMMk55YkM1MWMyVnlkSEoxCmMzUXVZMjl0TDFWVFJWSlVjblZ6ZEZKVFFVTmxjblJwWm1sallYUnBiMjVCZFhSb2IzSnBkSGt1WTNKc01IWUcKQ0NzR0FRVUZCd0VCQkdvd2FEQS9CZ2dyQmdFRkJRY3dBb1l6YUhSMGNEb3ZMMk55ZEM1MWMyVnlkSEoxYzNRdQpZMjl0TDFWVFJWSlVjblZ6ZEZKVFFVRmtaRlJ5ZFhOMFEwRXVZM0owTUNVR0NDc0dBUVVGQnpBQmhobG9kSFJ3Ck9pOHZiMk56Y0M1MWMyVnlkSEoxYzNRdVkyOXRNQTBHQ1NxR1NJYjNEUUVCREFVQUE0SUNBUUFWRHdvSXpRRFYKZXJjVDBlWXFaakJOSjhWTld3VkZsUU90WkVScW41aVduRVZhTFpaZHp4bGJ2ejJGeDBFeFVOdVVFZ1lrSVZNNApZb2NLa0NRN2hPNW5vaWNvcS9EckVZSDVJdU5jdVcxSThKSlo5REx1QjFmWXZJSGxaMkpHNDZpTmJWS0EzeWdBCkV6ODZSdkRRbHQyQzQ5NHFxUFZJdFJqcno5WWxKRUdUMERydHR5QXBxMFlMRkR6ZitaMXBrTWhoN2MrN2ZYZUoKcW1JaGZKcGR1S2M4SEVRa1lRUVNoZW40MjZTM0gwSnJJQWJLY0JDaXlZRnVPaGZ5dnV3VkNGRGZGdnJqQURqZAo0algxdVFYZDE2MUl5RlJibTg5czJPajVvVTF3RFl6NXN4K2hvQ3VoNmxTcysvdVB1V29tSXEzeTFHREZOYWZXCitMc0hCVTE2bFFvNVEyeWgyNWxhUXNLUmd5UG1NcEhKOThlZG02eTJzSFVhYkFTbVJIeHZHaXV3d0UyNWFEVTAKMlNBZWVweUltSjJDekI4MFlHN1d4bHluSHFOaHBFN3hmQzdQelFsTGdtZkVIZFUrdEhGZVFhelJRbnJGa1cyVwprcVJHSXE3Y0tSbnl5cHZqUE1ramVpVjlsUmRBTTlmU0p2c0Izc3ZVdXUxY29JRzF4eEkxeWVnb0dNNHI1UVA0ClJHSVZ2WWFpSTc2QzBkam9TYlEvZGtJVVVYUXVCOEFMNWp5SDM0ZzNCWmFhWHl2cG1uVjRpbHBwTVhWQW5BWUcKT041MVdoSjZXMHhOZE5Kd3pZQVNaWUgrdG1DV0krTjYwR3YyTk5NR0h3TVo3ZTliWGd6VUNaSDVGYUJGREdSNQpTOVZXcUhCNzNRK095SVZ2SWJLWWNTYzJ3L2FTdUZLR1NBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\"\n}"
      },
      {
        "id": "zRLIjULdgU1IbLnXnpt9y",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "YCRJJft3mcXdrPTT5M528"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization owns the node.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Header Parameter",
    "value": "headerParameters"
  },
  "autoGeneratedAnchorSlug": "get-a-certificate-for-a-node",
  "legacyHash": "eNPIziFVKrwVa4OXLNHw9"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Start a Node",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/start",
  "description": "Start up a Node.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "P4mCO2Y_MAOEaMVa0Puua",
        "language": "curl",
        "code": "curl --location --globoff --request POST 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/start' \\\n--header 'X-VOLTAGE-AUTH: string'",
        "customLabel": ""
      },
      {
        "id": "X8rEMHWRwK8MpfhZpFAID",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/stop',\n   'headers': {\n      'X-VOLTAGE-AUTH': 'string'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "9uFHcIv1PSeDVNg7GuNJl",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"string\");\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/stop\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "k2UrZR_VzWzKjADsFUer_",
        "language": "python",
        "code": "import requests\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/start\"\n\npayload = {}\nheaders = {\n   'X-VOLTAGE-AUTH': 'string'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "yCaHNDBL7Bopy1oOu9QxK",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/start\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"X-VOLTAGE-AUTH\"] = \"string\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "yCaHNDBL7Bopy1oOu9QxK"
  },
  "results": {
    "languages": [
      {
        "id": "YCRJJft3mcXdrPTT5M528",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"message\": \"node is starting up\"\n}"
      },
      {
        "id": "zRLIjULdgU1IbLnXnpt9y",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "YCRJJft3mcXdrPTT5M528"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization owns the node.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "start-a-node",
  "legacyHash": "mkg0-t0CpBvFAJyr_D1nr"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Stop a Node",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/stop",
  "description": "Shut down a Node.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "P4mCO2Y_MAOEaMVa0Puua",
        "language": "curl",
        "code": "curl --location --globoff --request POST 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/stop' \\\n--header 'X-VOLTAGE-AUTH: string'",
        "customLabel": ""
      },
      {
        "id": "X8rEMHWRwK8MpfhZpFAID",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/stop',\n   'headers': {\n      'X-VOLTAGE-AUTH': 'string'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "9uFHcIv1PSeDVNg7GuNJl",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"string\");\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/stop\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "k2UrZR_VzWzKjADsFUer_",
        "language": "python",
        "code": "import requests\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/start\"\n\npayload = {}\nheaders = {\n   'X-VOLTAGE-AUTH': 'string'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "yCaHNDBL7Bopy1oOu9QxK",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/stop\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"X-VOLTAGE-AUTH\"] = \"string\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "yCaHNDBL7Bopy1oOu9QxK"
  },
  "results": {
    "languages": [
      {
        "id": "YCRJJft3mcXdrPTT5M528",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"message\": \"node is shutting down\"\n}"
      },
      {
        "id": "zRLIjULdgU1IbLnXnpt9y",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "YCRJJft3mcXdrPTT5M528"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization owns the node.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "stop-a-node",
  "legacyHash": "KidHgS-lEg_hkDOj3fESt"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Update a Node",
  "method": "PUT",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/update",
  "description": "Update a Node to the latest version.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "P4mCO2Y_MAOEaMVa0Puua",
        "language": "curl",
        "code": "curl --location --globoff --request POST 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/update' \\\n--header 'X-VOLTAGE-AUTH: string'",
        "customLabel": ""
      },
      {
        "id": "X8rEMHWRwK8MpfhZpFAID",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/update',\n   'headers': {\n      'X-VOLTAGE-AUTH': 'string'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "9uFHcIv1PSeDVNg7GuNJl",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"string\");\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/update\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "k2UrZR_VzWzKjADsFUer_",
        "language": "python",
        "code": "import requests\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/update\"\n\npayload = {}\nheaders = {\n   'X-VOLTAGE-AUTH': 'string'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "yCaHNDBL7Bopy1oOu9QxK",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/update\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"X-VOLTAGE-AUTH\"] = \"string\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "yCaHNDBL7Bopy1oOu9QxK"
  },
  "results": {
    "languages": [
      {
        "id": "YCRJJft3mcXdrPTT5M528",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"8ac52ac6-b205-4051-8ac6-c538c2f269a0N\",\n  \"lnd_version\": \"0.18.2-beta\",\n  \"volt_version\": \"v0.4.16\",\n}"
      },
      {
        "id": "zRLIjULdgU1IbLnXnpt9y",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "YCRJJft3mcXdrPTT5M528"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization owns the node.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "version",
        "kind": "optional",
        "type": "string",
        "description": "Specific LND Version to update to",
        "": "Specific LND Version to update to"
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "update-a-node",
  "legacyHash": "RtAzhGb593DFTMyIv3TNp"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Delete a Node",
  "method": "DELETE",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id",
  "description": "Delete a Node from team.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "P4mCO2Y_MAOEaMVa0Puua",
        "language": "curl",
        "code": "curl --location --globoff --request DELETE 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}' \\\n--header 'X-VOLTAGE-AUTH: string'",
        "customLabel": ""
      },
      {
        "id": "X8rEMHWRwK8MpfhZpFAID",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'DELETE',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}',\n   'headers': {\n      'X-VOLTAGE-AUTH': 'string'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "9uFHcIv1PSeDVNg7GuNJl",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"string\");\n\nvar requestOptions = {\n   method: 'DELETE',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "k2UrZR_VzWzKjADsFUer_",
        "language": "python",
        "code": "import requests\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}\"\n\npayload = {}\nheaders = {\n   'X-VOLTAGE-AUTH': 'string'\n}\n\nresponse = requests.request(\"DELETE\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "yCaHNDBL7Bopy1oOu9QxK",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Delete.new(url)\nrequest[\"X-VOLTAGE-AUTH\"] = \"string\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "yCaHNDBL7Bopy1oOu9QxK"
  },
  "results": {
    "languages": [
      {
        "id": "YCRJJft3mcXdrPTT5M528",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_name\": \"nodename\",\n  \"status\": \"deleted\",\n  \"node_id\": \"8ac52ac6-b205-4051-8ac6-c538c2f269a0N\",\n  \"created\": \"07-18-2024T00:00:00Z\",\n  \"owner_id\": \"2936b2c7-8980-442c-b037-4845ee6e84f1U\",\n  \"api_endpoint\": \"nodename.m.voltageapp.io\",\n  \"network\": \"mainnet\",\n  \"type\": \"standard\",\n  \"command_history\": [\n    {\n      \"action\": \"delete\",\n      \"time\": \"07-18-2024T00:00:00Z\"\n    }\n  ],\n}"
      },
      {
        "id": "zRLIjULdgU1IbLnXnpt9y",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "YCRJJft3mcXdrPTT5M528"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization owns the node.",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "delete-a-node",
  "legacyHash": "T0nPeyr5sKU7RPFHxD7CA"
}
```
:::



:::ApiMethodV2
```json
{
  "name": "Update a Node Settings",
  "method": "PUT",
  "url": "https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/settings",
  "description": "Update a node's settings.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "5IpR6c8l3NTv7jk7X9GcJ",
        "language": "curl",
        "code": "curl --location --globoff --request PUT 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/settings' \\\n--header 'X-VOLTAGE-AUTH: string' \\\n--data '{\"settings\":{\"autopilot\": true,...}}'",
        "customLabel": ""
      },
      {
        "id": "jVmUH-BPCelBYQ0I3A4mh",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'PUT',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/settings/{organization_id}',\n   'headers': {\n      'X-VOLTAGE-AUTH': 'string'\n   },\n   body: '{\"settings\":\"Object\"}'\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "qiR0vZvsx24Y7Jkr5M0DE",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"string\");\n\nvar raw = \"{\\\"settings\\\":\\\"Object\\\"}\";\n\nvar requestOptions = {\n   method: 'PUT',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/settings/{organization_id}\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "LoPWAgsd1fcmxzFY8miai",
        "language": "python",
        "code": "import requests\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/settings/{organization_id}\"\n\npayload = \"{\\\"settings\\\":\\\"Object\\\"}\"\nheaders = {\n   'X-VOLTAGE-AUTH': 'string'\n}\n\nresponse = requests.request(\"PUT\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "offK2e8_2lcR8cjBNTMfs",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/settings/{organization_id}\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Put.new(url)\nrequest[\"X-VOLTAGE-AUTH\"] = \"string\"\nrequest.body = \"{\\\"settings\\\":\\\"Object\\\"}\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "qiR0vZvsx24Y7Jkr5M0DE"
  },
  "results": {
    "languages": [
      {
        "id": "Jl-PMQrUGBGOduCGLpKtz",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"node_id\": \"8ac52ac6-b205-4051-8ac6-c538c2f269a0N\",\n  \"owner_id\": \"2936b2c7-8980-442c-b037-4845ee6e84f1\",\n  \"network\": \"mainnet\",\n  \"created\": \"2024-01-10T19:21:57Z\",\n  \"purchased_type\": \"ondemand\",\n  \"type\": \"standard\",\n  \"settings\": {\n    \"autopilot\": false,\n    \"grpc\": true,\n    ...\n  }\n}"
      },
      {
        "id": "n4hIkog9p7ORsYMW9VYuV",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "Jl-PMQrUGBGOduCGLpKtz"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that owns the node. ",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to update the whitelist fo.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "settings",
        "kind": "required",
        "type": "Object",
        "description": "Settings for the Lightning Node",
        "children": [
          {
            "name": "autopilot",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will turn on its autopilot feature"
          },
          {
            "name": "grpc",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will active the gRPC API"
          },
          {
            "name": "rest",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will active the REST API"
          },
          {
            "name": "keysend",
            "kind": "required",
            "type": "Boolean",
            "description": "When enabled, LND will enable the Keysend feature"
          },
          {
            "name": "whitelist",
            "kind": "required",
            "type": "Array",
            "description": "A list of IPs that are allowed to talk to your node"
          },
          {
            "name": "alias",
            "kind": "required",
            "type": "string",
            "description": "Your node's Alias on the peer to peer network"
          },
          {
            "name": "color",
            "kind": "required",
            "type": "string",
            "description": "Your node's Color on the peer to peer network"
          },
          {
            "name": "wumbo",
            "kind": "optional",
            "type": "Boolean",
            "description": "When enabled, LND will accept Wumbo channels"
          },
          {
            "name": "webhook",
            "kind": "optional",
            "type": "string",
            "description": "Your webhook endpoint if you wish to receive webhook events"
          },
          {
            "name": "minchansize",
            "kind": "optional",
            "type": "string",
            "description": "The minimum channel size your node will accept"
          },
          {
            "name": "maxchansize",
            "kind": "optional",
            "type": "string",
            "description": "The maximum channel size your node will accept"
          },
          {
            "name": "autocompaction",
            "kind": "optional",
            "type": "Boolean",
            "description": "When enabled, LND will automatically compact the databases on startup"
          },
          {
            "name": "defaultfeerate",
            "kind": "optional",
            "type": "string",
            "description": "Your default fee rate for your channels"
          },
          {
            "name": "basefee",
            "kind": "optional",
            "type": "string",
            "description": "Your base fee rate for your channels"
          },
          {
            "name": "amp",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables Atomic Multipath Payments"
          },
          {
            "name": "wtclient",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables the watchtower client"
          },
          {
            "name": "maxpendingchannels",
            "kind": "optional",
            "type": "string",
            "description": "Maximum number of pending channels allowed for a single peer"
          },
          {
            "name": "allowcircularroute",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, allows a payment to exit and enter the same channel"
          },
          {
            "name": "numgraphsyncpeers",
            "kind": "optional",
            "type": "string",
            "description": "Number of peers used for syncing the graph"
          },
          {
            "name": "gccanceledinvoicesonstartup",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, deletes cancelled invoices only when LND starts up"
          },
          {
            "name": "gccanceledinvoicesonthefly",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, deletes cancelled invoices while LND is running"
          },
          {
            "name": "torskipproxyforclearnettargets",
            "kind": "optional",
            "type": "Boolean",
            "description": "Optimization for clearnet peers. See LND Docs."
          },
          {
            "name": "rpcmiddleware",
            "kind": "optional",
            "type": "Boolean",
            "description": "Enables the rpcmiddleware, which can interecept certain rpc calls. See LND Docs."
          },
          {
            "name": "optionscidalias",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, and zeroconf is also enabled, it is possible to create zeroconf channels. See lnd docs."
          },
          {
            "name": "zeroconf",
            "kind": "optional",
            "type": "Boolean",
            "description": "If enabled, and optionscidalias is also enabled, it is possible to create zeroconf channels. See lnd docs."
          },
          {
            "name": "remotesigning",
            "kind": "optional",
            "type": "Boolean",
            "description": "Turn on or off remote signing"
          },
          {
            "name": "remotesigninghost",
            "kind": "optional",
            "type": "string",
            "description": "IP Address or Hostname of the remote signing instance"
          },
          {
            "name": "remotesigningmacaroon",
            "kind": "optional",
            "type": "string",
            "description": "Macaroon used for authentication to the remote signer"
          },
          {
            "name": "remotesigningcert",
            "kind": "optional",
            "type": "string",
            "description": "TLS Certificate of the remote signer"
          }
        ]
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Path Parameter",
    "value": "pathParameters"
  },
  "autoGeneratedAnchorSlug": "update-a-node-settings",
  "legacyHash": "femA1lGO4_2XC2e2JJZrD"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Upload a Support Macaroon",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/support_macaroon",
  "description": "Upload a macaroon for the Voltage Support team to use.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "wW_bW_RJRtLGXJVUxIrw-",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"X-VOLTAGE-AUTH\", \"voltage_api_key\");\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: \"ZW5jcn...lwdGVkCg==\",\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/{organization_id}/nodes/{node_id}/support_macaroon\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "bEotpeJO78HaHQeukMVdf",
        "language": "curl",
        "code": "curl --location --globoff --request POST 'https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/support_macaroon/{organization_id}/{node_id}' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json'",
        "customLabel": ""
      },
      {
        "id": "KPsug0F5_zH_-BhSRKc2F",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/support_macaroon/{organization_id}/{node_id}',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json'\n   }\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "q3eLwY9ziEEWkhopkxtk9",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   redirect: 'follow'\n};\n\nfetch(\"https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/support_macaroon/{organization_id}/{node_id}\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "1nHWL163_L22zTvwpC_pO",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/support_macaroon/{organization_id}/{node_id}\"\n\npayload = {}\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "0_tN8jbf-9r1ySDvYiP-y",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/:organization_id/nodes/:node_id/support_macaroon/{organization_id}/{node_id}\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "wW_bW_RJRtLGXJVUxIrw-"
  },
  "results": {
    "languages": [
      {
        "id": "W8J3niL5sVM0r8HhveQQl",
        "language": "200",
        "customLabel": "",
        "code": "{\n  \"message\": \"ok\"\n}"
      },
      {
        "id": "VIQTcdyRr09f5n2WvOB6S",
        "language": "404",
        "customLabel": "",
        "code": "{\n  \"message\": \"not found\"\n}"
      }
    ],
    "selectedLanguageId": "W8J3niL5sVM0r8HhveQQl"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the organization that owns the node. ",
        "children": []
      },
      {
        "name": "node_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of the node that you want to backup a macaroon for.",
        "children": []
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "upload-a-support-macaroon",
  "legacyHash": "HwmKz2h9urfGF9if5uj8A"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Swap from Lightning to Onchain",
  "method": "POST",
  "url": "https://api.voltage.cloud/organizations/:organization_id/swap",
  "description": "You must be approved to use this endpoint.",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "Onkb-n0MDhn3YTKhITJlt",
        "language": "curl",
        "code": "curl --location --globoff 'https://api.voltage.cloud/organizations/{organization_id}/swap' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--header 'X-VOLTAGE-AUTH: {voltage_api_key}' \\\n--data '{\"amount\":50000,\"address\":\"bc1...\"}'",
        "customLabel": ""
      },
      {
        "id": "kmOMy_RfUOKMJccxZYnzV",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api.voltage.cloud/organizations/{organization_id}/swap',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json',\n      'X-VOLTAGE-AUTH': 'voltage_api_key'\n   },\n   'body': {\n      'amount': 50000,\n      'address': 'tb1pcrll49pj9j36cxgqq0fmkjx9fkkffp79rhl6uaanux8uasa5vrzsezlvzy',\n      'network': 'mutinynet'\n   }\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "ysdC0hSBkV0GZtzYMuw1w",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api.voltage.cloud/organizations/{organization_id}/swap\"\n\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json',\n   'X-VOLTAGE-AUTH': 'voltage_api_key'\n}\n\nbody = {\n  \"network\":\"mutinynet\",\n  \"address\": \"tb1pcrll49pj9j36cxgqq0fmkjx9fkkffp79rhl6uaanux8uasa5vrzsezlvzy\",\n  \"amount\": 50000\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=body)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "ptqA6ulhf065j-BSCF9qW",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.voltage.cloud/organizations/{organization_id}/swap\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"X-VOLTAGE-AUTH\"] = \"voltage_api_key\"\nrequest.body = {\n  \"network\":\"mutinynet\",\n  \"address\": \"tb1pcrll49pj9j36cxgqq0fmkjx9fkkffp79rhl6uaanux8uasa5vrzsezlvzy\",\n  \"amount\": 50000\n}\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "ptqA6ulhf065j-BSCF9qW"
  },
  "results": {
    "languages": [
      {
        "id": "W8J3niL5sVM0r8HhveQQl",
        "language": "200",
        "code": "{\n    \"payment_id\": \"be232364-397c-4b3f-a492-6f9888bdedd6\",\n    \"invoice\": \"lntbs620u1p537j42pp5euf8swh7kcsa0ds7ntn9u47zl8hqcwek9pzpqsxt2xz9x5y3e35sdryw33rzurrwfkxcdpewp4rj63nxe3hsem3wycxvmttdfurjentddnxvuph89exsmpkw4skzmn40qu82ctnvy6hvun6wdjh5mrk0fuscqzzsxqrrsssp5gj9cunlch42yc6cr74urldjxx4wj8x3fez5leu5q6wpfrke8jtpq9qxpqysgqp6hwevkc6tgqc2hm4swytz42v9su079273ht04z2nzemrtkscdxjd2523cjeq9vm7nffc4cfcxjyll8cz3xdhtp5sh6j7dj0mhhsj7gqadq22g\",\n    \"status\": \"receiving\"\n}",
        "customLabel": ""
      },
      {
        "id": "VIQTcdyRr09f5n2WvOB6S",
        "language": "404",
        "code": "{\n  \"message\": \"not found\"\n}",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "W8J3niL5sVM0r8HhveQQl"
  },
  "request": {
    "pathParameters": [
      {
        "name": "organization_id",
        "kind": "required",
        "type": "string",
        "description": "The Voltage ID of your organization. ",
        "": "The Voltage ID of your organization. "
      }
    ],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "X-VOLTAGE-AUTH",
        "kind": "required",
        "type": "string",
        "description": "Your Voltage API Key that can be created on your Voltage Dashboard. ",
        "children": []
      }
    ],
    "bodyDataParameters": [
      {
        "name": "amount",
        "kind": "required",
        "type": "integer",
        "description": "Amount of satoshis you want to swap",
        "": "amount"
      },
      {
        "name": "address",
        "kind": "required",
        "type": "string",
        "description": "The onchain address you want to send to funds to",
        "": "address"
      },
      {
        "name": "network",
        "kind": "required",
        "type": "string",
        "description": "The network you are using. Can be 'mutinynet' or 'mainnet'",
        "": "network"
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "autoGeneratedAnchorSlug": "swap-from-lightning-to-onchain",
  "legacyHash": "NUFtA7mhCEQ3tkjIxUJah"
}
```
:::


[title] Developer Resources
[path] /


[title] GRPC API Examples
[path] Developer Resources/API Resources/LND Node API/

## Prerequisites:

- **Admin Macaroon** - The admin macaroon is an authentication token that allows you to interact with your LND node's gRPC API with administrative permissions. You can also grab a "Read Only" macaroon that wont have permissions to spend. You can find your Macaroons in your Voltage Dashboard by visiting **Manage Access** -> **Macaroon Bakery**
- **Lightning.proto File** - The **lightning.proto** file is a Protocol Buffers (protobuf) definition file that defines the gRPC service and messages used to interact with an LND node. It specifies the methods available for communication, as well as the structure of the request and response messages. This file is essential for generating the client and server code needed to use the gRPC API. You can download the **lightning.proto** file from the LND GitHub repository: [LND GitHub - lnrpc directory](https://github.com/lightningnetwork/lnd/tree/master/lnrpc)

## Interacting With Your Node's LND gRPC API

Here are some code snippets demonstrating how to interact with some of the most common and popular LND API methods using the gRPC API:

**GetInfo** - [https://lightning.engineering/api-docs/api/lnd/lightning/get-info](https://lightning.engineering/api-docs/api/lnd/lightning/get-info)

```javascript
const fs = require('fs');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const loaderOptions = {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true
};

const packageDefinition = protoLoader.loadSync('lightning.proto', loaderOptions);

async function main() {
  process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA';
  let m = fs.readFileSync('~/path/to/admin.macaroon');
  let macaroon = m.toString('hex');

  // build meta data credentials
  let metadata = new grpc.Metadata();
  metadata.add('macaroon', macaroon);
  let macaroonCreds = grpc.credentials.createFromMetadataGenerator((args, callback) => {
    callback(null, metadata);
  });

  // build ssl credentials without needing to pass in the cert
  const sslCreds = grpc.credentials.createSsl();

  // combine the cert credentials and the macaroon auth credentials
  // such that every call is properly encrypted and authenticated
  let credentials = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);

  // Pass the credentials when creating a channel
  let lnrpcDescriptor = grpc.loadPackageDefinition(packageDefinition);
  let lnrpc = lnrpcDescriptor.lnrpc;
  let client = new lnrpc.Lightning('node-name.m.voltageapp.io:10009', credentials);

  client.getInfo({}, (err, response) => {
    if (err) {
      console.log('Error: ' + err);
    }
    console.log('GetInfo:', response);
  });
}

main();
```

**AddInvoice** - [https://lightning.engineering/api-docs/api/lnd/lightning/add-invoice](https://lightning.engineering/api-docs/api/lnd/lightning/add-invoice)

```javascript
const fs = require('fs');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const loaderOptions = {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true
};

const packageDefinition = protoLoader.loadSync('lightning.proto', loaderOptions);

async function main() {
  process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA';
  let m = fs.readFileSync('~/path/to/admin.macaroon');
  let macaroon = m.toString('hex');

  // build meta data credentials
  let metadata = new grpc.Metadata();
  metadata.add('macaroon', macaroon);
  let macaroonCreds = grpc.credentials.createFromMetadataGenerator((args, callback) => {
    callback(null, metadata);
  });

  // build ssl credentials without needing to pass in the cert
  const sslCreds = grpc.credentials.createSsl();

  // combine the cert credentials and the macaroon auth credentials
  // such that every call is properly encrypted and authenticated
  let credentials = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);

  // Pass the credentials when creating a channel
  let lnrpcDescriptor = grpc.loadPackageDefinition(packageDefinition);
  let lnrpc = lnrpcDescriptor.lnrpc;
  let client = new lnrpc.Lightning('node-name.m.voltageapp.io:10009', credentials);

  let request = {
    value: 1000, // Invoice amount in satoshis
    memo: 'Test invoice', // Optional memo for the invoice
  };

  client.addInvoice(request, (err, response) => {
    if (err) {
      console.log('Error: ' + err);
    }
    console.log('Invoice:', response);
  });
}

main();
```

SendPaymentSync - [https://lightning.engineering/api-docs/api/lnd/lightning/send-payment-sync](https://lightning.engineering/api-docs/api/lnd/lightning/send-payment-sync)

```javascript
const fs = require('fs');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const loaderOptions = {
  keepCase: true,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: true
};

const packageDefinition = protoLoader.loadSync('lightning.proto', loaderOptions);

async function main() {
  process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA';
  let m = fs.readFileSync('~/path/to/admin.macaroon');
  let macaroon = m.toString('hex');

  // build meta data credentials
  let metadata = new grpc.Metadata();
  metadata.add('macaroon', macaroon);
  let macaroonCreds = grpc.credentials.createFromMetadataGenerator((args, callback) => {
    callback(null, metadata);
  });

  // build ssl credentials without needing to pass in the cert
  const sslCreds = grpc.credentials.createSsl();

  // combine the cert credentials and the macaroon auth credentials
  // such that every call is properly encrypted and authenticated
  let credentials = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);

  // Pass the credentials when creating a channel
  let lnrpcDescriptor = grpc.loadPackageDefinition(packageDefinition);
  let lnrpc = lnrpcDescriptor.lnrpc;
  let client = new lnrpc.Lightning('node-name.m.voltageapp.io:10009', credentials);

  let request = {
    payment_request: 'lnbc...', // Paste the invoice's payment request here
    amt: 1000, // Amount to pay in satoshis
  };

  client.sendPaymentSync(request, (err, response) => {
    if (err) {
      console.log('Error: ' + err);
    }
    console.log('Payment:', response);
  });
}

main();
```

This script demonstrates how to make three different API calls to your LND node using the gRPC API:

- `getInfo`

  `: Retrieves general information about your node.`
- `addInvoice`

  `: Creates a new invoice with a specified amount and optional memo.`
- `sendPaymentSync`

  `: Pays an invoice by providing the payment request and the amount to pay.`

Make sure to replace the placeholders in the script with your actual macaroon file path, TLS certificate path, node URL, and the desired invoice details.

[title] Webhooks
[path] Developer Resources/

The Voltage Platform supports webhooks to notify users about events in their node. This document will explain how to use the Voltage webhooks as well as example payloads.

## Adding a Webhook Endpoint

You can add a webhook endpoint to your node by editing the node's settings. First navigate to your node and click `Expand Settings`. Once your settings are expanded, there is field named `Webhook URL`. Fill in this field with the endpoint that you'd like Voltage to make a request to. While you're in the settings you should also note down the field labeled `Webhook Secret`as this will be used to validate the request.

## How it Works

When an event is triggered, Voltage will make a `POST`request to your webhook endpoint. This request will include a JSON payload with details about the event. This request will also include a header named `Voltage-Secret`which will contain your webhook secret. When receiving the webhook event, you should parse the fields and take appropriate action.

You should always validate both the `Voltage-Secret`header and the `"api"`field in the JSON payload. This will help you ensure that the request was made from Voltage and you are sending requests to a node or endpoint that you trust.

## Payload Schema

There are 3 root fields to the JSON payload: `type`, `details`, and `api`.&#x20;

**type**: the `type`field is used to specify what type of event it was. The current options are `status`, `update`, or `error`.

**details**: The `details` field will include specific details about the event based on what the `type` the event is.&#x20;

**api**: This is the API endpoint for the node the event was sent for. This can be used to respond to the event and also validate what node the event was for.&#x20;

## Webhook Events

### Satus

**Waiting for Unlock**

&#x20;This means the node is waiting to be unlocked.&#x20;

```none
{
    "type": "status",
    "details": {
        "status": "waiting_unlock"
    },
    "api": "yournode.m.voltageapp.io"
}
```

**Waiting for Initialization**

This means the node is waiting to be initialized.

```none
{
    "type": "status",
    "details": {
        "status": "waiting_init"
    },
    "api": "yournode.m.voltageapp.io"
}
```

**Stopped**

This means the node just entered the Stopped state.

```none
{
    "type": "status",
    "details": {
        "status": "stopped"
    },
    "api": "yournode.m.voltageapp.io"
}
```

### Update

**Update Available**

This means the node has a new update available for it.

```none
{
    "type": "update",
    "details": {
        "update_available": "true",
        "lnd_version": "0.13.1",
        "volt_version": "v0.3.1"
    },
    "api": "yournode.m.voltageapp.io"
}
```

## Example Webhook - Automatic Unlock

As an example, we'll demonstrate how to automatically unlock your node whenever it's restarted. First, you must set your Webhook endpoint in your node's settings. Go to your node on the Voltage Dashboard and click Monitoring on the left side menu. Click Webhooks & Watchtowers to find your Webhookd URL field and Webhook secret.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/Ux6rrz8oP87CI4mcZL4_P_image.png)

Once you have your webhook endpoint set, now you need to handle the `waiting_unlock `status event. When a request comes in, you should first check the `Voltage-Secret`header to ensure it matches what you expect. Second, you should validate the `api`field in the JSON payload to ensure it's what you expect. If either of these are not what you're expecting, you should stop processing the event.

Once you've confirmed the secret and API fields are what you're expecting, you will check the `type`field. If the `type`is `status`then you can proceed to check the `details.status `field. If the `details.status`field equals `waiting_unlock`then you can continue processing the event and unlock your node.

Unlocking the node requires making an API call directly to your node's endpoint. Following the [LND API Documentaion](https://lightning.engineering/api-docs/api/lnd/index.html), we'll be making a call to the `/v1/unlockwallet` API. This takes a `POST`request with a JSON payload containing 2 fields. `wallet_password`and `stateless_init`. You're password must be base64 encoded and `stateless_init`must be `true`. Here's an example of what it would look like with `curl`:

```curl
curl -X POST https://yournode.m.voltageapp.io:8080/v1/unlockwallet  \
    -d '{ "wallet_password":"cGFzc3dvcmQK","stateless_init":true}'
```

Now, everytime you restart your node your webhook will automatically unlock the node for you!

:::hint{type="danger"}
You should always use some sort of password manager or environment variables for the Voltage Webhook Secret and your node's password.
:::


[title] Node Security and Backups
[path] Lightning Nodes/

## What is a seed phrase? Where do I access it?

Your seed phrase allows you to access your funds externally to Voltage. It similar to a regular bitcoin seed phrase with a few key differences.

1. The seed phrase is of the Aezeed format. This essentially means if you need to recover funds externally to Voltage, you should do so by deploying a new LND Lightning node and entering your seed phrase at start up.
2. If you do perform an external recovery, it is important that the original node is turned off before you do so and NEVER turned on again. If two instances of the same node are running simultaneously, this could lead to corruption.

To access your seed phrase go to your node dashboard and click Backup & Export, Seed Phrase Backup, Reveal Seed Phrase. See image below. This seed phrsae should be stored somewhere safe and not on an online enabled device for best security practices.&#x20;



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/l8k0djDU76rJ0JUXY9pIc_image.png)

## What is a Node Password? How is it used?

When you deploy a LND node on Voltage, you will set a node password. When you set your node password you will be given a warning that once your password is set, if lost, it cannot be recovered. This is because this password is not stored on the Voltage servers and it is used as a decryption password when you access your node dashboard.

Your node password must be entered every time you attempt to do an administrative level function on the node dashboard UI and also every time the node restarts to move the node state from "Waiting\_Unlock" to "Running." You can turn on auto-unlock by following the guide [here](https://docs.voltage.cloud/webhooks#uWgWt) for convenience.&#x20;

If you are using the API, the node password is NOT needed. Instead, authentication will be used via the macaroon and API endpoint as outlined [here](https://docs.voltage.cloud/lnd-node-api).&#x20;

[title] Node Guides
[path] Lightning Nodes/

### Learn how to [Sign a Message](docId:_UVSj0MJk7FLFQcrPxX5W).&#x20;

### Learn how to get more [Inbound Liquidity](docId\:vLivlaGN4RjDgTQl5nvYW).

### Learn how to get more [Outbound Liquidity](https://docs.voltage.cloud/outbound-liquidity).

### Learn how to connect to [LNCLI.](https://docs.voltage.cloud/lncli)&#x20;

### Learn how to start [Thunderhub.](https://docs.voltage.cloud/thunderhub-guide)

### Learn how to start [Terminal Web.](https://docs.voltage.cloud/start-terminal-web)

### Get started with [BTCPayServer](https://docs.voltage.cloud/getting-started-w-btcpay).&#x20;


[title] Taproot Assets
[path] Developer Resources/

*Taproot Assets is a Taproot-powered protocol for issuing assets on bitcoin that can be transferred over the Lightning Network for instant, high-volume, low-fee transactions.*

All Voltage nodes are automatically running the [Taproot Assets Daemon (tapd)](https://docs.lightning.engineering/lightning-network-tools/taproot-assets). There is no additional configuration needed to enable Taproot Assets on your Voltage nodes or account. This document helps you get start with using Taproot Assets on Voltage.

## Credentials

*If you don't already have a node created, please&#x20;*[create a node first.](https://docs.voltage.cloud/getting-started-with-voltage#2ccyl)

To interact with the Taproot Assets Daemon, you must first obtain the proper credentials to talk to the APIs. You can find these in your node's Macaroon Bakery.

1. Navigate to your node's dashboard. On the left hand side under "Manage Access" go to the "Macaroon Bakery" page.&#x20;
2. If you don't already have a "Superadmin" macaroon in the list of macaroons, click the "Bake Superadmin Macaroon" button at the bottom.
3. Once the macaroon is created, download it from the list. This is what you will use to authenticate to the Taproot Assets Daemon.



![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/HEMKrPCdlGJPF01sBeRIC_screenshot-2025-04-25-at-111820-am.png)

## Connection Information

All communications to the Taproot Assets Daemon will happen to your node's endpoint. All requests must be sent to port `443` of your node's API. You will need your node's endpoint when using either the APIs or the CLI.

Navigate to your node's homepage. Towards the bottom of the page, there is a "Node Details" section. In this section you will find your API Endpoint. Copy that for use in the CLI or API.

![](https://archbee-image-uploads.s3.amazonaws.com/CGGF0VLgJQypTJbZ1FbQy/vDF9wwItzvQGlYSGTELzx_screenshot-2025-04-25-at-112125-am.png)

## Using the CLI

One of the way of interacting with the Taproot Assets Daemon is via the Command Line Interface. This is a helpful way to get started using Taproot Assets quickly.&#x20;

First, download and install the Taproot Assets CLI (tapcli) from the latest release: [https://github.com/lightninglabs/taproot-assets/releases](https://github.com/lightninglabs/taproot-assets/releases)

Once you have the CLI installed, we can configure the CLI with the node's endpoint and macaroon obtained in previous steps. The two important flags are `--rpcserver` and `--macaroonpath`. The `rpcserver` flag must be the node's endpoint copied from the dashboard with `:443` appended to the end to specify the port. The `macaroonpath` flag is the location on disk of where the macaroon is. Finally, you also need to specify the `--tlscertpath` flag, however this can simply be an empty string (`""`).

To test out if your CLI is properly configured, try to run the `getinfo` command:

```bash
tapcli --rpcserver=taproot.m.voltageapp.io:443 \
  --macaroonpath=/tmp/superadmin.macaroon \
  --tlscertpath="" \
  getinfo
```

To see the full list of command options use the `tapcli help` command.&#x20;

## Helpful Resources

To understand more about Taproot Assets and how they work, please refer to the documentation written by Lightning Labs:

&#x20;[https://docs.lightning.engineering/lightning-network-tools/taproot-assets](https://docs.lightning.engineering/lightning-network-tools/taproot-assets)

You can additionally interact with the Taproot Assets Daemon directly via its APIs if that is preferred over a CLI. To see the API specification for Taproot Assets Daemon please refer to the documentation site:

[https://lightning.engineering/api-docs/api/taproot-assets/](https://lightning.engineering/api-docs/api/taproot-assets/)

[title] API Resources
[path] Developer Resources/

On the Voltage platform there are primarily 2 types of APIs. There is the **Voltage API** which is responsible for node operations (creating, starting, stopping, etc) and the **Node API** (sending and receiving payments, opening channels, etc). These APIs have different endpoints and use different authentication mechanisms.

:::CtaButton{label="Voltage API" docId="GAahJOXJgtdpIfAJmbrGD" openInNewTab="true"}

:::

:::CtaButton{label="Node API" docId="7KMwoEuwF0ehSI6Rdzc_j" openInNewTab="true"}

:::


[title] Creating a Node Walkthrough
[path] Developer Resources/API Resources/

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.

# Process

Here's the general process of creating a node via our API:

1. Call the [/node/create](https://docs.voltage.cloud/voltage-api#J5HeW) endpoint to create a node with your settings
2. Call the [/node](https://docs.voltage.cloud/voltage-api#1GhGq) endpoint every 5 or 10 seconds to check on the status of the node. It's first status is provisioning.
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](https://api.lightning.community/#v1-genseed) *on the node* to generate a seed for yourself.
4. Once you have a seed, you can initialize the wallet. Call the [/v1/initwallet](https://api.lightning.community/#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. After your node is initialized, you can encrypt the seed and macaroon to your password used for the node.
6. Use the [/node/upload\_seed ](https://docs.voltage.cloud/voltage-api#ch54M)and [/node/macaroon](https://docs.voltage.cloud/voltage-api#5uMDG) endpoints to backup your encrypted seed and macaroon. (Give the macaroon a name of admin)
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](https://docs.voltage.cloud/voltage-api#eNPIz) endpoint.

# Example

Here is an example script written in Node.js. This script would create a node, initialize it, and upload the encrypted backups.



```javascript
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"
let orgId = "YOUR_ORG_ID"

async function main() {
    console.log("Creating your node...")

    voltageHeaders = {
        'X-VOLTAGE-AUTH': apiKey,
    }

    // 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: [
              "1.2.3.4"
            ],
            wumbo: true
        }
    }
    response = await makeRequest('POST', 'https://api.voltage.cloud/organizations/' + orgId + '/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/organizations/' + orgId + '/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(
        Buffer.from(seedPhrase.join(",")).toString('base64'),
        nodePassword
    ).toString();

    encryptedMacaroon = crypto.AES.encrypt(
        nodeMacaroon,
        nodePassword
    ).toString();

    // Backup Seed and Macaroon
    let macBody = {
        node_id: nodeId,
        macaroon: encryptedMacaroon,
        name: "admin"
    }
    response = await makeRequest('POST', 'https://api.voltage.cloud/organizations/' + orgId + '/node/macaroon', macBody, voltageHeaders)
    console.log("Uploaded macaroon")

    let seedBackBody = {
        node_id: nodeId,
        seed: encryptedSeed
    }
    response = await makeRequest('POST', 'https://api.voltage.cloud/organizations/' + orgId + '/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) {
        axios({
            method: method,
            url: url,
            headers: headers,
            data: data

        }).then(
            (response) => {
                var result = response.data
                resolve(result)
            },
            (error) => {
                console.log(error)
                reject(error)
            }
        );
    });
}

main()
```

