And get a signed receipt for every payment it makes. Veyto sits between your agent and money: it checks every payment against limits you set, refuses the ones that break them, and records what happened either way.
Developer beta on Base Sepolia with test USDC. No mainnet, no real money.
Three things, and they are the three words in the logo.
Non-custodial. Veyto authorizes a payment and hands back unsigned material; your process signs it. There is no route that accepts a private key.
A cap per payment, a cap per day, a rate limit, and a kill switch. Budget is reserved before anything is signed, so concurrent requests cannot race past a cap.
Ed25519-signed over the exact bytes, binding the amount, the payee, the settled transaction and a fingerprint of the rules that allowed it.
When a limit stops a payment, Veyto did the job you configured it to do. Nothing was reserved, nothing was signed, and nothing reached the chain.
It is not an error and it is not styled like one. Real failures stay red; Blocked is information, and Settled is money that moved.
One API key. Your own wallet. About fifteen lines.
// npm install @veyto/sdk viem import { VeytoClient, localSigner } from "@veyto/sdk"; const veyto = new VeytoClient({ baseUrl: "https://sandbox.veyto.io", apiKey: process.env.VEYTO_API_KEY, // the only Veyto credential agentId, rail: "eip155:84532", currency: "USDC-6", sign: localSigner(process.env.MY_WALLET_KEY), // stays in YOUR process }); // $1 per payment, $5 per day, 20 payments an hour await veyto.setPolicy(agentId, "1000000", "5000000", 20); // then just fetch — the 402, authorization, signing and settle are handled const res = await veyto.payingFetch("https://some-service/premium/data");
The beta is small and hand-issued. Tell us what you are building and we will send you a sandbox API key and the docs. No signup, no card, no sales call.