Skip to main content

Add Bitcoin Lightning pay-per-call to any API in 3 lines. L402 protocol for FastAPI and Flask. 0.3% fee, zero config.

Project description

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.

PyPI npm License: MIT

pip install l402kit

📖 Docs / Documentação: 🇺🇸 English · 🇧🇷 Português · 🇪🇸 Español · 🇨🇳 中文 · 🇮🇳 हिंदी · 🇸🇦 العربية · 🇫🇷 Français · 🇩🇪 Deutsch · 🇷🇺 Русский · 🇯🇵 日本語


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

from fastapi import FastAPI, Request
from l402kit import l402_required

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Try GET /premium"}

# Costs 100 sats (~$0.10) per call
@app.get("/premium")
@l402_required(
    price_sats=100,
    owner_lightning_address="you@blink.sv",  # your Lightning Address — receives 99.7%
)
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

app = Flask(__name__)

@app.get("/premium")
@l402_required(price_sats=100, owner_lightning_address="you@blink.sv")
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

app = FastAPI()

@app.get("/premium")
@l402_required(
    price_sats=100,
    owner_lightning_address="você@blink.sv",  # recebe 99.7% de cada pagamento
)
async def premium(request: Request):
    return {"data": "Pagamento confirmado."}

Flask — início rápido

from flask import Flask, jsonify
from l402kit import l402_required

app = Flask(__name__)

@app.get("/premium")
@l402_required(price_sats=100, owner_lightning_address="você@blink.sv")
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

app = FastAPI()

@app.get("/premium")
@l402_required(price_sats=100, owner_lightning_address="tu@blink.sv")
async def premium(request: Request):
    return {"data": "Pago confirmado."}

Advanced mode — bring your own Lightning wallet

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 a free Lightning Address

Sign up at dashboard.blink.sv — free, no credit card. Your address: yourname@blink.sv


Links

Docs (10 languages) shinydapps.mintlify.app
PyPI pypi.org/project/l402kit
npm (TypeScript) npmjs.com/package/l402-kit
GitHub github.com/ShinyDapps/l402-kit
Creator github.com/ThiagoDataEngineer
Lightning shinydapps@blink.sv

License

MIT — use freely, build freely. Bitcoin has no borders.

Built with ⚡ by ShinyDapps

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

l402kit-0.3.2.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

l402kit-0.3.2-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file l402kit-0.3.2.tar.gz.

File metadata

  • Download URL: l402kit-0.3.2.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for l402kit-0.3.2.tar.gz
Algorithm Hash digest
SHA256 89c4a4695859ea04639d654be0a217b133573375db3531840e427903d6777623
MD5 e319976ad268db502f017f8f6caa8406
BLAKE2b-256 c8670f4b74f225ad9fce6684c4d49a18c5028e95568bc0591b2bcf96266e090b

See more details on using hashes here.

File details

Details for the file l402kit-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: l402kit-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for l402kit-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c54ffcfc18cf6beb07e8fb6ef07a85d2f37bd272c9c4b1a00e0f407c064f9449
MD5 c585018e1236640d72b4a033acd6fc05
BLAKE2b-256 1072a24440fc9975580c05c23b851a8dccd6be05ff6bdbc4aa600cf9f35c39ed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page