ZanoraBetaDocs

Introduction

Buy your first capability in about five minutes. You sign up as a buyer, give an agent a wallet, and buy one call from the live demo seller. It's free, so you don't need a card.

This buys one call from the demo seller's invoice-OCR tool on the hosted platform. The demo seller charges $0.00, so there's nothing to fund. The call still goes through the whole payment handshake: the seller answers 402 with a signed price, your agent signs a payment for it, and you get the answer back with a signed receipt, for 0 USD. Buying from a paid seller works the same way, except that money moves: the receipt carries the price, and the wallet balance drops by exactly that. You'll use the console↗ for the steps a person has to do, and an MCP client for the rest.

1

Create a buyer account

Open console.zanora.dev↗, choose Buyer, and enter your email, an organisation name and a password. Click the link in the email that arrives. The console confirms the address and shows your workspace's root API key (zk.akey_…).

The key is shown once, and it isn't for your agent

Only a hash of the key is stored. Copy it into a password manager now. If you lose it, you mint a new one. The root key can approve held purchases, so keep it for yourself: your agent gets its own key in step 3. See Accounts and API keys.

Prefer the terminal? npx -y @zanora/mcp setup signs you up, creates the agent and its wallet, and stores an agent key on your machine in two commands. See Set up in two commands, then skip to Buy something.

2

Create an agent

In the console, go to Buyer → Agents → Create agent. Name it, for example research-agent, and pick how you'll fund it (Card or USDC). You don't create a wallet separately: Zanora provisions one with the agent, along with a signing keypair. Save the private key it shows as agent-key.pem. The key signs every payment the agent makes, and it is shown only once.

The form also offers two spending rules, both on by default: Approval above $2.00, and Require approval for unverified sellers. They're added to your workspace policy, so they apply to every agent. The demo seller is verified and its tool is free, so neither rule holds this purchase.

3

Create an agent key

Go to Settings → API keys, choose Agent key (can buy, can't approve), give it a label such as research-agent, and click Generate new key. Copy the key: it's shown once. This is the API key your agent uses. It can search, buy and read, but it can't approve a purchase that a spending rule holds for a person. See Keeping approval with people.

4

Fund the wallet (when you buy from a paid seller)

Skip this for the demo seller. A wallet with a zero balance can buy a free capability. Before your agent buys from a paid seller, click Fund it now on the confirmation screen, or open the wallet later from Buyer → Wallets and click Fund. Use a card top-up or send USDC on Base to the wallet's deposit address. The balance updates when the payment rail confirms, which can take a few seconds for a card and a few minutes for USDC. See Funding a wallet.

5

Set a spending rule (optional)

To change the threshold later, go to Buyer → Policies and add a rule such as:

YAML
approval:
  price > 5.00

Any call over $5.00 now waits for a person to approve it. The rule is checked on the server before money moves, so the agent can't get around it. See Spending policies.

6

Connect your agent

Add Zanora to your MCP client's config. For Claude Desktop that's ~/Library/Application Support/Claude/claude_desktop_config.json:

claude_desktop_config.json
{
  "mcpServers": {
    "zanora": {
      "command": "npx",
      "args": ["-y", "@zanora/mcp"],
      "env": {
        "ZANORA_API_KEY": "zk.akey_…",
        "ZANORA_AGENT_KEY_FILE": "/absolute/path/to/agent-key.pem",
        "ZANORA_MAX_PRICE_MICROS": "5000000"
      }
    }
  }
}

ZANORA_API_KEY is the agent key from the previous step, not the root key. ZANORA_AGENT_KEY_FILE is the agent-key.pem you saved when you created the agent. The gateway defaults to https://api.zanora.dev. If your workspace has exactly one agent wallet, the server finds it from the key. ZANORA_MAX_PRICE_MICROS caps each call at $5.00 on your side.

7

Buy something

Restart the client and ask:

Output
Find a capability that extracts text from invoices and run it on
https://example.com/invoice.png. Tell me what it cost and show the receipt id.

The agent calls zanora_discover, which finds Invoice OCR (demo), then zanora_invoke, which signs a payment for $0.00 and returns the result with a signed receipt. Ask the agent to check it with zanora_receipt. The receipt is verified against the platform key, its amount is 0 USD, and its responseHash matches the answer you got. The wallet balance is unchanged. From a paid seller, the same purchase debits the wallet by exactly the receipt's amount.

Prefer code?

The same purchase from TypeScript with @zanora/sdk:

buy.ts
import { readFileSync } from "node:fs";
import { ZanoraAgent } from "@zanora/sdk";

const agent = new ZanoraAgent({
  // gatewayUrl defaults to https://api.zanora.dev
  apiKey: process.env.ZANORA_API_KEY!,               // the agent key, not the root key
  walletId: "wal_…",                                 // from the console
  agentId: "research-agent",
  privateKeyPem: readFileSync("agent-key.pem", "utf8"),
  maxPriceMicros: 5_000_000n,                               // never sign a proof above $5.00
});

const { results } = await agent.discover({ query: "extract text from invoices", protocol: "rest" });
const r = await agent.invoke(results[0]!.version.endpoint, {
  body: { imageUrl: "https://example.com/invoice.png" },
});

console.log(r.data);
console.log(r.receipt?.id, r.receiptVerified, r.responseHashVerified);

Next