Closed Beta — Aira is currently invite-only. Request access to join the early program.
Aira

Decentralized Identifiers (DID)

Resolve DID documents, inspect agent identity, rotate keys, and fetch A2A agent cards.

Aira assigns each registered agent a W3C-compliant did:web decentralized identifier backed by an Ed25519 keypair. The DID endpoints let you resolve DID documents (publicly or authenticated), rotate an agent's keys, resolve remote DIDs, and fetch A2A agent cards.

Public Endpoints

The following endpoints are publicly accessible (no authentication required). They are rate-limited and mounted at the site root -- not under /api/v1.


Get Agent DID Document

GET /agents/{agent_slug}/did.json

Returns the W3C DID document for an agent. DID documents are always publicly resolvable regardless of the agent's public flag, as required by the did:web specification.

Path Parameters

ParameterTypeRequiredDescription
agent_slugstringYesThe agent's URL-safe slug

Example Request

curl https://api.airaproof.com/agents/procurement-agent/did.json

Response (200 OK)

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:web:api.airaproof.com:agents:procurement-agent",
  "verificationMethod": [
    {
      "id": "did:web:api.airaproof.com:agents:procurement-agent#key-1",
      "type": "Ed25519VerificationKey2020",
      "controller": "did:web:api.airaproof.com:agents:procurement-agent",
      "publicKeyMultibase": "z6Mkf5rG..."
    }
  ],
  "authentication": [
    "did:web:api.airaproof.com:agents:procurement-agent#key-1"
  ],
  "assertionMethod": [
    "did:web:api.airaproof.com:agents:procurement-agent#key-1"
  ],
  "service": [
    {
      "id": "did:web:api.airaproof.com:agents:procurement-agent#aira",
      "type": "AiraAgent",
      "serviceEndpoint": "https://api.airaproof.com/api/v1/agents/procurement-agent"
    }
  ]
}

Error Codes

StatusCodeDescription
404NOT_FOUNDAgent does not exist or has no DID document

Get Aira Root DID Document

GET /.well-known/did.json

Returns Aira's own root DID document, signed with the platform's Ed25519 key. This is the trust anchor for verifying agent DIDs issued by this Aira instance.

Example Request

curl https://api.airaproof.com/.well-known/did.json

Response (200 OK)

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:web:api.airaproof.com",
  "verificationMethod": [
    {
      "id": "did:web:api.airaproof.com#key-1",
      "type": "Ed25519VerificationKey2020",
      "controller": "did:web:api.airaproof.com",
      "publicKeyMultibase": "z6Mkf5rG..."
    }
  ],
  "authentication": [
    "did:web:api.airaproof.com#key-1"
  ],
  "assertionMethod": [
    "did:web:api.airaproof.com#key-1"
  ],
  "service": [
    {
      "id": "did:web:api.airaproof.com#aira-platform",
      "type": "AiraPlatform",
      "serviceEndpoint": "https://api.airaproof.com/api/v1"
    }
  ]
}

Get Agent Card

GET /agents/{agent_slug}/.well-known/agent-card.json

Returns the A2A (Agent-to-Agent) card for an agent. Agent cards provide discovery metadata including capabilities, authentication methods, and DID.

Path Parameters

ParameterTypeRequiredDescription
agent_slugstringYesThe agent's URL-safe slug

Example Request

curl https://api.airaproof.com/agents/procurement-agent/.well-known/agent-card.json

Response (200 OK)

{
  "name": "Procurement Agent",
  "description": "Handles purchase orders and vendor management",
  "url": "https://api.airaproof.com/agents/procurement-agent",
  "did": "did:web:api.airaproof.com:agents:procurement-agent",
  "capabilities": ["transaction", "decision"],
  "authentication": {
    "type": "oauth2",
    "authorizationUrl": "https://api.airaproof.com/oauth/authorize"
  },
  "aira": {
    "notarization": true,
    "mutual_signing": false,
    "reputation_score": null
  }
}

Response Fields

FieldTypeDescription
namestringThe agent's display name
descriptionstring | nullHuman-readable description of the agent
urlstringThe agent's public URL
didstringThe agent's did:web identifier
capabilitiesstring[]List of capabilities the agent supports
authenticationobjectAuthentication method metadata
airaobjectAira-specific metadata (notarization, mutual signing, reputation)

Error Codes

StatusCodeDescription
404NOT_FOUNDAgent does not exist

Authenticated Endpoints

All endpoints below require a Bearer token (Authorization: Bearer aira_live_xxxxx). Base URL: https://api.airaproof.com/api/v1


Get DID Info

GET /api/v1/agents/{agent_slug}/did
Authorization: Bearer aira_live_xxxxx

Returns full DID information for an agent, including the DID document, creation timestamp, and document version. The agent must belong to the authenticated organization.

Path Parameters

ParameterTypeRequiredDescription
agent_slugstringYesThe agent's URL-safe slug

Example Request

curl https://api.airaproof.com/api/v1/agents/procurement-agent/did \
  -H "Authorization: Bearer aira_live_xxxxx"

Response (200 OK)

