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:
| Step | Why it must run in the browser |
|---|---|
| Derive the master key | The user's password never leaves the client; the master key is derived in the browser via Argon2id. |
| Decrypt the team symmetric key | Decryption 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 storage | Macaroons (or, for Third Party Hosted, the macaroon you submit) are encrypted with the team symmetric key in the browser before being uploaded. |
| Store encrypted credentials | team.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:
| Concern | API surface |
|---|---|
| Read node state | node.deployed_node - polling, dashboards |
| Balances and revenue | user.liquidity_provider - any frequency |
| Withdrawals | node.withdrawal.increase_withdrawal_target - requires the password hash, which must be derived client-side and forwarded to your backend |
| Asset configuration | node.asset.disable_taproot_assets, set_asset_config - safe to call from a backend |
| Direct LND access | LND 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
CREATEDfor 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
- Monitor earnings
- Withdraw funds
- Manage Taproot Assets
- Node Lifecycle - state-by-state reference
Security
Account security guidance for Rails users — protecting credentials, 2FA, withdrawal limits, and best practices for keeping your sats safe.
Monitor Earnings
Track Rails Yield node performance — balances, routing and liquidity revenue, charts, and transaction history — via the dashboard and the GraphQL API.