The payment agent that remembers what wasn't worth paying for.
Edith pays for API calls on Sui and keeps every outcome in Walrus Memory, so your agents never pay twice for the same mistake.
Built on
The problem
Agents can pay now. They still can't tell what's worth paying for.
-
It pays for empty answers
A paid API takes the money and returns an empty body or an error. Nothing in the agent notices.
-
It repeats the mistake
Every session starts with a blank slate, so tomorrow the same bad request gets paid for again.
-
Payments are final
A settled transfer on Sui cannot be reversed. The only moment to be careful is before paying.
The product
A judgment step in front of every payment.
Before a single SUI moves, Edith reads what it remembers about the request and the endpoint, checks the price, and decides.
Decision
Memory
Agents forget. Edith keeps the record.
Every paid call becomes a memory on Walrus: what was asked, what it cost, what came back, and whether it was worth it. The next session starts from everything the last one learned.
- Written
- After every paid call
- Read
- Before every payment
- Stored on
- Walrus Memory
- Survives
- Restarts, redeploys, new machines
How it works
Five steps between a price and a payment.
- 01
Recall
Every past outcome for this endpoint is read from Walrus Memory.
Walrus Memory - 02
Judge
The policy weighs the request's history, the endpoint's record and the price.
Edith policy - 03
Pay
Your wallet signs the exact amount quoted, to the exact payee. Nothing moves without that signature.
Your wallet, Sui - 04
Verify
The transfer settles on Sui, and Edith confirms what arrived through Tatum, not the provider's word.
Tatum gateway - 05
Remember
Worth it or not, the outcome is written back for every session after this one.
Walrus Memory
Security and control
Careful with money, by design.
Limits live in code, not in a prompt. An agent cannot talk its way past them.
Your keys stay yours
Edith never holds a private key. Signing in proves the wallet is yours and grants no spending power. Every payment is a transfer your wallet signs.
Limits you set
A most-per-payment and a most-per-day, checked before a price is shown and again before a signed payment is sent. Never above 0.01 SUI a call.
Checked before it leaves
Each signed transfer is simulated first and sent only if it pays the exact quoted amount, to the quoted provider, from your account.
Every payment spent once
Quotes expire in five minutes and providers keep a ledger of settled transactions, so one payment can never unlock two answers.
Outages don't cost twice
If an answer goes missing, Edith checks Sui before anything else. A 5xx earns a cool-down, not a second payment.
Open source
MIT licensed. Read every line that touches your money, then run it on your own keys.
Read the source
Developers
Plan, then pay. Two calls.
To try Edith, open the app and connect your wallet: no setup needed. To run your own instance, self-host it next to your agent. Providers add one middleware to price their API in SUI.
- Node.js 24 or newer
- A Tatum API key
- A Walrus Memory account
$ git clone https://github.com/bunnyyxtan/edith
$ npm install
$ cp .env.example .env # Tatum key, Walrus Memory account
$ npm run setup:wallets
$ npm start
Edith listening on http://localhost:4030
# Your agent asks with its own key. It can never pay.
POST /v1/requests
Authorization: Bearer ek_…
{ "url": "https://api.example.com/v1/quote" }
→ blocked (and why) · free · awaiting your approval
# You approve in the app; your wallet signs. Then:
GET /v1/requests/:id
→ paid, with the answer and the Sui transaction
import { createPaywall, createLedger } from "./paywall.mjs";
const paywall = createPaywall({
secret, network: "mainnet", payTo, price: 1_000_000n,
ledger: createLedger("data/used-digests.txt"),
settlePayment: (signed, terms) => settlePayment(client, signed, terms),
});
// No X-PAYMENT header: answer 402 with signed terms.
if (!header) return send(res, 402, paywall.requirements(resource));
await paywall.redeem(resource, header);
FAQ
Questions, answered.
What counts as a call that wasn't worth it?
An empty or malformed response, or a 4xx error after payment. That exact request is never paid for again. A 5xx is treated as temporary: the request cools down for fifteen minutes before one retry.
Does Edith hold my money or my keys?
No. You connect your own Sui wallet, and it signs each payment you approve. Edith checks the signed transfer and hands it to the provider, but it never holds a key, a seed phrase or a balance.
Can a payment be refunded?
No. Payments settle on Sui and are final, and Edith never claims otherwise. That is why every decision happens before paying, not after.
Which APIs can Edith pay?
Any API that answers with an HTTP 402 and x402 payment terms in SUI, signed the way Edith's paywall signs them. The paywall ships in the same repository, so a provider can adopt it in an afternoon.
Where does the memory live?
In Walrus Memory, under a namespace owned by your account. It is read before each payment and written after each paid call, so it survives restarts and moves between machines.
What does Edith cost?
Edith is free and open source under the MIT license. You pay only the prices the APIs ask, plus Sui gas.
Give your agents a memory for money. Set up Edith in a few minutes and let every payment teach the next one.