Get invoices paid without exposing your client list
Clients pay in USDC. Nobody else sees who they are or what they pay.
How a rate leak happens
- block explorer
- → your address
- Client A 12,000 USDC
- Client B 7,500 USDC
01 A rival looks up your address.
- rival’s notes
- Client A pays 12k
- Client B pays 7.5k
- Same scope
02 They see who pays what.
- email to Client A
- Re: your agency
- Same work for 9,000?
- sent
03 They pitch your best client.

Every client’s letter, pinned to the wall behind him.
Hans Holbein the Younger, The Merchant Georg Gisze, 1532
What an invoice address leaks
All of it is readable from one public address, by anyone, for as long as the chain exists.
-
Client list
Known treasuries name your clients.
-
Your rates
What each client pays, side by side.
-
Pipeline
New clients in, old ones out.
-
Late payers
Who pays on terms, and who doesn’t.
How it works
- Payment request Created
- ref
- invoice #2041
- amount
- 9,500.00 USDC
01
Invoice sent
With its own payment link
- Payment request Paid
- ref
- invoice #2041
- amount
- 9,500.00 USDC
- from
- customer wallet
02
Client pays
From the company wallet
- Payment request Shielded
- ref
- invoice #2041
- amount
- 9,500.00 USDC
- from
- customer wallet
- to
- hidden
03
Shielded on arrival
Fresh address, every time
- Payment request Confirmed
- ref
- invoice #2041
- amount
- 9,500.00 USDC
- from
- customer wallet
- to
- hidden
04
Marked paid
Matched by invoice number
- No customer account
- Hosted checkout
- USDC + USDT on Arbitrum
- From $0.50
Who sees what
The payer’s own transfer is always public.
| who | The payment | Who got paid | Your rates |
|---|---|---|---|
| The public | Can see | Hidden | Hidden |
| Your other clients | Can see | Hidden | Hidden |
| You | Can see | Can see | Can see |
| Your accountant | Can see | Only if you share your viewing key | Only if you share your viewing key |
But what about…
- Refunds
- A new payment back to the customer, from your own process.
- Tax and accounting
- Your accountant reads every payment with the viewing key.
- Compliance
- Incoming funds are screened before they’re shielded.
- Custody
- You hold the keys. Curvy can’t move your funds.
- Chargebacks
- None. Onchain payments are final.
- Customers without USDC
- Keep your other methods. This is one more option.
Is it right for you?
Good fit if
- Your customers pay, or ask to pay, in USDC or USDT
- Your revenue or customer list is sensitive
- You’re happy to receive stablecoins, not fiat
- You can add a server-side call to checkout
Not yet if
- You need fiat paid into your bank automatically
- You need chains other than Arbitrum
- Your customers pay in Bitcoin or other coins
- You need a no-code store plugin today
Built to be checked
- Audited by Ethernal Full report public on GitHub
- Open-source contracts github.com/0xCurvy
- Published research Stealth address protocols
- 10+ years together Two PhDs in ZK and cryptography
Questions
Can the payment link go on the invoice?
Yes. Each payment request has its own checkout link, so it can go on the invoice or in the email. The payment matches the invoice by reference.
Do clients need a Curvy account?
No. Their finance team pays from the company wallet they already use.
Can my other clients see what I charge?
No. Payments land on fresh addresses that aren’t linked to you, so nobody can line up what different clients pay.
Which stablecoins are supported?
USDC and USDT, settled on Arbitrum. The minimum payment is $0.50, and fees are taken from the payment.
Your rates stay between you and your client.
Tell us how you take payments today, and we’ll show you where Curvy fits.
Watch the demo- Your payment flow, step by step
- What stays visible, and to whom
- How the SDK fits your stack
- Your compliance questions