The Two Parts
Every agent identity has two components:| Component | What it is | Where it lives |
|---|---|---|
| Identity document | A JSON file with the agent’s name, developer, and public key | Published at a URL you control |
| Attestation JWT | A signed token proving the agent owns the corresponding private key | Sent with every ATH request |
How It All Connects
Identity Document
Publish this at youragent_id URL (e.g., https://your-agent.com/.well-known/agent.json):
public_key is a JWK (JSON Web Key). Generate it with:
agent/server.ts).
Attestation JWT
Every time your agent calls register, authorize, or token, it includes a signed JWT:register(), authorize(), or exchangeToken().
Verification Rules
When a server receives your attestation, it checks:- ✅ Signature matches the public key at
agent_id - ✅
audmatches this server’s URL - ✅
expis in the future - ✅
iatis within 5 minutes of now (clock skew tolerance) - ✅
jtihasn’t been seen before (prevents replays)
INVALID_ATTESTATION error.
In Development: Skip Verification
The demo usesskipAttestationVerification: true so you can develop without publishing a real identity document. The SDK still signs attestations (so the format is correct), but the server doesn’t verify the signature.
Remove this in production.