Private payments for machine commerce
Cash for the
machine internet.
Software moves at the speed of a request.
Now, money can too. Fund once. Spend by proof.
APIs are becoming markets.
Machines need cash.
Software can reason, create, and transact. Paying for it still assumes a human account.
openzk replaces that ceremony with a private note. A bearer instrument for the machine internet.
Accounts
An identity before a transaction. Registration before a request.
Credentials
A reusable key that ties access, billing, and attribution together.
History
Every payment adds another entry to a permanent purchase trail.
Public at the edges. Private in the middle.
ETH → Note → Proof → ETHFund once.
Spend by proof.

Fund a note.
Deposit ETH into the Ethereum vault. The deposit is public; the note stays in your browser.
Pay by proof.
Prove a valid payment to a service. Your identity, balance, and other purchases remain hidden.
Exit to Ethereum.
Withdraw your remaining funds. Public settlement, with a contract escape path when needed.
What the service learns
Exactly
one thing.
Proof that you paid.
Everything else stays yours.
Not requested.
Not revealed.
Not shared.
Precision, down to the request
Small payments.
Infinite possibility.
A private note becomes a series of precise payments. One request. One proof. One valid payment.
Illustrative per-call prices
Built for agents
Software can pay
for software.
A request should need a payment, not a personality. Give software the ability to pay for what it uses.
Try the playgroundagent.request()Requestservice.quote()Quoteopenzk.prove(payment)Prove200 OKAccepted ↗Payment verified. Identity not requested.
Privacy with assurance
Prove enough.
Reveal nothing more.
Show that your balance meets a requirement without disclosing the balance itself. Private does not mean unverifiable.
A smaller surface
Leave the baggage behind.
Traditional API payments
The openzk way
Deposits and withdrawals settle publicly on Ethereum. The payment history between them does not need to.
Understand the exitAt the edge of your endpoint
Accept proof.
Skip the profile.
Private payments belong inside the request. Explore the protocol, or make your first payment in the playground.
View protocol sourceconst payment = await openzk.prove({
amount: quote.price,
service: quote.recipient
});
await fetch(endpoint, {
headers: {
"OpenZK-Proof": payment.proof
}
});Cash semantics. Without the ceremony.

