A2A
Embeds a signed governance extension inside A2A Agent Cards so receiving agents can make a trust decision before accepting a task. The extension is a verbatim subset of the live Governance Attestation, served over a public endpoint and re-verifiable with ML-DSA-65.
Why
The A2A protocol describes what an agent can do but not how governed it is. Two agents from different orgs negotiate a task without any standardized view of each other's compliance posture. Asqav fills the gap by shipping governance metadata inside the Agent Card under extensions.asqav.governance, matching the proposal in a2aproject/A2A#1717.
Endpoint
Public, no auth:
curl https://api.asqav.com/api/v1/agents/{agent_id}/card
Returns 200 for any agent that has issued at least one attestation. 404 if the agent has never been attested. 410 if the attestation has expired, or the agent has been revoked or decommissioned. 403 if the agent is suspended or quarantined, or its organization is not able to sign. Re-issuing a fresh attestation, or lifting the suspension, restores 200.
An attestation is valid for seven days from issuance and does not renew on its own. Once it expires, this endpoint and the public attestation endpoint both return 410 until the organization issues a fresh one.
Platform discovery
Asqav exposes its own A2A Agent Card at the standard well-known path:
curl https://api.asqav.com/.well-known/agent.json
This describes Asqav-as-a-platform. The card advertises its governance capabilities and a card_resolver URL template for looking up governance metadata on any Asqav-governed agent.
Card shape
{
"schemaVersion": "1.0",
"name": "support-bot",
"description": "asqav-governed AI agent",
"serviceEndpoint": "https://api.asqav.com/api/v1/agents/agt_abc123",
"capabilities": ["read", "reply"],
"extensions": {
"asqav": {
"governance": {
"attestation_url": "https://api.asqav.com/api/v1/public/attestation/agt_abc123",
"trust_level": "L2",
"trust_score": 0.6234,
"policy_digest": "sha256:...",
"compliance_attestations": ["HIPAA", "GDPR"],
"retention_ttl_seconds": 31536000,
"derivation_rights": {
"retention_permitted": true,
"derivative_works": false,
"third_party_sharing": false,
"license_reference": null
},
"issuer": "asqav",
"schema_version": 2
}
}
}
}
Verifying on the receiving side
After receiving a peer's Agent Card, fetch the full signed attestation at extensions.asqav.governance.attestation_url. Verify the ML-DSA-65 signature against the returned public key. If the body matches the governance subset in the card and the signature verifies, the trust posture is genuine.
Old A2A clients that don't understand extensions.asqav ignore it and see a regular Agent Card. Clients that DO understand it can enforce trust thresholds before accepting tasks.
Integration example
import httpx, json
async def accept_task_if_governed(peer_agent_id: str, min_trust_score: float = 0.5):
card = httpx.get(f"https://api.asqav.com/api/v1/agents/{peer_agent_id}/card").json()
gov = card.get("extensions", {}).get("asqav", {}).get("governance")
if not gov:
raise RuntimeError("peer has no governance metadata")
if gov["trust_score"] < min_trust_score:
raise RuntimeError(f"peer trust_score {gov['trust_score']} below threshold")
# Optionally re-verify the signed attestation
att = httpx.get(gov["attestation_url"]).json()
# ... verify signature_b64 against public_key_b64 with ML-DSA-65
return True