Deploy a Node

Why Rails Yield node deployment runs in the dashboard — the client-side cryptography it depends on — and where the API takes over once a node is active.

Rails Yield node deployment runs in the dashboard at rails.amboss.tech. The bring-up sequence relies on browser-side cryptography that a backend can't safely reproduce, so there is no headless API path for creating a node. Once a node is ACTIVE, the rest of the lifecycle (monitoring, withdrawals, asset configuration) is fully API-driven.

Why the dashboard

Both Fully Managed and Third Party Hosted deployments require operations the API cannot do alone:

StepWhy it must run in the browser
Derive the master keyThe user's password never leaves the client; the master key is derived in the browser via Argon2id.
Decrypt the team symmetric keyDecryption is performed client-side using the master key.
Bake LND macaroons (Fully Managed)After provisioning, the browser calls the node's Voltage-hosted RPCs to bake admin and management macaroons.
Encrypt macaroons before storageMacaroons (or, for Third Party Hosted, the macaroon you submit) are encrypted with the team symmetric key in the browser before being uploaded.
Store encrypted credentialsteam.credentials.store_admin and store_management mutations expect already-encrypted payloads.

See Security for the full key derivation and encryption model.

The node.deploy and node.connect GraphQL mutations are documented in the Nodes API reference for completeness, but calling them from a backend script will leave the node in WAITING_FOR_CREDENTIALS because the encrypted-macaroon storage step never runs. Use the dashboard.

Deployment flow

Steps 1, 3, 4, and 5 are interleaved inside the dashboard's onboarding flow at /lp/onboarding. The browser orchestrates them as a single transaction; you don't observe them as individual API calls.

Walkthrough (dashboard)

Sign in and pick a setup

Choose Fully Managed, Third Party Hosted, or Intelligence API at rails.amboss.tech. See Setup Options for the trade-offs.

Click "Create Earn Node"

The dashboard triggers node.deploy(type: LP) (Fully Managed) or prompts you for LND/Litd credentials and calls node.connect (Third Party Hosted). It immediately follows up with the client-side credential preparation and storage.

Wait for WAITING_FOR_DEPOSIT

The dashboard polls node.deployed_node until the credential dance is complete. Typical timing: under a minute for Third Party Hosted, a few minutes for Fully Managed (Voltage provisioning + macaroon baking).

Fund the node

The dashboard displays a deposit address. Send Bitcoin from your wallet. After one confirmation, the node transitions to WAITING_FOR_ACTIVATION.

Activate

Click "Activate" and complete the Stripe checkout if prompted. The node flips to ACTIVE once Stripe posts the subscription webhook (skipped for team accounts and non-mainnet networks).

Where the API takes over

Once the node is ACTIVE, your backend can drive everything else:

ConcernAPI surface
Read node statenode.deployed_node - polling, dashboards
Balances and revenueuser.liquidity_provider - any frequency
Withdrawalsnode.withdrawal.increase_withdrawal_target - requires the password hash, which must be derived client-side and forwarded to your backend
Asset configurationnode.asset.disable_taproot_assets, set_asset_config - safe to call from a backend
Direct LND accessLND API - using the macaroon returned by deployed_node.credentials (master-account only)

node.activate and node.change_settings are also backend-callable in principle (no client-side crypto required), but activate returns a Stripe URL that ultimately needs a user redirect.

Operations that take a password_hash (deactivate, withdraw) require the hash to be derived in the browser from the master password. For automated withdrawal flows, prompt the user, derive the hash client-side, and forward only the hash to your backend.

Common reasons a node stalls

  • Stuck at CREATED for more than a few minutes (Fully Managed) - Voltage provisioning is delayed. Check the dashboard for an error or contact support.
  • Stuck at WAITING_FOR_CREDENTIALS - The browser-side credential storage step failed. Reopen the dashboard and complete the setup flow; it will resume from where it left off.
  • Stuck at WAITING_FOR_DEPOSIT - On-chain deposit not yet confirmed. Check on a block explorer.
  • Stuck at WAITING_FOR_ACTIVATION - Stripe checkout was opened but not completed. Re-open the dashboard to get a fresh checkout URL.

Next steps