Skip to main content

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.

PyPI version PyPI downloads Python License: MIT

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

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)

Source distribution for l402kit 1.10.1
File Size Uploaded Provenance
l402kit-1.10.1.tar.gz 31.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for l402kit 1.10.1
File Interpreter ABI Platform
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.

Release history Release notifications | RSS feed

This release

1.10.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page