Verifiable Credentials Issue, verify, revoke, and inspect W3C Verifiable Credentials for registered AI agents.
Verifiable Credentials (VCs) prove an agent's identity and capabilities using the W3C standard. Public endpoints (get current credential, verify, status list, JSON-LD context) require no authentication and are rate-limited. Authenticated endpoints require a Bearer token (Authorization: Bearer aira_live_xxxxx). Revocation requires admin privileges.
Base URL for authenticated endpoints: https://api.airaproof.com/api/v1
Public status list and context endpoints are mounted at the root (https://api.airaproof.com) without the /api/v1 prefix.
GET /api/v1/agents/{slug}/credential
Returns the current valid (non-revoked, non-expired) Verifiable Credential for an agent. Public -- no authentication required. Rate-limited.
Parameter Type Required Description slugstring Yes The agent's unique slug
curl https://api.airaproof.com/api/v1/agents/procurement-agent/credential
{
"credential" : {
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://api.airaproof.com/contexts/agent-capability/v1"
],
"id" : "urn:uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890" ,
"type" : [ "VerifiableCredential" , "AgentCapabilityCredential" ],
"issuer" : "did:web:api.airaproof.com" ,
"issuanceDate" : "2026-06-01T00:00:00Z" ,
"expirationDate" : "2027-06-01T00:00:00Z" ,
"credentialSubject" : {
"id" : "did:web:api.airaproof.com:agents:procurement-agent" ,
"agentSlug" : "procurement-agent" ,
"displayName" : "Procurement Agent" ,
"ownerOrganization" : "org_01J9E..." ,
"capabilities" : [ "transaction" , "decision" ],
"modelId" : "claude-sonnet-4-20250514" ,
"version" : "1.0.0" ,
"euAiActCompliant" : true ,
"notarizationEnabled" : true ,
"maxActionValue" : null
},
"credentialStatus" : {
"id" : "https://api.airaproof.com/credentials/status/1#0" ,
"type" : "StatusList2021Entry" ,
"statusPurpose" : "revocation" ,
"statusListIndex" : "0" ,
"statusListCredential" : "https://api.airaproof.com/credentials/status/1"
},
"proof" : {
"type" : "Ed25519Signature2020" ,
"created" : "2026-06-01T00:00:00Z" ,
"verificationMethod" : "did:web:api.airaproof.com#key-1" ,
"proofPurpose" : "assertionMethod" ,
"proofValue" : "z3hQ9x..."
}
},
"message" : null
}
{
"credential" : null ,
"message" : "No valid credential found for this agent"
}
Field Type Description credentialobject | null The full W3C VC JSON document, or null if no valid credential exists messagestring | null Human-readable message when no credential is found
Status Code Description 404 NOT_FOUNDAgent with the given slug does not exist
POST /api/v1/credentials/verify
Verifies any Verifiable Credential -- checks structure, issuer, signature, expiry, and revocation status. Public -- no authentication required. Rate-limited.
Field Type Required Description credentialobject Yes The full VC JSON document to verify
curl -X POST https://api.airaproof.com/api/v1/credentials/verify \
-H "Content-Type: application/json" \
-d '{
"credential": {
"@context": ["https://www.w3.org/2018/credentials/v1"],
"id": "urn:uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": ["VerifiableCredential", "AgentCapabilityCredential"],
"issuer": "did:web:api.airaproof.com",
"issuanceDate": "2026-06-01T00:00:00Z",
"expirationDate": "2027-06-01T00:00:00Z",
"credentialSubject": {
"id": "did:web:api.airaproof.com:agents:procurement-agent"
},
"proof": {
"type": "Ed25519Signature2020",
"created": "2026-06-01T00:00:00Z",
"verificationMethod": "did:web:api.airaproof.com#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z3hQ9x..."
}
}
}'
{
"valid" : true ,
"checks" : {
"signature" : true ,
"not_expired" : true ,
"not_revoked" : true ,
"issuer_valid" : true ,
"structure_valid" : true
}
}
{
"valid" : false ,
"checks" : {
"signature" : false ,
"not_expired" : true ,
"not_revoked" : true ,
"issuer_valid" : true ,
"structure_valid" : true
}
}
Field Type Description validboolean Whether the credential passes all verification checks checksobject Individual check results (see below)
Check Description structure_validRequired fields are present (@context, type, issuer, issuanceDate, credentialSubject, proof) issuer_validIssuer DID matches Aira's root DID signatureEd25519Signature2020 proof is cryptographically valid not_expiredCurrent time is before the credential's expirationDate not_revokedCredential has not been revoked (checked against the database by vc_id)
GET /credentials/status/{list_id}
Returns a StatusList2021 revocation bitstring credential. This endpoint is mounted at the root -- no /api/v1 prefix . Public -- no authentication required. Rate-limited.
Each bit in the encoded list corresponds to a credential. A bit value of 1 indicates that credential has been revoked.
Parameter Type Required Description list_idstring Yes The status list identifier (e.g. 1 for the default list)
curl https://api.airaproof.com/credentials/status/1
{
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://w3id.org/vc/status-list/2021/v1"
],
"id" : "https://api.airaproof.com/credentials/status/1" ,
"type" : [ "VerifiableCredential" , "StatusList2021Credential" ],
"issuer" : "did:web:api.airaproof.com" ,
"issued" : "2026-06-05T12:00:00Z" ,
"credentialSubject" : {
"id" : "https://api.airaproof.com/credentials/status/1#list" ,
"type" : "StatusList2021" ,
"statusPurpose" : "revocation" ,
"encodedList" : "H4sIAAAAAAAAA..."
}
}
Field Type Description @contextstring[] JSON-LD context URIs idstring Canonical URL of this status list typestring[] Credential types issuerstring Aira's issuer DID issuedstring When this status list was generated (ISO 8601) credentialSubject.encodedListstring Base64-encoded bitstring (minimum 16 KB / 131,072 bits per spec)
GET /contexts/agent-capability/v1
Returns the JSON-LD context document for AgentCapabilityCredential. This endpoint is mounted at the root -- no /api/v1 prefix . Public -- no authentication required. Rate-limited.
curl https://api.airaproof.com/contexts/agent-capability/v1
{
"@context" : {
"@version" : 1.1 ,
"aira" : "https://api.airaproof.com/contexts/agent-capability/v1#" ,
"AgentCapabilityCredential" : "aira:AgentCapabilityCredential" ,
"agentSlug" : "aira:agentSlug" ,
"displayName" : "aira:displayName" ,
"ownerOrganization" : "aira:ownerOrganization" ,
"capabilities" : "aira:capabilities" ,
"modelId" : "aira:modelId" ,
"version" : "aira:version" ,
"euAiActCompliant" : "aira:euAiActCompliant" ,
"notarizationEnabled" : "aira:notarizationEnabled" ,
"maxActionValue" : "aira:maxActionValue"
}
}
GET /api/v1/agents/{slug}/credentials
Authorization : Bearer aira_live_xxxxx
Returns the full credential history for an agent owned by your organization, ordered by version descending (newest first). Requires authentication.
Parameter Type Required Description slugstring Yes The agent's unique slug
curl https://api.airaproof.com/api/v1/agents/procurement-agent/credentials \
-H "Authorization: Bearer aira_live_xxxxx"
{
"credentials" : [
{
"vc_id" : "urn:uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890" ,
"vc_json" : {
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://api.airaproof.com/contexts/agent-capability/v1"
],
"id" : "urn:uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890" ,
"type" : [ "VerifiableCredential" , "AgentCapabilityCredential" ],
"issuer" : "did:web:api.airaproof.com" ,
"issuanceDate" : "2026-06-01T00:00:00Z" ,
"expirationDate" : "2027-06-01T00:00:00Z" ,
"credentialSubject" : {
"id" : "did:web:api.airaproof.com:agents:procurement-agent" ,
"agentSlug" : "procurement-agent" ,
"displayName" : "Procurement Agent" ,
"capabilities" : [ "transaction" , "decision" ]
},
"proof" : {
"type" : "Ed25519Signature2020" ,
"proofValue" : "z3hQ9x..."
}
},
"issued_at" : "2026-06-01T00:00:00Z" ,
"expires_at" : "2027-06-01T00:00:00Z" ,
"revoked_at" : null ,
"version" : 2
},
{
"vc_id" : "urn:uuid:11223344-5566-7788-99aa-bbccddeeff00" ,
"vc_json" : {
"@context" : [ "https://www.w3.org/2018/credentials/v1" ],
"type" : [ "VerifiableCredential" , "AgentCapabilityCredential" ],
"proof" : { "type" : "Ed25519Signature2020" }
},
"issued_at" : "2026-01-01T00:00:00Z" ,
"expires_at" : "2027-01-01T00:00:00Z" ,
"revoked_at" : "2026-05-15T12:00:00Z" ,
"version" : 1
}
],
"request_id" : "req_01J9K..."
}
Field Type Description credentialsarray List of credential records (see Credential Object below) request_idstring Unique request identifier for tracing
Status Code Description 404 NOT_FOUNDAgent with the given slug does not exist or is not owned by your organization
POST /api/v1/agents/{slug}/credentials/revoke
Authorization : Bearer aira_live_xxxxx
Revokes the current active credential for an agent. Requires admin privileges. Revocation is permanent -- once revoked, a credential cannot be reinstated. A new credential must be issued to replace it.
Parameter Type Required Description slugstring Yes The agent's unique slug
Field Type Required Description reasonstring Yes Reason for revocation (1--1000 characters)
curl -X POST https://api.airaproof.com/api/v1/agents/procurement-agent/credentials/revoke \
-H "Authorization: Bearer aira_live_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"reason": "Agent decommissioned after policy violation"
}'
{
"vc_id" : "urn:uuid:a1b2c3d4-e5f6-7890-abcd-ef1234567890" ,
"revoked_at" : "2026-06-05T14:30:00Z" ,
"reason" : "Agent decommissioned after policy violation" ,
"request_id" : "req_01J9K..."
}
Field Type Description vc_idstring The revoked credential's identifier revoked_atstring When the credential was revoked (ISO 8601 UTC) reasonstring The revocation reason provided request_idstring Unique request identifier for tracing
Status Code Description 403 FORBIDDENCaller does not have admin privileges 404 NOT_FOUNDAgent does not exist, is not owned by your organization, or has no active credential
All credential records in list responses share this structure:
Field Type Description vc_idstring Unique identifier of the Verifiable Credential (urn:uuid:...) vc_jsonobject The full W3C VC JSON document including proof issued_atstring When the credential was issued (ISO 8601 UTC) expires_atstring When the credential expires (ISO 8601 UTC) revoked_atstring | null When the credential was revoked, or null if still active versioninteger Credential version number (increments on each reissuance for the same agent)