Tooling
The hosted platform
Zanora runs as one hosted platform, and every package uses it by default. Its addresses, how to test against it safely, and the gateway settings you'll find in each package.
Addresses
| URL | |
|---|---|
| Gateway | https://api.zanora.dev |
| Console | https://console.zanora.dev |
| Demo seller, REST | https://demo-seller.zanora.dev/ocr (POST, body { "imageUrl": "…" }, free) |
| Demo seller, MCP | https://demo-seller.zanora.dev/mcp (tool extract_invoice, free) |
| API health | https://api.zanora.dev/health |
The hosted platform handles real money: accounts, listings, balances and receipts you create there are permanent. There's no separate public sandbox or test gateway, and the gateway isn't available to run yourself.
The demo seller is always available
It's a verified seller selling the same OCR function over both protocols, both free, so you can test a buying integration on day one, with an unfunded wallet, before any other seller exists. A free call is still a full purchase: the 402, a signed payment and a signed receipt, for 0 USD. The REST and MCP versions return the same answer and the same responseHash.
Testing an integration
Because there's one platform, you test against it directly, with small or zero amounts.
- Buyers: buy from the demo seller with an unfunded wallet. Every step of a real purchase happens, and nothing is charged. Set
ZANORA_MAX_PRICE_MICROS(MCP) ormaxPriceMicros(SDK) low while you develop, and give a test agent its own wallet holding only what you'd accept losing. - Sellers: run your server on your own machine against the hosted gateway. Before you're verified, an unpaid call should already return
402(HTTP) or aPAYMENT_REQUIREDresult (MCP) with a signed challenge. AlocalhostURL can only be bought by an agent on the same machine, so publish a public URL, or a tunnel such asngrok http 4024, before you expect other buyers.
Gateway settings in the packages
Every package uses the hosted gateway, https://api.zanora.dev, by default, so you normally set nothing. Each package also accepts a gateway URL:
| Tool | Setting | Default |
|---|---|---|
@zanora/mcp, @zanora/mcp-proxy | ZANORA_GATEWAY_URL | https://api.zanora.dev |
@zanora/sdk | new ZanoraAgent({ gatewayUrl }), new ZanoraClient({ gatewayUrl }) | https://api.zanora.dev |
@zanora/middleware-mcp | zanoraSeller({ gatewayUrl }), or ZANORA_GATEWAY_URL | https://api.zanora.dev |
@zanora/middleware-express | new HttpBackend({ gatewayUrl, apiKey }), or positionally new HttpBackend(gatewayUrl, apiKey) | https://api.zanora.dev |
Leave these unset. A seller's middleware and the capability it serves must use the same gateway: if a stray ZANORA_GATEWAY_URL points elsewhere, buyers get 402 forever, or the call fails with PROVIDER_NOT_FOUND when it completes.