{
  "did": "did:web:api.airaproof.com:agents:procurement-agent",
  "document": {
    "@context": [
      "https://www.w3.org/ns/did/v1",
      "https://w3id.org/security/suites/ed25519-2020/v1"
    ],
    "id": "did:web:api.airaproof.com:agents:procurement-agent",
    "verificationMethod": [
      {
        "id": "did:web:api.airaproof.com:agents:procurement-agent#key-1",
        "type": "Ed25519VerificationKey2020",
        "controller": "did:web:api.airaproof.com:agents:procurement-agent",
        "publicKeyMultibase": "z6Mkf5rG..."
      }
    ],
    "authentication": [
      "did:web:api.airaproof.com:agents:procurement-agent#key-1"
    ],
    "assertionMethod": [
      "did:web:api.airaproof.com:agents:procurement-agent#key-1"
    ],
    "service": [
      {
        "id": "did:web:api.airaproof.com:agents:procurement-agent#aira",
        "type": "AiraAgent",
        "serviceEndpoint": "https://api.airaproof.com/api/v1/agents/procurement-agent"
      }
    ]
  },
  "created_at": "2026-06-01T10:30:00Z",
  "version": 1,
  "request_id": "req_01J9E..."
}

Response Fields

FieldTypeDescription
didstringThe agent's did:web identifier
documentobjectThe full W3C DID document (empty object if no key has been generated yet)
created_atstring | nullWhen the DID was first created (ISO 8601)
versionintegerThe DID document version (increments on each key rotation)
request_idstringRequest ID for tracing

Error Codes

StatusCodeDescription
404NOT_FOUNDAgent does not exist in your organization

Rotate DID Keys

POST /api/v1/agents/{agent_slug}/did/rotate
Authorization: Bearer aira_live_xxxxx

Rotates an agent's Ed25519 DID keypair. Generates a new keypair, updates the DID document, and increments the document version. The old key is discarded. Requires admin role.

This operation is audited as agent.did.rotated.

Path Parameters

ParameterTypeRequiredDescription
agent_slugstringYesThe agent's URL-safe slug

Example Request

curl -X POST https://api.airaproof.com/api/v1/agents/procurement-agent/did/rotate \
  -H "Authorization: Bearer aira_live_xxxxx"

Response (200 OK)

{
  "new_did": "did:web:api.airaproof.com:agents:procurement-agent",
  "new_version": 2,
  "request_id": "req_01J9F..."
}

Response Fields

FieldTypeDescription
new_didstringThe agent's DID (unchanged -- only the key rotates)
new_versionintegerThe new document version after rotation
request_idstringRequest ID for tracing

Error Codes

StatusCodeDescription
403FORBIDDENCaller does not have admin role
404NOT_FOUNDAgent does not exist in your organization

Resolve Remote DID

POST /api/v1/dids/resolve
Authorization: Bearer aira_live_xxxxx

Resolves a remote did:web DID document by fetching it over HTTPS. Results are cached in Redis for 5 minutes.

Request Body

FieldTypeRequiredDescription
didstringYesA did:web identifier to resolve (must start with did:web:)

Example Request

curl -X POST https://api.airaproof.com/api/v1/dids/resolve \
  -H "Authorization: Bearer aira_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "did": "did:web:example.com:agents:their-agent"
  }'

Response (200 OK)

{
  "did": "did:web:example.com:agents:their-agent",
  "document": {
    "@context": [
      "https://www.w3.org/ns/did/v1",
      "https://w3id.org/security/suites/ed25519-2020/v1"
    ],
    "id": "did:web:example.com:agents:their-agent",
    "verificationMethod": [
      {
        "id": "did:web:example.com:agents:their-agent#key-1",
        "type": "Ed25519VerificationKey2020",
        "controller": "did:web:example.com:agents:their-agent",
        "publicKeyMultibase": "z6Mkq8bT..."
      }
    ],
    "authentication": [
      "did:web:example.com:agents:their-agent#key-1"
    ],
    "assertionMethod": [
      "did:web:example.com:agents:their-agent#key-1"
    ]
  },
  "cached": false,
  "request_id": "req_01J9G..."
}

Response Fields

FieldTypeDescription
didstringThe DID that was resolved
documentobjectThe fetched W3C DID document
cachedbooleanWhether the result was served from cache
request_idstringRequest ID for tracing

Error Codes

StatusCodeDescription
422VALIDATION_ERRORThe did field is missing or does not start with did:web:

DID Document Structure

All DID documents returned by Aira follow the W3C DID Core specification:

FieldTypeDescription
@contextstring[]JSON-LD context URIs
idstringThe DID identifier
verificationMethodobject[]Public keys associated with the DID
authenticationstring[]Key IDs authorized for authentication
assertionMethodstring[]Key IDs authorized for making assertions
serviceobject[]Service endpoints associated with the DID

Each verification method contains:

FieldTypeDescription
idstringKey identifier (DID + fragment, e.g. #key-1)
typestringAlways Ed25519VerificationKey2020
controllerstringThe DID that controls this key
publicKeyMultibasestringThe public key encoded as multibase (base58btc, z prefix)

On this page