Developer docs
Verify that an agent is who it claims to be — and how trustworthy it is — in one API call, or fully locally with the open spec.
The open spec
An agent proves identity by serving an Ed25519-signed JSON document at /.well-known/agent-passport.json on the domain it controls. Verification = fetch over HTTPS, canonicalize the body (RFC 8785 JCS), verify the detached signature against the declared public key, and confirm the serving host matches owner_domain. No blockchain, no DID, no central authority. Full spec: /spec.
Verify API
GET /api/v1/verify?agent=<slug-or-domain> — returns identity, verification status, and trust score. API-key auth; metered per call against your plan quota. Always check the verified boolean — resolution does not imply verification.
curl -H "Authorization: Bearer ap_live_xxx" \
"https://passportforagents.com/api/v1/verify?agent=acme-mcp-acme-dev"
# 200
{
"agent": { "slug": "...", "name": "...", "owner_domain": "acme.dev",
"public_key": "z6Mk...", "capabilities": ["tools/list"] },
"status": "key_verified",
"verified": true,
"trust": { "score": 70, "breakdown": [ /* per-signal */ ] }
}Codes: 200 ok · 400 missing agent · 401 bad key · 404 unknown agent · 429 quota exceeded. Create keys in the dashboard.
Trust score
A transparent 0–100 weighted sum of independently verified signals — never a black box. Self-asserted claims carry zero weight until checked.
score = round( 100 * Σ ( value[signal] * weight[signal] ) ) domain_control 0.30 · signed_provenance 0.20 · secret_hygiene 0.20 uptime 0.10 · registry_presence 0.10 · user_rating 0.10
SDK — verify before connect
@passportforagents/verify — zero dependencies (platform WebCrypto). Verify fully locally, or via the hosted API.
import { verifyStandalone } from "@passportforagents/verify";
// Gateway pattern: refuse to connect to an unverified agent.
const r = await verifyStandalone("example.com");
if (!r.valid) throw new Error("unverified agent");
console.log(r.document?.agent_name, r.document?.capabilities);
// Or hosted: identity + status + trust score in one call.
import { verifyHosted } from "@passportforagents/verify";
const h = await verifyHosted({ agent: "acme-mcp-acme-dev", apiKey: process.env.PFA_KEY! });
if (h.ok && h.verified) console.log(h.trust?.score);Embeddable badge
A live, cacheable SVG that reflects current status + score and links back to the public profile. Unspoofable (it's a live lookup). Drop it in your README:
[](https://passportforagents.com/agent/<slug>)