Skip to main content

Identity API

Manage Decentralized Identifiers (DIDs) and Verifiable Credentials.

Register DID

POST /api/v1/identity/register

No authentication required.

{
"walletAddress": "0x1234...",
"chainId": 1
}

Response

{
"id": "a1b2c3d4-...",
"did": "did:ethr:0x1234...",
"createdAt": "2026-02-27T12:00:00Z"
}

Validation

FieldRules
walletAddressRequired, valid Ethereum address (0x + 40 hex chars)
chainIdInteger ≥ 1, defaults to 1 (Ethereum mainnet)

Resolve DID

GET /api/v1/identity/{did}

Cached for 5 minutes per DID.

Response

{
"id": "a1b2c3d4-...",
"did": "did:ethr:0x1234...",
"walletAddress": "0x1234...",
"didDocument": "{...}",
"chainId": 1,
"createdAt": "2026-02-27T12:00:00Z",
"updatedAt": "2026-02-27T12:05:00Z",
"isActive": true
}

Update DID Document

PUT /api/v1/identity/{did}

Requires JWT (Authorization: Bearer <token>).

{
"didDocument": "{\"@context\":\"https://www.w3.org/ns/did/v1\",...}"
}

Validation

FieldRules
didDocumentRequired, max 50,000 characters

Returns 204 No Content on success.


List Credentials

GET /api/v1/identity/{did}/credentials

Requires JWT.

Response

[
{
"id": "a1b2c3d4-...",
"credentialType": "KYCVerification",
"issuerDID": "did:ethr:0xABCD...",
"issuanceDate": "2026-02-27T12:00:00Z",
"expirationDate": "2027-02-27T12:00:00Z",
"revoked": false,
"ipfsHash": "QmXyz..."
}
]

Issue Credential

POST /api/v1/identity/{did}/credentials

Requires JWT.

{
"credentialType": "KYCVerification",
"subject": "{\"name\":\"Verified\",\"level\":\"enhanced\"}"
}

Validation

FieldRules
credentialTypeRequired, max 100 characters
subjectRequired, max 5,000 characters

Response

{
"id": "a1b2c3d4-...",
"credentialType": "KYCVerification",
"issuanceDate": "2026-02-27T12:00:00Z"
}