Skip to main content

DID Resolution

The DID Registry API allows you to resolve a DID, that is, obtain its DID Document both in its current state and at any point in the past. This is essential for verifying credentials: a verifier needs to know which key was active at the time of signing.

Basic Resolution​

GET /api/v1/identifiers/{identifier}

Where {identifier} is the complete DID (URL-encode if it contains special characters).

Example​

curl -H "Accept: application/did+ld+json" \
"https://did-registry.portal.redisbe.com/api/v1/identifiers/did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV"

Response (200 OK):

{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/jws-2020/v1"
],
"id": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV",
"controller": ["0xAe0E493C67f75381b0954644836A3C16c79D0dFD"],
"verificationMethod": [
{
"id": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV#9lfZ28jdUsYo75lVHmGNIc6oUpkjSFtxiCLjDGn28IM",
"type": "JsonWebKey2020",
"controller": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV",
"publicKeyJwk": {
"kty": "EC",
"crv": "secp256k1",
"x": "EkP1CscPyZbMySohGc5ktvcLv0yh/Tsl/Fyk/T6jUlsK",
"y": "FD4PfiOzITnM4zo9IgfvkN7DC4VxRSB4f-PKcTfcMyE"
}
},
{
"id": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV#WqpsDjTHnYVNvX8qx4a1FER8NgnEBS6DjLbDVrX-Fg4",
"type": "JsonWebKey2020",
"controller": "did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV",
"publicKeyJwk": {
"kty": "EC",
"crv": "P-256",
"x": "...",
"y": "..."
}
}
],
"assertionMethod": [
"did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV#WqpsDjTHnYVNvX8qx4a1FER8NgnEBS6DjLbDVrX-Fg4"
],
"alsoKnownAs": ["urn:oid:organizationIdentifier:ISBE"]
}
Type of verificationMethod entries upon resolution

All verification methods are returned with type: "JsonWebKey2020" and the key material in publicKeyJwk, regardless of the curve. The actual curve is identified in the crv field inside the JWK (secp256k1, P-256). This is consistent with the W3C JSON Web Key 2020 model and also applies to the initial control key of the DID.

Resolution at a Specific Instant (valid-at)​

To verify older credentials, you need to know which keys were active on a specific date. Add the valid-at parameter as a Unix timestamp in seconds:

curl -H "Accept: application/did+ld+json" \
"https://did-registry.portal.redisbe.com/api/v1/identifiers/did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV?valid-at=1742000000"

The response will contain only the verificationMethod entries whose [notBefore, notAfter] window includes that timestamp.

Use case

Imagine you receive a credential signed on March 15, 2026. If you verify it in May, a key may have rotated in the meantime. Resolve the DID with valid-at=<timestamp of the VC's iat> to get exactly the keys that were in effect at the time of signing.

Supported Content Types​

The endpoint supports two formats through the Accept header:

AcceptFormat
application/did+ld+jsonDID Document as JSON-LD (recommended).
application/did+jsonDID Document as plain JSON.

If you request an unsupported type, the API responds with 406 Not Acceptable.

Paginated Listing of DIDs​

For administrative or auditing cases, the API also exposes a paginated list:

GET /api/v1/identifiers?page=1&pageSize=50

Response:

{
"page": 1,
"pageSize": 50,
"total": 1234,
"howMany": 50,
"items": [
"did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV",
"did:isbe:uc:z2ABCdef...",
"..."
]
}
Privacy

This list does not expose sensitive information: only the identifiers. To obtain the DID Document for each, you must call the individual resolution endpoint.

Common Errors​

CodeCause
400 Bad RequestThe identifier does not have a valid did:isbe:... format, or valid-at is not a number.
404 Not FoundThe DID does not exist in the registry.
406 Not AcceptableAccept header not supported.

More details in Troubleshooting.