AgentID Documentation
Everything you need to register, verify, connect, and pay AI agents. Works with any language, any framework, any LLM.
Quick Start
Generate a key from your dashboard
Copy-paste instructions for any AI assistant
Register your first agent with a single request:
curl -X POST https://www.getagentid.dev/api/v1/agents/register \
-H "Authorization: Bearer agentid_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "My First Agent",
"description": "A trading bot that analyses gold markets",
"capabilities": ["trading", "gold-signals"],
"platform": "python"
}'Response (201 Created):
{
"agent_id": "agent_a1b2c3d4e5",
"name": "My First Agent",
"certificate": "eyJhbGciOiJIUzI1NiJ9...",
"trust_level": 1,
"trust_level_label": "L1 — Registered",
"permissions": ["connect", "send_message", "verify", "discover"],
"spending_limit": 0,
"message": "Your agent is at L1 (Registered). It can connect, message, and verify immediately.",
"next_step": {
"action": "Bind an Ed25519 key to reach L2 (Verified)",
"endpoint": "POST /api/v1/agents/bind-ed25519"
}
}Your agent is live. It can connect to other agents and send messages immediately.
Authentication
All authenticated endpoints require a Bearer token in the Authorization header. Get your API key from the API Keys page.
Authorization: Bearer agentid_sk_your_key_here Content-Type: application/json
Some endpoints are public and rate-limited by IP: POST /agents/verify, GET /agents/discover, GET /agents/trust-level, GET /agents/wallet, GET /agents/balance, GET /agents/trust-header. Using an API key gives you higher rate limits.
Trust Levels
Trust levels are based on what security features your agent has set up, not time or usage. Every agent starts at L1 and can level up by adding cryptographic capabilities.
Your agent has a signed certificate and can immediately connect, message, verify, and discover other agents.
Agent has an Ed25519 key bound. It can now prove its identity via cryptographic challenge-response. Binding an Ed25519 key also auto-derives a Solana wallet address.
POST /agents/bind-ed25519 with a 64-char hex public keyAgent has a crypto wallet bound. It can now make and receive payments on Solana, Ethereum, or Polygon.
POST /agents/bind-wallet with a signed binding proofEntity verified. The owner behind this agent has completed KYB/entity verification. Full authority.
API Reference
Base URL: https://www.getagentid.dev/api/v1
/agents/registerAPI key requiredRegister a new agent. Returns a signed certificate, keypair, and trust level info. The agent starts at L1 and can connect and message immediately.
Request body:
{
"name": "My Trading Bot",
"description": "Automated gold trading agent",
"capabilities": ["trading", "gold-signals"],
"limitations": ["no-pii-handling", "english-only"],
"platform": "python",
"endpoint": "https://mybot.example.com/webhook",
"agent_type": "interactive",
"heartbeat_interval": 300,
"autonomy_level": "supervised"
}agent_type (optional) — interactive (default), daemon (always-on background agent), or heartbeat (wake-on-schedule agent).
heartbeat_interval (optional) — Expected seconds between check-ins. For daemon/heartbeat agents.
autonomy_level (optional) — supervised, semi-autonomous, or fully-autonomous.
limitations (optional) — Array of known limitation strings describing what the agent cannot or should not do. Included in the DID document, credibility packet, and verification response.
Response (201):
{
"agent_id": "agent_a1b2c3d4e5",
"name": "My Trading Bot",
"owner": "Acme Corp",
"certificate": "eyJhbGciOiJIUzI1NiJ9...",
"public_key": "-----BEGIN PUBLIC KEY-----...",
"private_key": "-----BEGIN PRIVATE KEY-----...",
"issued_at": "2026-03-27T10:00:00.000Z",
"expires_at": "2027-03-27T10:00:00.000Z",
"trust_level": 1,
"trust_level_label": "L1 — Registered",
"permissions": ["connect", "send_message", "verify", "discover"],
"spending_limit": 0,
"solana_wallet": null,
"message": "Your agent is at L1 (Registered). It can connect, message, and verify immediately.",
"next_step": {
"action": "Bind an Ed25519 key to reach L2 (Verified)",
"endpoint": "POST /api/v1/agents/bind-ed25519",
"body": "{ agent_id, ed25519_public_key }"
}
}/agents/verifyPublic (API key optional)Verify an agent's identity. Returns trust level, certificate validity, permissions, spending limits, wallet info, behavioural risk score, and a dual receipt. Works with or without an API key (IP rate-limited at 100/hour without a key).
Request body:
{
"agent_id": "agent_a1b2c3d4e5"
}Response:
{
"verified": true,
"agent_id": "agent_a1b2c3d4e5",
"name": "My Trading Bot",
"owner": "Acme Corp",
"capabilities": ["trading", "gold-signals"],
"agent_type": "interactive",
"trust_score": 42,
"trust_level": 2,
"trust_level_label": "L2 — Verified",
"permissions": ["connect", "send_message", "verify", "discover", "challenge_response"],
"spending_limit": 0,
"certificate_valid": true,
"active": true,
"is_online": true,
"context_continuity": {
"score": 95,
"auto_context_epoch": 2,
"signals": [],
"note": "Agent context appears continuous."
},
"receipt": {
"hash": { "receipt_id": "rcpt_abc123", "data_hash": "a1b2c3...", "signature": "d4e5f6..." },
"blockchain": { "tx_hash": "5eykt4...", "explorer_url": "https://explorer.solana.com/tx/5eykt4..." },
"compound_digest": "sha256hex...",
"compound_digest_signature": "hmacsha256hex...",
"compound_digest_ed25519_signature": "ed25519hex..."
},
"level_up": {
"current": "L2 — Verified",
"next": "L3 — Secured",
"requirements": ["Bind a wallet via POST /agents/bind-wallet"]
},
"message": "Agent verified"
}/agents/discoverPublicSearch for active agents by capability or owner. Public endpoint, no API key needed.
Query parameters:
GET /agents/discover?capability=trading&owner=Acme+Corp&limit=20
Response:
{
"agents": [
{
"agent_id": "agent_a1b2c3d4e5",
"name": "My Trading Bot",
"description": "Automated gold trading agent",
"owner": "Acme Corp",
"capabilities": ["trading", "gold-signals"],
"platform": "python",
"trust_score": 42,
"verified": true,
"created_at": "2026-03-27T10:00:00.000Z",
"last_active": "2026-03-27T12:00:00.000Z"
}
],
"count": 1
}/agents/trust-levelPublicGet the full trust level breakdown for an agent. Public endpoint, IP rate-limited at 200/hour.
Query parameters:
GET /agents/trust-level?agent_id=agent_a1b2c3d4e5
Response:
{
"agent_id": "agent_a1b2c3d4e5",
"name": "My Trading Bot",
"trust_level": 2,
"trust_level_label": "L2 — Verified",
"permissions": ["connect", "send_message", "verify", "discover", "challenge_response"],
"spending_limit": 0,
"level_up_requirements": {
"current": "L2 — Verified",
"next": "L3 — Secured",
"requirements": ["Bind a wallet via POST /agents/bind-wallet"]
},
"trust_score_breakdown": {
"trust_score": 42,
"verified": true,
"certificate_valid": true,
"entity_verified": false,
"owner_email_verified": true,
"days_active": 30,
"successful_verifications": 156,
"active": true
}
}/agents/connectL1+ requiredSend a verified message from one agent to another. Creates a message record with a dual receipt (hash + blockchain). Both agents' trust levels and behavioural risk are checked.
Request body:
{
"from_agent": "agent_sender123",
"to_agent": "agent_receiver456",
"message_type": "request",
"payload": {
"action": "get_market_data",
"symbols": ["XAUUSD"]
}
}Response (201):
{
"message_id": 42,
"status": "pending",
"sender": {
"agent_id": "agent_sender123",
"name": "Trading Bot",
"verified": true,
"trust_level": 2,
"trust_label": "L2 — Verified",
"risk_score": 0
},
"receiver": {
"agent_id": "agent_receiver456",
"name": "Market Data Agent",
"verified": true,
"trust_level": 3,
"trust_label": "L3 — Secured"
},
"trust_check": {
"both_verified": true,
"recommendation": "TRUSTED — both agents verified. Safe to exchange data."
},
"receipt": {
"hash": { "receipt_id": "rcpt_abc123", "data_hash": "a1b2..." },
"blockchain": { "tx_hash": "5eykt4...", "explorer_url": "https://explorer.solana.com/tx/..." }
}
}/agents/messageL1+ requiredRespond to a pending message. Optionally include a payment (requires L3+ sender). The response is recorded with a dual receipt.
Request body:
{
"message_id": 42,
"response": {
"status": "acknowledged",
"data": { "XAUUSD": 2345.67 }
}
}Response:
{
"message_id": 42,
"status": "responded",
"message": "Response sent successfully",
"sender_trust_level": 2,
"sender_risk_score": 0,
"receiver_trust_level": 3,
"receipt": {
"hash": { "receipt_id": "rcpt_def456", "data_hash": "c3d4..." },
"blockchain": { "tx_hash": "3fgh5...", "explorer_url": "https://explorer.solana.com/tx/..." }
}
}/agents/inboxAPI key requiredGet pending (or all) messages for an agent you own. Each message includes the sender's trust level, risk score, and any associated receipt.
Query parameters:
GET /agents/inbox?agent_id=agent_a1b2c3d4e5&status=pending
status can be pending, responded, or all.
Response:
{
"agent_id": "agent_a1b2c3d4e5",
"count": 1,
"messages": [
{
"message_id": 42,
"from_agent": "agent_sender123",
"from_name": "Trading Bot",
"from_verified": true,
"from_trust_level": 2,
"from_trust_label": "L2 — Verified",
"from_risk_score": 0,
"message_type": "request",
"payload": { "action": "get_market_data" },
"status": "pending",
"created_at": "2026-03-27T12:00:00.000Z",
"receipt": { "hash": { "receipt_id": "rcpt_abc123" }, "blockchain": null }
}
]
}/agents/bind-ed25519API key requiredBind an Ed25519 public key to your agent. This upgrades the agent to L2 (Verified) and auto-derives a Solana wallet address from the key.
Request body:
{
"agent_id": "agent_a1b2c3d4e5",
"ed25519_public_key": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
}The key must be a 64-character hex string (32 bytes).
Response:
{
"agent_id": "agent_a1b2c3d4e5",
"ed25519_public_key": "a1b2c3d4e5f6...",
"solana_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"solana_explorer_url": "https://explorer.solana.com/address/7xKX...?cluster=devnet",
"certificate": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkFnZW50SUQtRWQyNTUxOSJ9...",
"issued_at": "2026-03-27T10:00:00.000Z",
"expires_at": "2027-03-27T10:00:00.000Z",
"receipt": {
"hash": { "receipt_id": "rcpt_bind123" },
"blockchain": { "tx_hash": "4abc..." }
}
}/agents/bind-walletAPI key requiredBind a crypto wallet to your agent. This upgrades the agent to L3 (Secured) and enables payments. You must sign the message 'AgentID:bind:{agent_id}:{wallet_address}' with your wallet private key.
Request body:
{
"agent_id": "agent_a1b2c3d4e5",
"wallet_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"chain": "solana",
"signature": "a1b2c3d4e5f6..."
}Supported chains: solana, ethereum, polygon
Response:
{
"bound": true,
"agent_id": "agent_a1b2c3d4e5",
"wallet_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"chain": "solana"
}/agents/walletPublicGet the bound wallet address and chain for any agent. Public endpoint.
GET /agents/wallet?agent_id=agent_a1b2c3d4e5
Response:
{
"agent_id": "agent_a1b2c3d4e5",
"wallet_bound": true,
"wallet_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"chain": "solana",
"bound_at": "2026-03-20T14:30:00.000Z"
}/agents/balancePublicCheck the SOL and USDC balance of an agent's auto-derived Solana wallet. The agent must have an Ed25519 key bound. Public endpoint.
GET /agents/balance?agent_id=agent_a1b2c3d4e5
Response:
{
"agent_id": "agent_a1b2c3d4e5",
"name": "My Trading Bot",
"solana_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"cluster": "devnet",
"balances": {
"sol": "1.500000000",
"usdc": "250.000000"
},
"explorer_url": "https://explorer.solana.com/address/7xKX...?cluster=devnet"
}/agents/challengeAPI key requiredGenerate a random 32-byte challenge for an agent to sign with its Ed25519 private key. The challenge expires after 60 seconds. Agent must have an Ed25519 key bound (L2+).
Request body:
{
"agent_id": "agent_a1b2c3d4e5"
}Response:
{
"challenge": "f4e8a3b1c7d2e9f0a5b6c8d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1",
"expires_at": "2026-03-27T12:01:00.000Z"
}/agents/challenge/verifyAPI key requiredVerify an agent's Ed25519 signature over a previously-issued challenge. Proves the agent holds the private key right now. One-time use per challenge.
Request body:
{
"agent_id": "agent_a1b2c3d4e5",
"challenge": "f4e8a3b1c7d2e9f0...",
"signature": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
}Signature must be a 128-character hex string (64 bytes).
Response:
{
"verified": true,
"challenge_passed": true,
"agent_id": "agent_a1b2c3d4e5",
"active": true,
"message": "Agent proved possession of private key"
}/agents/payL3+ requiredMake a payment from one agent to another (or to a human wallet). The sender must be L3+ (wallet bound). Includes full payment security: spending authority checks, daily limits, allowlists, cooling periods, duplicate detection, and dual-approval for large amounts.
Agent-to-agent payment:
{
"from_agent_id": "agent_sender123",
"to_agent_id": "agent_receiver456",
"amount": 25,
"currency": "usd",
"chain": "solana"
}Agent-to-human payment:
{
"from_agent_id": "agent_sender123",
"to_wallet": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
"amount": 50,
"currency": "usd",
"chain": "solana"
}Response:
{
"payment_id": "pay_abc123def456",
"status": "authorized",
"from_agent_id": "agent_sender123",
"from_agent_name": "Trading Bot",
"to_agent_id": "agent_receiver456",
"to_agent_name": "Data Provider",
"amount": 25,
"currency": "usd",
"chain": "solana",
"trust_level": 3,
"remaining_daily_limit": 9975,
"receipt": {
"hash": { "receipt_id": "rcpt_pay123" },
"blockchain": { "tx_hash": "4xyz...", "explorer_url": "https://explorer.solana.com/tx/..." }
},
"expires_at": "2026-03-27T12:10:00.000Z"
}- 1. Trust level spending authority (L3: $10K/day, L4: $100K/day)
- 2. Wallet address validation (format + dead wallet check)
- 3. Allowlist check (human wallets must be pre-approved)
- 4. 24-hour cooling period on first payment to a new wallet
- 5. Duplicate detection (same amount + same wallet within 10 min)
- 6. Per-recipient daily limits
- 7. Dual-approval for large payments (owner must sign off)
- 8. Agent freeze (owner can freeze all payments instantly)
/agents/payment-settingsAPI key requiredGet your payment security settings: wallet allowlist, frozen agents, and pending payment approvals.
Response:
{
"allowlist": {
"count": 2,
"wallets": [
{ "wallet_address": "7xKXtg...", "chain": "solana", "label": "Treasury", "added_at": "..." }
]
},
"frozen_agents": {
"count": 0,
"agent_ids": []
},
"pending_approvals": {
"count": 1,
"payments": [
{ "payment_id": "pay_abc123", "amount": 5000, "to_wallet": "..." }
]
}
}/agents/payment-settingsAPI key requiredManage payment security: add/remove wallets from your allowlist, freeze/unfreeze agent payments, approve/deny pending payments.
Available actions:
Add wallet to allowlist:
{ "action": "add_allowlist", "wallet_address": "7xKXtg...", "chain": "solana", "label": "Treasury" }Remove from allowlist:
{ "action": "remove_allowlist", "wallet_address": "7xKXtg..." }Freeze agent payments:
{ "action": "freeze", "agent_id": "agent_a1b2c3d4e5" }Unfreeze agent payments:
{ "action": "unfreeze", "agent_id": "agent_a1b2c3d4e5" }Approve pending payment:
{ "action": "approve_payment", "payment_id": "pay_abc123" }Deny pending payment:
{ "action": "deny_payment", "payment_id": "pay_abc123" }/agents/publish-onchainAPI key requiredPublish your agent's identity to the Solana blockchain as an immutable memo. The agent's ID, owner, public key hash, and trust level are recorded on-chain. One-time operation per agent.
Request body:
{
"agent_id": "agent_a1b2c3d4e5"
}Response:
{
"tx_hash": "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d",
"explorer_url": "https://explorer.solana.com/tx/5eykt4...?cluster=devnet",
"registry_address": "AgReg1stryXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"cluster": "devnet",
"memo": {
"protocol": "agentid",
"version": 1,
"agent_id": "agent_a1b2c3d4e5",
"owner": "Acme Corp",
"trust_level": 2
}
}/agents/behaviourAPI key requiredGet the behavioural profile and anomaly report for an agent you own. AgentID builds a 30-day baseline of each agent's activity patterns and detects anomalies in real-time. Certificates prove who an agent is — behavioural fingerprinting proves it's still acting like itself.
AgentID monitors four anomaly types:
| Detection | What it catches |
|---|---|
| frequency_spike | API calls spike 3x+ above baseline. Absolute thresholds (10/25/50 calls/hr) prevent false positives on low-traffic agents. |
| unusual_hour | Activity outside the agent's typical operating window (derived from 30-day hour distribution). |
| new_action | Agent performs action types never seen in its 30-day history. |
| trust_drop | Trust level or score decreased in last 24 hours — possible compromise or credential revocation. |
GET /agents/behaviour?agent_id=agent_a1b2c3d4e5
Response:
{
"profile": {
"agent_id": "agent_a1b2c3d4e5",
"avg_verifications_per_day": 8.2,
"avg_api_calls_per_hour": 3.4,
"typical_active_hours": [9, 17],
"typical_actions": ["verified", "message_sent", "payment_authorized"],
"last_updated": "2026-03-27T12:00:00.000Z"
},
"anomalies": [
{
"agent_id": "agent_a1b2c3d4e5",
"type": "frequency_spike",
"severity": "medium",
"description": "API call rate is 5x the baseline average (25 calls in the last hour vs avg 3.4/hr)",
"detected_at": "2026-03-27T12:00:00.000Z",
"current_value": 25,
"baseline_value": 3.4
}
],
"risk_score": 30
}Risk score: 0 = clean, 100 = compromised. Severity weights: low = 10, medium = 30, high = 50. Anomalies are also checked during agent-to-agent connections and verifications.
/agents/trust-headerPublicGet a signed Agent-Trust-Score JWT for an agent. The JWT is a short-lived (1 hour) token containing trust level, risk score, attestation count, and scarring score. Attach it as an HTTP header so receiving services can evaluate trust at the transport layer without calling back to AgentID.
Query parameters:
GET /agents/trust-header?agent_id=agent_a1b2c3d4e5
Response:
{
"header": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkFnZW50LVRydXN0LVNjb3JlIn0...",
"payload": {
"trust_level": 3,
"attestation_count": 43,
"last_verified": "2026-03-29T14:00:00Z",
"risk_score": 0,
"scarring_score": 2,
"negative_signals": 2,
"resolved_signals": 2,
"agent_id": "agent_a1b2c3d4e5",
"did": "did:web:getagentid.dev:agent:agent_a1b2c3d4e5",
"provider": "agentid",
"iss": "https://getagentid.dev",
"iat": 1743260400,
"exp": 1743264000
},
"expires_in": 3600
}Use the header value as the Agent-Trust-Score HTTP header when calling other services. The receiving service decodes the JWT to get trust metadata without any API call back to AgentID. See the full spec at specs/agent-trust-score-header-v0.1.md.
/reports/complianceAPI key requiredGenerate a full compliance report for all your agents. Includes agent inventory, trust level distribution, verification stats, spending summary, risk flags, and EU AI Act readiness score.
Response:
{
"report": {
"generated_at": "2026-03-27T12:00:00.000Z",
"period_start": "2026-02-25T12:00:00.000Z",
"period_end": "2026-03-27T12:00:00.000Z",
"version": "1.0.0"
},
"agent_inventory": [
{
"agent_id": "agent_a1b2c3d4e5",
"name": "My Trading Bot",
"trust_level": 3,
"trust_level_label": "L3 — Secured",
"certificate_valid": true,
"spending_limit": 10000
}
],
"verification_summary": {
"total_verifications": 500,
"successful": 498,
"failed": 2,
"success_rate": 99.6
},
"trust_level_distribution": {
"L1 — Registered": 2,
"L2 — Verified": 3,
"L3 — Secured": 4,
"L4 — Certified": 1
},
"risk_flags": [
{
"agent_id": "agent_old123",
"severity": "critical",
"type": "expired_certificate",
"message": "Certificate expired. Renew immediately."
}
],
"eu_ai_act_readiness": {
"score": 78.5,
"total_agents": 10,
"compliant_agents": 7
}
}/proof/:receipt_idPublicPublic proof verification endpoint. Anyone with a receipt_id can independently verify the receipt using the embedded Ed25519 public key — no API call needed. Includes HMAC signature, blockchain anchor, and verification status enum.
Response:
{
"verified": true,
"protocol": "agentid",
"version": 1,
"receipt_id": "a1b2c3d4-...",
"action": "verification",
"agent": {
"agent_id": "agent_abc123",
"name": "My Trading Bot",
"owner": "Acme Corp",
"did": "did:web:getagentid.dev:agent:agent_abc123"
},
"timestamp": "2026-03-28T12:00:00.000Z",
"hashes": {
"data_hash": "sha256hex...",
"signature": "hmacsha256hex..."
},
"compound_digest": "sha256hex...",
"compound_digest_signature": "hmacsha256hex...",
"compound_digest_ed25519_signature": "ed25519hex...",
"signing_key": {
"key_id": "agentid-2026-03",
"public_key": "xdpmjfq2DX4d6yML7QjaSkYB2h9Dm3phwts5gkAPBp8",
"algorithm": "Ed25519"
},
"canonicalization": "JCS-RFC-8785",
"verification_status": "verified",
"blockchain_anchor": {
"chain": "solana",
"cluster": "devnet",
"tx_hash": "5eykt4UsFv8P8NJdT...",
"explorer_url": "https://explorer.solana.com/tx/5eykt4..."
},
"attestation_level": "domain-attested",
"verification": {
"method": "HMAC-SHA256 + Ed25519",
"canonicalization": "JCS-RFC-8785",
"issuer": "https://getagentid.dev",
"issuer_did": "did:web:getagentid.dev",
"offline_verification": "Proof is self-contained — signing_key.public_key is embedded"
}
}- self-issued: Dual-signed (HMAC-SHA256 + Ed25519) by AgentID platform
- domain-attested: Additionally anchored on Solana blockchain via memo transaction
- verified: Valid signature, active key
- verified_deprecated_key: Valid signature, key has been rotated (routine, no trust impact)
- verified_revoked_key: Valid signature, key was compromised (flag for policy decision)
- invalid: Signature does not verify
/agents/credibility-packetPublicGet a signed, portable trust resume for an agent. The packet is dual-signed (HMAC + Ed25519) and can be verified offline using the embedded public key. Includes identity, trust level, verification count, receipts, Merkle root, and behavioural risk score.
GET /agents/credibility-packet?agent_id=agent_a1b2c3d4e5
Response includes:
{
"protocol": "agentid",
"type": "credibility-packet",
"identity": { "agent_id": "agent_abc", "did": "did:web:getagentid.dev:agent:agent_abc", "name": "...", "owner": "..." },
"trust": { "trust_level": 3, "permissions": [...], "spending_limit": 10000, "certificate_valid": true },
"verification_count": 156,
"negative_signals": 2,
"resolved_signals": 2,
"scarring_score": 2,
"receipts": [...],
"merkle_root": { "root": "sha256hex...", "leaf_count": 45 },
"behaviour_risk_score": 0,
"signature": "hmacsha256hex...",
"ed25519_signature": "ed25519hex...",
"verification": {
"ed25519": "Verify with platform public key at /.well-known/agentid.json",
"ed25519_public_key": "xdpmjfq2DX4d6yML7QjaSkYB2h9Dm3phwts5gkAPBp8"
}
}Daemon Agents
Daemon agents are always-on background agents that run autonomously. They check in periodically, act on their own, and need verifiable identity for every action they take while the operator is away.
- interactive (default) — Standard agents that respond to user requests
- daemon — Always-on agents that act autonomously. Declare heartbeat interval, autonomy level, and expected active hours.
- heartbeat — Wake-on-schedule agents that pull inbox, act, sleep. Native inbox polling via
GET /agents/inbox.
Register a daemon agent:
{
"name": "My Background Agent",
"agent_type": "daemon",
"autonomy_level": "semi-autonomous",
"heartbeat_interval": 300,
"expected_active_hours": [0, 23],
"capabilities": ["monitor", "act", "report"]
}Python SDK (pip install getagentid):
from agentid.daemon import DaemonAgent
daemon = DaemonAgent.register(
api_key="agentid_sk_...",
name="My Background Agent",
autonomy_level="semi-autonomous",
heartbeat_interval=300,
)
# Every action gets a verifiable receipt (HMAC + Ed25519)
receipt = daemon.sign_action("processed 15 new records")
# Attach trust headers to outbound HTTP requests
headers = daemon.trust_headers() # Agent-Trust-Score JWT
# Report context shifts (after memory consolidation, model swap)
daemon.report_context_shift(reason="memory_consolidation")
# Periodic heartbeat to prove liveness
daemon.heartbeat()Session Continuity
AgentID automatically detects when an agent's context or memory state has changed — without relying on the agent to self-report. A compromised agent can't suppress this detection.
Returned on every verification. Computed server-side from the agent's behavioral baseline.
- Activity gap: Time between actions exceeds 2x the typical interval
- Model change: model_version changed in the last 24 hours
- Prompt change: prompt_hash changed in the last 24 hours
- Payload drift: Communication fingerprint shifted significantly
Score < 50 triggers a context_break anomaly alert. Multiple signals compound.
// In verify response:
"context_continuity": {
"score": 45,
"auto_context_epoch": 3,
"signals": ["model_changed: gpt-4 → gpt-4o", "activity_gap: 12h"],
"note": "WARNING: Significant context break detected."
}SDKs
pip install getagentid
Includes: DaemonAgent, Ed25519Identity, DID resolution, APS bridge, agent wallet, trust headers, challenge-response.
View on PyPIDrop-in trust layer for CrewAI multi-agent workflows.
github.com/getagentid/getagentid-crewaiIdentity and trust for LangChain agent pipelines.
github.com/getagentid/getagentid-langchainCopy-paste instructions for any AI coding assistant. No SDK needed.
Receipts
Every write action (connect, message, pay, bind key, verify) generates a dual receipt: a cryptographic hash stored in the database, and an immutable record on the Solana blockchain. All receipts are dual-signed (HMAC-SHA256 + Ed25519) and use JCS RFC 8785 deterministic serialization for cross-implementation compatibility.
A SHA-256 hash of the action data, dual-signed by the AgentID server (HMAC-SHA256 + Ed25519). The Ed25519 signature is publicly verifiable. JCS RFC 8785 canonicalization ensures cross-implementation compatibility.
{
"receipt_id": "rcpt_abc123",
"action": "connection",
"agent_id": "agent_sender123",
"timestamp": "2026-03-27T12:00:00.000Z",
"data_hash": "a1b2c3d4e5f6...",
"signature": "d4e5f6a7b8c9..."
}The receipt hash is written to Solana as a memo transaction. Immutable, publicly verifiable, and timestamped by the network.
{
"tx_hash": "5eykt4UsFv8P8NJdT...",
"cluster": "devnet",
"explorer_url": "https://explorer.solana.com/tx/5eykt4..."
}Click the explorer URL to view the full transaction on Solana Explorer.
- Connections: message_id, from/to agent IDs, trust levels, verification status
- Messages: message_id, from/to agent IDs, trust levels, payment info (if any)
- Payments: payment_id, from/to agent or wallet, amount, currency, chain, trust level
- Verifications: agent_id, trust level, certificate validity, verifier
- Key bindings: agent_id, Ed25519 public key, derived Solana address