Veyto

Agents

Create one

ts
const agentId = await veyto.createAgent(
  "research-agent",                              // your label
  "noncustodial",                                // you keep the key
  "0x51063e78f02f028DDce8f722E24800ed433E435F",  // PUBLIC payer address
);

payer_address is an address, never a key. It is the address the signed authorization will name as the payer, so it must be the address your signing key controls.

Read them back

ts
const { items } = await veyto.listAgents({ limit: 50 });
const agent = await veyto.getAgent(agentId);
// { id, name, custody_mode, payer_address, status, created_at }

status is "frozen" when the kill switch is on, so you can tell a stopped agent from a capped one without inferring it from a refusal.

Freeze and unfreeze

ts
await veyto.freeze(agentId, "incident 4821");
await veyto.unfreeze(agentId, "incident closed");

Freezing stops the spend path immediately. Limits keep applying underneath; this stops everything.

One thing freezing cannot do: recall an authorization that was already signed. A signed EIP-3009 authorization is a bearer credential until it expires, so its exposure is bounded by the authorization window rather than by the freeze.