All issuer endpoints require authentication with ROLE_ISSUER. Access the issuer login at
/login/issuer.Dashboard
GET /issuer
Displays the main issuer dashboard with person search and document upload capabilities. Authentication: Required (ROLE_ISSUER)Optional person ID to load person details and documents
issuer: Current issuing entityidTypes: Available ID typesperson: Person entity (if personId provided)personDocs: List of person’s documentsallowedDocs: Document definitions allowed for this issuer
Person Search
POST /issuer/search
Searches for a person by identification type and number. Authentication: Required (ROLE_ISSUER)Type of identification (CC, TI, CE, etc.)
Identification number
/issuer?personId={id} if found
Error Response: Redirect to /issuer with error message
Reference: IssuerController.java:131
Document Upload
POST /issuer/upload
Uploads a document for a person. Only PDF files are accepted. Authentication: Required (ROLE_ISSUER)ID of the person
Document definition ID (must be allowed for this issuer)
Document status (VIGENTE, VENCIDO, etc.)
Document issue date (optional)
Document expiry date (optional)
PDF file to upload
/issuer?personId={personId} with success/error message
Initial Status: Documents are created with PENDING review status
Reference: IssuerController.java:152
Access Requests
GET /issuer/access-requests
Lists all access requests created by the authenticated issuer. Authentication: Required (ROLE_ISSUER)Optional error message to display
requests: List of AccessRequest entities for this issuerccRequestsSignal: Signal string for detecting changes
PENDIENTE: Awaiting user decisionAPROBADA: Approved by userRECHAZADA: Rejected by userEXPIRADA: Expired without decision
GET /issuer/access-requests/signal
Returns a lightweight signal for detecting changes in access requests without full page reload. Authentication: Required (ROLE_ISSUER) Response: JSONSuccess indicator
Signal string (format:
total|pending|approved|rejected|expired|maxId|maxRequestedAt|maxDecidedAt)GET /issuer/access-requests/new
Displays the form for creating a new access request. Authentication: Required (ROLE_ISSUER)Pre-filled ID type (optional)
Pre-filled ID number (optional)
POST /issuer/access-requests/search
Searches for a person to create an access request. Authentication: Required (ROLE_ISSUER)ID type
ID number
POST /issuer/access-requests
Creates a new access request for consulting person documents. Authentication: Required (ROLE_ISSUER)Person ID
Purpose/reason for the access request
List of person document IDs to request access to (at least one required)
/issuer/access-requests on success
Validation:
- At least one document must be selected
- Documents must be approved
- Documents must belong to the specified person
Document Viewing (Approved Requests)
Document viewing is only available when:
- The access request is in
APROBADAstatus - The request belongs to the authenticated issuer
- The document is included in the request items
- The signed URL is valid and not expired
HEAD /issuer/access-requests//documents//view
Checks if a document can be viewed without transferring the file. Authentication: Required (ROLE_ISSUER)Access request ID
Person document ID
URL expiration timestamp (epoch seconds)
HMAC signature of the signed URL
- Header:
X-CCDigital-Errorwith encoded error message
GET /issuer/access-requests//documents//view
Views a document from an approved access request (inline display). Authentication: Required (ROLE_ISSUER)Access request ID
Person document ID
URL expiration timestamp (epoch seconds)
HMAC signature
Content-Disposition: inline
Audit: Records DOC_VIEW_GRANTED event on blockchain
Reference: IssuerAccessRequestController.java:293
GET /issuer/access-requests//documents//download
Downloads a document from an approved access request. Authentication: Required (ROLE_ISSUER)Access request ID
Person document ID
URL expiration timestamp
HMAC signature
Content-Disposition: attachment
Audit: Records DOC_DOWNLOAD_GRANTED event on blockchain
Reference: IssuerAccessRequestController.java:361
GET /issuer/access-requests//documents//block
Retrieves blockchain traceability metadata for a document. Authentication: Required (ROLE_ISSUER)Access request ID
Person document ID
URL expiration timestamp
HMAC signature
Access request ID
Person document ID
Blockchain network (Fabric)
Blockchain block reference
Document title
Issuing entity name
Document status
Human-readable creation timestamp
Human-readable file size
Original file name
File system path
Security
Login
Endpoint:/login/issuer
Method: POST
Form Parameters:
username: Email (case-insensitive)password: User password
/issuer
Failure: Redirects to /login/issuer?error=true
Logout
Endpoint:/issuer/logout
Method: POST
Response: Redirects to /login/issuer?logout=true
Signed URL Format
Document viewing and download URLs use HMAC-SHA256 signatures:exp: Unix timestamp when URL expiressig: HMAC-SHA256 signature of the URL path and expiration
app.security.signed-urls.ttl-seconds (default: 300 seconds)
Secret: Configured via APP_SECURITY_SIGNED_URLS_SECRET environment variable
Session Management
GET /issuer/session/keepalive
Keeps the issuer session alive during active UI interaction. Authentication: Required (ROLE_ISSUER) Response: 204 No Content Usage: Called periodically by frontend to prevent session timeout during active use. Reference: SessionActivityController.java:30GET /issuer/session/expire
Explicitly expires the issuer session due to client-detected inactivity. Authentication: Required (ROLE_ISSUER) Response: 204 No Content Behavior:- Invalidates HTTP session
- Clears Spring Security context
