FAILURE MODE
Spend is unbounded.
API keys are payment-blind. A leaked credential runs an inference loop for the entire billing cycle before anyone notices. Limits are bolted on. Damage is uncapped.
API keys were built for humans. AI agents are not human. Plannt is the Bitcoin-native access control layer for autonomous agents. Every request, a Lightning invoice. Every payment, a single-use credential.
FAILURE MODE
API keys are payment-blind. A leaked credential runs an inference loop for the entire billing cycle before anyone notices. Limits are bolted on. Damage is uncapped.
FAILURE MODE
The same string that authenticates gets checked into a config file, pasted into a Slack thread, baked into a Docker image. API keys leak by default.
FAILURE MODE
Billing happens out-of-band, after the fact, against an invoice the agent never saw and never agreed to. Machines should not need an accountant.
GET /v1/demo Authorization: (none)
402 Payment Required invoice: lnbc210n1... macaroon: AgEDLn...
→ lightning.pay()
← preimage: a3f9...b21e
Authorization: L402 macaroon:preimage.GET /v1/demo Authorization: L402 macaroon:preimage
HMAC(root_key, payment_hash) == macaroon_id. Access granted. Token spent.200 OK x-l402: spent { result: ... }
$ curl -i https://api.plannt.com/v1/demo # no credentials. no headers. # the request itself is the trigger.
HTTP/1.1 402 Payment Required content-type: application/json { "error": "Payment Required", "invoice": "lnbc210n1p...", "format": "L402 <mac>:<preimage>" }
$ curl -i https://api.plannt.com/v1/demo \ -H "Authorization: L402 <mac>:<preimage>" HTTP/1.1 200 OK { "result": "verified" }
The credential is generated, used, and consumed inside a single request cycle. It exists for less than a second.
Every token expires the moment it verifies. The replay window is zero. The idle window is zero.
Each call requires a discrete Lightning invoice settled before access. Spend is capped at the cost of one request.
Pure cryptography. HMAC(root_key, payment_hash) == macaroon_id. Stateless. Horizontal. Fast.
A Model Context Protocol server that lets Claude, Cursor, and any MCP-compatible agent call Plannt-gated endpoints natively. No middleware. No glue code. The agent discovers, pays, and verifies in a single tool call.
A single-binary command-line client. Pay an L402 invoice from your terminal,
retry the request with the resulting credential, and pipe the response into
whatever you would pipe a curl response into. The fastest way to feel the protocol.
The repo is open. The endpoints are live. Start in the terminal you already have open.