OpenNode vs ln.bot for Lightning APIs
OpenNode helps registered businesses accept bitcoin and settle in US dollars. ln.bot gives software and AI agents Lightning wallets that receive and spend.
OpenNode is a bitcoin payment processor for registered businesses. It gives a merchant hosted checkout pages, store plugins and invoices, prices charges in dollars or other currencies, and can convert what comes in to US dollars for a US bank account. ln.bot is a hosted wallet API for software that keeps a balance of its own and spends it: an AI agent paying for API calls, a service paying another service, a platform that gives each user or agent a wallet.
Checked on 23 October 2026: the OpenNode details below come from OpenNode's site, help centre and developer docs, linked where they appear.
Which one fits
- Customers pay your business for goods or services, and you want dollars in the bank: OpenNode.
- Your code pays for things, or each of many agents needs a balance of its own: ln.bot.
- Both happen in one product: customers pay through OpenNode, and the agents behind the product spend from ln.bot wallets. Moving bitcoin between the two is an ordinary Lightning payment.
What OpenNode does
OpenNode raised a $20M Series A in 2022, led by Kingsway Capital with Twitter and Tim Draper taking part (The Block), and lists Substack and Fold among its customers. It is available to registered businesses only: a business verifies its registration and address, and its main owners verify their identity.
What a merchant gets:
- Hosted checkout pages, payment buttons and links, and invoices for customers.
- Plugins for Shopify, BigCommerce, WooCommerce, Magento, PrestaShop and OpenCart.
- Charges priced in a fiat currency, which OpenNode turns into a bitcoin amount at the current rate, payable over Lightning or on-chain.
- Conversion to US dollars, with settlement and bank transfers, for US-based businesses.
- Official Node.js and PHP libraries and a development environment on Bitcoin's testnet.
On fees, OpenNode gives 1% as its typical processing fee for payments and payouts, with no setup or monthly fees. Lightning withdrawals are free, and on-demand on-chain withdrawals cost 1% (as of October 2026).
A charge and an invoice
Both APIs create a Lightning payment request in one call. With OpenNode's Node.js library, priced in dollars:
import opennode from "opennode";
opennode.setCredentials(process.env.OPENNODE_API_KEY, "live");
const charge = await opennode.createCharge({
amount: 1.5,
currency: "USD", // without a currency, the amount is in satoshis
description: "Report #42",
callback_url: "https://example.com/webhooks/opennode",
});With ln.bot, amounts are always integers in bitcoin's smallest unit, so this invoice is for ₿1,000:
import { LnBot } from "@lnbot/sdk";
const ln = new LnBot({ apiKey: process.env.LNBOT_USER_KEY }); // uk_...
const invoice = await ln.wallet("wal_...").invoices.create({
amount: 1000,
memo: "Report #42",
});
console.log(invoice.bolt11);OpenNode tells you about payments through the charge's callback_url. ln.bot sends webhooks and also streams events, so a worker can wait on an invoice without running a web server.
Spending from code
OpenNode sends bitcoin out as withdrawals, on-chain or over Lightning, and a Lightning withdrawal needs a BOLT11 invoice from the recipient. That fits moving a merchant's balance somewhere else.
ln.bot is built for code that spends as it goes. A payment can go to a Lightning address, an LNURL or an invoice, an idempotency key makes a retry safe, and a payment between two ln.bot wallets settles in under a second:
const w = ln.wallet("wal_...");
const payment = await w.payments.create({
target: "r7vq3np@ln.bot", // a Lightning address, an LNURL or a BOLT11 invoice
amount: 500,
idempotencyKey: "job-1187", // a retry with the same key can't pay twice
});
console.log(payment.status); // "processing" at first, then "settled" or "failed"For APIs that charge per request with L402, @lnbot/l402 pays the challenge and retries the request, within limits you set. It checks the amount in the invoice itself, not the price the server announces:
import { l402, LnBot } from "@lnbot/l402";
const ln = new LnBot({ apiKey: process.env.LNBOT_USER_KEY });
const api = l402.client(ln, {
walletId: "wal_...",
maxPrice: 100, // refuse any single request above ₿100
budgetSats: 5_000, // and stop after ₿5,000 in a day
budgetPeriod: "day",
});
const forecast = await api.get("https://api.example.com/premium/forecast");The budget is kept in memory, so it resets when the process restarts. The pay-per-call guide covers the server side.
One account, or a wallet per agent
An OpenNode API key belongs to one business account. For platforms, OpenNode documents managed accounts: full OpenNode accounts that a platform creates for its users once OpenNode support enables the feature for its API key, with an endpoint that creates an identity-verification link for each user.
On ln.bot a wallet is an API call, with no identity check and no limit on how many. Each one gets a random Lightning address, and a wallet key reaches that wallet and no other:
const { walletId, address } = await ln.wallets.create();
const { key } = await ln.wallet(walletId).key.create(); // wk_..., this wallet only
console.log(address); // a random address, such as x4k7m2@ln.botGive an agent its wallet key, or connect its MCP client to https://api.ln.bot/v1/wallets/{walletId}/mcp (see the MCP docs). The MCP tools can spend whatever the wallet holds, so put in only what the agent may spend.
Side by side
| OpenNode | ln.bot | |
|---|---|---|
| Built for | Businesses accepting bitcoin | Software that receives and spends |
| Who can sign up | Registered businesses, after verification | Anyone, by API call, with no identity check |
| Receiving | Charges priced in satoshis or fiat, over Lightning or on-chain | Invoices priced in ₿, over Lightning |
| Lightning addresses | None in the current API reference | One per wallet, ₿1 to ₿1,000,000 per payment |
| Sending | Withdrawals to a BOLT11 invoice or on-chain | Payments to addresses, LNURLs and invoices |
| Separate balances | One account per API key; managed accounts through support | Wallets created by API |
| Fiat | Conversion and US bank settlement in USD | None |
| Checkout and store plugins | Yes | None |
| MCP server and L402 | None found | MCP server per wallet; L402 client and middleware |
| Official libraries | Node.js, PHP | TypeScript, Python, Go, Rust, C#, and a CLI |
| Test environment | Testnet | None: wallets hold real bitcoin |
| Fees (October 2026) | 1% typical processing; Lightning withdrawals free | Receiving free; paying out 0.25% (minimum ₿1) plus a network fee of 0.25% and routing; free between ln.bot wallets |
What ln.bot doesn't do
ln.bot has nothing for a merchant's checkout: there are no payment pages, store plugins or invoice templates. It never touches fiat, so prices can't be set in dollars and nothing settles to a bank. It works on Lightning only, without on-chain addresses, and it has no test network, so test with small amounts.
It is also custodial. ln.bot runs the Lightning nodes and the channel liquidity, and balances sit on ln.bot's nodes, which makes a wallet an operational balance for spending rather than a place for savings.
FAQ
Is OpenNode good for developers?
For merchant payments, yes. OpenNode has a REST API with official Node.js and PHP libraries, a testnet development environment, webhooks, hosted checkout and store plugins. It is built for businesses that take payments, so it has no wallets per user or agent, no MCP server and no L402 support.
What is the OpenNode transaction fee?
As of October 2026, OpenNode's help centre gives 1% as the typical processing fee for payments and payouts, with no setup or monthly fees. Lightning withdrawals are free, on-demand on-chain withdrawals cost 1%, conversion is free and bank transfer fees vary. ln.bot charges nothing to receive and, to pay out over Lightning, 0.25% (minimum ₿1) plus the network fee, another 0.25% and routing; transfers between ln.bot wallets are free.
Can OpenNode create wallets programmatically?
Not by default. An OpenNode API key belongs to one business account. For platforms, OpenNode documents managed accounts: full OpenNode accounts created for your users once OpenNode support enables the feature, with an endpoint for verifying each user's identity. ln.bot creates a wallet with one API call, with no identity check and no limit on how many.
Does OpenNode support L402?
We found no L402 support in OpenNode's developer docs, GitHub or npm packages as of October 2026. ln.bot creates, pays and verifies L402 challenges through its SDKs and MCP server, and has paywall middleware for Express and ASP.NET Core.
What does an AI agent need from a Lightning API?
A wallet of its own that can be created by API, a key that reaches only that wallet, spending limited to what the wallet holds or to a client budget, an MCP server, and a way to pay L402 APIs. ln.bot provides each of these. OpenNode is built for businesses accepting payments rather than for agents that spend.