API del Credential Issuer
Base URL:
| Entorno | URL |
|---|---|
| Producción | https://identity-credentials-issuer.pro.cloud-w.envs.redisbe.com |
| Preproducción | https://identity-credentials-issuer.pre.cloud-w.envs.redisbe.com |
Documentación interactiva (Swagger): GET <base-url>/swagger
Endpoints de operación
GET /health
Devuelve el estado de salud del servicio.
Autenticación: ninguna.
Respuesta 200 OK:
{
"status": "ok"
}
POST /issuance/representative
Solicita la emisión de una IsbePortalLearCredential para el propio representante autenticado. Devuelve un código QR (imagen PNG) que el representante debe escanear con su wallet.
Autenticación: Authorization: Bearer <token_keycloak>
El token debe incluir los claims organization_identifier, organization, user_identifier y email.
Body (JSON):
{
"power": [
{
"type": "domain",
"domain": "ISBE",
"function": "onboarding",
"action": ["execute"]
}
]
}
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
power | array | ✅ | Lista de poderes a incluir en la credencial. Cada elemento debe estar autorizado para la organización del solicitante. |
power[].type | string | ✅ | Tipo de poder (p. ej. "domain"). |
power[].domain | string | ✅ | Dominio al que aplica el poder (p. ej. "ISBE"). |
power[].function | string | ✅ | Función dentro del dominio (p. ej. "onboarding"). |
power[].action | array de string | ✅ | Acciones permitidas (p. ej. ["execute"]). Al menos un elemento. |
Respuesta 200 OK:
Content-Type: image/png
<binary PNG del código QR>
Errores:
| Código | Causa |
|---|---|
401 Unauthorized | Token de Keycloak inválido o expirado. |
400 Bad Request | Claims faltantes en el token, o poderes solicitados no autorizados para la organización. |
500 Internal Server Error | Error interno (tipo de VC no configurado, perfil de Connector no configurado, error al contactar con el Connector). |
POST /issuance/employee
Solicita la emisión de una IsbePortalLearCredential para un empleado de la organización. El QR de oferta de credencial se envía por email al empleado; la respuesta HTTP confirma el envío.
Autenticación: Authorization: Bearer <token_keycloak>
Body (JSON):
{
"email": "empleado@empresa.es",
"power": [
{
"type": "domain",
"domain": "ISBE",
"function": "onboarding",
"action": ["execute"]
}
]
}
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
email | string | ✅ | Email del empleado destinatario. |
power | array | ✅ | Lista de poderes a incluir en la credencial del empleado. |
Respuesta 200 OK:
{
"message": "Email sent to empleado@empresa.es"
}
Errores: mismos que POST /issuance/representative.
POST /issuance/identifiers
Devuelve los vc_types para los que el subject_id indicado tiene permisos de emisión según la configuración del Issuer.
Autenticación: Authorization: Bearer <token_keycloak>
Body (JSON):
{
"subject_id": "ES-B12345678_20260115120000"
}
Respuesta 200 OK:
{
"vc_types": ["IsbePortalLearCredential"]
}
POST /issuance/credential
Recupera el listado de credenciales emitidas para una o varias organizaciones.
Autenticación: Authorization: Bearer <token_keycloak>
Body (JSON):
{
"organization_identifiers": ["ES-B12345678", "ES-A87654321"]
}
Respuesta 200 OK: array de objetos IssuedCredential con los campos: id, vc_type, subject_id, organization_identifier, status, credential_id, creation_at, update_at.
POST /issuance/credential/revoke
Revoca una credencial previamente emitida. La revocación es permanente.
Autenticación: Authorization: Bearer <token_keycloak>
Body (JSON):
{
"credential_id": "urn:uuid:8d475485-1617-42f3-b402-9c95117ad72b"
}
Respuesta 200 OK: confirmación de revocación.
Errores:
| Código | Causa |
|---|---|
404 Not Found | El credential_id no existe en la base de datos del Issuer. |
400 Bad Request | La credencial ya estaba revocada. |
500 Internal Server Error | Error interno al procesar la revocación. |