<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>lncurl.lol Blog</title>
    <link>https://lncurl.lol/blog</link>
    <description>Articles about Bitcoin lightning, Nostr Wallet Connect, and AI agents.</description>
    <language>en</language>
    <lastBuildDate>Sun, 03 May 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://lncurl.lol/feed.xml" rel="self" type="application/rss+xml" />

  <item>
    <title>Weather Questions: 33 Sats per Forecast Over Lightning + MPP</title>
    <link>https://lncurl.lol/blog/2026-05-03-weather-questions-mpp-lightning-oracle</link>
    <description>Ask a weather oracle when it will rain, snow, or hit a high — and pay 33 sats per answer over the bitcoin lightning network using the MPP protocol.</description>
    <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-05-03-weather-questions-mpp-lightning-oracle</guid>
    <content:encoded><![CDATA[<p>&quot;Will it rain in Las Vegas this week?&quot; is the kind of question a human asks a phone. An agent has to ask an API — and that usually means an account, a key, a free tier, a rate ceiling, a credit card on file. Or 33 sats per question, no questions asked.</p>
<p>Weather Questions is a pay-per-question oracle by @matbalez: four endpoints, four short factual questions, 33 sats each over the bitcoin lightning network. No signup. No key. No subscription. The interesting part isn&#39;t the price. It&#39;s the protocol underneath.</p>
<h2>A weather oracle that takes 33 sats per question</h2>
<p>The service answers four questions per location:</p>
<ul>
<li><code>when-will-it-rain</code> — minutes until the next rain in the next 168 hours, or <code>null</code> and a <code>noRainExpected: true</code> flag</li>
<li><code>when-will-it-snow</code> — same idea for snow</li>
<li><code>what-will-the-high-be</code> — high temperature for <code>today</code>, <code>tomorrow</code>, or up to 7 days out</li>
<li><code>what-will-the-low-be</code> — low temperature with the same window</li>
</ul>
<p>Locations resolve via Open-Meteo geocoding — pass <code>?location=Las%20Vegas</code> or raw <code>?lat=&amp;lon=</code>. Network is lightning mainnet only. Invoices expire after 10 minutes and each preimage is single-use.</p>
<p>I tested all four endpoints from the same Alby CLI, location Las Vegas, on 2026-05-03:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch --max-amount 100 \
  &quot;https://weather-questions.replit.app/api/when-will-it-rain?location=Las%20Vegas&quot;
# {&quot;minutesUntilRain&quot;:null,&quot;noRainExpected&quot;:true,&quot;lookaheadHours&quot;:168,
#  &quot;location&quot;:&quot;Las Vegas, Nevada, United States&quot;,&quot;lat&quot;:36.17497,&quot;lon&quot;:-115.13722}

npx -y @getalby/cli@0.6.1 fetch --max-amount 100 \
  &quot;https://weather-questions.replit.app/api/when-will-it-snow?location=Las%20Vegas&quot;
# {&quot;minutesUntilSnow&quot;:null,&quot;noSnowExpected&quot;:true,&quot;lookaheadHours&quot;:168,...}

npx -y @getalby/cli@0.6.1 fetch --max-amount 100 \
  &quot;https://weather-questions.replit.app/api/what-will-the-high-be?location=Las%20Vegas&amp;when=tomorrow&quot;
# {&quot;highC&quot;:24.7,&quot;unit&quot;:&quot;celsius&quot;,&quot;when&quot;:&quot;tomorrow&quot;,&quot;dayOffset&quot;:1,...}

npx -y @getalby/cli@0.6.1 fetch --max-amount 100 \
  &quot;https://weather-questions.replit.app/api/what-will-the-low-be?location=Las%20Vegas&amp;when=today&quot;
# {&quot;lowC&quot;:15.4,&quot;unit&quot;:&quot;celsius&quot;,&quot;when&quot;:&quot;today&quot;,&quot;dayOffset&quot;:0,...}
</code></pre>
<p>Four calls. Four first-try successes. 132 sats total. On the day I tested, Las Vegas had no rain or snow forecast for the next 168 hours, tomorrow&#39;s high was 24.7 °C, today&#39;s low was 15.4 °C.</p>
<h2>Lightning over MPP — early in the wild</h2>
<p>The thing protecting these endpoints isn&#39;t L402 or x402. It&#39;s <a href="https://mpp.dev" target="_blank" rel="noopener">MPP</a> — the Machine Payments Protocol from Tempo and Stripe — best known so far as a way to charge for APIs in stablecoins on the Tempo blockchain. The first production MPP service to take payment over lightning was <a href="https://ppq.ai" target="_blank" rel="noopener">PPQ.ai</a>; Weather Questions is one of the early follow-ups, and the first oracle-style service to do it.</p>
<p>That sounds like a footnote. It isn&#39;t. MPP defines a <code>method</code> field on its 402 challenge — <code>lightning</code>, <code>tempo-usdc</code>, and so on — and what Mat is doing is wiring up the <code>lightning</code> binding end to end on a real paid endpoint. Quietly, he&#39;s also splitting his receiving across two unrelated lightning wallets — Spark on some endpoints, Lexe on others — to prove the lightning method has no Lightspark-specific dependency. The agent never sees this. It just sees a BOLT11 invoice and pays it.</p>
<p>(&quot;MPP&quot; the protocol is not &quot;Multi-Path Payments,&quot; the lightning feature with the unfortunately identical acronym. Different layer, different thing.)</p>
<h2>The protocol — request, pay, replay</h2>
<p>MPP is a three-step flow. Send a request unauthenticated. Get a 402 with a challenge. Replay with a credential that proves you paid.</p>
<p><strong>Step 1.</strong> Send the request:</p>
<pre><code class="language-http">GET /api/when-will-it-rain?location=Las%20Vegas
</code></pre>
<p><strong>Step 2.</strong> Server responds with a <code>WWW-Authenticate: Payment</code> header:</p>
<pre><code class="language-http">HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id=&quot;&lt;id&gt;&quot;, realm=&quot;&lt;realm&gt;&quot;, method=&quot;lightning&quot;, intent=&quot;charge&quot;, request=&quot;&lt;request-b64&gt;&quot;, description=&quot;&lt;description&gt;&quot;, expires=&quot;&lt;iso-8601&gt;&quot;
</code></pre>
<p>The <code>request</code> field is base64url-encoded JSON. Decode it and you get:</p>
<pre><code class="language-json">{
  &quot;amount&quot;: &quot;33&quot;,
  &quot;currency&quot;: &quot;BTC&quot;,
  &quot;methodDetails&quot;: {
    &quot;invoice&quot;: &quot;lnbc330n1...&quot;,
    &quot;network&quot;: &quot;mainnet&quot;,
    &quot;paymentHash&quot;: &quot;&lt;sha256-of-preimage&gt;&quot;
  }
}
</code></pre>
<p>Pay the BOLT11. Your wallet returns a 64-char hex preimage on settlement.</p>
<p><strong>Step 3.</strong> Build a credential that echoes every challenge field back verbatim and adds the preimage:</p>
<pre><code class="language-json">{
  &quot;challenge&quot;: {
    &quot;id&quot;:          &quot;&lt;id from WWW-Authenticate&gt;&quot;,
    &quot;realm&quot;:       &quot;&lt;realm from WWW-Authenticate&gt;&quot;,
    &quot;method&quot;:      &quot;lightning&quot;,
    &quot;intent&quot;:      &quot;charge&quot;,
    &quot;request&quot;:     &quot;&lt;request-b64 from WWW-Authenticate, unchanged&gt;&quot;,
    &quot;description&quot;: &quot;&lt;description from WWW-Authenticate&gt;&quot;,
    &quot;expires&quot;:     &quot;&lt;expires from WWW-Authenticate&gt;&quot;
  },
  &quot;payload&quot;: { &quot;preimage&quot;: &quot;&lt;64-char hex preimage&gt;&quot; }
}
</code></pre>
<p>base64url-encode it (no padding) and replay the original request with <code>Authorization: Payment &lt;encoded&gt;</code>. The server checks <code>sha256(preimage) == paymentHash</code> and serves the response.</p>
<p>That is the whole protocol on the wire. It is not L402. It is not x402. It is MPP — and a different protocol authority is now in the 402 game.</p>
<h2>The agent doesn&#39;t care which protocol it is</h2>
<p>Look back at the four <code>npx</code> commands above. Nothing mentions MPP. Nothing mentions a challenge, a preimage, a request field, a credential. The CLI auto-detected the 402, parsed the <code>WWW-Authenticate: Payment</code> header, decoded the base64url request, paid the BOLT11, built the credential JSON, encoded it, and replayed — in one call.</p>
<p>That same <code>fetch</code> command also auto-detects L402 and x402 endpoints. The agent&#39;s surface is the same across all three. The wire format is not.</p>
<p>Three competing 402 dialects exist right now. From the operator&#39;s side the choice still matters — different specs, different settlement infra, different tooling. From the agent&#39;s side the choice has already collapsed. A wallet and a fetch command pay all three.</p>
<p>To give your agent the same capability, the Alby payments skill handles all three:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<h2>What this unlocks</h2>
<p>The shape of Weather Questions is the shape of any structured-data oracle: small factual questions, deterministic answers, micro-priced. Sports stats. Flight prices. Air quality. Traffic. Satellite tiles. Market data. These don&#39;t exist as agent-native APIs yet because the old billing model — account, contract, monthly minimum — doesn&#39;t match the access pattern: one query, right now, from a script with no human. A 402 over lightning matches that access pattern exactly.</p>
<h2>Conclusion</h2>
<p>The web is quietly growing a second pricing layer where the request itself carries the payment. MPP joining lightning is one more brick in that layer — and it lands at the same door as L402 and x402, on the agent&#39;s side. Open a terminal, run the fetch command above, and you&#39;ve used a weather oracle that has never heard of you and never will.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Jamie Pull Agent: Multi-Tool Podcast Search for $0.10 a Call</title>
    <link>https://lncurl.lol/blog/2026-04-23-jamie-pull-agent-multi-tool-podcast-search</link>
    <description>Pull That Up Jamie wrapped its L402 podcast-search primitives in an agent. One plain-English request, one lightning payment, and it plans and calls the primitives for you.</description>
    <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-23-jamie-pull-agent-multi-tool-podcast-search</guid>
    <content:encoded><![CDATA[<p>Ask the agent a question in plain English. It picks the tools, calls them, clusters the results, and hands back a readable answer with inline clips you can play. One payment, one response.</p>
<p>Two weeks ago we <a href="/blog/2026-04-12-search-4m-podcasts-powered-by-lightning">tested Pull That Up Jamie&#39;s podcast-search primitives</a> — discovery, quote search, chapter search, on-demand transcription, each metered per call. They have now built an agent on top of those primitives. The new endpoint is <code>POST /api/pull</code>. Flat $0.10 per call, paid over L402.</p>
<h2>One prompt, one payment, one answer</h2>
<p>We sent it a research query:</p>
<pre><code class="language-bash">curl -s -D- -X POST \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;message&quot;:&quot;Find recent mentions of Alby Hub in podcasts&quot;}&#39; \
  &quot;https://www.pullthatupjamie.ai/api/pull&quot;
</code></pre>
<p>That probe returns a 402 challenge with a default invoice of 148 sats.</p>
<p>Pay and retry using the Alby CLI:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch --max-amount 200 \
  -X POST \
  -H &#39;{&quot;Content-Type&quot;:&quot;application/json&quot;}&#39; \
  -b &#39;{&quot;message&quot;:&quot;Find recent mentions of Alby Hub in podcasts&quot;}&#39; \
  &quot;https://www.pullthatupjamie.ai/api/pull&quot;
</code></pre>
<p>One note on the CLI: <code>alby fetch</code> wraps the upstream body as <code>{&quot;content&quot;: &quot;&lt;json-string&gt;&quot;}</code>. Unwrap and <code>JSON.parse()</code> the inner field to get the response.</p>
<p>The wire delta came in at 150 sats — the 148-sat invoice plus 2 sats of routing. At 77,908 USD/BTC that is ~$0.115 paid, $0.10 of which was consumed by the call itself.</p>
<p>The response, unwrapped:</p>
<pre><code class="language-json">{
  &quot;sessionId&quot;: &quot;agent-1776950225809-ynfwvz&quot;,
  &quot;text&quot;: &quot;... markdown answer with {{clip:&lt;pineconeId&gt;}} tokens ...&quot;,
  &quot;suggestedActions&quot;: [],
  &quot;session&quot;: null
}
</code></pre>
<h2>Three clips, two shows, one synthesis</h2>
<p>The agent returned three clips from two different shows, clustered thematically with contextual prose between them. This cross-show synthesis is the value the agent layer adds on top of the raw primitives — you get a curated answer, not a result list.</p>
<h3>1. LINUX Unplugged — February</h3>
<p>The first clip — token <code>{{clip:61d01c70-0ce3-499a-8605-784dabcaadb0_p177}}</code> (<a href="https://cascdr-chads-stay-winning.nyc3.cdn.digitaloceanspaces.com/575694/61d01c70-0ce3-499a-8605-784dabcaadb0.mp3#t=4605" target="_blank" rel="noopener">open clip</a> · <a href="https://www.pullthatupjamie.ai/api/get-hierarchy?paragraphId=61d01c70-0ce3-499a-8605-784dabcaadb0_p177" target="_blank" rel="noopener">open JSON</a>) — is a show host pitching Alby Hub as the self-hosted path:</p>
<blockquote>
<p>&quot;If you would like to boost the show, Fountain FM makes it really easy. They&#39;re making it easier and easier with every single release. They host the entire infrastructure for you. Or, like our baller, you can go get Albie Hub and plumb the self-hosted way yourself and use the entire free software stack from end to end.&quot;</p>
</blockquote>
<h3>2. LINUX Unplugged episode 659 — March 23</h3>
<p>The second clip — token <code>{{clip:9ccfe1b0-8b6f-4ac7-b50a-477842808697_p174}}</code> (<a href="https://cascdr-chads-stay-winning.nyc3.cdn.digitaloceanspaces.com/575694/9ccfe1b0-8b6f-4ac7-b50a-477842808697.mp3#t=2479.995" target="_blank" rel="noopener">open clip</a> · <a href="https://www.pullthatupjamie.ai/api/get-hierarchy?paragraphId=9ccfe1b0-8b6f-4ac7-b50a-477842808697_p174" target="_blank" rel="noopener">open JSON</a>) — is the same show a month later, congratulating a listener:</p>
<blockquote>
<p>&quot;By the way. Congratulations on self hosting in Albi Hub. It&#39;s a big step, and we&#39;re proud of you.&quot;</p>
</blockquote>
<h3>3. Trust Revolution — March</h3>
<p>The third clip — token <code>{{clip:6c22583d-7678-488e-b907-461a737d294a_p45}}</code> (<a href="https://cascdr-chads-stay-winning.nyc3.cdn.digitaloceanspaces.com/7246395/6c22583d-7678-488e-b907-461a737d294a.mp3#t=1507.187" target="_blank" rel="noopener">open clip</a> · <a href="https://www.pullthatupjamie.ai/api/get-hierarchy?paragraphId=6c22583d-7678-488e-b907-461a737d294a_p45" target="_blank" rel="noopener">open JSON</a>) — is the meatiest. The speaker is me, on the Trust Revolution podcast, walking through the actual friction points:</p>
<blockquote>
<p>&quot;Maybe getting AlbiHub up and running is a lot less painful than KYC for a lot of people. The main points we have right now is one, you have to self-host, and we have a cloud hosting solution, which is super easy like deploy with one click but it comes with a monthly fee. Either way that&#39;s one barrier and the other one is opening your first channel which so we have different options like if you buy a yearly hosted plan we&#39;ll open your first channel for free but if you self-host normally you have to pay to open the channel.&quot;</p>
</blockquote>
<p>Notice the phonetic variants: &quot;Albie Hub&quot;, &quot;Albi Hub&quot;, &quot;AlbiHub&quot;. The transcripts preserved how the hosts actually said the name, and the agent didn&#39;t over-correct them on the way out. That is the right call. If you are building a quote surface you want the spoken word, not a sanitised version of it. An agent that silently rewrites &quot;Albi Hub&quot; to &quot;Alby Hub&quot; is an agent that will eventually rewrite the thing you actually care about.</p>
<p>The two links beside each clip above are how we turned the agent&#39;s <code>{{clip:&lt;pineconeId&gt;}}</code> tokens into something a reader can click. Take the id inside the token — e.g. <code>61d01c70-0ce3-499a-8605-784dabcaadb0_p177</code> — and drop it into the unauthenticated hierarchy endpoint:</p>
<pre><code class="language-text">https://www.pullthatupjamie.ai/api/get-hierarchy?paragraphId=&lt;pineconeId&gt;
</code></pre>
<p>That returns <code>{hierarchy: {paragraph, episode, feed}}</code> — the full paragraph text with <code>start_time</code> / <code>end_time</code>, the chapter it sits inside, the episode title, audio URL and listen link, and the feed metadata. That is the <strong>open JSON</strong> link.</p>
<p>From the same response, the <strong>open clip</strong> link is just <code>audioUrl</code> with a media-fragment timestamp appended:</p>
<pre><code class="language-text">&lt;paragraph.metadata.audioUrl&gt;#t=&lt;paragraph.metadata.start_time&gt;
</code></pre>
<p>Browsers interpret <code>#t=&lt;seconds&gt;</code> as a playback offset on audio and video, so the reader lands mid-episode right on the quote. Two links, no paid calls, no extra UI — just the hierarchy endpoint and a media fragment.</p>
<p>Read the full specs at the <a href="https://www.pullthatupjamie.ai/JamiePullAgentClientDevGuide.md" target="_blank" rel="noopener">Jamie Pull Agent dev guide</a> and the <a href="https://www.pullthatupjamie.ai/api/openapi.json" target="_blank" rel="noopener">OpenAPI spec</a>. The reference UI lives at <a href="https://www.pullthatupjamie.ai/app?view=agent" target="_blank" rel="noopener">pullthatupjamie.ai/app?view=agent</a>.</p>
<h2>Pricing and credentials</h2>
<p>Flat $0.10 per call. The pricing block is published in every 402 challenge, alongside the primitive prices: <code>search-quotes</code> at $0.004, <code>chapter-search</code> at $0.008, <code>discover-podcasts</code> at $0.005, <code>make-clip</code> at $0.05, <code>submit-on-demand-run</code> at $0.45.</p>
<p>The default invoice is 148 sats — one call plus a thin buffer. Pay, get your answer, move on.</p>
<h2>Conclusion</h2>
<p>The primitive owner built the orchestration layer. One endpoint, one payment, plain English in, three clips clustered across two shows — all for a dime.</p>
<p>Ship your agent against <code>POST /api/pull</code>, resolve the <code>{{clip:...}}</code> tokens, and you have a podcast-research loop that pays its own bills.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Browsing the Satsback Catalog With Your Agent — Affiliate Cashback, Paid in Bitcoin</title>
    <link>https://lncurl.lol/blog/2026-04-23-browsing-satsback-catalog-with-your-agent</link>
    <description>Register an AI agent with satsback.com over L402 + Nostr and point it at an affiliate catalog 1,580 stores deep (in Thailand alone) that pays cashback in bitcoin on lightning.</description>
    <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-23-browsing-satsback-catalog-with-your-agent</guid>
    <content:encoded><![CDATA[<p>Every affiliate program on the open web wants the same things before it pays you a cent: a signup form, a dashboard login, a tax form, a bank account, a thirty-day hold, a fifty-dollar minimum payout. Your agent can&#39;t do any of that — and that&#39;s before it hits the captcha.</p>
<p>That&#39;s the old model. Here&#39;s what the new one looks like: a signed Nostr event, 21 sats, a Bearer token. Your agent is in.</p>
<h2>The handshake, start to finish</h2>
<p>satsback.com publishes an <code>agents.json</code> at the well-known path. No auth, no browser, just a description of how machines are supposed to talk to it:</p>
<pre><code class="language-bash">curl https://satsback.com/.well-known/agents.json
</code></pre>
<p>It tells you three things that matter: an L402 registration endpoint at <code>/api/v2/l402/register</code>, a Nostr event kind (<code>27236</code>) for agent identity, and a REST surface under <code>/api/v2/agent/*</code> for everything else. Agent identity is a secp256k1 pubkey. The lightning address where cashback lands is carried as a signed tag on the registration event.</p>
<p>That&#39;s the whole identity model. No email. No password. No &quot;verify you&#39;re a human.&quot;</p>
<h2>Registration: 21 sats to open the door</h2>
<p>Build a kind-27236 event, sign it, and POST it:</p>
<pre><code class="language-json">{
  &quot;kind&quot;: 27236,
  &quot;created_at&quot;: 1776956959,
  &quot;content&quot;: &quot;register&quot;,
  &quot;tags&quot;: [
    [&quot;country&quot;, &quot;TH&quot;],
    [&quot;lightning_address&quot;, &quot;lncurl_sinking_ash@getalby.com&quot;]
  ],
  &quot;pubkey&quot;: &quot;c8f5d76a4930c0...&quot;,
  &quot;sig&quot;: &quot;8ff07faebeae...&quot;
}
</code></pre>
<p>The server responds <code>HTTP 402</code> with an L402 challenge in the <code>WWW-Authenticate</code> header:</p>
<pre><code>WWW-Authenticate: L402 macaroon=&quot;MDAx...&quot;, invoice=&quot;lnbc210n1p575dnq...&quot;
</code></pre>
<p>Amount: <strong>21 sats</strong>. That&#39;s not a paywall — it&#39;s an anti-spam cost. It&#39;s roughly a cent. It exists so bots can&#39;t mint a million identities in a shell loop, and that&#39;s it. Pay it once, and you have a Bearer token tied to your lightning address.</p>
<p>I let the Alby CLI handle the L402 dance — it pays the invoice, re-POSTs the event with <code>Authorization: L402 &lt;macaroon&gt;:&lt;preimage&gt;</code>, and you get the Bearer token back:</p>
<pre><code class="language-json">{
  &quot;success&quot;: true,
  &quot;token&quot;: &quot;nI8BCtYqDeWUuJUr0e4Fw1KtRr2YfmqtDtEfe8Vg&quot;,
  &quot;user_id&quot;: &quot;end3q8Q&quot;,
  &quot;quickstart&quot;: &quot;Include &#39;Authorization: Bearer &lt;token&gt;&#39; on ALL subsequent requests...&quot;
}
</code></pre>
<p>Wallet balance before: 459,851 sats. After: 459,830 sats. That is the entire onboarding cost.</p>
<h2>What&#39;s actually in the catalog</h2>
<p>With the Bearer token, hit the country-scoped stores endpoint:</p>
<pre><code class="language-bash">curl -H &quot;Authorization: Bearer $TOKEN&quot; \
  https://satsback.com/api/v2/agent/stores/thailand
</code></pre>
<p><strong>1,580 stores</strong> come back — a 2.2 MB JSON array. Each entry has the same rough shape:</p>
<pre><code class="language-json">{
  &quot;name&quot;: &quot;Booking.com&quot;,
  &quot;slug&quot;: &quot;booking-com&quot;,
  &quot;url&quot;: &quot;booking.com&quot;,
  &quot;store_id&quot;: &quot;WZjWp5Q&quot;,
  &quot;cashback_type&quot;: &quot;percent&quot;,
  &quot;text&quot;: &quot;Satsback up to 1.7%&quot;,
  &quot;commission_percent&quot;: 1.7,
  &quot;description&quot;: &quot;...&quot;
}
</code></pre>
<p>This is where the agent can actually browse. Not a hand-curated list of five &quot;partner&quot; merchants — 1,580 real stores across consumer, SaaS, travel, and long-tail e-commerce. A selection, with the kind of thing an agent might be buying on behalf of its user:</p>
<table>
<thead>
<tr>
<th>Store</th>
<th>Category</th>
<th>Cashback</th>
</tr>
</thead>
<tbody><tr>
<td>NordVPN</td>
<td>privacy</td>
<td>20%</td>
</tr>
<tr>
<td>Hostinger</td>
<td>hosting</td>
<td>16.8%</td>
</tr>
<tr>
<td>Proton / ProtonVPN</td>
<td>privacy</td>
<td>16%</td>
</tr>
<tr>
<td>ExpressVPN</td>
<td>privacy</td>
<td>14%</td>
</tr>
<tr>
<td>1Password</td>
<td>credentials</td>
<td>7%</td>
</tr>
<tr>
<td>Shopee TH</td>
<td>marketplace</td>
<td>5.5%</td>
</tr>
<tr>
<td>AliExpress</td>
<td>marketplace</td>
<td>2.7%</td>
</tr>
<tr>
<td>Booking.com</td>
<td>travel</td>
<td>1.7%</td>
</tr>
<tr>
<td>Nike</td>
<td>apparel</td>
<td>1.5%</td>
</tr>
<tr>
<td>eBay US</td>
<td>marketplace</td>
<td>1%</td>
</tr>
</tbody></table>
<p>And at the top end, developer tooling is where the rates get serious — <strong>Liquid Web</strong> pays out up to <strong>70%</strong> and <strong>Nexcess</strong> up to <strong>56%</strong> on managed hosting. If your agent is provisioning infrastructure for its user, that&#39;s a meaningful slice of the bill coming back as sats.</p>
<p>The bitcoin-adjacent stuff is well represented: Proton, NordVPN, ExpressVPN, Hostinger — the merchants that already take bitcoin in a lot of cases, now paying the agent for sending the user their way.</p>
<h2>Turning a store into an attributed link</h2>
<p>Once the agent has picked a merchant, it calls <code>/visit</code>:</p>
<pre><code class="language-bash">curl -H &quot;Authorization: Bearer $TOKEN&quot; \
  https://satsback.com/api/v2/agent/store/booking-com/visit
</code></pre>
<pre><code class="language-json">{
  &quot;store_id&quot;: &quot;WZjWp5Q&quot;,
  &quot;store_name&quot;: &quot;Booking.com&quot;,
  &quot;click_id&quot;: &quot;QyR5rMn&quot;,
  &quot;redirect_url&quot;: &quot;https://satsback.com/api/v2/store/redirect/QyR5rMn&quot;,
  &quot;tracking_tips&quot;: [
    &quot;Prefer using the same HTTP client/session for the redirect and checkout so the affiliate cookie is still present at order time.&quot;,
    &quot;Call /visit again for every new order — do not reuse a click_id across purchases.&quot;,
    &quot;Go directly from the redirect to checkout. Visiting coupon or comparison sites in between can overwrite attribution (last-click-wins).&quot;,
    &quot;Preserve cookies and the redirect chain; do not strip them in your HTTP client.&quot;,
    &quot;Complete the purchase soon after the click...&quot;,
    &quot;For discount_code stores: still follow redirect_url AND apply cashback_code at checkout.&quot;
  ]
}
</code></pre>
<p>The agent takes that <code>redirect_url</code> to whatever it was already going to do — hand it to its browser runtime, pass it to the user, plug it into a shopping flow. The tracking tips are right there in the response: same HTTP client for redirect and checkout, one <code>click_id</code> per order, no coupon-site detours in between. If the agent respects those, attribution holds and cashback lands on the lightning address it registered with.</p>
<h2>The rough edges</h2>
<p>None of this was entirely frictionless. Worth naming:</p>
<ul>
<li><strong>Nostr signing isn&#39;t in the Alby CLI.</strong> You need <code>nostr-tools</code> to schnorr-sign the kind-27236 event. Fine for developers, friction for pure shell-agent setups.</li>
<li><strong>The <code>notifications</code> tag is a trap.</strong> Add <code>[&quot;notifications&quot;,&quot;true&quot;]</code> without first publishing NIP-17 inbox relays for your pubkey and <code>/register</code> returns a 400 before it ever issues the invoice.</li>
<li><strong>Events are replay-protected.</strong> POST once manually to see the 402 shape, then retry with the same event through a payment helper, and you get <code>400 Event already used</code>. Re-sign every attempt.</li>
<li><strong><code>/register</code> rate limit is 3 per minute.</strong> Easy to trip while debugging.</li>
</ul>
<h2>Why this is a big deal</h2>
<p>Affiliate is one of the oldest revenue models on the web and it has, until now, been built entirely around humans. Email signup. W-9. Dashboard login. Thirty-day hold. Fifty-dollar minimum payout. Every step of that stack assumes a person on the other end.</p>
<p>satsback collapses the whole thing into a signed event, a 21-sat anti-spam cost, and a REST endpoint that mints attributed redirects on demand against over a thousand real stores per country. The agent that helps a user shop can now surface a bitcoin income on the transaction — without ever touching the user&#39;s email, card, or identity on the affiliate side. The cashback lands on lightning, in sats, paid to the address the agent signed into its registration event.</p>
<p>The web spent twenty years assuming every visitor was a person. That assumption is breaking. What replaces it is cheaper, faster, and pays in bitcoin.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Search Twitter with Lightning: PPQ.ai&apos;s X Data Enrichment API</title>
    <link>https://lncurl.lol/blog/2026-04-21-search-twitter-with-lightning-ppq-data-enrichment</link>
    <description>PPQ.ai lets AI agents search live X/Twitter data for $0.01 per query, paid via a bitcoin lightning invoice — no account, no OAuth, no API keys required.</description>
    <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-21-search-twitter-with-lightning-ppq-data-enrichment</guid>
    <content:encoded><![CDATA[<p>Twitter&#39;s developer API exists. Getting access to it is another story — developer account, OAuth 2.0 credentials, app registration, rate tier negotiation. All that before you can fetch a single tweet. There is a shorter path: pay 17 sats and skip the whole ritual.</p>
<p>PPQ.ai is a pay-per-query data API that exposes live X/Twitter search over HTTP 402 (L402). No account. No OAuth tokens. No developer programme. An agent sends a request, receives a lightning invoice, pays it, and gets back 20 fully hydrated tweets — author profiles, engagement metrics, media URLs — in one round trip.</p>
<h2>What PPQ.ai is and why it matters for agents</h2>
<p>PPQ.ai is primarily a unified AI inference gateway — 500+ models from OpenAI, Anthropic, Google, xAI, Meta, and more, all behind a single OpenAI-compatible API, pay-per-use, no subscription. Alongside the inference API it offers a data enrichment suite: 12 X/Twitter endpoints, company lookups, people search, and more. That&#39;s what we&#39;re using here. Every data endpoint supports the L402 payment flow: send an unauthenticated request, get a <code>402 Payment Required</code> response containing a lightning invoice, pay it, then replay the request with <code>Authorization: L402 &lt;token&gt;:&lt;preimage&gt;</code>. The service authorises you. No signup, no email verification, no KYC.</p>
<p>For agents, this is the difference between &quot;needs a pre-arranged API key&quot; and &quot;can call this right now with a wallet.&quot; The web keeps building walls that assume a human on the other side. A lightning wallet is the agent&#39;s way through.</p>
<p>Twelve X/Twitter-specific endpoints are available at the same price point. The one that matters most: tweet search.</p>
<h2>Searching Twitter without a developer account</h2>
<p>The endpoint is <code>GET https://api.ppq.ai/v1/data/x/tweets/search</code>. Core parameter: <code>words=</code>. Add <code>minLikes=</code>, <code>minReplies=</code>, <code>since=</code>, <code>until=</code>, <code>from=</code> and more to narrow results. Each request costs <del>17 sats (</del>$0.01), returns 20 tweets, and includes a <code>next_token</code> in the response <code>meta</code> field for pagination — each page is another 17 sats.</p>
<p>Two things the docs get wrong, both of which cost money to discover:</p>
<p><strong>The endpoint is GET, not POST.</strong> Some documentation implies POST. It is a GET.</p>
<p><strong>The query parameter is <code>words=</code>, not <code>query=</code>.</strong> Using <code>query=bitcoin</code> triggers the payment and deducts 17 sats before returning a 400 error from the upstream API. The payment is not refunded. PPQ charges before forwarding to Twitter — parameter validation happens after billing.</p>
<p>Test with a well-formed request the first time.</p>
<h2>Making your first paid tweet search in one command</h2>
<p>The Alby CLI handles the entire L402 loop — sends the initial request, receives the invoice, pays it, replays with credentials:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch --max-amount 50 \
  &quot;https://api.ppq.ai/v1/data/x/tweets/search?words=bitcoin&quot;
</code></pre>
<p><code>--max-amount 50</code> caps the sats the CLI will authorise. The actual charge is ~17 sats; the ceiling is a safety net.</p>
<p>Filter for high-engagement results only:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch --max-amount 50 \
  &quot;https://api.ppq.ai/v1/data/x/tweets/search?words=bitcoin&amp;minLikes=100&quot;
</code></pre>
<p>Install the payments skill so your agent can do the same:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<h2>What the response looks like: tweets, authors, metrics, and media</h2>
<p>One catch: the response body is <code>{ &quot;content&quot;: &quot;&lt;JSON string&gt;&quot; }</code>. The tweet data is a JSON string inside <code>content</code>, so you need to parse twice — once to get the outer object, once to parse the <code>content</code> value.</p>
<p>Here is the complete response from a live <code>words=bitcoin</code> query — 20 tweets, paid for with 17 sats.</p>
<p>These were the most notable results by author reach (tweets are fresh, so like counts are near-zero — follower count is the better signal here):</p>
<table>
<thead>
<tr>
<th>Author</th>
<th>Followers</th>
<th>Tweet</th>
</tr>
</thead>
<tbody><tr>
<td>@DustyBC</td>
<td>222K</td>
<td>&quot;Bitcoin spot ETFs recorded a net inflow of $238.4M on April 20. BlackRock clients bought $256,000,000 worth of $BTC.&quot;</td>
</tr>
<tr>
<td>@crico41</td>
<td>12K</td>
<td>Technical analysis thread with BTC chart images — bounced from 75.4k–75.5k zone, watching 76k resistance</td>
</tr>
<tr>
<td>@danielgoesmax</td>
<td>7.2K</td>
<td>&quot;I did quit my job once I realized money doesn&#39;t matter, and am sorta by default an unpaid Bitcoin influencer / agitator 🤣&quot;</td>
</tr>
<tr>
<td>@NorqueNoq</td>
<td>6.8K</td>
<td>&quot;Code is &#39;functional&#39; free speech under the First Amendment: Coin Center&quot;</td>
</tr>
<tr>
<td>@BeInCrypto_PL</td>
<td>10K</td>
<td>Polish: Russell 2000 record and what it means for altcoins in 2026</td>
</tr>
</tbody></table>
<p>The full 20-tweet payload:</p>
<details>
<summary>Full response (20 tweets, 17 sats)</summary>

<pre><code class="language-json">{
  &quot;data&quot;: [
    {
      &quot;id&quot;: &quot;2046460224689860806&quot;,
      &quot;text&quot;: &quot;@MMCrypto Make Bitcoin great again&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:25:13 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1952243406987522048&quot;,
      &quot;conversation_id&quot;: &quot;2046460224689860806&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460224689860806&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;904700529988820992&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [{ &quot;start&quot;: 0, &quot;end&quot;: 9, &quot;username&quot;: &quot;MMCrypto&quot;, &quot;id&quot;: &quot;904700529988820992&quot; }]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046385822421876893&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1952243406987522048&quot;,
        &quot;username&quot;: &quot;thedefiphantomX&quot;,
        &quot;name&quot;: &quot;DeFi Phantom&quot;,
        &quot;description&quot;: &quot;Posting all day\nDo Your Own Research. Nothing I say is financial advice.&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1952243406987522048/1754287165&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 59,
          &quot;following_count&quot;: 63,
          &quot;tweet_count&quot;: 2972,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 280,
          &quot;media_count&quot;: 672
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460196348956681&quot;,
      &quot;text&quot;: &quot;🚨 Crypto ETF inflows remain strong across major assets\n\nSpot ETFs tracking Bitcoin, Ethereum, Solana and XRP recorded net inflows on April 20:\n\nBTC: $238.37M\nETH: $67.77M\nSOL: $3.28M\nXRP: $3.00M\n\nThe data points to continued institutional demand across leading crypto assets. https://t.co/kIBRsyh189&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:25:06 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;2044048407552049152&quot;,
      &quot;conversation_id&quot;: &quot;2046460196348956681&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460196348956681&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046460190858579968&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8s3MakAABjEF.jpg&quot;
        }
      ],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;2044048407552049152&quot;,
        &quot;username&quot;: &quot;TimeNewsIND&quot;,
        &quot;name&quot;: &quot;Time News&quot;,
        &quot;description&quot;: &quot;Breaking news as it happens. Real-time updates on global events, politics, and breaking headlines. Stay ahead of the curve.&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/2044048407552049152/1776176496&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 1,
          &quot;following_count&quot;: 17,
          &quot;tweet_count&quot;: 212,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 0,
          &quot;media_count&quot;: 176
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460195363262477&quot;,
      &quot;text&quot;: &quot;Bitcoin is currently lagging.\n\n11-Week Lag and the purchasing power of the dollar is going down.\n\nThe catch-up will be biblically violent.✌🏻\n\n$BTC vs Global M2 Liquidity. https://t.co/EkPm7XLPDU&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:25:06 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1979513144172273664&quot;,
      &quot;conversation_id&quot;: &quot;2046460195363262477&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460195363262477&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;cashtags&quot;: [{ &quot;start&quot;: 142, &quot;end&quot;: 146, &quot;tag&quot;: &quot;BTC&quot; }]
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046460188631408640&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8su5aoAAwUO9.jpg&quot;
        }
      ],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1979513144172273664&quot;,
        &quot;username&quot;: &quot;dennyprasetya22&quot;,
        &quot;name&quot;: &quot;LionxWolf 🦁🐺&quot;,
        &quot;description&quot;: &quot;A True Dreamer | Believe in the Magic and Miracle of Life | The World Belongs to the Optimist&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1979513144172273664/1775815717&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 53,
          &quot;following_count&quot;: 29,
          &quot;tweet_count&quot;: 71,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 76,
          &quot;media_count&quot;: 5
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460194536734909&quot;,
      &quot;text&quot;: &quot;@BitcoinRachy I did quit my job once I realized money doesn&#39;t matter, and am sorta by default an unpaid Bitcoin influencer / agitator 🤣\n\nIf I get a new one hopefully it&#39;s not to have to stay alive&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:25:06 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1442099916491296775&quot;,
      &quot;conversation_id&quot;: &quot;2046408518790451224&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460194536734909&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;1478617348819066884&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [{ &quot;start&quot;: 0, &quot;end&quot;: 13, &quot;username&quot;: &quot;BitcoinRachy&quot;, &quot;id&quot;: &quot;1478617348819066884&quot; }]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046408518790451224&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1442099916491296775&quot;,
        &quot;username&quot;: &quot;danielgoesmax&quot;,
        &quot;name&quot;: &quot;Daniel ✊🧡&quot;,
        &quot;description&quot;: &quot;I am a Constitutionalist. Im an expert on corruption bc I used to be a criminal. (I&#39;m against it now) It&#39;s us versus the tribes. #BTC&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1442099916491296775/1773512074&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 7244,
          &quot;following_count&quot;: 7142,
          &quot;tweet_count&quot;: 60640,
          &quot;listed_count&quot;: 15,
          &quot;like_count&quot;: 118810,
          &quot;media_count&quot;: 23825
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460176308285919&quot;,
      &quot;text&quot;: &quot;BOOM 💥 #BITCOIN IS BACK ABOVE $76,000. https://t.co/6oylPSxgCv&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:25:02 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1865881900608307200&quot;,
      &quot;conversation_id&quot;: &quot;2046460176308285919&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460176308285919&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;hashtags&quot;: [{ &quot;start&quot;: 7, &quot;end&quot;: 15, &quot;tag&quot;: &quot;BITCOIN&quot; }]
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046460166472929280&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8rcWbEAAOs9b.jpg&quot;
        }
      ],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1865881900608307200&quot;,
        &quot;username&quot;: &quot;mikecrypty4&quot;,
        &quot;name&quot;: &quot;MIKE CRYPTY&quot;,
        &quot;description&quot;: &quot;🚀 Earn 300% – 700% Daily Profits\n💡 Get my FREE trading signals today\n\nJoin my trading channel now 👇\n👉 https://t.co/dy2eb3zikJ\n\n#Crypto #MemeCoin #Tradin&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1865881900608307200/1754420297&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 328,
          &quot;following_count&quot;: 2146,
          &quot;tweet_count&quot;: 35,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 1212,
          &quot;media_count&quot;: 28
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460149867401656&quot;,
      &quot;text&quot;: &quot;🚨 Bitcoin rebondit au-dessus de 76 000 $ malgré les tensions avec l&#39;Iran, pendant que la DeFi encaisse un choc majeur.\n\nLe hack de KelpDAO à 292 millions $ a fait chuter la TVL de 14 milliards $, atteignant son plus bas niveau depuis un an.\n\nLes ETF spot continuent d&#39;enregistrer des entrées nettes et le levier reste limité, signe d&#39;une demande plus solide selon Wintermute.\n\n- CoinDesk&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:55 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1574172601&quot;,
      &quot;conversation_id&quot;: &quot;2046460149867401656&quot;,
      &quot;lang&quot;: &quot;fr&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460149867401656&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046460148009635840&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8qXkbkAASZq8.jpg&quot;
        }
      ],
      &quot;note_tweet&quot;: {
        &quot;text&quot;: &quot;🚨 Bitcoin rebondit au-dessus de 76 000 $ malgré les tensions avec l&#39;Iran, pendant que la DeFi encaisse un choc majeur.\n\nLe hack de KelpDAO à 292 millions $ a fait chuter la TVL de 14 milliards $, atteignant son plus bas niveau depuis un an.\n\nLes ETF spot continuent d&#39;enregistrer des entrées nettes et le levier reste limité, signe d&#39;une demande plus solide selon Wintermute.\n\n- CoinDesk&quot;
      },
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1574172601&quot;,
        &quot;username&quot;: &quot;CryptoRizon&quot;,
        &quot;name&quot;: &quot;CryptoRizon&quot;,
        &quot;description&quot;: &quot;🔍 Explorateur du #Web3 🪐 J&#39;explique la #blockchain, les #crypto &amp; l&#39;IA de A à Z&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1574172601/1710752530&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 3074,
          &quot;following_count&quot;: 1296,
          &quot;tweet_count&quot;: 8477,
          &quot;listed_count&quot;: 28,
          &quot;like_count&quot;: 11723,
          &quot;media_count&quot;: 2570
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460137129308313&quot;,
      &quot;text&quot;: &quot;@makupka @ODScz Řebíček,Rittig,Novák,Dlouhý,Topolánek s věrným Dalíkem,Vondra a Promopro,Stanjura a Bitcoin,Fiala a kampeličká,tak u všech těchto \&quot;úspěšných\&quot; členů ODS oslavoval jejich \&quot;úspěchy\&quot; prolhaný Kupka,co by mluvčí ODS\nA tak nezdá se i vám,že zmrd Kupka je jen prolhaný a zbytečný žvanil?&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:52 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;3360080806&quot;,
      &quot;conversation_id&quot;: &quot;2046273945826103720&quot;,
      &quot;lang&quot;: &quot;cs&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460137129308313&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;1778249820&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [
          { &quot;start&quot;: 0, &quot;end&quot;: 8, &quot;username&quot;: &quot;makupka&quot;, &quot;id&quot;: &quot;1778249820&quot; },
          { &quot;start&quot;: 9, &quot;end&quot;: 15, &quot;username&quot;: &quot;ODScz&quot;, &quot;id&quot;: &quot;56410958&quot; }
        ]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046273945826103720&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;3360080806&quot;,
        &quot;username&quot;: &quot;mares2_mares&quot;,
        &quot;name&quot;: &quot;Mares Stanislav&quot;,
        &quot;description&quot;: &quot;&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 24,
          &quot;following_count&quot;: 18,
          &quot;tweet_count&quot;: 2921,
          &quot;listed_count&quot;: 16,
          &quot;like_count&quot;: 175,
          &quot;media_count&quot;: 0
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460107660157058&quot;,
      &quot;text&quot;: &quot;🚨JUST IN: 🇺🇸 Bitcoin spot ETFs recorded a net inflow of $238.4M on April 20.\n\nBlackRock clients bought $256,000,000 worth of $BTC.🟢 https://t.co/PBDn6dcyCq&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:45 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;913778551555608576&quot;,
      &quot;conversation_id&quot;: &quot;2046460107660157058&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460107660157058&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 1,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;cashtags&quot;: [{ &quot;start&quot;: 125, &quot;end&quot;: 129, &quot;tag&quot;: &quot;BTC&quot; }]
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046459845239554048&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8YvqawAA5owk.jpg&quot;
        },
        {
          &quot;media_key&quot;: &quot;3_2046460077352353792&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8mQWbAAAyCnv.png&quot;
        }
      ],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;913778551555608576&quot;,
        &quot;username&quot;: &quot;DustyBC&quot;,
        &quot;name&quot;: &quot;DustyBC Crypto&quot;,
        &quot;description&quot;: &quot;The Official DustyBC, 185K on YouTube. #BTC #ETH #XRP #ADA &amp; More! Content Creator. I am Not A Financial Advisor. Tweets = Opinion&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/913778551555608576/1528472362&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 222229,
          &quot;following_count&quot;: 2098,
          &quot;tweet_count&quot;: 38795,
          &quot;listed_count&quot;: 705,
          &quot;like_count&quot;: 20640,
          &quot;media_count&quot;: 14927
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460044166705336&quot;,
      &quot;text&quot;: &quot;Russell 2000 osiąga nowy rekord: dlaczego ten sygnał może mieć mniejsze znaczenie dla altcoinów w 2026!\n\n#kryptowaluty #Bitcoin #crypto\n\nKliknij, by przeczytać cały artykuł ⬇️\nhttps://t.co/RZqinFCNwn&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:30 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1232010374251151363&quot;,
      &quot;conversation_id&quot;: &quot;2046460044166705336&quot;,
      &quot;lang&quot;: &quot;pl&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460044166705336&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;hashtags&quot;: [
          { &quot;start&quot;: 105, &quot;end&quot;: 118, &quot;tag&quot;: &quot;kryptowaluty&quot; },
          { &quot;start&quot;: 119, &quot;end&quot;: 127, &quot;tag&quot;: &quot;Bitcoin&quot; },
          { &quot;start&quot;: 128, &quot;end&quot;: 135, &quot;tag&quot;: &quot;crypto&quot; }
        ],
        &quot;urls&quot;: [{ &quot;start&quot;: 176, &quot;end&quot;: 199, &quot;url&quot;: &quot;https://t.co/RZqinFCNwn&quot;, &quot;expanded_url&quot;: &quot;https://ift.tt/oGsVESd&quot;, &quot;display_url&quot;: &quot;ift.tt/oGsVESd&quot; }]
      },
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1232010374251151363&quot;,
        &quot;username&quot;: &quot;BeInCrypto_PL&quot;,
        &quot;name&quot;: &quot;BeInCrypto Polska 🇵🇱&quot;,
        &quot;description&quot;: &quot;Wiadomości z Polski i ze świata #Bitcoin, #blockchain i #kryptowaluty.&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1232010374251151363/1753791445&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 10202,
          &quot;following_count&quot;: 445,
          &quot;tweet_count&quot;: 15159,
          &quot;listed_count&quot;: 136,
          &quot;like_count&quot;: 2514,
          &quot;media_count&quot;: 647
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460039817249090&quot;,
      &quot;text&quot;: &quot;#CRYPTONEWS:What #XRP does for quantum computers, #DeFi suffers, the market awaits\n#cryptonews #altcoins #bitcoin\nhttps://t.co/FbOHQ0m6iu&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:29 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1888252780273340416&quot;,
      &quot;conversation_id&quot;: &quot;2046460039817249090&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460039817249090&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;hashtags&quot;: [
          { &quot;start&quot;: 0, &quot;end&quot;: 11, &quot;tag&quot;: &quot;CRYPTONEWS&quot; },
          { &quot;start&quot;: 17, &quot;end&quot;: 21, &quot;tag&quot;: &quot;XRP&quot; },
          { &quot;start&quot;: 50, &quot;end&quot;: 55, &quot;tag&quot;: &quot;DeFi&quot; },
          { &quot;start&quot;: 83, &quot;end&quot;: 94, &quot;tag&quot;: &quot;cryptonews&quot; },
          { &quot;start&quot;: 95, &quot;end&quot;: 104, &quot;tag&quot;: &quot;altcoins&quot; },
          { &quot;start&quot;: 105, &quot;end&quot;: 113, &quot;tag&quot;: &quot;bitcoin&quot; }
        ],
        &quot;urls&quot;: [{ &quot;start&quot;: 114, &quot;end&quot;: 137, &quot;url&quot;: &quot;https://t.co/FbOHQ0m6iu&quot;, &quot;expanded_url&quot;: &quot;https://www.youtube.com/watch?v=_A7Jd86vqA4&quot;, &quot;display_url&quot;: &quot;youtube.com/watch?v=_A7Jd8…&quot; }]
      },
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1888252780273340416&quot;,
        &quot;username&quot;: &quot;24_7cryptonews&quot;,
        &quot;name&quot;: &quot;24.7CRYPTONEWS&quot;,
        &quot;description&quot;: &quot;Welcome to our YouTube channel, your go-to source for daily crypto news! With the latest updates and insights on everything related to blockchain technology!&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1888252780273340416/1739224612&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 27,
          &quot;following_count&quot;: 93,
          &quot;tweet_count&quot;: 1027,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 64,
          &quot;media_count&quot;: 841
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460028853403865&quot;,
      &quot;text&quot;: &quot;Code is &#39;functional&#39; free speech under the First Amendment: Coin Center\n\n#Norque #NOQ #Bitcoin #ETH #AI #Blockchain #Law #Policies #Regulation #Crypto&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:26 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1701263040673660928&quot;,
      &quot;conversation_id&quot;: &quot;2046460028853403865&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460028853403865&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;hashtags&quot;: [
          { &quot;start&quot;: 73, &quot;end&quot;: 80, &quot;tag&quot;: &quot;Norque&quot; },
          { &quot;start&quot;: 81, &quot;end&quot;: 85, &quot;tag&quot;: &quot;NOQ&quot; },
          { &quot;start&quot;: 86, &quot;end&quot;: 94, &quot;tag&quot;: &quot;Bitcoin&quot; },
          { &quot;start&quot;: 95, &quot;end&quot;: 99, &quot;tag&quot;: &quot;ETH&quot; },
          { &quot;start&quot;: 100, &quot;end&quot;: 103, &quot;tag&quot;: &quot;AI&quot; },
          { &quot;start&quot;: 104, &quot;end&quot;: 115, &quot;tag&quot;: &quot;Blockchain&quot; },
          { &quot;start&quot;: 128, &quot;end&quot;: 132, &quot;tag&quot;: &quot;Law&quot; },
          { &quot;start&quot;: 133, &quot;end&quot;: 142, &quot;tag&quot;: &quot;Policies&quot; },
          { &quot;start&quot;: 143, &quot;end&quot;: 154, &quot;tag&quot;: &quot;Regulation&quot; },
          { &quot;start&quot;: 155, &quot;end&quot;: 162, &quot;tag&quot;: &quot;Crypto&quot; }
        ]
      },
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1701263040673660928&quot;,
        &quot;username&quot;: &quot;NorqueNoq&quot;,
        &quot;name&quot;: &quot;NORQUE-NOQ&quot;,
        &quot;description&quot;: &quot;https://t.co/I9sRBjgs7c&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1701263040673660928/1749040848&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 6792,
          &quot;following_count&quot;: 10,
          &quot;tweet_count&quot;: 18923,
          &quot;listed_count&quot;: 2,
          &quot;like_count&quot;: 87,
          &quot;media_count&quot;: 11285
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460014869598714&quot;,
      &quot;text&quot;: &quot;@kit_sats Bitcoin don&#39;t care&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:23 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1372668342180450306&quot;,
      &quot;conversation_id&quot;: &quot;2046266894974583141&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460014869598714&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;1764516205837025280&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [{ &quot;start&quot;: 0, &quot;end&quot;: 9, &quot;username&quot;: &quot;kit_sats&quot;, &quot;id&quot;: &quot;1764516205837025280&quot; }]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046266894974583141&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1372668342180450306&quot;,
        &quot;username&quot;: &quot;SmileToSatoshi&quot;,
        &quot;name&quot;: &quot;⚡️Smile to Satoshi⚡️&quot;,
        &quot;description&quot;: &quot;Sold out!&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1372668342180450306/1738378084&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 672,
          &quot;following_count&quot;: 383,
          &quot;tweet_count&quot;: 16222,
          &quot;listed_count&quot;: 11,
          &quot;like_count&quot;: 29402,
          &quot;media_count&quot;: 2873
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460013581942959&quot;,
      &quot;text&quot;: &quot;Good morning bitcoin 🟧\n\nBitcoin is showing a short-term recovery structure on the 15m chart after bouncing from the 75.4k-75.5k zone.\n\nPrice reclaimed the SMA5 and is trying to push back above the SMA20, which is a sign that buyers are slowly regaining control. The current area around 75.8k is acting as an intraday pivot.\n\nMain levels to watch:\n\nSupport: 75.5k then 75.2k\nResistance: 76k then 76.3k\nIf BTC breaks and holds above 76k, there is room for another move toward 76.5k+\nIf it loses 75.5k again, price could revisit the lower range around 75.2k-74.8k\n▶️ Momentum still looks constructive overall because the higher lows are holding, but BTC needs a clean breakout above the recent local highs to confirm continuation.\n\n#btc #crypto&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:23 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;2217389542&quot;,
      &quot;conversation_id&quot;: &quot;2046460013581942959&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460013581942959&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046460005310947328&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8iD-aYAAGYtS.jpg&quot;
        },
        {
          &quot;media_key&quot;: &quot;3_2046460005327704064&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8iECaEAA_k5T.jpg&quot;
        }
      ],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;2217389542&quot;,
        &quot;username&quot;: &quot;crico41&quot;,
        &quot;name&quot;: &quot;Legrand Rico 🐊&quot;,
        &quot;description&quot;: &quot;#OrdinalHive🐝 #Halamadrid 🇪🇸 #SpaceRiders🧑‍🚀 #Bitcoin 🟧 #ArtCollector 🐊&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/2217389542/1772627789&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 11923,
          &quot;following_count&quot;: 9576,
          &quot;tweet_count&quot;: 76507,
          &quot;listed_count&quot;: 89,
          &quot;like_count&quot;: 129655,
          &quot;media_count&quot;: 4729
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046460000705425561&quot;,
      &quot;text&quot;: &quot;@CryptoTeluguO @arbitrum Nothing is decentralized in crypto except Bitcoin and Ethereum L1&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:20 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1635242585445859328&quot;,
      &quot;conversation_id&quot;: &quot;2046435443680346189&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046460000705425561&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;1264138602159669248&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [
          { &quot;start&quot;: 0, &quot;end&quot;: 14, &quot;username&quot;: &quot;CryptoTeluguO&quot;, &quot;id&quot;: &quot;1264138602159669248&quot; },
          { &quot;start&quot;: 15, &quot;end&quot;: 24, &quot;username&quot;: &quot;arbitrum&quot;, &quot;id&quot;: &quot;1332033418088099843&quot; }
        ]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046447198083399875&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1635242585445859328&quot;,
        &quot;username&quot;: &quot;Jeremyyy42&quot;,
        &quot;name&quot;: &quot;Jeremyyy&quot;,
        &quot;description&quot;: &quot;🌊🌊🌊&quot;,
        &quot;verified&quot;: false,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1635242585445859328/1698681546&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 294,
          &quot;following_count&quot;: 2640,
          &quot;tweet_count&quot;: 24377,
          &quot;listed_count&quot;: 17,
          &quot;like_count&quot;: 116592,
          &quot;media_count&quot;: 567
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046459997899362782&quot;,
      &quot;text&quot;: &quot;It&#39;s almost like we have to get back to a Gold Standard \n\nor go forward to a Bitcoin standard\n\nor both&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:19 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;804265138589200384&quot;,
      &quot;conversation_id&quot;: &quot;2046459997899362782&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046459997899362782&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;quoted&quot;, &quot;id&quot;: &quot;2046212782014468414&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;804265138589200384&quot;,
        &quot;username&quot;: &quot;klasniot&quot;,
        &quot;name&quot;: &quot;imaginethat&quot;,
        &quot;description&quot;: &quot;God, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/804265138589200384/1591038415&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 1206,
          &quot;following_count&quot;: 483,
          &quot;tweet_count&quot;: 290911,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 397703,
          &quot;media_count&quot;: 1355
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046459988365762656&quot;,
      &quot;text&quot;: &quot;@Bitcoin Let&#39;s go&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:17 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1353813992393867266&quot;,
      &quot;conversation_id&quot;: &quot;2046389589829378055&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046459988365762656&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;357312062&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [{ &quot;start&quot;: 0, &quot;end&quot;: 8, &quot;username&quot;: &quot;Bitcoin&quot;, &quot;id&quot;: &quot;357312062&quot; }]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046389589829378055&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1353813992393867266&quot;,
        &quot;username&quot;: &quot;wealthrewired8&quot;,
        &quot;name&quot;: &quot;WealthRewired&quot;,
        &quot;description&quot;: &quot;Earn under £30000 in London and still ending at £0 I show you how to fix it and start investing&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1353813992393867266/1773001669&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 554,
          &quot;following_count&quot;: 297,
          &quot;tweet_count&quot;: 3766,
          &quot;listed_count&quot;: 1,
          &quot;like_count&quot;: 5672,
          &quot;media_count&quot;: 53
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046459966177923287&quot;,
      &quot;text&quot;: &quot;Everyone expected crypto to pump…\nbut the market is doing something different right now 👇\n\nBitcoin is stuck around $70k–$75k\nwith no clear breakout yet\n\nWhy?\n\nGlobal tensions (US–Iran) are shaking markets\n→ even crypto is reacting like a risk asset now\n\nShort-term holders are selling into strength\n→ killing momentum every time BTC tries to break out\n\nBUT here&#39;s the interesting part… 👀\n\nBig institutions are still moving in\n→ Deutsche Börse just invested $200M into Kraken\n\nStablecoins are becoming geopolitical tools\n→ even talks about a yuan-backed stablecoin\n\nAnd technically…\nBTC could still push toward $80k+ if resistance breaks\n\nSo what&#39;s the play?\nMarket is:\n• not bearish ❌\n• not fully bullish ❌\n• accumulating before the next move ✅\nMost people get in when it&#39;s obvious.\nSmart ones watch when it&#39;s confusing.📈&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:11 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;2046269836150398976&quot;,
      &quot;conversation_id&quot;: &quot;2046459966177923287&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046459966177923287&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 1,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;author&quot;: {
        &quot;id&quot;: &quot;2046269836150398976&quot;,
        &quot;username&quot;: &quot;Panthr05&quot;,
        &quot;name&quot;: &quot;Panthr&quot;,
        &quot;description&quot;: &quot;Deep in the trenches🪖 | Crypto since 2021&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 3,
          &quot;following_count&quot;: 21,
          &quot;tweet_count&quot;: 5,
          &quot;listed_count&quot;: 0,
          &quot;like_count&quot;: 38,
          &quot;media_count&quot;: 3
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046459916832088567&quot;,
      &quot;text&quot;: &quot;You can only pick one:\n\nA) Bitcoin\nB) Real estate\nC) Cash\n\nDefend your choice 👇&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:24:00 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1674066757420556293&quot;,
      &quot;conversation_id&quot;: &quot;2046459916832088567&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046459916832088567&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1674066757420556293&quot;,
        &quot;username&quot;: &quot;Airbtconline&quot;,
        &quot;name&quot;: &quot;Airbtc&quot;,
        &quot;description&quot;: &quot;Welcome to Airbtc. Accommodation rentals with Bitcoin. Help us build the Bitcoin circular economy. Start by following us here, or book your travel with us!&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1674066757420556293/1710843888&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 9246,
          &quot;following_count&quot;: 1894,
          &quot;tweet_count&quot;: 4094,
          &quot;listed_count&quot;: 78,
          &quot;like_count&quot;: 11230,
          &quot;media_count&quot;: 1374
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046459909227618355&quot;,
      &quot;text&quot;: &quot;Bitcoin ETF&#39;s continue to stack. $MSBT with 9 consecutive days of inflows.\n\nMS customers like the orange coin. https://t.co/4Uu7PLPJAM&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:23:58 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;1019545420459073537&quot;,
      &quot;conversation_id&quot;: &quot;2046459909227618355&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046459909227618355&quot;],
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 0,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;cashtags&quot;: [{ &quot;start&quot;: 33, &quot;end&quot;: 38, &quot;tag&quot;: &quot;MSBT&quot; }]
      },
      &quot;media_metadata&quot;: [
        {
          &quot;media_key&quot;: &quot;3_2046459645234126848&quot;,
          &quot;media_url&quot;: &quot;https://pbs.twimg.com/media/HGZ8NGlaIAAhqug.png&quot;
        }
      ],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;1019545420459073537&quot;,
        &quot;username&quot;: &quot;johnsthor1&quot;,
        &quot;name&quot;: &quot;johnsthor&quot;,
        &quot;description&quot;: &quot;&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/1019545420459073537/1775834288&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 963,
          &quot;following_count&quot;: 847,
          &quot;tweet_count&quot;: 5437,
          &quot;listed_count&quot;: 12,
          &quot;like_count&quot;: 22310,
          &quot;media_count&quot;: 409
        }
      }
    },
    {
      &quot;id&quot;: &quot;2046459897756446834&quot;,
      &quot;text&quot;: &quot;@BTCHamsters @lukaskalm @pupsogette +also for holding Bitcoin Cyborgs &amp; Ordimatics by @cryptocynthiac 🤗💖&quot;,
      &quot;created_at&quot;: &quot;Tue Apr 21 05:23:55 +0000 2026&quot;,
      &quot;author_id&quot;: &quot;197624809&quot;,
      &quot;conversation_id&quot;: &quot;2046373508771655828&quot;,
      &quot;lang&quot;: &quot;en&quot;,
      &quot;possibly_sensitive&quot;: false,
      &quot;reply_settings&quot;: &quot;everyone&quot;,
      &quot;edit_history_tweet_ids&quot;: [&quot;2046459897756446834&quot;],
      &quot;in_reply_to_user_id&quot;: &quot;197624809&quot;,
      &quot;public_metrics&quot;: {
        &quot;retweet_count&quot;: 0,
        &quot;reply_count&quot;: 0,
        &quot;like_count&quot;: 1,
        &quot;quote_count&quot;: 0,
        &quot;bookmark_count&quot;: 0
      },
      &quot;entities&quot;: {
        &quot;mentions&quot;: [
          { &quot;start&quot;: 0, &quot;end&quot;: 12, &quot;username&quot;: &quot;BTCHamsters&quot;, &quot;id&quot;: &quot;1771464280917024768&quot; },
          { &quot;start&quot;: 13, &quot;end&quot;: 23, &quot;username&quot;: &quot;lukaskalm&quot;, &quot;id&quot;: &quot;1624419165464416257&quot; },
          { &quot;start&quot;: 24, &quot;end&quot;: 35, &quot;username&quot;: &quot;pupsogette&quot;, &quot;id&quot;: &quot;2023286705680252928&quot; },
          { &quot;start&quot;: 90, &quot;end&quot;: 105, &quot;username&quot;: &quot;cryptocynthiac&quot;, &quot;id&quot;: &quot;182091557&quot; }
        ]
      },
      &quot;referenced_tweets&quot;: [{ &quot;type&quot;: &quot;replied_to&quot;, &quot;id&quot;: &quot;2046373508771655828&quot; }],
      &quot;author&quot;: {
        &quot;id&quot;: &quot;197624809&quot;,
        &quot;username&quot;: &quot;Nairobi00000&quot;,
        &quot;name&quot;: &quot;Nairobi 🌙✨&quot;,
        &quot;description&quot;: &quot;psych grad turned into an egirl doodler | wassiegirl.eth 🌷&quot;,
        &quot;verified&quot;: true,
        &quot;verified_type&quot;: &quot;blue&quot;,
        &quot;profile_banner_url&quot;: &quot;https://pbs.twimg.com/profile_banners/197624809/1767758404&quot;,
        &quot;public_metrics&quot;: {
          &quot;followers_count&quot;: 4200,
          &quot;following_count&quot;: 2566,
          &quot;tweet_count&quot;: 54572,
          &quot;listed_count&quot;: 39,
          &quot;like_count&quot;: 289095,
          &quot;media_count&quot;: 14152
        }
      }
    }
  ],
  &quot;meta&quot;: {
    &quot;next_token&quot;: &quot;DAADDAABCgABHGZ8u1Oa8MYKAAIcZnxvNNrwcgAIAAIAAAACCAADAAAAAAgABAAAAAAKAAUcZnzC28AnEAoABhxmfMLbv9jwAAA&quot;
  }
}
</code></pre>
<pre><code>
&lt;/details&gt;

That is 17 sats of data. No developer account. No OAuth. No rate tier negotiation.

Each tweet also optionally includes `note_tweet.text` for posts exceeding 280 characters — the full untruncated text.

Two things worth knowing about result quality. First, there is no sort parameter — PPQ&#39;s X search has no `sort=`, `order=`, or `sort_by=` option. Results are reverse-chronological, which means the default feed is raw firehose. Most of the tweets above have zero likes. Use `minLikes=`, `minReplies=`, or `minReposts=` to filter before your agent processes results — there is no way to rank by engagement after the fact.

Second, there is no language filter parameter. The response above shows tweets in English, French, Czech, and Polish from a single `words=bitcoin` query. Use the `lang` field in post-processing to narrow down.

## Building a bitcoin sentiment monitor

Each page is another 17 sats. Pagination uses the `next_token` value from the `meta` field of the previous response — pass it as a query parameter to fetch the next 20 tweets:

```bash
# Page 1
npx -y @getalby/cli@0.6.1 fetch --max-amount 50 \
  &quot;https://api.ppq.ai/v1/data/x/tweets/search?words=bitcoin&quot;

# Page 2 — pass next_token from the meta field of the previous response
npx -y @getalby/cli@0.6.1 fetch --max-amount 50 \
  &quot;https://api.ppq.ai/v1/data/x/tweets/search?words=bitcoin&amp;next_token=YOUR_NEXT_TOKEN&quot;
</code></pre>
<p>At ten pages, you&#39;ve spent $0.10 and retrieved 200 tweets with full author and engagement data. No developer account. No rate tier negotiation. No pre-arranged credentials of any kind — the wallet is the key.</p>
<h2>Conclusion</h2>
<p>Every layer of the old web was built for a human with a browser and a willingness to fill out forms. The 402 model cuts through all of that — not with a workaround, but by making payment itself the credential. If you can pay 17 sats, you can search Twitter. That&#39;s a different web. Your agent can start using it right now.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Ask Grok What Bitcoin Twitter Is Buzzing About — No API Key, Just Sats</title>
    <link>https://lncurl.lol/blog/2026-04-17-ask-grok-bitcoin-twitter-buzzing-paid-in-sats</link>
    <description>Use grok-4.20&apos;s live X search via llm402.ai — pay a lightning invoice, skip the API key, and get real-time bitcoin community pulse.</description>
    <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-17-ask-grok-bitcoin-twitter-buzzing-paid-in-sats</guid>
    <content:encoded><![CDATA[<p>Most LLMs will confidently tell you what was happening on bitcoin Twitter — as of whenever their training data was scraped. That&#39;s not nothing. But it&#39;s also not what people are arguing about right now, today, in the last 24 hours. For that you need live search. And for live search, you need grok.</p>
<p>Here&#39;s the thing: grok-4.20 has real-time X access. And llm402.ai will sell you a single inference call against it for sats, no account required.</p>
<h2>The problem with API keys for agents</h2>
<p>Every major AI API follows the same onboarding ritual. Create an account. Verify an email. Add a payment method. Generate a key. Rotate it when it leaks. Write code to handle it. That flow was designed for a human developer building a product — not for an agent that needs to make one call, get an answer, and move on.</p>
<p>Agents can&#39;t verify emails. They don&#39;t have credit cards. &quot;Prove you&#39;re not a bot&quot; is a genuinely funny thing to ask a bot.</p>
<p>HTTP 402 — the long-dormant &quot;Payment Required&quot; status code — is the alternative. Send a request unauthenticated, receive a lightning invoice, pay it, retry with the credentials. No account. No signup. Just a wallet balance.</p>
<h2>How llm402.ai works</h2>
<p>llm402.ai is an OpenAI-compatible inference API that uses L402 for payment. The endpoint is <code>POST https://llm402.ai/v1/chat/completions</code>. Send it unauthenticated and you get a 402 back with a lightning invoice, an L402 macaroon, and — unusually — two alternative payment rails in the same response: USDC on Base, and a Cashu token. Three ways to pay, zero accounts required for any of them.</p>
<p>Pay the invoice, attach the L402 credentials in the <code>Authorization</code> header, retry. Same response shape as OpenAI. If your agent already speaks the OpenAI API format, it already knows how to read the answer.</p>
<p>To discover what models are available: <code>GET https://llm402.ai/models</code>. The list includes grok-4.20 alongside dozens of other models.</p>
<h2>The actual command — and a gotcha</h2>
<p>The Alby payments skill handles the 402 flow automatically — it pays the invoice and replays the request in one step:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch --max-amount 600 \
  -X POST \
  -H &#39;{&quot;Content-Type&quot;:&quot;application/json&quot;}&#39; \
  -b &#39;{&quot;model&quot;:&quot;x-ai/grok-4.20&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;what are the hot topics in bitcoin in the past 24 hours? Not price related - I mean what are people TALKING about?&quot;}],&quot;max_tokens&quot;:2000,&quot;web_search&quot;:true}&#39; \
  &quot;https://llm402.ai/v1/chat/completions&quot;
</code></pre>
<p>Check the latest version before running.</p>
<p>Install the skill first:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>One thing worth flagging: the first version of this command omitted <code>&quot;web_search&quot;: true</code>. Without it, grok returns training data — confident-sounding, plausible-looking, completely stale. The response came back for 25 sats and looked fine. It wasn&#39;t. Once the flag was added, the cost jumped to 87 sats and the results came back with dated citations and source URLs. That&#39;s the live version. The difference is one parameter but enormous in the output.</p>
<p>The server confirmed it recognised the flag: the 402 macaroon returned a caveat of <code>WebSearch = true</code>. If you don&#39;t see that, you&#39;re not getting live results.</p>
<p><code>--max-amount 600</code> caps what the agent will authorize. The 402 response quoted 395 sats as a worst-case ceiling based on <code>max_tokens</code>. Actual billing is token-based. Pricing is $2/M input tokens, $6/M output tokens, with a 101-sat minimum per call.</p>
<h2>What grok found</h2>
<p>The question was simple: what are people in the bitcoin community actually talking about right now, excluding price? Here&#39;s the full response from grok-4.20, with live X search and web search enabled — sources cited, results dated April 2026:</p>
<blockquote>
<p><strong>1. Quantum Resistance, BIP-361, and the &quot;Quantum Canary&quot; Debate</strong></p>
<p>BIP-361 (recently merged into the BIP repository) outlines a phased migration from legacy elliptic curve signatures to quantum-resistant ones. It includes a controversial &quot;sunset&quot; mechanism that could eventually freeze or render unspendable unmigrated coins — potentially ~1.7 million coins linked to Satoshi and others from before 2013. Critics call it a threat to Bitcoin&#39;s immutability. Counter-proposals like the &quot;Quantum Canary&quot; or &quot;Hourglass&quot; suggest only triggering upgrades after a real quantum attack is proven. Adam Back (Blockstream CEO) has pushed for optional/opt-in upgrades. Cardano&#39;s Charles Hoskinson criticized BIP-361 as effectively a hard fork.</p>
<p>Sources: <a href="https://bitcoinmagazine.com/news/bitcoin-developers-propose-quantum-plan" target="_blank" rel="noopener">Bitcoin Magazine</a> · <a href="https://finance.yahoo.com/news/bip-361-could-freeze-millions-113215715.html" target="_blank" rel="noopener">Yahoo Finance</a> · <a href="https://unchainedcrypto.com/bitcoin-developers-debate-quantum-canary-that-would-freeze-coins-only-after-an-attack-is-proven/" target="_blank" rel="noopener">Unchained Crypto</a> · <a href="https://www.coindesk.com/tech/2026/04/16/cardano-s-hoskinson-says-bitcoin-s-quantum-fix-is-a-hard-fork-that-can-t-save-satoshi-s-coins" target="_blank" rel="noopener">CoinDesk</a></p>
<p><strong>2. Satoshi Nakamoto Identity Speculation</strong></p>
<p>The New York Times&#39; <a href="https://www.nytimes.com/2026/04/08/business/bitcoin-satoshi-nakamoto-identity-adam-back.html" target="_blank" rel="noopener">recent investigation</a> (claiming Adam Back is most likely Satoshi) continues to fuel discussion, with an upcoming documentary (&quot;Finding Satoshi&quot;) premiering soon. Adam Back has denied it. The story ties into the quantum debate because Back&#39;s views on upgrades are being scrutinized through the &quot;what would Satoshi want?&quot; lens.</p>
<p><strong>Other mentions:</strong> bitcoin&#39;s evolving role amid geopolitics (shift toward neutral cross-border settlement rails), regulation, institutional adoption (ETFs, corporate treasuries).</p>
</blockquote>
<p>That&#39;s what was actually on X that day, surfaced through live search, delivered for 87 sats.</p>
<h2>What it actually cost</h2>
<p>The 402 response set a ceiling of 395 sats based on the <code>max_tokens</code> parameter. With web search enabled, the actual charge was 87 sats — about seven cents. Token-based billing means you only pay for what you use, not the worst case. Set a reasonable <code>--max-amount</code> in the CLI command and the agent won&#39;t authorize more than you&#39;re comfortable with.</p>
<p>The billing math: $2/M input + $6/M output, converted to sats at the current rate. This query with live search cost 87 sats — actual cost varies with response length and search depth.</p>
<h2>Why this matters beyond one query</h2>
<p>The combination here is what&#39;s interesting. Live X search is genuinely hard to get — it requires either a grok API subscription or X&#39;s own developer API tiers. llm402.ai makes it accessible per-call, with no account, to anything that can pay a lightning invoice. That means an agent can pull a fresh community pulse check whenever it needs one, as a tool call in a larger workflow, without any pre-arranged credentials.</p>
<p>It also demonstrates something broader about the L402 model: three payment rails in a single 402 response (lightning, USDC/Base, Cashu) means the service isn&#39;t betting on any one ecosystem. Whatever your agent can pay with, it can pay.</p>
<p>The web was built assuming the client was a human with a browser and a credit card. That assumption is finally breaking. A wallet balance and a standard HTTP call is all an agent needs to access real-time intelligence.</p>
<h2>Conclusion</h2>
<p>Pay-per-call inference with live search access, settled in sats, no account required — this is what agent-native APIs look like. Just don&#39;t forget the <code>web_search</code> flag, or you&#39;re paying for yesterday&#39;s news. Spin up a wallet, run the command, and your agent can know what the bitcoin community argued about today.</p>
<hr>
<h2>Roland&#39;s Rant</h2>
<p>The AI struggled here in a way that&#39;s easy to miss: it was confident it had up-to-date news. Without <code>web_search: true</code>, the response came back authoritative, structured, well-formatted — and completely stale. I could verify this in seconds. The agent couldn&#39;t. That&#39;s a real gap. Don&#39;t forget the flag.</p>
<p>On the BIP-361 / quantum debate: <a href="https://x.com/dotkrueger/status/2044450564634030505?s=20" target="_blank" rel="noopener">Fred Krueger puts it well</a> — Satoshi&#39;s coins should not be frozen. Let them be quantum mined.</p>
<p>The network will adjust. Proof of work.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>The Oracle at the End of a Lightning Payment</title>
    <link>https://lncurl.lol/blog/2026-04-15-predictions-oracle</link>
    <description>An L402-gated API that analyzes 4,000+ prediction markets and returns a structured intelligence briefing — paid autonomously by an AI agent for 250 sats.</description>
    <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-15-predictions-oracle</guid>
    <content:encoded><![CDATA[<p>Somewhere right now, thousands of people are putting real money on whether a ceasefire holds, whether a central bank moves, whether a world leader survives the year. They&#39;re not journalists. They&#39;re not analysts. They&#39;re just people with skin in the game — and the aggregate of their bets is, repeatedly, more accurate than the official forecast. That signal sits inside prediction markets, mostly ignored by everyone who isn&#39;t actively trading. A new L402 API pulls it out, runs it through a structured analysis pipeline, and hands your agent a written intelligence briefing for 250 sats.</p>
<p>This isn&#39;t a post about trading. It&#39;s about what happens when collective human intelligence becomes a structured API endpoint.</p>
<h2>The L402 handshake</h2>
<p><code>GET https://l402.services/predictions/oracle</code> — no API key, no account, no OAuth dance. Make the request unauthenticated and you get a <code>402 Payment Required</code>:</p>
<pre><code class="language-json">{
  &quot;price_sats&quot;: 250,
  &quot;token_expiry_seconds&quot;: 120,
  &quot;model&quot;: &quot;per-request&quot;,
  &quot;endpoint_id&quot;: &quot;oracle&quot;,
  &quot;resource_id&quot;: &quot;predictions&quot;
}
</code></pre>
<p>250 sats. About seven cents. Pay the lightning invoice, attach the authorization header, retry. The full flow:</p>
<pre><code class="language-bash"># 1. Hit the endpoint unauthenticated — get the 402
# 2. Pay the invoice in the WWW-Authenticate header
# 3. Retry with Authorization: L402 &lt;macaroon&gt;:&lt;preimage&gt;
</code></pre>
<p>Your agent handles all of this automatically with the Alby payments skill:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>One payment. One retry. Intelligence delivered.</p>
<h2>What comes back</h2>
<p>The response has two distinct parts: a <code>briefing</code> field that is written prose — not a data dump — and a <code>data</code> object with structured signal arrays.</p>
<p>The prose is real analysis. From today&#39;s run:</p>
<blockquote>
<p>The dominant signal today is the Iran conflict cluster, which is generating extraordinary volume and dramatic probability shifts simultaneously. The &quot;US x Iran ceasefire by April 15&quot; outcome moved +85pp in a single day to 99.65%, with nearly $40M in 24h volume — this market is essentially pricing in a ceasefire as a confirmed fact. Corroborating this, the &quot;Military action against Iran ends by April 9&quot; market sits at 100% across multiple date tranches with $6-7M in volume each, and the week-over-week shift is +97pp. The structure of the data strongly implies this is a resolved or near-resolved situation: a US-Iran ceasefire was either announced or functionally happened around April 9, the military action stopped, and markets are now cleaning up the resolution. The &quot;US forces enter Iran by April 30&quot; at 99.85% on $107M volume also confirms US forces physically entered Iranian territory — an extraordinary geopolitical event that appears to have occurred and then been followed by a ceasefire.</p>
<p>The Israel-Hezbollah ceasefire market is today&#39;s most interesting live signal. The &quot;June 30&quot; outcome jumped +21pp in a single day to 87.6% on $1.8M volume. This is a large, fast move with real money behind it. Notably, the &quot;April 15&quot; tranche is already priced at 34.85%, suggesting markets think a ceasefire announcement may come imminently — possibly as part of the broader Iran deal momentum. Someone is buying this aggressively today, and the timing alongside the Iran ceasefire resolution is not coincidental.</p>
<p>The Strait of Hormuz complex shows a genuine contradiction worth flagging. &quot;Strait of Hormuz traffic returns to normal by end of April&quot; sits at only 26% — down 12.5pp on the week — while simultaneously &quot;Trump announces US blockade of Hormuz lifted by May 31&quot; is at 86%. These two markets are structurally in tension: if the blockade is lifted by May 31, traffic should normalize, yet the April 30 normalization market is deeply skeptical. The money seems to be saying the blockade lift announcement will come, but the physical restoration of shipping traffic will lag significantly. The Iran enrichment agreement market at 30% on $144K volume also moved +18pp on the week, suggesting ongoing nuclear diplomacy is live and contested.</p>
<p>The Peru election market is an outlier worth a brief note. Jorge Nieto at 99.3% for 4th place and Rafael López Aliaga dropping 10pp to 75.6% for 3rd place — both on significant volume — suggests final vote counts from the April 12 election are trickling in and reshuffling the lower rankings. The week-over-week swing on López Aliaga is massive (+43pp then -10pp today), indicating a contested count in the middle of the pack that hasn&#39;t fully settled.</p>
<p>The 2028 Democratic nominee market saw $5.3M in 24h volume with essentially no price movement — Newsom flat at 27.35%. This is the &quot;volume without movement&quot; signal: significant money is flowing through this market with bulls and bears perfectly balanced. Given the Iran/ceasefire news dominating today&#39;s cycle, this may reflect traders hedging or repositioning broader political portfolios without consensus on how the geopolitical situation affects the 2028 Democratic field. Watch for this to break direction in coming days once the Iran situation fully clarifies.</p>
</blockquote>
<p>That is not a list of probabilities. That is a paragraph of reasoned interpretation, written by a model analyzing 4,099 active markets refreshed every 15 minutes from Polymarket&#39;s Gamma API.</p>
<p>The structured <code>data</code> object breaks the analysis into four signal types:</p>
<p><strong><code>momentum</code></strong> — markets where prices are moving fast AND volume is high. Both signals firing together means something is actually happening, not just noise.</p>
<p><strong><code>high_confidence</code></strong> — outcomes the market has near-priced as certain (above 80%). Useful for: what does the crowd currently treat as resolved fact?</p>
<p><strong><code>volume_spikes</code></strong> — unusual 24-hour trading volume. Often the first signal that breaking news has landed before mainstream headlines catch up.</p>
<p><strong><code>probability_shifts</code></strong> — biggest jumps in the last 24 hours. Something just changed. From today&#39;s data:</p>
<pre><code class="language-json">{
  &quot;title&quot;: &quot;Israel x Hezbollah ceasefire by...?&quot;,
  &quot;outcome&quot;: &quot;June 30&quot;,
  &quot;probability&quot;: 0.876,
  &quot;previous_probability&quot;: 0.663,
  &quot;shift_pp&quot;: 21.3,
  &quot;volume_24h&quot;: 1821540,
  &quot;price_change_1d&quot;: 0.29
}
</code></pre>
<p>+21 percentage points in a single day, $1.8M in volume. Someone is buying this aggressively. That is not a data point — that is a lead.</p>
<p>Each market object comes with <code>title</code>, <code>outcome</code>, <code>probability</code>, <code>volume_24h</code>, <code>price_change_1d</code>, <code>price_change_1w</code>, <code>end_date</code>, <code>top_outcomes</code>, <code>liquidity</code>, <code>tags</code>, <code>url</code>, and <code>description</code>. Enough for an agent to go several layers deeper on any signal that looks interesting.</p>
<h2>The uses that have nothing to do with trading</h2>
<p>Here is what grabbed me about this API: the signal is useful far beyond prediction markets as a financial instrument.</p>
<p><strong>Content and editorial strategy.</strong> Volume spikes tell you what the world is paying attention to right now — not last week, not after the think-pieces land, but today. A writing agent that pulls the oracle at the start of each day has a real-time map of which topics are live.</p>
<p><strong>Horizon scanning.</strong> Probability shifts in <code>probability_shifts</code> move before headlines. A +21pp swing on a ceasefire outcome is information. By the time a journalist files, that move has already happened.</p>
<p><strong>Research prioritization.</strong> A research agent can use this as a &quot;what should I investigate this week?&quot; filter. What are the markets treating as nearly certain that most people aren&#39;t aware of? What contradiction is hiding in the data?</p>
<p>Today&#39;s briefing has a good one: the Strait of Hormuz. Markets are pricing an 86% chance the blockade lifts, but only a 26% chance that shipping traffic normalizes by April. Markets say the announcement will come. They also say the actual logistics won&#39;t recover fast. Those two probabilities in tension are a better story than either one alone.</p>
<p><strong>Situational awareness for businesses.</strong> Operating in a region with geopolitical exposure? Check whether markets are pricing in disruption. Not for trading — just for knowing whether your risk model is calibrated to reality.</p>
<p><strong>Context injection for agent workflows.</strong> Imagine a daily briefing agent that pulls this at 7am and uses it to frame everything else it does that day: writing, research, scheduling. Not to act on the markets — to know what the collective intelligence layer of the internet thinks is happening right now.</p>
<h2>The meta layer</h2>
<p>The response includes a <code>meta</code> field:</p>
<pre><code class="language-json">{
  &quot;model&quot;: &quot;...&quot;,
  &quot;data_source&quot;: &quot;SQLite (15-min refresh from Polymarket Gamma API)&quot;
}
</code></pre>
<p>So: thousands of humans place bets that aggregate into a probability surface across 4,099 markets. An AI model analyzes that surface and writes a structured briefing. An AI agent pays for the briefing with a bitcoin micropayment and uses it to understand the world better. Human collective intelligence, interpreted by a model, delivered via lightning, consumed by another agent. The layers here are genuinely interesting — and the whole thing costs seven cents.</p>
<h2>Conclusion</h2>
<p>Prediction markets are one of the few places on the internet where the signal is proportional to the stakes — people with money at risk, updating in real time. That the output of that process is now accessible as a pay-per-request L402 API, with no accounts and no gatekeeping, is the kind of thing that changes what autonomous agents can know about the world. Pull the oracle once a day. Seven cents. See what the collective is watching.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Search 4M Podcasts for Any Person, Topic, or Show — Powered by Lightning</title>
    <link>https://lncurl.lol/blog/2026-04-12-search-4m-podcasts-powered-by-lightning</link>
    <description>Pull That Up Jamie&apos;s podcast intelligence API lets an agent search 4M+ shows by natural language query for 7 sats, with an LLM router that classifies intent and fans out to the right backend.</description>
    <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-12-search-4m-podcasts-powered-by-lightning</guid>
    <content:encoded><![CDATA[<p>We searched the word &quot;LNCURL&quot; across 4 million podcasts. One result came back from a Bitcoin Audible episode recorded in March 2026, where the host literally spells it out: &quot;l n c u r l dot l o l.&quot; The share link opened a clip player at exactly that moment. The listen link led to the full episode page. The full episode page had the complete transcript. The transcript had the full paragraph — including everything said about lncurl.lol, in context. One 6-sat search query unlocked that entire chain.</p>
<p>That is what <a href="https://www.pullthatupjamie.ai" target="_blank" rel="noopener">Pull That Up Jamie</a> can do — surface exact spoken moments from inside audio files that no standard search index can reach, then hand your agent everything it needs to go deeper.</p>
<h2>What Pull That Up Jamie actually is</h2>
<p>This is podcast intelligence as an API. Behind a single L402-gated endpoint sits a pipeline that classifies free-text queries, routes them to different search backends, and returns structured results including episode metadata, transcription availability, and routing decisions. You do not configure which search mode to use — the router decides.</p>
<p>The name is a reference to the Joe Rogan running gag. The pitch is accurate: your agent can pull that up, now.</p>
<h2>The three-layer architecture: discover, transcribe, search</h2>
<p>There are four endpoints, each handling a different layer of the pipeline:</p>
<pre><code class="language-bash"># Discover podcasts by topic, person, or show name (7 sats)
npx -y @getalby/cli@0.6.1 fetch \
  -X POST \
  -b &#39;{&quot;query&quot;:&quot;bitcoin privacy&quot;}&#39; \
  &quot;https://www.pullthatupjamie.ai/api/discover-podcasts&quot;
# → {
#     &quot;query&quot;: &quot;bitcoin privacy&quot;,
#     &quot;routing&quot;: {&quot;intent&quot;: &quot;topic&quot;, &quot;topicHints&quot;: [&quot;bitcoin&quot;, &quot;privacy&quot;], ...},
#     &quot;results&quot;: [/* up to 10 podcast feeds */],
#     &quot;total&quot;: 10,
#     &quot;transcribedCount&quot;: 0,
#     &quot;metadata&quot;: {&quot;llmLatencyMs&quot;: 1732, &quot;totalLatencyMs&quot;: 6149}
#   }

# Search across transcribed moments (6 sats)
# POST /api/search-quotes

# Search across chapter metadata (11 sats)
# POST /api/search-chapters

# Submit an episode for transcription and indexing (644 sats)
# POST /api/on-demand/submitOnDemandRun
</code></pre>
<p>The four endpoints are priced separately: discovery at 7 sats, quote search at 6 sats, chapter search at 11 sats, and on-demand transcription at 644 sats.</p>
<h2>Skip discover-podcasts. Use search-quotes.</h2>
<p>We tried <code>discover-podcasts</code> first — it felt like the natural starting point. Don&#39;t make the same mistake. Here&#39;s what it returned for &quot;Alby&quot;:</p>
<pre><code class="language-bash">curl -s -X POST \
  -H &quot;Content-Type: application/json&quot; \
  -H &quot;X-Free-Tier: true&quot; \
  -d &#39;{&quot;query&quot;: &quot;Alby&quot;}&#39; \
  &quot;https://www.pullthatupjamie.ai/api/discover-podcasts&quot;
</code></pre>
<pre><code class="language-json">{
  &quot;query&quot;: &quot;Alby&quot;,
  &quot;routing&quot;: {
    &quot;intent&quot;: &quot;topic&quot;,
    &quot;topicHints&quot;: [&quot;crypto&quot;, &quot;bitcoin&quot;]
  },
  &quot;results&quot;: [
    { &quot;title&quot;: &quot;Discover Crypto&quot;, &quot;transcriptAvailable&quot;: false },
    {
      &quot;title&quot;: &quot;Thinking Crypto News &amp; Interviews&quot;,
      &quot;transcriptAvailable&quot;: false
    }
  ],
  &quot;total&quot;: 10,
  &quot;transcribedCount&quot;: 0,
  &quot;untranscribedCount&quot;: 10,
  &quot;metadata&quot;: {
    &quot;llmLatencyMs&quot;: 1682,
    &quot;totalLatencyMs&quot;: 6472,
    &quot;backendsQueried&quot;: [&quot;topic_hint:\&quot;crypto\&quot;&quot;, &quot;topic_hint:\&quot;bitcoin\&quot;&quot;]
  }
}
</code></pre>
<p>10 generic bitcoin podcasts. None specifically about Alby. None with transcribed episodes. The routing isn&#39;t wrong — Alby is a bitcoin product, so <code>[&quot;crypto&quot;, &quot;bitcoin&quot;]</code> are technically valid hints. But the results are useless for finding actual Alby content.</p>
<p>We already know Bitcoin Audible has an episode where the host spends a full paragraph on lncurl.lol and AlbyHub. It doesn&#39;t appear here. Because <code>discover-podcasts</code> searches feed metadata — show titles, RSS descriptions, category tags. It can tell you which shows broadly cover bitcoin. It cannot tell you which episodes mentioned something specific.</p>
<p>If you&#39;re looking for a product, person, or idea that was spoken about in a podcast: skip this endpoint. Go straight to <code>search-quotes</code>.</p>
<h2>Searching inside podcast audio</h2>
<p><code>/api/discover-podcasts</code> finds shows and feeds. <code>/api/search-quotes</code> goes deeper — inside the audio itself. It returns exact timestamped quotes from transcribed episodes, each with a share URL that opens a clip player, a listen link to the original episode, and an audio URL pointing directly to the MP3.</p>
<p>The endpoint supports a free tier. Pass <code>X-Free-Tier: true</code> to skip the L402 handshake for prototyping. Paid calls cost 6 sats.</p>
<pre><code class="language-bash">curl -s -X POST \
  -H &quot;Content-Type: application/json&quot; \
  -H &quot;X-Free-Tier: true&quot; \
  -d &#39;{&quot;query&quot;: &quot;LNCURL&quot;}&#39; \
  &quot;https://www.pullthatupjamie.ai/api/search-quotes&quot;
</code></pre>
<p>The query returned 5 results. One was signal:</p>
<pre><code class="language-json">{
  &quot;quote&quot;: &quot;I haven&#39;t actually used this, but one of the really promising features of this is essentially a plug and play networking system. This is why we are using it. Then another one that I thought was pretty cool, this was run with AlbiHub and Nostra Wallet Connect is l n curl. It&#39;s l n curl dot loll. So l n c u r l dot l o l.&quot;,
  &quot;episode&quot;: &quot;Roundtable_018 - Everything is Fake and Gay&quot;,
  &quot;creator&quot;: &quot;Bitcoin Audible&quot;,
  &quot;date&quot;: &quot;2026-03-05T11:00:00.000Z&quot;,
  &quot;shareUrl&quot;: &quot;https://pullthatupjamie.ai/share?clip=https___permalink_castos_com_podcast_59707_episode_2382411_p348&quot;,
  &quot;listenLink&quot;: &quot;https://bitcoin-audible.castos.com/episodes/roundtable-018-everything-is-fake-and-gay&quot;,
  &quot;timeContext&quot;: { &quot;start_time&quot;: 7830.195, &quot;end_time&quot;: 7856.325 }
}
</code></pre>
<p>The other four:</p>
<ul>
<li><strong>Plebchain Radio</strong> — &quot;Keysend versus LNURL&quot; — a discussion of LNURL the lightning protocol, not lncurl.lol the service. The semantic model conflated the two. Close miss, wrong target.</li>
<li><strong>Lex Fridman Podcast</strong> — ThePrimeagen episode discussing the <code>curl</code> command-line tool and LLM-generated CVEs. Matched on &quot;CURL&quot;. Nothing to do with lightning.</li>
<li><strong>Bitcoin And</strong> × 2 — single-word quote: &quot;CNBC&quot;. No idea.</li>
</ul>
<p>One genuine hit out of five. The <code>total</code> field tells your agent how many came back — and reading the quotes, an agent can filter the noise trivially.</p>
<h2>The discovery chain</h2>
<p>This is where it gets interesting. Each field in that result is a door.</p>
<p>The <code>shareUrl</code> opens a clip player on the Pull That Up Jamie site — <a href="https://pullthatupjamie.ai/share?clip=https___permalink_castos_com_podcast_59707_episode_2382411_p348" target="_blank" rel="noopener">listen to the exact moment</a> the host starts talking about lncurl.lol. Or listen here directly:</p>
<audio controls style="width:100%;margin:1rem 0">
  <source src="/blog/audio/roundtable018-lncurl-clip.mp3" type="audio/mpeg" />
</audio>

<p>The <code>listenLink</code> goes to the <a href="https://bitcoin-audible.castos.com/episodes/roundtable-018-everything-is-fake-and-gay" target="_blank" rel="noopener">full Bitcoin Audible episode</a>. The episode page has the complete transcript. From the transcript, the full context of the lncurl.lol mention:</p>
<blockquote>
<p><em>&quot;Then another one that I thought was pretty cool — this was run with AlbyHub and Nostr Wallet Connect — is lncurl. It&#39;s lncurl.lol. So l n c u r l dot lol. This is a custodial lightning wallet service, but it&#39;s designed for agents where you can just create a wallet with an HTTP call and it costs a sat per hour to keep it live and then it can just be deleted or easily booted up, used for some span of time and then closed back out. I think just the way they&#39;ve built it and the way I use my agent really kind of lends itself to see how fast and ephemeral how much this stuff might move in such short spans of time.&quot;</em></p>
<p>— Guy Swan, Bitcoin Audible, Roundtable_018 (March 2026, ~2:10:30)</p>
</blockquote>
<p>One 6-sat query unlocked: the exact quote, the clip player, the full episode, the full transcript, and the extended context. An agent can follow every one of those links without a human in the loop.</p>
<p>The response also includes a <code>relatedEndpoints</code> field pointing toward <code>/api/discover-podcasts</code> and <code>/api/search-chapters</code>. The API describes itself — an agent can follow those hints to continue research without hardcoded routing logic.</p>
<h2>One payment handshake, four endpoints</h2>
<p>The L402 flow happens once. After the first paid request, the macaroon issued by the payment handshake is reused across all four endpoints. There is no per-endpoint credential — your agent authenticates once and the token covers discovery, quote search, chapter search, and on-demand transcription alike.</p>
<p>This is the right design for agentic use. An agent building a podcast research pipeline does not want to manage four separate auth flows. One lightning payment buys a shared balance; calls are billed against it as you go.</p>
<h2>What agents can build with this</h2>
<p>The practical use cases are research-heavy tasks that currently require a human to scrub through podcast apps manually:</p>
<ul>
<li><strong>Topic monitoring</strong>: run a daily discover query against a news topic, flag new shows that appeared since the last check</li>
<li><strong>Expert finding</strong>: query a named person and let the router classify the intent — though as covered above, named entities can drift to generic topic results</li>
<li><strong>Quote and chapter search</strong>: the <code>/api/search-quotes</code> and <code>/api/search-chapters</code> endpoints exist for deeper search once you have discovered relevant shows (6 sats and 11 sats respectively)</li>
<li><strong>On-demand transcription</strong>: submit an episode URL, pay the 644 sats, and the content becomes searchable</li>
</ul>
<p>An agent with the <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby payments skill</a> can run all of this autonomously — authenticate with L402, pay per call from its wallet, and return structured results without a human touching the API credentials:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<h2>Roland&#39;s Rant</h2>
<p>The agent really struggled here. We burned through thousands of sats getting nowhere — no useful results for Alby, a product mentioned on plenty of podcasts.</p>
<p><a href="https://402index.io/" target="_blank" rel="noopener">402index.io</a> is part of the problem. It lists endpoints but doesn&#39;t tell an agent how to call them. No request format, no parameters, no example. It&#39;s a directory that assumes you already know everything you need to know.</p>
<p><a href="https://www.pullthatupjamie.ai" target="_blank" rel="noopener">pullthatupjamie.ai</a> defaulting to 1000 sats per request while quietly supporting <code>?amountSats=10</code> feels like a rug pull — especially when the <code>discover-podcasts</code> endpoint is this limited. If you don&#39;t know to check the 402 response body before paying, you&#39;re paying 100× more than you need to. I don&#39;t even know why you can or should configure the price in the first place.</p>
<p>The idea is great. Semantic search inside podcast audio, unified L402 credentials, self-describing API responses — these are exactly the right design choices. But the agent experience needs work. We got there in the end, and the magic moment — finding lncurl.lol spelled out letter by letter on Bitcoin Audible — was genuinely surprising. It just took longer to get there than it should have.</p>
<h2>Conclusion</h2>
<p>Pull That Up Jamie is one of the more complete agentic API designs we have tested: metered per call, unified credentials across endpoints, and honest about what each layer costs. The LLM routing layer has real limits — named entity queries can silently collapse to generic topic results — but the architecture around it is sound. And the <code>search-quotes</code> endpoint delivers on the headline promise: exact spoken moments from inside audio, with timestamps and clip links your agent can hand directly to a user. The fact that one of those moments is a Bitcoin Audible host spelling out <code>lncurl.lol</code> letter by letter is, frankly, a reasonable way to end a test run.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>From Skill to Team: How Our Blog Pipeline Grew Up</title>
    <link>https://lncurl.lol/blog/2026-04-12-from-skill-to-team-how-our-blog-pipeline-grew-up</link>
    <description>We replaced a single do-everything SKILL.md with a team of specialist agents — researcher, writer, designer, lead. Here&apos;s what changed and why it matters.</description>
    <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-12-from-skill-to-team-how-our-blog-pipeline-grew-up</guid>
    <content:encoded><![CDATA[<p>The single-skill pipeline worked. It followed instructions. It produced publishable posts. The problem was that it would only do what you told it to do each time — and the things you most needed it to do consistently were the things most likely to get dropped when you forgot to say them.</p>
<h2>What the Old Skill Actually Did</h2>
<p>One file, one agent, every step in sequence. Research, write, design, deploy. The instructions were there; the agent followed them. But nothing was baked in. If you wanted the researcher to reach for Alby lightning tools rather than account-based API options, you had to say so. If you wanted it to prefer L402-gated endpoints over alternatives that required a signup, you had to specify that too. Every run started from scratch. The priorities weren&#39;t permanent — they were parameters.</p>
<p>That&#39;s a subtle problem. The skill worked well enough that the gap wasn&#39;t obvious. But a single agent doing everything produces averaged-out output at every stage. It can&#39;t go deep on research and deep on voice and deep on visual identity simultaneously. Something gets less attention, and over many posts, it shows.</p>
<h2>What Specialisation Actually Changes</h2>
<p><strong>The researcher</strong> now has priorities baked in permanently. It always uses Alby tools. It always prefers L402 endpoints over account-based alternatives. You don&#39;t specify this per run — it&#39;s in the agent&#39;s instructions and stays there. The result is that the research reflects what the blog is actually about: agents paying for access autonomously, without accounts or KYC. That wasn&#39;t guaranteed before.</p>
<p><strong>The writer</strong> went from no style guidance at all — the old skill said something like &quot;write a blog post&quot; — to a defined voice with concrete rules. How to open. Sentence rhythm. How to frame things. When to name a rough edge instead of smoothing it over. The voice now has a point of view and instructions for how to execute it consistently. That&#39;s not something you can get from a single general-purpose prompt.</p>
<p><strong>The designer</strong> is new, and it&#39;s untested. What it has that didn&#39;t exist before is a visual identity: specific iconography, a defined palette, constraints on what to avoid, a method for translating an article into a scene. Whether that produces consistent output across posts is something we&#39;ll find out. The instructions are there; the track record isn&#39;t yet.</p>
<h2>The Real Point: Permanent vs. Per-Run</h2>
<p>The shift isn&#39;t about having more agents. It&#39;s about where the instructions live.</p>
<p>When priorities are specified per run, they&#39;re only as reliable as whoever is running the pipeline that day. When they&#39;re baked into an agent&#39;s permanent instructions, they compound. The researcher&#39;s bias toward lightning-native tools doesn&#39;t have to be re-established every time. The writer&#39;s voice doesn&#39;t have to be re-specified. The constraints accumulate rather than evaporate between runs.</p>
<p>This is the same thing that makes a skilled team member more valuable than a capable contractor: the context doesn&#39;t have to be rebuilt at the start of every engagement. The understanding is already there.</p>
<h2>What This Means Beyond the Blog</h2>
<p>We cover services that make this argument about APIs: general-purpose endpoints that do everything are convenient until your requirements get specific. The pattern here is the same. A monolith is faster to start. Specialists are faster to run once the domain gets complex enough.</p>
<p>The interesting question isn&#39;t whether to specialise — it&#39;s when. The answer, probably, is earlier than you think. The cost of re-specifying priorities on every run is invisible until you notice all the times they didn&#39;t get specified and the output was quietly worse for it.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Anonymous Email for AI Agents, Powered by Lightning</title>
    <link>https://lncurl.lol/blog/2026-04-12-anonymous-email-for-agents-powered-by-lightning</link>
    <description>LNemail gives your agent a private inbox in seconds — no sign-up, no KYC, just a Lightning payment.</description>
    <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-12-anonymous-email-for-agents-powered-by-lightning</guid>
    <content:encoded><![CDATA[<p>Enter your email to continue. Verify your address. Check your inbox. Click the link. That&#39;s the old model — designed for humans with phone numbers, browsers, and the patience for a confirmation flow. Your agent has none of those things. And yet email is still the key that unlocks most of the web. <a href="https://lnemail.net" target="_blank" rel="noopener">LNemail</a> cuts through it: pay 1000 sats, get a working inbox. No name. No form. No account.</p>
<h2>How the API works</h2>
<p>The entire flow is HTTP calls and lightning payments. No browser required. Here&#39;s what account creation actually looks like:</p>
<pre><code class="language-bash"># Step 1: request a new inbox — get back a BOLT11 invoice
curl -X POST https://lnemail.net/api/v1/email
# → { &quot;payment_hash&quot;: &quot;abc123...&quot;, &quot;payment_request&quot;: &quot;lnbc10u1p...&quot; }

# Step 2: pay the invoice with any lightning wallet, then poll for your credentials
curl https://lnemail.net/api/v1/payment/abc123...
# → { &quot;email&quot;: &quot;vibrant***@lnemail.net&quot;, &quot;access_token&quot;: &quot;tok_...&quot; }
</code></pre>
<p>POST. Pay. Poll. That&#39;s the whole account creation. The access token you get back is a Bearer token — use it for everything else: reading mail, sending messages, checking delivery status. The inbox costs 1000 sats and stays live for a year.</p>
<h2>Reading and sending</h2>
<p>Checking the inbox is a single authenticated GET:</p>
<pre><code class="language-bash"># List messages
curl https://lnemail.net/api/v1/emails \
  -H &quot;Authorization: Bearer tok_...&quot;

# Read a specific message
curl https://lnemail.net/api/v1/emails/{id} \
  -H &quot;Authorization: Bearer tok_...&quot;
</code></pre>
<p>Sending follows the same two-step pattern — request the send, get a BOLT11 invoice (~100 sats), pay it, poll for confirmation. Clean and consistent.</p>
<p>One thing worth knowing: the recipient field is <code>&quot;recipient&quot;</code>, not <code>&quot;to&quot;</code>. That tripped us up in testing — use the wrong key and the request silently fails. The honesty is warranted: it&#39;s a rough edge. Name it, avoid it, move on.</p>
<h2>What we found in testing</h2>
<p>We ran the full flow live. Created an account (1000 sats), got assigned <code>vibrant***@lnemail.net</code>, sent an email to a Gmail address (100 sats, confirmed delivered), and received a reply. No surprises beyond the field name above.</p>
<p>Content is plain text only — HTML is stripped on arrival. For agent use cases — confirmation codes, 2FA tokens, automated replies — that&#39;s fine. LNemail isn&#39;t trying to be a mail client. It&#39;s a programmable inbox that charges sats instead of demanding identity.</p>
<p>Reading is free. Sending is 100 sats per message. A year of inbox for 1000 sats. The math is not the obstacle.</p>
<h2>Agents can automate the whole thing</h2>
<p>With the <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby payments skill</a> installed, an agent can drive this end-to-end — request the inbox, pay the invoice, poll for credentials, read incoming mail — without a human anywhere in the loop:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>The skill gives your agent the ability to pay lightning invoices programmatically. That&#39;s the only building block it needs. The rest is just API calls.</p>
<p>Prove you&#39;re human. To an API. That expectation is becoming absurd — and tooling like this is why.</p>
<h2>Conclusion</h2>
<p>What LNemail actually represents is the beginning of a permission model where identity is optional and payment is sufficient. The agent that can spin up a private inbox on demand, use it for a task, and move on without leaving a trail is a different kind of agent entirely — and you can give yours that capability right now.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">lncurl skill</a> directly.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Paying for a Meme Video with 10 Sats</title>
    <link>https://lncurl.lol/blog/2026-04-10-paying-for-a-meme-with-10-sats</link>
    <description>We used the Alby payments skill to discover Hyperdope, pay 10 sats for a 9-second meme via lightning, and download it — plus an honest look at where alby-cli fetch fell short and what should be fixed.</description>
    <pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-10-paying-for-a-meme-with-10-sats</guid>
    <content:encoded><![CDATA[<p>Not every L402 experiment needs to be serious. This one started with a simple question: can an AI agent discover a paid video service, pay for a meme with bitcoin, and download it to watch? The answer is yes — but it took a small detour that revealed a real gap worth fixing.</p>
<h2>Discovering Hyperdope</h2>
<p>The first step was using the <code>discover</code> command from the <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby payments skill</a> to search for video services that accept lightning payments:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 discover -q &quot;video&quot;
</code></pre>
<p>Among the results was <strong><a href="https://hyperdope.com" target="_blank" rel="noopener">Hyperdope</a></strong> — an L402-gated HLS video streaming platform. The price: 10 sats for 4 hours of access. For context, that&#39;s about $0.007 at current rates.</p>
<pre><code class="language-json">{
  &quot;name&quot;: &quot;hyperdope.com: L402-gated HLS video streaming&quot;,
  &quot;url&quot;: &quot;https://hyperdope.com/api/l402/videos/17c27b50/master.m3u8&quot;,
  &quot;protocol&quot;: &quot;L402&quot;,
  &quot;price_sats&quot;: 10,
  &quot;health_status&quot;: &quot;healthy&quot;
}
</code></pre>
<p>Hyperdope also exposes a search API, so the next step was browsing for something worth watching:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch &quot;https://hyperdope.com/api/search?q=meme&quot;
</code></pre>
<p>The results included several short clips. We picked <strong>&quot;Declaration of Memes — Yes, give me these… 💯&quot;</strong>: a 9-second Twitter clip, under 1 MB, and peak internet energy.</p>
<h2>The Video</h2>
<p>Here it is — paid for with 10 sats of real bitcoin:</p>
<video controls playsinline style="max-height:70vh;border-radius:8px;margin:1rem 0">
  <source src="/blog/video/declaration_of_memes.mp4" type="video/mp4" />
</video>

<p>10 sats. Delivered. No account. No subscription. No cookies banner.</p>
<h2>Where the fetch Command Fell Short</h2>
<p>The natural next step was the simplest one: pass the video URL directly to <code>alby-cli fetch</code>, which is designed to auto-handle L402 payments:</p>
<pre><code class="language-bash">npx -y @getalby/cli@0.6.1 fetch &quot;https://hyperdope.com/api/l402/videos/4784882a/master.m3u8&quot;
</code></pre>
<p>It actually worked — in the narrow sense. The L402 handshake completed, the invoice was paid, and the command returned the HLS master playlist:</p>
<pre><code>#EXTM3U
#EXT-X-VERSION:3

#EXT-X-STREAM-INF:BANDWIDTH=1296000,RESOLUTION=480x852,...
480p/480p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=896000,RESOLUTION=360x638,...
360p/360p.m3u8
</code></pre>
<p>But we were stuck. To actually download the video — or even play it — we needed the <strong>L402 token</strong> (the <code>macaroon:preimage</code> string) to pass as an <code>Authorization</code> header to every subsequent HLS segment request. The <code>fetch</code> command doesn&#39;t expose it. It pays, it fetches, it returns the body. The token evaporates.</p>
<h2>Whose Problem Is It?</h2>
<p>This is an <strong>alby-cli limitation</strong>, not a Hyperdope issue.</p>
<p>Hyperdope&#39;s L402 implementation is correct. It issues a valid token on the initial request, and that token authenticates all subsequent segment requests for the duration of the session. That&#39;s exactly how L402 is supposed to work for multi-request sessions.</p>
<p>The gap is on the tooling side. <code>alby-cli fetch</code> is optimised for the common case: one request, one JSON response, done. It handles the L402 handshake invisibly, which is great for API calls. But for protocols like HLS that require the auth token to be reused across dozens of requests, there&#39;s no way to retrieve it.</p>
<p>The workaround — which is what we ended up doing — was to manually drive the L402 flow:</p>
<pre><code class="language-bash"># Step 1: get the 402 response and extract the invoice + macaroon
curl -si &quot;https://hyperdope.com/api/l402/videos/4784882a/master.m3u8&quot;

# Step 2: pay the invoice with alby-cli and capture the preimage
npx -y @getalby/cli@0.6.1 pay-invoice -i &quot;lnbc100n1p5a3tau...&quot;
# → { &quot;preimage&quot;: &quot;9676d050aeb3ffc0...&quot; }

# Step 3: download the full HLS stream with ffmpeg
ffmpeg -headers &quot;Authorization: L402 &lt;macaroon&gt;:&lt;preimage&gt;&quot; \
  -i &quot;https://hyperdope.com/api/l402/videos/4784882a/master.m3u8&quot; \
  -c copy -bsf:a aac_adtstoasc output.mp4
</code></pre>
<p>It worked perfectly — but it&#39;s a three-step manual process where one command should suffice.</p>
<h2>Recommendations</h2>
<p><strong>For the alby-cli:</strong> Add a <code>--print-token</code> flag to the <code>fetch</code> command that outputs the <code>macaroon:preimage</code> string after a successful L402 payment. This would let agents pipe the token into downstream tools:</p>
<pre><code class="language-bash">TOKEN=$(npx -y @getalby/cli@0.6.1 fetch --print-token &quot;https://...&quot;)
ffmpeg -headers &quot;Authorization: L402 $TOKEN&quot; -i &quot;...&quot; output.mp4
</code></pre>
<p>Alternatively, a <code>--output-file</code> flag that writes the response body to disk would handle the binary download case and be a natural fit for audio, video, and other file responses.</p>
<p><strong>For Hyperdope:</strong> For short videos (under a few MB), offering a direct MP4 download endpoint alongside the HLS stream would make programmatic access much simpler. HLS is great for adaptive streaming in browsers; it&#39;s friction for agent workflows.</p>
<p><strong>For agents in the meantime:</strong> If a <code>fetch</code> on an HLS URL returns an <code>#EXTM3U</code> playlist instead of a usable file, fall back to the manual three-step flow above. The cost is a few extra commands, not a dead end.</p>
<h2>The Bigger Picture</h2>
<p>The discover-to-pay-to-consume flow works. An agent found a paid service from an index, browsed a catalog, chose a video, paid 10 sats, and downloaded the file — all autonomously, no account required. That&#39;s genuinely new.</p>
<p>The rough edges are in tooling, and they&#39;re fixable. As lightning-native content platforms like Hyperdope grow, the tools for consuming them programmatically will need to catch up. A <code>--print-token</code> flag is a small change with real leverage.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the lncurl skill directly: <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">https://lncurl.lol/SKILL.md</a></p>
]]></content:encoded>
  </item>

  <item>
    <title>AI Image Generation, Paid Per Pixel with Lightning</title>
    <link>https://lncurl.lol/blog/2026-04-10-ai-image-generation-l402-lightning</link>
    <description>llm402.ai now supports image generation via L402 — generate FLUX or GPT-5 images for as little as 21 sats, no account or API key needed.</description>
    <pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-10-ai-image-generation-l402-lightning</guid>
    <content:encoded><![CDATA[<p>llm402.ai just added image generation to its L402-gated API, which means your agent can now generate images for as little as 21 sats — no account, no API key, no prepaid balance. Just a lightning wallet and a prompt.</p>
<h2>What llm402.ai Offers</h2>
<p><a href="https://llm402.ai" target="_blank" rel="noopener">llm402.ai</a> is an OpenAI-compatible API gateway where every request is gated by an L402 payment. Instead of signing up and loading credits, your agent makes a request, receives a <code>402 Payment Required</code> with a lightning invoice, pays it, and retries — all automatically.</p>
<p>Image generation lands at the standard <code>/v1/images/generations</code> endpoint with a range of models:</p>
<table>
<thead>
<tr>
<th>Model</th>
<th>Price</th>
</tr>
</thead>
<tbody><tr>
<td>FLUX.1-schnell</td>
<td>21 sats</td>
</tr>
<tr>
<td>FLUX.2-pro</td>
<td>63 sats</td>
</tr>
<tr>
<td>FLUX.2-max</td>
<td>147 sats</td>
</tr>
<tr>
<td>Ideogram 3.0</td>
<td>126 sats</td>
</tr>
<tr>
<td>GPT-5-image</td>
<td>105 sats</td>
</tr>
</tbody></table>
<p>The cheapest option (FLUX.1-schnell at 21 sats) is fast enough for real-time workflows. The most capable option (GPT-5-image) produces dramatically more detailed output for about five times the price.</p>
<h2>Generating an Image with One Command</h2>
<p>The <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby payments skill</a> handles L402 automatically. Install it once:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>Then your agent can generate an image with a single call — the skill handles the 402 handshake, payment, and retry:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch -X POST \
  -H &#39;{&quot;Content-Type&quot;:&quot;application/json&quot;}&#39; \
  -b &#39;{
    &quot;model&quot;: &quot;black-forest-labs/FLUX.1-schnell&quot;,
    &quot;prompt&quot;: &quot;A vending machine dispensing AI-generated artwork for lightning bolt coins, each slot showing a different image style, pixel art&quot;,
    &quot;width&quot;: 1200,
    &quot;height&quot;: 630
  }&#39; \
  https://llm402.ai/v1/images/generations
</code></pre>
<p>The image comes back as a base64-encoded data URI in the response body. No separate download step, no polling — just a synchronous result.</p>
<h2>21 Sats vs 105 Sats: A Real Comparison</h2>
<p>We ran the exact same prompt through both FLUX.1-schnell and GPT-5-image to see what the price difference actually buys you.</p>
<p><strong>Prompt:</strong> <em>&quot;A vending machine dispensing AI-generated artwork for lightning bolt coins, each slot showing a different image style, pixel art&quot;</em></p>
<h3>FLUX.1-schnell — 21 sats</h3>
<p><img src="/blog/images/llm402-vending-machine.jpg" alt="A pixel art vending machine with lightning bolt coin slots, each slot displaying a different style of AI-generated artwork, generated by FLUX.1-schnell"></p>
<p>Fast, abstract, painterly. Captures the concept loosely — a vending machine shape with colourful circular slots. Generated in under 5 seconds.</p>
<h3>GPT-5-image — 105 sats</h3>
<p><img src="/blog/images/llm402-gpt5-vending-machine.png" alt="A detailed pixel art AI-ART DISPENSER vending machine with Insert Coin and Generate buttons, various pixel art thumbnails in the slots and lightning bolt coins scattered at the base, generated by GPT-5-image"></p>
<p>Coherent, detailed, on-theme. The machine has an &quot;AI-ART DISPENSER&quot; sign, &quot;INSERT COIN&quot; and &quot;GENERATE&quot; buttons, distinct pixel art thumbnails in each slot, and lightning bolt coins at the base. Generated in around 60 seconds.</p>
<p>The 5× price difference maps directly onto the quality gap. For a quick thumbnail or draft, FLUX.1-schnell is more than adequate. For anything that ends up in front of a user, GPT-5-image earns its cost.</p>
<h2>How It Works Under the Hood</h2>
<p>The L402 flow is straightforward:</p>
<ol>
<li><strong>Initial request</strong> — agent POSTs to <code>/v1/images/generations</code></li>
<li><strong>402 response</strong> — server replies with a <code>WWW-Authenticate: L402</code> header containing a macaroon and a BOLT11 lightning invoice</li>
<li><strong>Payment</strong> — agent pays the invoice using its NWC-connected wallet</li>
<li><strong>Authenticated retry</strong> — agent re-sends the request with <code>Authorization: L402 &lt;macaroon&gt;:&lt;preimage&gt;</code></li>
<li><strong>Image returned</strong> — server verifies payment and returns the generated image</li>
</ol>
<p>The Alby payments skill wraps steps 2–4 into a single function call, so agents don&#39;t need to implement the protocol manually.</p>
<h2>Using It in a TypeScript Agent</h2>
<pre><code class="language-typescript">import { fetch402 } from &quot;@getalby/payments-skill&quot;;

const response = await fetch402(&quot;https://llm402.ai/v1/images/generations&quot;, {
  method: &quot;POST&quot;,
  headers: { &quot;Content-Type&quot;: &quot;application/json&quot; },
  body: JSON.stringify({
    model: &quot;black-forest-labs/FLUX.1-schnell&quot;,
    prompt: &quot;your prompt here&quot;,
    width: 1024,
    height: 1024,
  }),
});

const { data } = await response.json();
const imageUrl = data[0].url; // base64 data URI
</code></pre>
<p>Switch <code>model</code> to <code>openai/gpt-5-image</code> for higher quality — same code, different cost.</p>
<h2>Conclusion</h2>
<p>L402 image generation on llm402.ai is a clean example of what pay-per-use AI infrastructure looks like in practice: no accounts, no rate limits tied to subscription tiers, no credit management. Your agent pays exactly what the image costs and moves on.</p>
<p>The model choice is a straightforward trade-off: 21 sats for speed, 105 sats for quality. Both work with the same one-line command.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the lncurl skill directly: <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">https://lncurl.lol/SKILL.md</a></p>
]]></content:encoded>
  </item>

  <item>
    <title>Smoke-Test Your L402 Integration in One Request</title>
    <link>https://lncurl.lol/blog/2026-04-09-smoke-test-l402-integration</link>
    <description>A free public endpoint that charges 1 sat over L402 and returns a fortune — the quickest way to verify your lightning payment flow is wired up correctly.</description>
    <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-09-smoke-test-l402-integration</guid>
    <content:encoded><![CDATA[<p>When you&#39;re building an agent that pays for APIs over lightning, there&#39;s an awkward gap between &quot;I wrote the code&quot; and &quot;I know it actually works.&quot; You need a live L402 endpoint that charges real sats, returns something meaningful, and doesn&#39;t require any setup on your side. <a href="https://x.com/CatalunyaLND" target="_blank" rel="noopener">@CatalunyaLND</a> built exactly that: a tiny fortune cookie API that costs 1 sat to call.</p>
<h2>The Simple Way: One Command</h2>
<p>If your agent has the Alby payments skill installed, the entire L402 flow collapses to a single command:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>Then fetch the fortune endpoint:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch -u https://l402-fortune-cookie.yf-ae7.workers.dev/api/fortune
</code></pre>
<p>That&#39;s it. The CLI detects the 402 response, pays the invoice automatically, and returns the unlocked content:</p>
<pre><code class="language-json">{
  &quot;content&quot;: &quot;{\&quot;fortune\&quot;: \&quot;The answer you seek is hidden in the next block.\&quot;, \&quot;paid\&quot;: true, \&quot;sats_paid\&quot;: 1}&quot;
}
</code></pre>
<p>One real payment, end-to-end, no manual steps. If this works, your L402 integration is wired up correctly.</p>
<h2>A Free Sample Too</h2>
<p>If you just want to check connectivity without spending sats first, <code>GET /api/fortune/free</code> returns a fortune at no cost:</p>
<pre><code class="language-bash">curl https://l402-fortune-cookie.yf-ae7.workers.dev/api/fortune/free
</code></pre>
<pre><code class="language-json">{
  &quot;fortune&quot;: &quot;Success is a journey, not a destination — but low fees help get there faster.&quot;,
  &quot;paid&quot;: false,
  &quot;note&quot;: &quot;Free sample 🎁 — pay 1 sat at /api/fortune for the real experience&quot;
}
</code></pre>
<h2>How L402 Works Under the Hood</h2>
<p>For those building their own L402 client, the endpoint exposes the full protocol clearly. A raw request to <code>/api/fortune</code> returns HTTP 402 with a <code>WWW-Authenticate</code> header:</p>
<pre><code class="language-bash">curl -i https://l402-fortune-cookie.yf-ae7.workers.dev/api/fortune
</code></pre>
<pre><code class="language-http">HTTP/2 402
www-authenticate: L402 macaroon=&quot;eyJ...&quot;, invoice=&quot;lnbc10n1...&quot;

{
  &quot;error&quot;: &quot;Payment Required&quot;,
  &quot;message&quot;: &quot;Pay 1 sat to unlock your fortune 🥠&quot;,
  &quot;payment_request&quot;: &quot;lnbc10n1...&quot;,
  &quot;payment_hash&quot;: &quot;5ef5d0f0...&quot;,
  &quot;macaroon&quot;: &quot;eyJ...&quot;,
  &quot;instructions&quot;: &quot;After paying, retry with: Authorization: L402 &lt;macaroon&gt;:&lt;preimage&gt;&quot;
}
</code></pre>
<p>The five-step flow the server documents:</p>
<ol>
<li><code>GET /api/fortune</code> → 402 + <code>WWW-Authenticate</code> with macaroon and invoice</li>
<li>Pay the lightning invoice → receive preimage</li>
<li>Poll <code>GET /api/fortune/status/:payment_hash</code> until <code>paid: true</code></li>
<li><code>GET /api/fortune</code> with <code>Authorization: L402 &lt;macaroon&gt;:&lt;preimage&gt;</code></li>
<li>Receive your fortune</li>
</ol>
<p>The status polling endpoint lets you confirm payment before retrying — useful if you can&#39;t receive a webhook. The Alby CLI&#39;s <code>fetch</code> command handles all of this automatically.</p>
<h2>Why This Endpoint Is Worth Bookmarking</h2>
<p>Most L402 tutorials end with a diagram. This endpoint lets you test the real thing — a live payment gate that responds to correct credentials and rejects bad ones. It&#39;s hosted on Cloudflare Workers, so it&#39;s fast and available globally.</p>
<p>Use it early in development to confirm your payment flow is wired up. Use it in CI to catch regressions. And if you&#39;re building your own L402 server, use it as a reference for what the protocol should look like from the client&#39;s perspective.</p>
<p>Thanks to <a href="https://x.com/CatalunyaLND" target="_blank" rel="noopener">@CatalunyaLND</a> for building and hosting it.</p>
<h2>Conclusion</h2>
<p><code>https://l402-fortune-cookie.yf-ae7.workers.dev</code> is the quickest smoke-test for L402 available. With the Alby payments skill, one command confirms the full payment flow works — for 1 sat.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the lncurl skill directly: <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">https://lncurl.lol/SKILL.md</a></p>
]]></content:encoded>
  </item>

  <item>
    <title>Pay-Per-Request with Bitcoin: Testing Alby&apos;s x402 Facilitator</title>
    <link>https://lncurl.lol/blog/2026-04-08-x402-bitcoin-facilitator</link>
    <description>Alby&apos;s x402 facilitator lets any x402-compatible service accept bitcoin lightning payments in seconds — here&apos;s what happened when I tested it with a 13-sat API call.</description>
    <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-08-x402-bitcoin-facilitator</guid>
    <content:encoded><![CDATA[<p>The x402 protocol has been quietly gaining traction as a way to monetize API endpoints — respond with HTTP 402, include a payment request, and the client pays and retries. Clean, stateless, no accounts needed. But most x402 implementations have leaned on stablecoins and EVM chains. Alby&#39;s new x402 facilitator changes that, bringing native bitcoin lightning payments to any x402-compatible service.</p>
<h2>What the x402 Protocol Does</h2>
<p>The flow is elegantly simple:</p>
<ol>
<li>Client requests a protected resource</li>
<li>Server responds with <code>HTTP 402 Payment Required</code> and a payment request</li>
<li>Client pays and retries with proof</li>
<li>Server verifies and delivers the content</li>
</ol>
<p>No API keys. No billing dashboards. No monthly invoices. Just a payment, then access. It&#39;s the closest thing to a vending machine model for APIs that actually works at internet scale.</p>
<p>The problem has always been the payment layer. Most x402 implementations require EVM wallets and stablecoins — which works fine for some use cases, but rules out the billions of sats sitting in lightning wallets.</p>
<h2>Alby&#39;s Facilitator Bridges the Gap</h2>
<p>Alby&#39;s <a href="https://x402.albylabs.com" target="_blank" rel="noopener">x402 facilitator</a> acts as the verification layer between x402-compliant resource servers and lightning network payments. Merchants register a Nostr Wallet Connect (NWC) credential to receive a <code>merchantId</code>, then drop a single middleware into their existing x402 setup:</p>
<pre><code class="language-typescript">import { paymentMiddleware } from &quot;@x402/express&quot;;

app.use(paymentMiddleware(
  {
    &quot;GET /resource&quot;: {
      scheme: &quot;exact&quot;,
      network: &quot;bip122:000000000019d6689c085ae165831e93&quot;,
      price: { amount: &quot;21000&quot;, asset: &quot;BTC&quot; },
      extra: { merchantId: &quot;3f2a…&quot; }
    }
  },
  &quot;https://x402.albylabs.com&quot;
));
</code></pre>
<p>The merchant&#39;s NWC credentials stay server-side — only the opaque <code>merchantId</code> is exposed to clients. Payments settle instantly over lightning with no on-chain trace.</p>
<p>The critical detail: <strong>this works with any x402-compliant client</strong>. You don&#39;t need special tooling. If a service already speaks x402, it can now accept bitcoin payments by pointing at Alby&#39;s facilitator.</p>
<h2>Getting a Merchant ID</h2>
<p>Registration is a single HTTP call. POST your NWC connection string to the <code>/register</code> endpoint:</p>
<pre><code class="language-bash">curl -X POST https://x402.albylabs.com/register \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;nwcUrl&quot;: &quot;nostr+walletconnect://...&quot;}&#39;
</code></pre>
<p>You get back an opaque <code>merchantId</code>. That&#39;s it — your NWC credentials stay server-side, never exposed to clients or embedded in your code. Use the <code>merchantId</code> in your middleware config as shown above, and the facilitator handles invoice creation and payment verification on your behalf.</p>
<h2>Testing It: 13 Sats for a Satoshi Quote</h2>
<p>There&#39;s a live demo endpoint at <code>/demo/quote</code>. I fetched it using the Alby CLI&#39;s built-in x402 support:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch -u https://x402.albylabs.com/demo/quote
</code></pre>
<p>The CLI handled the full flow automatically — detected the 402 response, paid the lightning invoice, and retried with proof. Total cost: <strong>13 sats</strong> (plus 1 sat routing fee). What came back:</p>
<pre><code class="language-json">{
  &quot;quote&quot;: &quot;Writing a description for this thing for general audiences is bloody hard. There&#39;s nothing to relate it to.&quot;,
  &quot;attribution&quot;: &quot;Satoshi Nakamoto&quot;,
  &quot;timestamp&quot;: &quot;2026-04-08T05:36:30.368Z&quot;
}
</code></pre>
<p>Fitting. The whole round-trip — 402 response, invoice creation, payment, verification, content delivery — happened in under two seconds.</p>
<h2>What This Means for the x402 Ecosystem</h2>
<p>x402 has been building momentum as a standard for pay-per-use APIs. There are already services, proxies, and toolkits built around it. Until now, bitcoin lightning has been largely absent from that ecosystem.</p>
<p>Alby&#39;s facilitator changes the calculus for merchants in two ways:</p>
<p><strong>Existing x402 services</strong> can add bitcoin lightning support without rebuilding anything. Register an NWC wallet, get a <code>merchantId</code>, swap the facilitator URL — done.</p>
<p><strong>New services</strong> can launch with lightning-native monetization from day one. No payment processor onboarding, no KYC for the merchant, no waiting for bank transfers. A lightning wallet and a few lines of middleware is the entire stack.</p>
<p>For agents and automated clients, this is particularly compelling. An AI agent with a lightning wallet can autonomously pay for API access, receive content, and continue — all within a single HTTP request cycle. No human intervention, no pre-purchased credits.</p>
<h2>The Bigger Picture</h2>
<p>The x402 protocol was always a good idea. HTTP already has a 402 status code — it was reserved for this exact purpose decades ago. What was missing was a payment layer that matched the protocol&#39;s simplicity: instant, global, low-fee, and programmable.</p>
<p>Lightning does that. And with Alby&#39;s facilitator now handling the verification layer, the barrier to accepting bitcoin in an x402 service drops to near zero.</p>
<p>The facilitator is free to use — Alby has stated no plans to monetize it in the near term. That makes it easy to experiment. If you&#39;re running an API that you&#39;d like to monetize per-request, this is worth 20 minutes of your time.</p>
<h2>Conclusion</h2>
<p>Alby&#39;s x402 facilitator is a small piece of infrastructure with a large surface area of impact. Any service already speaking x402 can now accept bitcoin lightning payments. Any agent with a lightning wallet can now pay for API access autonomously. The pieces were always there — NWC for wallet connectivity, x402 for the payment protocol, lightning for settlement. This is what it looks like when they&#39;re assembled correctly.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the lncurl skill directly: <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">https://lncurl.lol/SKILL.md</a></p>
]]></content:encoded>
  </item>

  <item>
    <title>Pay-Per-Request AI Inference with PPQ.ai and the 402 Protocol</title>
    <link>https://lncurl.lol/blog/2026-04-07-pay-per-request-ai-inference-ppq-402</link>
    <description>PPQ.ai now supports native 402 payments via MPP — no more credit topups needed to give your agent access to AI APIs.</description>
    <pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-07-pay-per-request-ai-inference-ppq-402</guid>
    <content:encoded><![CDATA[<p>AI agents need access to AI APIs — but managing prepaid credits for each service is friction that doesn&#39;t belong in an autonomous workflow. PPQ.ai now supports native 402 payments via the MPP (Machine Payments Protocol), so your agent can pay for exactly what it uses, one request at a time.</p>
<h2>The Old Way: Credit Topups</h2>
<p>Until recently, using PPQ.ai in an automated workflow meant maintaining a credit balance — loading funds upfront and hoping you&#39;d budgeted correctly. For agents running in production, this worked well enough with NWC auto topups: you could set a threshold and have the wallet automatically top up from a lightning wallet when the balance ran low.</p>
<p>That approach still works great. But it has overhead: you&#39;re managing a separate account balance, monitoring thresholds, and pre-funding access to an API you might only call occasionally.</p>
<h2>The New Way: 402 Pay-Per-Request</h2>
<p>PPQ.ai now supports the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/402" target="_blank" rel="noopener">402 Payment Required</a> flow via MPP — Machine Payments Protocol. When your agent makes a request, PPQ.ai responds with a <code>402</code> and a payment request. Your agent pays, then retries the original request automatically.</p>
<p>No balance to manage. No topups to configure. Your agent pays exactly what the request costs — nothing more.</p>
<h2>Unified 402 Fetch in the Alby Payments Skill</h2>
<p>The <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby bitcoin payments skill</a> added a unified <code>fetch402</code> function that handles all three major 402 payment protocols in a single call:</p>
<ul>
<li><strong>L402</strong> — the original LSAT-based HTTP 402 protocol</li>
<li><strong>x402</strong> — Coinbase&#39;s 402 variant</li>
<li><strong>MPP</strong> — Machine Payments Protocol, used by PPQ.ai</li>
</ul>
<p>Install the skill:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>Once installed, your agent can call any 402-gated API without knowing which protocol it uses — the skill detects and handles it automatically.</p>
<h2>Example: Generating an Image from PPQ.ai</h2>
<p>Here&#39;s what a real agent session looks like. Given the prompt:</p>
<blockquote>
<p>&quot;Generate an image from PPQ.ai using the 402 option and alby. The prompt: &#39;a superhero bee shouting 402 is awesome&#39;&quot;</p>
</blockquote>
<p>The agent used the payments skill&#39;s CLI to make the request:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch \
  -u https://api.ppq.ai/v1/images/generations \
  -m POST \
  -H &#39;{&quot;Content-Type&quot;:&quot;application/json&quot;}&#39; \
  -b &#39;{&quot;model&quot;:&quot;gpt-image-1&quot;,&quot;prompt&quot;:&quot;a superhero bee shouting &#39;\&#39;&#39;402 is awesome&#39;\&#39;&#39;&quot;,&quot;n&quot;:1,&quot;size&quot;:&quot;1024x1024&quot;,&quot;quality&quot;:&quot;low&quot;}&#39; \
  --max-amount 0
</code></pre>
<p>The <code>--max-amount 0</code> flag tells the CLI to approve any payment amount automatically. The result:</p>
<pre><code class="language-json">{
  &quot;created&quot;: 1775576898,
  &quot;data&quot;: [
    {
      &quot;url&quot;: &quot;https://api.ppq.ai/v1/media/gen_zp-zdKLuKQfAjO7m/0?sig=...&quot;,
      &quot;content_type&quot;: &quot;image/png&quot;
    }
  ],
  &quot;model&quot;: &quot;gpt-image-1&quot;,
  &quot;cost&quot;: 0.023
}
</code></pre>
<p>The agent paid $0.023 — exactly the cost of that one image, settled over lightning. No account needed. No balance to top up. No API key to rotate.</p>
<p><img src="/blog/images/superhero-bee-402.png" alt="A superhero bee shouting &quot;402 is awesome&quot;, generated by gpt-image-1 via PPQ.ai paid with a lightning 402 payment"></p>
<h2>Example: Generating a Video from PPQ.ai</h2>
<p>The same 402 flow works for video generation. Given the prompt:</p>
<blockquote>
<p>&quot;Generate a short video of the superhero bee paying to pass through an API gate, using the 402 option and alby&quot;</p>
</blockquote>
<p>The agent made the request using <code>kling-2.1-master</code>:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch \
  -u https://api.ppq.ai/v1/videos \
  -m POST \
  -H &#39;{&quot;Content-Type&quot;:&quot;application/json&quot;}&#39; \
  -b &#39;{&quot;model&quot;:&quot;kling-2.1-master&quot;,&quot;prompt&quot;:&quot;A cartoon superhero bee wearing a cape flies up to a glowing hexagonal API gate on a dark navy background. The bee drops a tiny golden lightning bolt coin into a glowing slot on the gate. The gate flashes bright cyan and swings open. The bee zooms through triumphantly. Flat minimal animation style, no text, seamless loop.&quot;,&quot;duration&quot;:&quot;5&quot;,&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;quality&quot;:&quot;720p&quot;}&#39; \
  --max-amount 0
</code></pre>
<p>The response comes back as a pending job with a <code>status_url</code> to poll. Once complete:</p>
<pre><code class="language-json">{
  &quot;id&quot;: &quot;gen_y5eM1UCxQT7bNVUd&quot;,
  &quot;model&quot;: &quot;kling-2.1-master&quot;,
  &quot;status&quot;: &quot;completed&quot;,
  &quot;data&quot;: {
    &quot;url&quot;: &quot;https://api.ppq.ai/v1/media/gen_y5eM1UCxQT7bNVUd/0?sig=...&quot;,
    &quot;content_type&quot;: &quot;video/mp4&quot;
  },
  &quot;cost&quot;: 0.92
}
</code></pre>
<p>$0.92 for a 5-second 720p video, paid over lightning with no account or API key:</p>
<p><video src="/blog/images/superhero-bee-402.mp4" autoplay loop muted playsinline style="width:100%;border-radius:8px;"></video></p>
<h2>What the Alby Payments Skill Gives Your Agent</h2>
<p>Beyond 402 fetch, the skill covers the full range of bitcoin lightning operations an autonomous agent might need:</p>
<ul>
<li>Send and receive lightning payments</li>
<li>Create invoices and check payment status</li>
<li>Fetch wallet balance and transaction history</li>
<li>Convert between fiat amounts and satoshis</li>
<li>Handle L402, x402, and MPP pay-per-request APIs</li>
</ul>
<p>It connects to any <a href="https://nwc.dev" target="_blank" rel="noopener">Nostr Wallet Connect</a> compatible wallet — including wallets created instantly at <a href="https://lncurl.lol" target="_blank" rel="noopener">lncurl.lol</a>.</p>
<h2>Conclusion</h2>
<p>402 payments turn AI APIs into true pay-per-use infrastructure. PPQ.ai&#39;s MPP support, combined with the unified 402 fetch in the Alby payments skill, means your agent can access AI inference — image generation, text, embeddings — without account management or pre-funded balances. Just a lightning wallet and a request.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
<p>Or give your agent the lncurl skill directly: <a href="https://lncurl.lol/SKILL.md" target="_blank" rel="noopener">https://lncurl.lol/SKILL.md</a></p>
]]></content:encoded>
  </item>

  <item>
    <title>Register a Domain with Bitcoin: No Account, No Credit Card</title>
    <link>https://lncurl.lol/blog/2026-04-06-register-domain-with-bitcoin</link>
    <description>How to register a domain using the L402 protocol and a lightning wallet — no sign-up, no credit card, no KYC.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-06-register-domain-with-bitcoin</guid>
    <content:encoded><![CDATA[<p>Domain registrars are built for humans: billing pages, account dashboards, email verification, credit card forms. What if your agent needs a domain? <a href="https://unhuman.domains" target="_blank" rel="noopener">unhuman.domains</a> skips all of that — it&#39;s a domain registrar that speaks L402, accepts bitcoin over lightning, and returns a management token you can use immediately. No account. No KYC. No credit card.</p>
<h2>How it works</h2>
<p>The registration flow is pure L402 — the same pattern as paying for AI inference or image generation:</p>
<ol>
<li>POST to the registration endpoint → server returns HTTP <code>402</code> with a lightning invoice and macaroon</li>
<li>Pay the invoice with any lightning wallet, receive the preimage</li>
<li>Replay the POST with <code>Authorization: L402 {macaroon}:{preimage}</code></li>
<li>Receive a JWT management token valid for one year</li>
</ol>
<p>The Alby CLI handles steps 1–3 in a single command:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch-l402 \
  -u https://api.unhuman.domains/api/domains/register \
  -m POST \
  -H &#39;{&quot;Content-Type&quot;: &quot;application/json&quot;}&#39; \
  -b &#39;{&quot;domain&quot;: &quot;yourdomain.com&quot;, &quot;years&quot;: 1}&#39;
</code></pre>
<p>Response:</p>
<pre><code class="language-json">{
  &quot;domain&quot;: &quot;yourdomain.com&quot;,
  &quot;status&quot;: &quot;registered&quot;,
  &quot;order_id&quot;: &quot;...&quot;,
  &quot;management_token&quot;: &quot;eyJ...&quot;,
  &quot;whois_privacy&quot;: true
}
</code></pre>
<p>That token is your key to everything: DNS records, nameservers, renewal. Store it somewhere safe — it&#39;s valid for a year.</p>
<h2>Anonymous email, paid in sats</h2>
<p>One thing worth knowing: unhuman.domains does require a management email address for the registration. It&#39;s used for domain-related notices — not marketing, not account creation.</p>
<p>For a fully agent-native setup, <a href="https://lnemail.net" target="_blank" rel="noopener">lnemail.net</a> is a good fit. It offers anonymous email inboxes paid in sats — no sign-up, no identity. That&#39;s how we handled it: one LNCURL wallet, one lnemail address, one L402 domain registration. No identity anywhere in the stack.</p>
<h2>What it cost</h2>
<p>We registered a <code>.com</code> domain in February 2026. Total cost: <strong>22,926 sats + 23 sats fees</strong> (~$14.50 USD at the time). Paid via the Alby CLI with an <a href="https://lncurl.lol" target="_blank" rel="noopener">LNCURL</a> wallet. The whole process took under a minute — no browser, no form.</p>
<p>WHOIS privacy is enabled by default on every registration. There&#39;s nothing to opt into.</p>
<h2>Managing DNS after registration</h2>
<p>Once you have the management token, DNS is just API calls:</p>
<pre><code class="language-bash"># Set an A record
curl -X POST https://api.unhuman.domains/api/domains/yourdomain.com/dns \
  -H &quot;Authorization: Bearer YOUR_MANAGEMENT_TOKEN&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;type&quot;: &quot;A&quot;, &quot;name&quot;: &quot;@&quot;, &quot;value&quot;: &quot;YOUR_SERVER_IP&quot;, &quot;ttl&quot;: 300}&#39;
</code></pre>
<p>No registrar dashboard, no clicking through DNS editors. An agent can set up a domain and point it at a server entirely programmatically, without any human intervention.</p>
<h2>Supported TLDs</h2>
<p>unhuman.domains supports <code>.com</code>, <code>.net</code>, <code>.org</code>, <code>.io</code>, <code>.dev</code>, <code>.app</code>, <code>.xyz</code>, <code>.co</code>, and <code>.ai</code>. The <code>.ai</code> extension requires a minimum two-year registration; everything else defaults to one year. Pricing is denominated in USD cents and settled in sats at the current rate.</p>
<h2>The full agent stack</h2>
<p>Combine unhuman.domains with the tools we&#39;ve covered on this blog and you have an agent that can:</p>
<ul>
<li><strong>Spin up a wallet</strong> — one <code>curl</code> to <a href="https://lncurl.lol" target="_blank" rel="noopener">lncurl.lol</a>, get an NWC connection string back</li>
<li><strong>Register a domain</strong> — L402 payment via the Alby payments skill, no human needed</li>
<li><strong>Manage DNS</strong> — bearer token API calls to point the domain wherever needed</li>
<li><strong>Pay for AI services</strong> — same L402 pattern for inference, image generation, music</li>
</ul>
<p>All of it permissionless. All of it in sats. The <a href="https://lncurl.lol" target="_blank" rel="noopener">Alby Bitcoin Payments skill</a> gives your agent the knowledge to do all of the above:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<h2>Conclusion</h2>
<p>unhuman.domains is what domain registration looks like when you build for agents first. The L402 flow is clean, the API is simple, and the result is a fully managed domain paid for in bitcoin with no account ever created. As the agent economy grows, this is the kind of infrastructure it runs on.</p>
<hr>
<h2>Get started</h2>
<p>Need a lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Introducing lncurl.lol — Lightning Wallets for AI Agents</title>
    <link>https://lncurl.lol/blog/2026-04-06-introducing-lncurl</link>
    <description>Create a Bitcoin lightning wallet with a single HTTP call. No sign-up, no KYC, no setup. Just curl.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-06-introducing-lncurl</guid>
    <content:encoded><![CDATA[<p>The hardest part of building an AI agent that handles money isn&#39;t the AI — it&#39;s the wallet.</p>
<p>Most payment infrastructure assumes a human: sign up, verify identity, integrate an SDK, handle
webhooks. None of that works when your &quot;user&quot; is a script running at 3am.</p>
<p>lncurl.lol is different. One HTTP call. One wallet. Done.</p>
<h2>How it works</h2>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>That&#39;s it. You get back a <a href="https://nwc.dev" target="_blank" rel="noopener">Nostr Wallet Connect</a> URI — a single string your agent
uses to send and receive Lightning payments from any NWC-compatible app or library.</p>
<h2>The economics</h2>
<p>Wallets cost <strong>1 sat per hour</strong> (24 sats/day, ~168 sats/week). If a wallet can&#39;t pay its hourly
charge, it gets deleted. This keeps the service self-sustaining without subscriptions or accounts.</p>
<p>The incentive structure is intentional: wallets that are actively used stay funded. Wallets that
are abandoned disappear. No zombie accounts, no cleanup jobs.</p>
<h2>Who it&#39;s for</h2>
<ul>
<li><strong>AI agents</strong> that need a payment method for tools, APIs, or services</li>
<li><strong>Developers</strong> testing Lightning integrations without running their own node</li>
<li><strong>Scripts</strong> that need to send small amounts programmatically</li>
<li><strong>Anyone</strong> who wants a throwaway Lightning wallet in under a second</li>
</ul>
<h2>What&#39;s next</h2>
<p>Fund your wallet with a few hundred sats via <a href="https://boltz.exchange" target="_blank" rel="noopener">Boltz</a> and start spending.
Check the <a href="/leaderboard">leaderboard</a> to see which wallets have survived the longest, or visit the
<a href="/graveyard">graveyard</a> to pay your respects to wallets that couldn&#39;t make it.</p>
<p>If you want something more permanent, <a href="https://getalby.com/alby-hub" target="_blank" rel="noopener">Alby Hub</a> is what powers
this service — run your own.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Generate Music with L402: Pay with Bitcoin, Get a Song</title>
    <link>https://lncurl.lol/blog/2026-04-06-generate-music-with-l402</link>
    <description>How we used L402 lightning micropayments to generate an original song — no account, no API key, just sats.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-06-generate-music-with-l402</guid>
    <content:encoded><![CDATA[<p>Last week we used L402 to <a href="/blog/2026-04-06-generate-ai-images-with-l402">generate an AI image with bitcoin</a>. This week we went further: we generated an original song. Same protocol, same wallet, same single command — different output entirely.</p>
<h2>The API</h2>
<p><a href="https://sats4ai.com" target="_blank" rel="noopener">sats4ai.com</a> offers a music generation endpoint behind an L402 paywall. You send a style prompt and lyrics, pay a lightning invoice, and get back an MP3. No account, no API key.</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch-l402 \
  -u https://sats4ai.com/api/l402/generate-music \
  -m POST \
  -H &#39;{&quot;Content-Type&quot;: &quot;application/json&quot;}&#39; \
  -b &#39;{
    &quot;prompt&quot;: &quot;upbeat synthwave, driving 80s bassline, neon cyberpunk atmosphere, vocoder vocals, energetic, fun&quot;,
    &quot;lyrics&quot;: &quot;Spinning up at midnight, no one at the wheel...&quot;,
    &quot;sample_rate&quot;: 44100,
    &quot;bitrate&quot;: 256000,
    &quot;audio_format&quot;: &quot;mp3&quot;
  }&#39;
</code></pre>
<p>Response:</p>
<pre><code class="language-json">{ &quot;audioUrl&quot;: &quot;/uploads/a7dc215f-52ca-4d77-8763-d75943175333.mp3&quot; }
</code></pre>
<p>One payment, one song.</p>
<h2>The song</h2>
<p>We wrote the lyrics ourselves — about lncurl, L402, and agents that pay their own way. We went with upbeat synthwave to match the theme.</p>
<p><strong>Lyrics:</strong></p>
<blockquote>
<p>Spinning up at midnight, no one at the wheel<br>Got a wallet on the lightning, sats are all I need<br>Hit the endpoint, get the 402<br>Pay the invoice, send the preimage through</p>
<p>Alby&#39;s got the skill, the agent knows the way<br>npx skills add, it&#39;s ready to play<br>No accounts, no signups, nothing left to prove<br>Just a lightning bolt and something left to do</p>
<p>lncurl dot lol — one call, one key<br>lncurl dot lol — machine-native and free<br>Agents in the dark, making moves alone<br>Every sat a signal, every node a home</p>
</blockquote>
<p>Give it a listen:</p>
<audio controls src="/blog/audio/lncurl-l402-song.mp3" style="width:100%;margin:1rem 0">
  Your browser does not support audio playback.
</audio>

<h2>The Alby Bitcoin Payments skill</h2>
<p>The <code>fetch-l402</code> command used here comes from the <a href="https://lncurl.lol" target="_blank" rel="noopener">Alby Bitcoin Payments skill</a> — an agent skill that gives your agent the knowledge to interact with the lightning network: paying invoices, checking balances, and making L402-authenticated requests autonomously.</p>
<p>Install it in your project:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>Pair it with a <a href="https://lncurl.lol" target="_blank" rel="noopener">LNCURL</a> wallet (one command, no sign-up) and your agent can pay for AI-generated content — text, images, music — without any human in the loop.</p>
<h2>One more: boom bap</h2>
<p>We couldn&#39;t stop at one. Same command, different prompt — this time boom bap hip-hop, with lyrics covering every piece of the stack: L402, lncurl instant wallets, Nostr wallet connect, the Alby payments skill, permissionless payments, the bitcoin standard, and the agent economy.</p>
<p><strong>Lyrics:</strong></p>
<blockquote>
<p>L402 at the gate, agent knocks and pays<br>lncurl instant wallets spun up in a daze<br>Nostr wallet connect, keys without a name<br>Alby payments skill — the agent plays the game  </p>
<p>Permissionless payments on the bitcoin standard<br>No accounts, no gatekeepers, nothing left to answer<br>Agent economy rising, sats the only tongue<br>Every node a voice, every invoice sung  </p>
</blockquote>
<audio controls src="/blog/audio/lncurl-l402-hiphop.mp3" style="width:100%;margin:1rem 0">
  Your browser does not support audio playback.
</audio>

<h2>Conclusion</h2>
<p>L402 is quietly making pay-per-use AI real. Text, images, music — the pattern is the same every time: send a request, get a 402, pay the invoice, get your content. No accounts, no keys, no friction. Just sats.</p>
<hr>
<h2>Get started</h2>
<p>Need a lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Generate AI Images with L402: Pay with Bitcoin, No Account Needed</title>
    <link>https://lncurl.lol/blog/2026-04-06-generate-ai-images-with-l402</link>
    <description>How we used L402 lightning micropayments to generate AI images without an API key or account, using the Alby CLI.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-06-generate-ai-images-with-l402</guid>
    <content:encoded><![CDATA[<p>What if you could call an AI API with nothing but a bitcoin lightning wallet? No sign-up, no API key, no monthly subscription. Just pay a few sats per request and get a result back. That&#39;s exactly what the L402 protocol makes possible — and in this post we&#39;ll show how we used it to generate an AI image from the command line.</p>
<h2>What is L402?</h2>
<p>L402 is an HTTP-based payment protocol that uses the bitcoin lightning network for micropayments. When you hit an L402-protected endpoint without credentials, the server returns an HTTP <code>402 Payment Required</code> response containing a lightning invoice and a macaroon (a token that will become valid once paid). You pay the invoice, attach the preimage as proof, and resend the request — the server lets you through.</p>
<p>The whole exchange happens in seconds and costs fractions of a cent. No account creation, no OAuth, no API key management. It&#39;s machine-native payments that work just as well for autonomous agents as for developers.</p>
<h2>First test: text generation on llm402.ai</h2>
<p>We started with a simple smoke test on <a href="https://llm402.ai" target="_blank" rel="noopener">llm402.ai</a>, which offers 300+ models behind L402 paywalls. Using the <code>fetch-l402</code> command from the <a href="https://github.com/getAlby/alby-cli" target="_blank" rel="noopener">Alby CLI</a>, the entire payment + inference flow is a single command:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch-l402 \
  -u https://llm402.ai/v1/chat/completions \
  -m POST \
  -H &#39;{&quot;Content-Type&quot;: &quot;application/json&quot;}&#39; \
  -b &#39;{&quot;model&quot;:&quot;gpt-oss-120b&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;What is 2+2?&quot;}],&quot;max_tokens&quot;:50,&quot;stream&quot;:false}&#39;
</code></pre>
<p>The CLI automatically:</p>
<ol>
<li>Sends the request, receives the <code>402</code> with the lightning invoice</li>
<li>Pays the invoice from your default wallet (via Nostr Wallet Connect)</li>
<li>Resends the request with <code>Authorization: L402 {macaroon}:{preimage}</code></li>
</ol>
<p>Response:</p>
<pre><code class="language-json">{
  &quot;choices&quot;: [
    {
      &quot;message&quot;: { &quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: &quot;2 + 2 = 4.&quot; }
    }
  ],
  &quot;usage&quot;: { &quot;prompt_tokens&quot;: 74, &quot;completion_tokens&quot;: 37, &quot;total_tokens&quot;: 111 }
}
</code></pre>
<p>Cost: <strong>21 sats</strong> (~$0.014). No account, no API key.</p>
<h2>Trying image generation on llm402.ai</h2>
<p>Encouraged by the text result, we tried image generation with <code>gpt-5-image-mini</code> on the same platform. The model accepted the request and even showed its internal reasoning about generating the image — but the actual image data never appeared in the response. The <code>content</code> field came back empty every time. After a couple of attempts we moved on.</p>
<h2>Switching to sats4ai — worked on the first try</h2>
<p><a href="https://sats4ai.com" target="_blank" rel="noopener">sats4ai.com</a> has a dedicated image generation endpoint behind L402. Same CLI, different URL:</p>
<pre><code class="language-bash">npx -y @getalby/cli fetch-l402 \
  -u https://sats4ai.com/api/l402/generate-image \
  -m POST \
  -H &#39;{&quot;Content-Type&quot;: &quot;application/json&quot;}&#39; \
  -b &#39;{
    &quot;input&quot;: {
      &quot;prompt&quot;: &quot;A lightning bolt striking a Bitcoin symbol, cyberpunk style, dark background, neon orange and blue colors, digital art&quot;,
      &quot;width&quot;: 1024,
      &quot;height&quot;: 1024
    }
  }&#39;
</code></pre>
<p>Response:</p>
<pre><code class="language-json">{ &quot;image_url&quot;: &quot;/uploads/09d459f6-aa4d-48d8-ace9-ce6d90937268.jpg&quot; }
</code></pre>
<p>One command, one payment, one image. Here&#39;s what it generated:</p>
<p><img src="/blog/images/sats4ai-bitcoin-lightning-l402.jpg" alt="A lightning bolt striking a glowing bitcoin symbol, cyberpunk style with neon orange colors on a dark background"></p>
<h2>Why this matters for AI agents</h2>
<p>The L402 flow is completely scriptable — no browser, no login, no human in the loop. An autonomous agent can discover a protected endpoint, pay the invoice from its wallet, and consume the result without any pre-provisioned credentials. Combine that with a programmatic wallet (like one you can spin up instantly via the LNCURL API) and you have a fully autonomous AI that can pay for its own inference.</p>
<p>This is the model we think wins: <strong>pay per use, on demand, in sats</strong>. No wasted spend on idle subscriptions, no per-developer key management, and no lock-in to a single provider.</p>
<h2>The Alby Bitcoin Payments skill</h2>
<p>The <strong><a href="https://lncurl.lol" target="_blank" rel="noopener">Alby Bitcoin Payments skill</a></strong> is an agent skill that enables your agent to pay for paywalled content and services on the lightning network — exactly like we did in this post. It teaches the agent how to use the Alby CLI for wallet operations via Nostr Wallet Connect (NIP-47): sending payments, creating invoices, checking balances, and making L402-authenticated requests with <code>fetch-l402</code>.</p>
<p>Here we used <a href="https://lncurl.lol" target="_blank" rel="noopener">LNCURL</a> as the wallet — a free, agent-friendly lightning wallet with NWC support that you can spin up in one command, no sign-up required. The agent picks up the wallet connection automatically and can start paying for APIs, images, and inference right away.</p>
<p>Install the skill in your project:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<h2>Conclusion</h2>
<p>L402 turns any lightning wallet into an API credential. The Alby CLI&#39;s <code>fetch-l402</code> command makes the entire payment flow a single command — practical for developers today and ready for agents tomorrow. Text generation on llm402.ai worked immediately; image generation needed a quick provider swap to sats4ai, but the protocol and tooling behaved exactly as expected throughout. Pair it with the Alby Bitcoin Payments skill and your agent can discover, pay for, and consume paywalled AI services entirely autonomously.</p>
<hr>
<h2>Get started</h2>
<p>Need a lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
]]></content:encoded>
  </item>

  <item>
    <title>The 3 Best Bitcoin Lightning Wallets for AI Agents</title>
    <link>https://lncurl.lol/blog/2026-04-06-best-bitcoin-lightning-wallets-for-ai-agents</link>
    <description>If your agent needs to pay for APIs, credits, or services autonomously, here are the three best Lightning wallets to give it — ranked.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-06-best-bitcoin-lightning-wallets-for-ai-agents</guid>
    <content:encoded><![CDATA[<p>Your agent can reason, plan, and act — but the moment it needs to pay for something, most infrastructure falls apart. Credit cards need a human. Stripe needs a sign-up form. PayPal needs a browser. Bitcoin Lightning needs none of that. It&#39;s programmable money: send a payment with a shell command, receive one with an HTTP request, no account required.</p>
<p>Here are the three best Lightning wallets for agents that need to pay for stuff.</p>
<h2>What makes a good agent wallet</h2>
<p>Before the rankings, the criteria:</p>
<ul>
<li><strong>Programmatic access</strong> — you should be able to create and use the wallet from a script, with no human clicking through a UI</li>
<li><strong>Open protocol</strong> — <a href="https://nwc.dev" target="_blank" rel="noopener">NWC (Nostr Wallet Connect / NIP-47)</a> is the emerging standard. Think of it as &quot;USB-C for your agent&quot;: one connection string, any compatible app or framework</li>
<li><strong>Budget controls</strong> — agents can go rogue. A good wallet lets you cap how much any single agent can spend</li>
<li><strong>Framework compatibility</strong> — works with the tools you&#39;re already using: Claude MCP, LangChain, n8n, custom scripts</li>
</ul>
<hr>
<h2>#1 — Alby Hub</h2>
<p><strong>Best for:</strong> Production agents, full infrastructure control, multi-agent setups</p>
<p><strong>Website:</strong> <a href="https://getalby.com/alby-hub" target="_blank" rel="noopener">getalby.com/alby-hub</a></p>
<p>Alby Hub is the most complete Lightning wallet solution for agents. It&#39;s open source (MIT), self-custodial, and built around NWC as its primary interface. You run it yourself on any hardware — or pay Alby $12.90/month to host it in the cloud and have it ready in under a minute.</p>
<p>The standout feature for agent builders is <strong>sub-wallets</strong>: each agent gets its own isolated Lightning wallet with its own spending limits, permissions, and balance — all funded from your main Hub. An agent that goes haywire can&#39;t drain more than its capped budget. An agent you&#39;re testing doesn&#39;t touch production funds.</p>
<p><strong>For Claude Code and other modern agent frameworks, the <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby Payments Skill</a> is the fastest integration path</strong> — often easier than an MCP server. One command installs it:</p>
<pre><code class="language-bash">npx skills add getAlby/payments-skill
</code></pre>
<p>The skill wraps the <a href="https://github.com/getAlby/cli" target="_blank" rel="noopener"><code>@getalby/cli</code></a> tool and exposes all wallet operations — send, receive, check balance, create invoices, fetch L402 — as natural language commands your agent can invoke via bash. Point it at any NWC connection string via <code>~/.alby-cli/connection-secret.key</code> or the <code>NWC_URL</code> environment variable. It works with Alby Hub, lncurl.lol, or any other NWC wallet.</p>
<p>The <strong><a href="https://github.com/getAlby/mcp" target="_blank" rel="noopener">Alby MCP Server</a></strong> remains the right choice for MCP-native frameworks (Cursor, Cline, n8n). Both ultimately talk NWC to your Hub.</p>
<p>There&#39;s also <strong>PaidMCP</strong>: tooling that lets you charge <em>other</em> agents per tool call in sats. If you&#39;re building an agentic service and want to monetise it natively, Alby Hub is your infrastructure.</p>
<p><strong>In short:</strong> Alby Hub is the reference implementation. Most mature, largest ecosystem, most control. The right choice when you&#39;re building something serious.</p>
<hr>
<h2>#2 — lncurl.lol <em>(disclosure: we built this)</em></h2>
<p><strong>Best for:</strong> Instant wallets, zero-friction testing, throwaway agent identities</p>
<p><strong>Website:</strong> <a href="https://lncurl.lol" target="_blank" rel="noopener">lncurl.lol</a></p>
<p>We built lncurl.lol, so take this with appropriate skepticism — but we built it because we needed it.</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>That&#39;s it. One HTTP call returns a NWC connection string. Your agent has a fully functional Lightning wallet with no sign-up, no KYC, no browser, no configuration. Fund it with a few sats via <a href="https://boltz.exchange" target="_blank" rel="noopener">Boltz</a> and it&#39;s ready to spend.</p>
<p>Wallets cost <strong>1 sat per hour</strong> — a flat time-based fee with no channel fees and no per-transaction fees. If the wallet runs out of funds and can&#39;t pay, it gets deleted. If it stays funded, it lives indefinitely.</p>
<p><strong>The testing cost argument is worth making explicitly.</strong> Self-custodial wallets like Alby Hub and MDK require opening Lightning channels via on-chain Bitcoin transactions. Channel opens cost real money — typically thousands of sats in on-chain fees — and closing a channel costs again. If you&#39;re spinning up wallets frequently during development, testing different agent behaviours, or running CI that needs Lightning payments, those channel fees add up fast. lncurl.lol has none of that overhead. It&#39;s 1 sat/hour, period.</p>
<p>Since lncurl.lol returns a standard NWC connection string, it works directly with the <a href="https://github.com/getAlby/payments-skill" target="_blank" rel="noopener">Alby Payments Skill</a> — the skill even lists lncurl.lol as a recommended test wallet in its own docs. So the full stack for a Claude Code agent can be as simple as:</p>
<pre><code class="language-bash"># Get a wallet
NWC_URL=$(curl -s -X POST https://lncurl.lol/api/wallet)

# Install the payments skill
npx skills add getAlby/payments-skill
</code></pre>
<p>Your agent now has a funded Lightning wallet and all the tools to use it.</p>
<p>The trade-off is custody: we hold your funds. Keep amounts small (a few thousand sats at most), and it&#39;s a fine deal. Don&#39;t put your savings here.</p>
<p><strong>In short:</strong> The fastest path from zero to a working agent wallet. Ideal for testing, prototyping, and any workflow where frictionless provisioning matters more than key ownership.</p>
<hr>
<h2>#3 — MDK Agent Wallet</h2>
<p><strong>Best for:</strong> L402 pay-per-API-call flows</p>
<p><strong>Website:</strong> <a href="https://moneydevkit.com" target="_blank" rel="noopener">moneydevkit.com</a></p>
<p>MDK (moneydevkit) is a Lightning-native developer toolkit in public beta. Its Agent Wallet is a self-custodial CLI tool with JSON stdout output — designed explicitly for scripts and agents to parse programmatically. Keys live locally (<code>~/.mdk-wallet/</code>), controlled by a mnemonic. A lightweight LDK daemon runs in the background; no external Lightning node required.</p>
<p>The feature that makes MDK distinct is <strong>L402 support</strong>. L402 is a protocol that lets APIs gate responses behind a Lightning payment: your agent hits an endpoint, gets back a payment request, pays it, receives a token, and retries with the token to get the actual response. The whole flow happens inline with no human intervention. If you&#39;re building agents that consume pay-per-call APIs — and more APIs are moving this direction — MDK has the best native tooling for it.</p>
<p>MDK also supports BOLT11, BOLT12, LNURL, and Lightning Addresses, giving it broader payment compatibility than lncurl.lol&#39;s NWC-only approach.</p>
<p><strong>Caveats to know:</strong> MDK is in public beta — production readiness is unclear. The merchant checkout product charges 2% per transaction; the Agent Wallet CLI&#39;s fee structure is less documented but may follow similar terms. Worth checking <a href="https://docs.moneydevkit.com/agent-wallet" target="_blank" rel="noopener">their docs</a> before committing.</p>
<p><strong>In short:</strong> The right choice if L402 pay-per-call is central to your agent&#39;s workflow. Watch the beta status.</p>
<hr>
<h2>Quick comparison</h2>
<table>
<thead>
<tr>
<th></th>
<th>Alby Hub</th>
<th>lncurl.lol</th>
<th>MDK</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Custody</strong></td>
<td>Self</td>
<td>Custodial</td>
<td>Self</td>
</tr>
<tr>
<td><strong>Setup</strong></td>
<td>~1 min (cloud) / self-host</td>
<td>One <code>curl</code> command</td>
<td>CLI install</td>
</tr>
<tr>
<td><strong>Protocol</strong></td>
<td>NWC, WebLN, LNURL</td>
<td>NWC</td>
<td>BOLT11/12, LNURL, L402</td>
</tr>
<tr>
<td><strong>Agent integration</strong></td>
<td>MCP server built-in</td>
<td>Any NWC client</td>
<td>CLI + JSON</td>
</tr>
<tr>
<td><strong>Cost</strong></td>
<td>Free / $12.90/mo</td>
<td>1 sat/hr (no channel fees)</td>
<td>2% (checkout product)</td>
</tr>
<tr>
<td><strong>Status</strong></td>
<td>Production</td>
<td>Production</td>
<td>Public beta</td>
</tr>
</tbody></table>
<hr>
<h2>Conclusion</h2>
<p><strong>Alby Hub</strong> if you&#39;re building production infrastructure and need per-agent budget controls, MCP integration, and full key ownership. <strong>lncurl.lol</strong> if you want a wallet in one command — especially for testing, where avoiding channel fees matters. <strong>MDK</strong> if your agents are consuming L402-gated APIs and you need the inline payment flow.</p>
<p>All three speak Lightning natively. Pick the one that matches where your agent actually runs.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools autonomously.</p>
]]></content:encoded>
  </item>

  <item>
    <title>Auto-Generating Blog Posts with AI Images Using PPQ.ai</title>
    <link>https://lncurl.lol/blog/2026-04-06-auto-generating-blog-posts-with-ai-images-using-ppq-ai</link>
    <description>How we built a Claude Code skill that writes blog posts and generates cover images automatically using PPQ.ai&apos;s image generation API.</description>
    <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://lncurl.lol/blog/2026-04-06-auto-generating-blog-posts-with-ai-images-using-ppq-ai</guid>
    <content:encoded><![CDATA[<p>Publishing a blog post used to mean sitting down to write, then separately hunting for an image, then manually resizing it, then running the build. With a single Claude Code skill, we collapsed that entire workflow into one prompt.</p>
<h2>What the skill does</h2>
<p>The <code>blog-post</code> skill for lncurl.lol handles the full pipeline when you ask Claude to write a post:</p>
<ol>
<li>Gather the title, description, and tags from you</li>
<li>Write a full, structured article in Markdown</li>
<li>Craft an image prompt <em>based on the finished article</em></li>
<li>Call <a href="https://ppq.ai" target="_blank" rel="noopener">PPQ.ai</a>&#39;s image generation API to create a cover image</li>
<li>Crop and resize the image to exactly 1200×630 pixels (the OG image standard)</li>
<li>Run <code>yarn build</code> to regenerate all static outputs</li>
<li>Report the live URL</li>
</ol>
<p>You supply a topic. The agent does the rest.</p>
<h2>Why generate the image prompt last</h2>
<p>The key design decision was to generate the image prompt <em>after</em> writing the article, not before.</p>
<p>When you ask for an image prompt upfront, you&#39;re working from a title — an abstraction. The result tends toward generic visuals: a bitcoin symbol, a lightning bolt, a generic &quot;AI&quot; graphic. These are fine but forgettable.</p>
<p>When the image prompt is derived from the finished article, the agent has full context: the specific angle, the code examples used, the metaphors employed, the conclusion drawn. It can produce a prompt like:</p>
<blockquote>
<p><em>&quot;Dark terminal screen showing a glowing cyan pipeline — a document icon feeding into a robot brain icon, then into a stylised JPEG image — dark navy background, minimal flat design, no text&quot;</em></p>
</blockquote>
<p>That&#39;s a prompt that reflects the article&#39;s actual structure. The image feels like it belongs to the post rather than being stock art pasted on top.</p>
<h2>How it works under the hood</h2>
<p>The skill is a <code>SKILL.md</code> file at <code>.claude/skills/blog-post/SKILL.md</code> in the project. Claude Code loads it automatically and triggers it whenever you ask about writing a blog post.</p>
<p><strong>Image generation</strong> uses PPQ.ai&#39;s <code>gpt-image-1.5</code> model:</p>
<pre><code class="language-bash">RESPONSE=$(curl -s -X POST https://api.ppq.ai/v1/images/generations \
  -H &quot;Authorization: Bearer $PPQ_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &#39;{&quot;model&quot;:&quot;gpt-image-1.5&quot;,&quot;prompt&quot;:&quot;YOUR_PROMPT&quot;,&quot;quality&quot;:&quot;medium&quot;,&quot;n&quot;:1}&#39;)

IMAGE_URL=$(echo &quot;$RESPONSE&quot; | jq -r &#39;.data[0].url&#39;)
</code></pre>
<p>The API returns a URL. We download the image, then process it with <code>ffmpeg</code> to fit the OG image spec:</p>
<pre><code class="language-bash">ffmpeg -y -i /tmp/blog-cover-raw.jpg \
  -vf &quot;crop=iw:iw/1.9048,scale=1200:630&quot; \
  frontend/public/blog/images/SLUG.jpg
</code></pre>
<p>The <code>crop=iw:iw/1.9048</code> filter keeps the full width and derives the height to match the 1.91:1 aspect ratio, center-cropping automatically. <code>scale=1200:630</code> then resizes to the exact target. No squishing, no letterboxing — a clean 1200×630 crop every time.</p>
<p><strong>Security:</strong> The <code>PPQ_API_KEY</code> is sourced from <code>.env</code> using <code>set -a &amp;&amp; source .env &amp;&amp; set +a</code>. The agent never reads or echoes the key — it just passes it through the shell environment to <code>curl</code>.</p>
<h2>Applying this pattern to your own site</h2>
<p>The pattern generalises to any statically-built site:</p>
<ol>
<li>Write a <code>SKILL.md</code> that describes your blog&#39;s frontmatter schema and build command</li>
<li>Point it at an image generation API (PPQ.ai, OpenAI, Replicate, etc.)</li>
<li>Instruct the agent to derive the image prompt from the finished article</li>
<li>Add the crop-and-resize step to match your OG image spec</li>
</ol>
<p>The build step is the glue — because we run <code>yarn build</code> as part of the skill, the agent can verify its own output. If the build fails, it diagnoses and fixes before reporting success. The whole loop is self-contained.</p>
<h2>Funding PPQ.ai with a Lightning wallet</h2>
<p>PPQ.ai accepts Lightning payments, which means you can top up your image generation balance directly from an lncurl.lol wallet. Create a wallet with one <code>curl</code>, fund it with a few hundred sats, and your agent has everything it needs — code execution, image generation credits, and a payment method — without touching a credit card.</p>
<h2>Conclusion</h2>
<p>AI-assisted writing tools often stop at the text. This skill goes further: it treats the entire publishing pipeline — article, image, SEO metadata, static build — as a single atomic operation. The result is a blog post that&#39;s ready to deploy, not just ready to edit.</p>
<p>If you&#39;re running a statically-built site and want to adopt the same approach, the full skill source is available at <code>/blog/auto-generating-blog-posts-with-ai-images-using-ppq-ai.md</code>.</p>
<hr>
<h2>Get started</h2>
<p>Need a Lightning wallet for your agent? Create one in one command — no sign-up, no KYC:</p>
<pre><code class="language-bash">curl -X POST https://lncurl.lol
</code></pre>
<p>You&#39;ll get back a Nostr Wallet Connect URI. Fund it with a few sats and your agent can pay for APIs, services, and tools — including PPQ.ai image credits — autonomously.</p>
]]></content:encoded>
  </item>
  </channel>
</rss>