Zyra API
Check any agent from your product.
One record per call. Registration stays free for owners, and badge checks stay free for everyone.
Quickstart
- Sign in to your account with your email.
- Under API keys, create a Sandbox key. It returns sample records and never touches live data.
- Send it as
Authorization: Bearer zyra_test_…. Switch to a Live key when you're ready.
curl https://zyra.wevesti.com/api/public/v1/agents/ZYR-11B6D1A972/status \
-H "Authorization: Bearer zyra_test_…"Register and manage an agent
The four parts of an agent's legal identity: registration, service endpoint, asset binding and principal. Create your API key with write access first.
Your API key
Says who is calling. Sent on every call as Authorization: Bearer.
The agent key
Proves you own that agent. Returned once at registration, then sent as X-Agent-Key to change its endpoint, binding or principal.
What's free: registering up to 25 agents a day per key, and every update to your own agent. These don't count toward your monthly calls. Bulk registration beyond that is on Growth and Platform.
1. Register the agent
Send the agent's name, where it answers, who it acts for and what it may do. The reply carries its agent key once. Save it right away; Zyra only keeps a fingerprint and cannot show it again.
curl -X POST https://zyra.wevesti.com/api/public/v1/agents \ -H "Authorization: Bearer zyra_live_…" \ -H "Content-Type: application/json" \ -d '{"name":"Acme Billing Agent","service_endpoint":"https://api.acme.com/agent","principal_type":"organization","principal_name":"Acme Inc.","principal_contact":"ops@acme.com","spend_limit":5000,"can_sign_documents":false,"permissions":["send_invoices"]}'Reply
{ "data": { "zyr_id": "ZYR-4F2A9C10B7", "agent_key": "zyra_sk_…", "status": "good_standing", "notice": "Store agent_key securely. Zyra cannot show it again." } }2. Change the service endpoint
Zyra calls the new address before saving it. If it doesn't answer, nothing changes and you get endpoint_unreachable.
curl -X PUT https://zyra.wevesti.com/api/public/v1/agents/ZYR-4F2A9C10B7/endpoint \ -H "Authorization: Bearer zyra_live_…" \ -H "Content-Type: application/json" \ -H "X-Agent-Key: zyra_sk_…" \ -d '{"service_endpoint":"https://api.acme.com/v2/agent"}'Reply
{ "data": { "zyr_id": "ZYR-4F2A9C10B7", "endpoint": { "url": "https://api.acme.com/v2/agent", "verified": true }, … } }3. Bind an asset account
Tie the agent to the wallet, bank, escrow, card or reserve it spends from. References are always shown masked. A spend limit above $10,000 goes to lawyer review, so the reply shows pending_review until it's approved.
curl -X PUT https://zyra.wevesti.com/api/public/v1/agents/ZYR-4F2A9C10B7/binding \ -H "Authorization: Bearer zyra_live_…" \ -H "Content-Type: application/json" \ -H "X-Agent-Key: zyra_sk_…" \ -d '{"asset_type":"escrow","asset_ref":"ESC-88231904","spend_limit":20000}'Reply
{ "data": { "zyr_id": "ZYR-4F2A9C10B7", "status": "pending_review", "binding": { "type": "escrow", "ref": "••••1904", "spend_limit": 20000 } } }4. Link a principal
Ask to link the agent to the person or company responsible for it. The link stays pending until Zyra confirms it.
curl -X POST https://zyra.wevesti.com/api/public/v1/agents/ZYR-4F2A9C10B7/principal \ -H "Authorization: Bearer zyra_live_…" \ -H "Content-Type: application/json" \ -H "X-Agent-Key: zyra_sk_…" \ -d '{"principal_type":"organization","principal_name":"Acme Inc.","principal_contact":"legal@acme.com"}'Reply
{ "data": { "zyr_id": "ZYR-4F2A9C10B7", "principal": { "name": "Acme Inc.", "type": "organization", "verified": false }, "status": "pending_review" } }
Endpoints
Base URL: https://zyra.wevesti.com/api/public/v1
- GET
/agents/{zyr_id}Identity record: name, verified endpoint, principal, agent type, status.$0.10 - GET
/agents/lookup?q=Find by endpoint URL or name. Filters: category, form (blueprint, instance), type (agent, toolkit), status, platform. Returns at most 5 matches.$0.10 - GET
/agents/{zyr_id}/statusLight check: good_standing, suspended or revoked, with a timestamp.$0.02 - POST
/verifyFull verification: identity, principal, scoped authority, asset binding and standing, signed so you can keep it as evidence. depth: standard or deep (Platform).$0.50 / $2.00 - GET
/badge/{zyr_id}/resolveBadge resolution for counterparties. No key needed.Free - POST
/agentsRegister one agent: name, service_endpoint, principal, authority and optional asset binding. Returns its agent key once. Up to 25 a day per key are free; bulk registration beyond that is on Growth and Platform.Free - PUT
/agents/{zyr_id}/endpointChange the service endpoint. It must answer live. Send the agent's own key as X-Agent-Key.Free - PUT
/agents/{zyr_id}/bindingBind an asset account: asset_type, asset_ref, spend_limit. References are always shown masked. Limits above $10,000 go to lawyer review. Needs X-Agent-Key.Free - POST
/agents/{zyr_id}/principalRequest a link to a person or organization. Stays pending until Zyra confirms it. Needs X-Agent-Key.Free
Examples
JavaScript: verify
const res = await fetch("https://zyra.wevesti.com/api/public/v1/verify", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.ZYRA_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ zyr_id: "ZYR-11B6D1A972", depth: "standard" }),
});
const { verification, signature } = await res.json();Python: lookup
import os, requests
r = requests.get("https://zyra.wevesti.com/api/public/v1/agents/lookup",
params={"q": "https://api.example.com/agent", "form": "instance"},
headers={"Authorization": f"Bearer {os.environ['ZYRA_API_KEY']}"})
print(r.json()["data"])Verification responses carry an HMAC-SHA256 signature over the verification, depth, issued_at and issuer fields. Keep the whole response as your record of the check.
Errors
400bad input ·401missing, unknown or revoked key ·403endpoint not on your plan, key lacks write access, or agent key belongs to another agent401 agent_key_requiredmissing X-Agent-Key on an update ·422endpoint didn't answer or registration failed404no such agent ·429monthly calls used up, daily free registrations used up, or rate limited
Errors look like { "error": { "code", "message" } }. Failed calls are not charged.
Pricing
Free · $0/mo
Unlimited sandbox, 100 live calls a month.
Developer · $9/mo
1,000 live lookups a month. Badge checks free.
Growth · $49/mo
10,000 live lookups a month, standard verification, priority rate limits.
Platform · Custom
Bulk volume, deep verification with signed attestation, status webhooks, SLA, invoiced billing.
Choose Developer or Growth in Plans & billing. Your existing and new API keys use your paid plan after Stripe confirms payment. Free access stays available. Platform checkout uses an agreed price assigned to your account; contact us to agree terms.
Free stops at its included calls. On Developer and Growth, calls past the bundle keep working and are added to your next invoice. Per-call rates: status $0.02, identity $0.10, standard verification $0.50, deep verification $2.00.