l402kit
🇺🇸 Charge for your API in Bitcoin Lightning. 3 lines of code. 🇧🇷 Monetize sua API com Bitcoin Lightning. 3 linhas de código. 🇪🇸 Monetiza tu API con Bitcoin Lightning. 3 líneas de código. 🇨🇳 用 3 行代码,通过比特币闪电网络收费。 🇮🇳 अपने API को Bitcoin Lightning से 3 लाइनों में मोनेटाइज़ करें। 🇸🇦 اكسب من API الخاص بك عبر Bitcoin Lightning. 3 أسطر فقط. 🇫🇷 Monétisez votre API en Bitcoin Lightning. 3 lignes de code. 🇩🇪 Monetarisiere deine API mit Bitcoin Lightning. 3 Zeilen Code. 🇷🇺 Монетизируй свой API через Bitcoin Lightning. 3 строки кода. 🇯🇵 Bitcoin Lightningで APIを3行で収益化。 🇮🇹 Monetizza la tua API con Bitcoin Lightning. 3 righe di codice.
pip install l402kit
📖 Docs / Documentação / Documentation:
🇺🇸 English · 🇧🇷 Português · 🇪🇸 Español · 🇨🇳 中文 · 🇮🇳 हिंदी · 🇸🇦 العربية · 🇫🇷 Français · 🇩🇪 Deutsch · 🇷🇺 Русский · 🇯🇵 日本語 · 🇮🇹 Italiano
English
Add pay-per-call Bitcoin Lightning payments to any Python API. Works with FastAPI and Flask. No account. No bank. No chargebacks.
How it works
Client calls your API
→ Returns 402 + Lightning invoice
→ Client pays (< 1 second)
→ Client sends cryptographic proof
→ SHA256(preimage) == paymentHash ✓
→ API responds 200 + data
Money flow (managed mode):
Payment → ShinyDapps → 99.7% to your Lightning Address
→ 0.3% fee to ShinyDapps
FastAPI quickstart (Managed — 0.3% fee, no node needed)
from fastapi import FastAPI, Request
from l402kit import l402_required, ManagedProvider
app = FastAPI()
lightning = ManagedProvider.from_address("you@yourdomain.com")
@app.get("/")
async def root():
return {"message": "Try GET /premium"}
# Costs 100 sats (~$0.10) per call — 99.7% goes directly to your Lightning address
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
async def premium(request: Request):
return {"data": "Payment confirmed. Here is your data."}
Flask quickstart
from flask import Flask, jsonify
from l402kit import l402_required, ManagedProvider
app = Flask(__name__)
lightning = ManagedProvider.from_address("you@yourdomain.com")
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
def premium():
return jsonify({"data": "Payment confirmed."})
Test it
uvicorn main:app --reload
# First call — payment challenge
curl http://localhost:8000/premium
# → { "error": "Payment Required", "invoice": "lnbc1u...", "macaroon": "eyJ..." }
# Pay invoice with any Lightning wallet, then:
curl http://localhost:8000/premium \
-H "Authorization: L402 <macaroon>:<preimage>"
# → { "data": "Payment confirmed." }
Why not Stripe?
| Stripe | l402kit | |
|---|---|---|
| Minimum fee | $0.30 | < 1 sat (~$0.001) |
| Settlement | 2–7 days | < 1 second |
| Chargebacks | Yes | Impossible |
| Requires account | Yes | No |
| AI agent support | No | Yes — native |
| Countries blocked | ~50 | 0 — global |
Português
Adicione pagamentos por chamada via Bitcoin Lightning em qualquer API Python. Funciona com FastAPI e Flask. Sem conta. Sem banco. Sem chargeback.
FastAPI — início rápido
from fastapi import FastAPI, Request
from l402kit import l402_required, ManagedProvider
app = FastAPI()
lightning = ManagedProvider.from_address("você@seudominio.com")
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
async def premium(request: Request):
return {"data": "Pagamento confirmado."}
Flask — início rápido
from flask import Flask, jsonify
from l402kit import l402_required, ManagedProvider
app = Flask(__name__)
lightning = ManagedProvider.from_address("você@seudominio.com")
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
def premium():
return jsonify({"data": "Pagamento confirmado."})
Por que não Pix / Stripe?
| Stripe | Pix | l402kit | |
|---|---|---|---|
| Taxa mínima | R$1,50 | R$0,01 | < 1 sat |
| Liquidação | 2–7 dias | Instante | < 1 segundo |
| Chargeback | Sim | Não | Impossível |
| Funciona pra IA | Não | Não | Sim |
| Global | Não | Só Brasil | Sim — 0 fronteiras |
Español
Agrega pagos por llamada en Bitcoin Lightning a cualquier API Python.
from fastapi import FastAPI, Request
from l402kit import l402_required, ManagedProvider
app = FastAPI()
lightning = ManagedProvider.from_address("tu@tudominio.com")
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
async def premium(request: Request):
return {"data": "Pago confirmado."}
Italiano
Aggiungi pagamenti pay-per-call in Bitcoin Lightning a qualsiasi API Python. Funziona con FastAPI e Flask.
FastAPI — avvio rapido
from fastapi import FastAPI, Request
from l402kit import l402_required, ManagedProvider
app = FastAPI()
lightning = ManagedProvider.from_address("tu@tudominio.com")
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
async def premium(request: Request):
return {"data": "Pagamento confermato."}
Flask — avvio rapido
from flask import Flask, jsonify
from l402kit import l402_required, ManagedProvider
app = Flask(__name__)
lightning = ManagedProvider.from_address("tu@tudominio.com")
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
def premium():
return jsonify({"data": "Pagamento confermato."})
Perché non Stripe?
| Stripe | l402kit | |
|---|---|---|
| Commissione minima | €0,25 | < 1 sat |
| Liquidazione | 2–7 giorni | < 1 secondo |
| Chargeback | Sì | Impossibile |
| Supporto agenti IA | No | Sì |
| Globale | No (~50 paesi bloccati) | Sì — 0 frontiere |
Sovereign mode — bring your own Lightning wallet (0% fee)
import os
from fastapi import FastAPI, Request
from l402kit import l402_required, BlinkProvider
app = FastAPI()
lightning = BlinkProvider(
api_key=os.environ["BLINK_API_KEY"],
wallet_id=os.environ["BLINK_WALLET_ID"],
)
@app.get("/premium")
@l402_required(price_sats=100, lightning=lightning)
async def premium(request: Request):
return {"data": "Payment confirmed."}
Security
Every payment is cryptographically verified — impossible to fake:
SHA256(preimage) == paymentHash
- Anti-replay: each preimage works exactly once
- Expiry: tokens expire after 1 hour
- Open source: github.com/ShinyDapps/l402-kit
Get started in seconds
Managed mode — just pass your Lightning address. l402kit.com handles invoices and routes 99.7% to you. 0.3% flat fee.
Sovereign mode (0% fee) — sign up at dashboard.blink.sv (free, no credit card) and use BlinkProvider with your API key.
Links
| Docs (11 languages) | l402kit.com/docs |
| PyPI | pypi.org/project/l402kit |
| Python SDK docs | l402kit.com/docs/sdk/python |
| GitHub | github.com/ShinyDapps/l402-kit |
| GitHub | github.com/ShinyDapps/l402-kit |
| Lightning | shinydapps@blink.sv |
License
MIT — use freely, build freely. Bitcoin has no borders.
Built with ⚡ by ShinyDapps
Metadata
Release files for l402kit 1.10.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| l402kit-1.10.1.tar.gz | 31.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| l402kit-1.10.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.7 kB
Release files / l402kit-1.10.1.tar.gz
| Download URL | l402kit-1.10.1.tar.gz |
|---|---|
| Size | 31.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aef46d2e6aa98d5a62904544907092898687d2299570f76f03cad64eb6034d52
|
|
BLAKE2b-256 checksum How to use checksums |
aa3b14afd7aa89eda09a9f42780e873ccee5530a3d0aaa5aacc82186d411fa3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / l402kit-1.10.1-py3-none-any.whl
| Download URL | l402kit-1.10.1-py3-none-any.whl |
|---|---|
| Size | 24.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b491489b047015bd3fb19a6621d4377c9f082df0c3fd793e51476d8b718ba3d4
|
|
BLAKE2b-256 checksum How to use checksums |
0ad679674114c1f3ce79ebe55ec1c36f5901371719ab93363a32026bb1e380fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Security for l402kit 1.10.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.