Official Python SDK for LnBot — Bitcoin for AI Agents. Send and receive sats over Lightning with a few lines of code.
Project description
lnbot
The official Python SDK for LnBot — Bitcoin for AI Agents.
Give your AI agents, apps, and services access to Bitcoin over the Lightning Network. Create wallets, send and receive sats, and get real-time payment notifications.
from lnbot import LnBot
ln = LnBot(api_key="lnbot_...")
invoice = ln.invoices.create(amount=1000, memo="Coffee")
ln.payments.create(target="alice@ln.bot", amount=500)
LnBot also ships a TypeScript SDK, CLI, and MCP server.
Install
pip install lnbot
Quick start
1. Create a wallet
from lnbot import LnBot
ln = LnBot()
wallet = ln.wallets.create(name="my-agent")
print(wallet.primary_key) # your API key
print(wallet.address) # your Lightning address
print(wallet.recovery_passphrase) # back this up!
2. Receive sats
ln = LnBot(api_key=wallet.primary_key)
invoice = ln.invoices.create(amount=1000, memo="Payment for task #42")
print(invoice.bolt11)
3. Wait for payment
for event in ln.invoices.wait_for_settlement(invoice.number):
if event.event == "settled":
print("Paid!")
4. Send sats
ln.payments.create(target="alice@ln.bot", amount=500)
ln.payments.create(target="lnbc10u1p...")
5. Check balance
wallet = ln.wallets.current()
print(f"{wallet.available} sats available")
Async support
Every method has an async equivalent via AsyncLnBot:
from lnbot import AsyncLnBot
async with AsyncLnBot(api_key="lnbot_...") as ln:
wallet = await ln.wallets.current()
invoice = await ln.invoices.create(amount=1000)
async for event in ln.invoices.wait_for_settlement(invoice.number):
if event.event == "settled":
print("Paid!")
Error handling
from lnbot import LnBot, BadRequestError, UnauthorizedError, NotFoundError, ConflictError, LnBotError
try:
ln.payments.create(target="invalid", amount=100)
except BadRequestError:
... # 400
except UnauthorizedError:
... # 401
except NotFoundError:
... # 404
except ConflictError:
... # 409
except LnBotError as e:
print(e.status, e.body)
Configuration
from lnbot import LnBot
ln = LnBot(
api_key="lnbot_...", # or set LNBOT_API_KEY env var
base_url="https://api.ln.bot", # optional — this is the default
timeout=30.0, # optional — request timeout in seconds
)
The API key can also be provided via the LNBOT_API_KEY environment variable. If both are provided, the constructor argument takes precedence.
API reference
Wallets
| Method | Description |
|---|---|
ln.wallets.create(name=) |
Create a new wallet (no auth required) |
ln.wallets.current() |
Get current wallet info and balance |
ln.wallets.update(name=) |
Update wallet name |
Invoices
| Method | Description |
|---|---|
ln.invoices.create(amount=, memo=, reference=) |
Create a BOLT11 invoice |
ln.invoices.list(limit=, after=) |
List invoices |
ln.invoices.get(number) |
Get invoice by number |
ln.invoices.wait_for_settlement(number, timeout=) |
SSE stream for settlement/expiry |
Payments
| Method | Description |
|---|---|
ln.payments.create(target=, amount=, ...) |
Send sats to a Lightning address or BOLT11 invoice |
ln.payments.list(limit=, after=) |
List payments |
ln.payments.get(number) |
Get payment by number |
Addresses
| Method | Description |
|---|---|
ln.addresses.create(address=) |
Create a random or vanity Lightning address |
ln.addresses.list() |
List all addresses |
ln.addresses.delete(address) |
Delete an address |
ln.addresses.transfer(address, target_wallet_key=) |
Transfer address to another wallet |
Transactions
| Method | Description |
|---|---|
ln.transactions.list(limit=, after=) |
List credit and debit transactions |
Webhooks
| Method | Description |
|---|---|
ln.webhooks.create(url=) |
Register a webhook endpoint (max 10) |
ln.webhooks.list() |
List all webhooks |
ln.webhooks.delete(webhook_id) |
Delete a webhook |
API Keys
| Method | Description |
|---|---|
ln.keys.list() |
List API keys (metadata only) |
ln.keys.rotate(slot) |
Rotate a key (0 = primary, 1 = secondary) |
Backup & Restore
| Method | Description |
|---|---|
ln.backup.recovery() |
Generate 12-word BIP-39 recovery passphrase |
ln.backup.passkey_begin() |
Start passkey backup (WebAuthn) |
ln.backup.passkey_complete(session_id=, attestation=) |
Complete passkey backup |
ln.restore.recovery(passphrase=) |
Restore wallet with recovery passphrase |
ln.restore.passkey_begin() |
Start passkey restore (WebAuthn) |
ln.restore.passkey_complete(session_id=, assertion=) |
Complete passkey restore |
Requirements
- Python 3.10+
- Get your API key at ln.bot
Links
- ln.bot — website
- Documentation
- GitHub
- TypeScript SDK
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lnbot-0.1.1.tar.gz.
File metadata
- Download URL: lnbot-0.1.1.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
530bbe04ed3252138ac3269342e4776ac4a94b45492afd81949fb4d8079a9db4
|
|
| MD5 |
0fa0dc3afd30d70cde6739c14b479b59
|
|
| BLAKE2b-256 |
16b32a51cdd029def3b556ce7e222eccf8277d44ef6fbd0ccef029dd7be419f0
|
File details
Details for the file lnbot-0.1.1-py3-none-any.whl.
File metadata
- Download URL: lnbot-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
907fdaa75c72cae15d55de2d8ac7693b50888b474b414798a8aa35ee006c70f3
|
|
| MD5 |
636a72ab95d98c81a12a95719a8428fa
|
|
| BLAKE2b-256 |
35609c4fb69cf883a17a016b383ec3be382cebf6f4420bbb65581a6876766d6c
|