@@ -11,9 +11,10 @@ Give your AI agents, apps, and services access to Bitcoin over the Lightning Net
1111using LnBot ;
1212using LnBot .Models ;
1313
14- using var client = new LnBotClient (" key_..." );
14+ using var client = new LnBotClient (" uk_..." );
15+ var w = client .Wallet (" wal_..." );
1516
16- var invoice = await client .Invoices .CreateAsync (new CreateInvoiceRequest
17+ var invoice = await w .Invoices .CreateAsync (new CreateInvoiceRequest
1718{
1819 Amount = 1000 ,
1920 Memo = " Coffee" ,
@@ -34,27 +35,31 @@ dotnet add package LnBot
3435
3536## Quick start
3637
37- ### Create a wallet
38+ ### Register an account
3839
3940``` csharp
4041using LnBot ;
41- using LnBot .Models ;
4242
4343using var client = new LnBotClient ();
44+ var account = await client .RegisterAsync ();
45+ Console .WriteLine (account .PrimaryKey );
46+ Console .WriteLine (account .RecoveryPassphrase );
47+ ```
4448
45- var wallet = await client .Wallets .CreateAsync (new CreateWalletRequest
46- {
47- Name = " my-agent" ,
48- });
49- Console .WriteLine (wallet .PrimaryKey );
49+ ### Create a wallet
50+
51+ ``` csharp
52+ using var client = new LnBotClient (account .PrimaryKey );
53+ var wallet = await client .Wallets .CreateAsync ();
54+ Console .WriteLine (wallet .WalletId );
5055```
5156
5257### Receive sats
5358
5459``` csharp
55- using var client = new LnBotClient (wallet .PrimaryKey );
60+ var w = client . Wallet (wallet .WalletId );
5661
57- var invoice = await client .Invoices .CreateAsync (new CreateInvoiceRequest
62+ var invoice = await w .Invoices .CreateAsync (new CreateInvoiceRequest
5863{
5964 Amount = 1000 ,
6065 Memo = " Payment for task #42" ,
@@ -65,7 +70,7 @@ Console.WriteLine(invoice.Bolt11);
6570### Wait for payment (SSE)
6671
6772``` csharp
68- await foreach (var evt in client .Invoices .WatchAsync (invoice .Number ))
73+ await foreach (var evt in w .Invoices .WatchAsync (invoice .Number ))
6974{
7075 if (evt .Event == " settled" )
7176 {
@@ -78,7 +83,7 @@ await foreach (var evt in client.Invoices.WatchAsync(invoice.Number))
7883### Send sats
7984
8085``` csharp
81- var payment = await client .Payments .CreateAsync (new CreatePaymentRequest
86+ var payment = await w .Payments .CreateAsync (new CreatePaymentRequest
8287{
8388 Target = " alice@ln.bot" ,
8489 Amount = 500 ,
@@ -88,8 +93,42 @@ var payment = await client.Payments.CreateAsync(new CreatePaymentRequest
8893### Check balance
8994
9095``` csharp
91- var current = await client .Wallets .CurrentAsync ();
92- Console .WriteLine ($" {current .Available } sats available" );
96+ var info = await w .GetAsync ();
97+ Console .WriteLine ($" {info .Available } sats available" );
98+ ```
99+
100+ ---
101+
102+ ## Wallet-scoped API
103+
104+ All wallet operations go through a ` WalletScope ` obtained via ` client.Wallet(walletId) ` :
105+
106+ ``` csharp
107+ var w = client .Wallet (" wal_abc123" );
108+
109+ // Wallet info
110+ var info = await w .GetAsync ();
111+ await w .UpdateAsync (new UpdateWalletRequest { Name = " production" });
112+
113+ // Sub-resources
114+ w .Key // Wallet key management (wk_ keys)
115+ w .Invoices // Create, list, get, watch invoices
116+ w .Payments // Send, list, get, watch, resolve payments
117+ w .Addresses // Create, list, delete, transfer Lightning addresses
118+ w .Transactions // List transaction history
119+ w .Webhooks // Create, list, delete webhook endpoints
120+ w .Events // Real-time SSE event stream
121+ w .L402 // L402 paywall authentication
122+ ```
123+
124+ Account-level operations stay on the client:
125+
126+ ``` csharp
127+ await client .RegisterAsync (); // Register new account
128+ await client .MeAsync (); // Get authenticated identity
129+ await client .Wallets .CreateAsync (); // Create wallet
130+ await client .Wallets .ListAsync (); // List wallets
131+ await client .Keys .RotateAsync (0 ); // Rotate account key
93132```
94133
95134---
@@ -101,7 +140,7 @@ using LnBot.Exceptions;
101140
102141try
103142{
104- var wallet = await client . Wallets . CurrentAsync ();
143+ var info = await w . GetAsync ();
105144}
106145catch (NotFoundException ex )
107146{
@@ -124,7 +163,7 @@ catch (LnBotException ex)
124163## Configuration
125164
126165``` csharp
127- using var client = new LnBotClient (" key_ ..." , new LnBotClientOptions
166+ using var client = new LnBotClient (" uk_ ..." , new LnBotClientOptions
128167{
129168 BaseUrl = " https://api.ln.bot" ,
130169 Timeout = TimeSpan .FromSeconds (30 ),
@@ -135,7 +174,7 @@ Or bring your own `HttpClient`:
135174
136175``` csharp
137176var httpClient = new HttpClient ();
138- using var client = new LnBotClient (" key_ ..." , new LnBotClientOptions
177+ using var client = new LnBotClient (" uk_ ..." , new LnBotClientOptions
139178{
140179 HttpClient = httpClient ,
141180});
@@ -146,22 +185,24 @@ using var client = new LnBotClient("key_...", new LnBotClientOptions
146185## L402 paywalls
147186
148187``` csharp
188+ var w = client .Wallet (" wal_..." );
189+
149190// Create a challenge (server side)
150- var challenge = await client .L402 .CreateChallengeAsync (new CreateL402ChallengeRequest
191+ var challenge = await w .L402 .CreateChallengeAsync (new CreateL402ChallengeRequest
151192{
152193 Amount = 100 ,
153194 Description = " API access" ,
154195 ExpirySeconds = 3600 ,
155196});
156197
157198// Pay the challenge (client side)
158- var result = await client .L402 .PayAsync (new PayL402Request
199+ var result = await w .L402 .PayAsync (new PayL402Request
159200{
160201 WwwAuthenticate = challenge .WwwAuthenticate ,
161202});
162203
163204// Verify a token (server side, stateless)
164- var v = await client .L402 .VerifyAsync (new VerifyL402Request
205+ var v = await w .L402 .VerifyAsync (new VerifyL402Request
165206{
166207 Authorization = result .Authorization ! ,
167208});
@@ -172,6 +213,7 @@ var v = await client.L402.VerifyAsync(new VerifyL402Request
172213## Features
173214
174215- ** Zero dependencies** — ` System.Net.Http ` + ` System.Text.Json ` only
216+ - ** Wallet-scoped API** — ` client.Wallet(id) ` returns a typed scope with all sub-resources
175217- ** Async-first** — every method returns ` Task<T> ` with ` CancellationToken ` support
176218- ** Typed exceptions** — ` BadRequestException ` , ` NotFoundException ` , ` ConflictException ` , ` UnauthorizedException ` , ` ForbiddenException `
177219- ** SSE support** — ` WatchAsync ` returns ` IAsyncEnumerable<T> ` for real-time events
0 commit comments