Resolución de DIDs
La DID Registry API permite resolver un DID, es decir, obtener su DID Document tanto en el estado actual como en cualquier momento del pasado. Esto es esencial para verificar credenciales: un verificador necesita saber qué clave estaba vigente en el momento de la firma.
Resolución básica
GET /api/v1/identifiers/{identifier}
Donde {identifier} es el DID completo (URL-encode si contiene caracteres especiales).
Ejemplo
curl -H "Accept: application/did+ld+json" \
"https://did-registry.portal.redisbe.com/api/v1/identifiers/did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV"
Respuesta (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"]
}
verificationMethod al resolverTodos los verification methods se devuelven con type: "JsonWebKey2020" y el material en publicKeyJwk, independientemente de la curva. La curva real se identifica en el campo crv dentro del JWK (secp256k1, P-256). Esto es coherente con el modelo W3C JSON Web Key 2020 y se aplica también a la clave inicial de control del DID.
Resolución en un instante concreto (valid-at)
Para verificar credenciales antiguas necesitas saber qué claves estaban activas en una fecha concreta. Añade el parámetro valid-at como timestamp Unix en segundos:
curl -H "Accept: application/did+ld+json" \
"https://did-registry.portal.redisbe.com/api/v1/identifiers/did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV?valid-at=1742000000"
La respuesta contendrá únicamente los verificationMethod cuya ventana [notBefore, notAfter] incluya ese timestamp.
Imagina que recibes una credencial firmada el 15 de marzo de 2026. Si la verificas en mayo, una clave puede haber rotado entre medias. Resuelve el DID con valid-at=<timestamp del iat de la VC> para obtener exactamente las claves que estaban vigentes al firmar.
Tipos de contenido soportados
El endpoint soporta dos formatos a través del header Accept:
Accept | Formato |
|---|---|
application/did+ld+json | DID Document como JSON-LD (recomendado). |
application/did+json | DID Document como JSON plano. |
Si solicitas un tipo no soportado, la API responde con 406 Not Acceptable.
Listado paginado de DIDs
Para casos administrativos o de auditoría, la API expone también un listado paginado:
GET /api/v1/identifiers?page=1&pageSize=50
Respuesta:
{
"page": 1,
"pageSize": 50,
"total": 1234,
"howMany": 50,
"items": [
"did:isbe:uc:z12kVar5p6bD5WCjEJcQ18Zyt8XV",
"did:isbe:uc:z2ABCdef...",
"..."
]
}
Este listado no expone información sensible: solo los identificadores. Para obtener el DID Document de cada uno hay que llamar al endpoint de resolución individual.
Errores típicos
| Código | Causa |
|---|---|
400 Bad Request | El identifier no tiene formato did:isbe:... válido, o valid-at no es un número. |
404 Not Found | El DID no existe en el registro. |
406 Not Acceptable | Header Accept no soportado. |
Más detalle en Troubleshooting.