Skip to main content

Credential Issuer API

Base URL:

EnvironmentURL
Productionhttps://identity-credentials-issuer.pro.cloud-w.envs.redisbe.com
Pre-productionhttps://identity-credentials-issuer.pre.cloud-w.envs.redisbe.com

Interactive documentation (Swagger): GET <base-url>/swagger

Operation endpoints

GET /health

Returns the service health status.

Authentication: none.

Response 200 OK:

{
"status": "ok"
}

POST /issuance/representative

Requests the issuance of an IsbePortalLearCredential for the authenticated representative themselves. Returns a QR code (PNG image) that the representative must scan with their wallet.

Authentication: Authorization: Bearer <keycloak_token>

The token must include the claims organization_identifier, organization, user_identifier, and email.

Body (JSON):

{
"power": [
{
"type": "domain",
"domain": "ISBE",
"function": "onboarding",
"action": ["execute"]
}
]
}
FieldTypeMandatoryDescription
powerarrayList of powers to include in the credential. Each element must be authorized for the applicant's organization.
power[].typestringPower type (e.g. "domain").
power[].domainstringDomain to which the power applies (e.g. "ISBE").
power[].functionstringFunction within the domain (e.g. "onboarding").
power[].actionarray of stringAllowed actions (e.g. ["execute"]). At least one element.

Response 200 OK:

Content-Type: image/png
<binary PNG of the QR code>

Errors:

CodeCause
401 UnauthorizedInvalid or expired Keycloak token.
400 Bad RequestMissing claims in the token, or requested powers not authorized for the organization.
500 Internal Server ErrorInternal error (VC type not configured, Connector profile not configured, error contacting the Connector).

POST /issuance/employee

Requests the issuance of an IsbePortalLearCredential for an employee of the organization. The credential offer QR is sent by email to the employee; the HTTP response confirms the send.

Authentication: Authorization: Bearer <keycloak_token>

Body (JSON):

{
"email": "empleado@empresa.es",
"power": [
{
"type": "domain",
"domain": "ISBE",
"function": "onboarding",
"action": ["execute"]
}
]
}
FieldTypeMandatoryDescription
emailstringDestination employee's email.
powerarrayList of powers to include in the employee's credential.

Response 200 OK:

{
"message": "Email sent to empleado@empresa.es"
}

Errors: same as POST /issuance/representative.


POST /issuance/identifiers

Returns the vc_types for which the indicated subject_id has issuance permissions according to the Issuer configuration.

Authentication: Authorization: Bearer <keycloak_token>

Body (JSON):

{
"subject_id": "ES-B12345678_20260115120000"
}

Response 200 OK:

{
"vc_types": ["IsbePortalLearCredential"]
}

POST /issuance/credential

Retrieves the list of issued credentials for one or more organizations.

Authentication: Authorization: Bearer <keycloak_token>

Body (JSON):

{
"organization_identifiers": ["ES-B12345678", "ES-A87654321"]
}

Response 200 OK: array of IssuedCredential objects with the fields: id, vc_type, subject_id, organization_identifier, status, credential_id, creation_at, update_at.


POST /issuance/credential/revoke

Revokes a previously issued credential. Revocation is permanent.

Authentication: Authorization: Bearer <keycloak_token>

Body (JSON):

{
"credential_id": "urn:uuid:8d475485-1617-42f3-b402-9c95117ad72b"
}

Response 200 OK: revocation confirmation.

Errors:

CodeCause
404 Not FoundThe credential_id does not exist in the Issuer database.
400 Bad RequestThe credential was already revoked.
500 Internal Server ErrorInternal error processing the revocation.