{
  "productVersion": "0.44.0",
  "locale": "en",
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/platform",
      "source": "Program.cs",
      "title": "Product information",
      "description": "Returns product, SDK and architecture version information.",
      "auth": "Installation network policy; no portal session required.",
      "example": "curl https://sigillum.example/api/platform"
    },
    {
      "method": "POST",
      "path": "/api/transfer",
      "source": "Program.cs",
      "title": "SDK record transfer",
      "description": "Accepts the SDK-generated SFREC001 binary package. This is not a JSON business-data API. Acceptance does not establish final sealing.",
      "auth": "SDK service identity and protocol trust requirements."
    },
    {
      "method": "GET",
      "path": "/api/transfer/profiles",
      "source": "Program.cs",
      "title": "Signed entry profiles",
      "description": "Returns entry profiles authorised for the calling service. The SDK verifies signatures and revisions.",
      "auth": "SDK service identity and protocol trust requirements."
    },
    {
      "method": "GET",
      "path": "/api/transfer/trust",
      "source": "Program.cs",
      "title": "Transfer trust",
      "description": "Returns the installation’s transfer trust information.",
      "auth": "Installation network policy; no portal session required."
    },
    {
      "method": "GET",
      "path": "/health/live",
      "source": "Program.cs",
      "title": "Liveness",
      "description": "Reports process liveness. A live process does not by itself establish dependency readiness.",
      "auth": "Installation network policy; no portal session required."
    },
    {
      "method": "GET",
      "path": "/health/ready",
      "source": "Program.cs",
      "title": "Readiness",
      "description": "Reports readiness according to the installation’s dependency checks.",
      "auth": "Installation network policy; no portal session required."
    },
    {
      "method": "POST",
      "path": "/portal-api/account/password",
      "source": "Portal/PortalAuthentication.cs",
      "title": "Change password",
      "description": "Changes the authenticated user’s password after validating the current request.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/activity",
      "source": "Portal/PortalLedgerActivity.cs",
      "title": "Access activity",
      "description": "Lists authorised account and access activity.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/application-reference-fields",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Reference fields",
      "description": "Returns the configured record-reference fields.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/application-reference-fields",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Configure reference fields",
      "description": "Saves record-reference field definitions in the selected scope.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/applications",
      "source": "Portal/PortalManagement.cs",
      "title": "Create application",
      "description": "Creates an application in the selected institution and environment.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/applications/{id}/retire",
      "source": "Portal/PortalManagement.cs",
      "title": "Retire application",
      "description": "Retires the identified application definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/applications/{id}/update",
      "source": "Portal/PortalManagement.cs",
      "title": "Update application",
      "description": "Updates the application using the submitted revision requirements.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/comparison-catalog",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Comparison field catalogue",
      "description": "Builds the available field catalogue for comparison setup.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/comparison-definitions",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Comparison definitions",
      "description": "Returns the application’s comparison definitions.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/comparison-definitions",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Save comparison definition",
      "description": "Creates a versioned comparison definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/comparison-definitions/deactivate",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Deactivate comparison definition",
      "description": "Deactivates the selected definition without rewriting prior sealed evidence.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/dashboard",
      "source": "Portal/PortalLedgerMonitoring.cs",
      "title": "Dashboard summary",
      "description": "Returns the overview summary for the selected scope.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/dashboard/analytics",
      "source": "Portal/PortalLedgerMonitoring.cs",
      "title": "Dashboard analytics",
      "description": "Returns the filtered dashboard analysis data.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/delivery-status",
      "source": "Portal/PortalLedgerMonitoring.cs",
      "title": "Pending deliveries",
      "description": "Returns service-level delivery status and available backlog measurements.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/entry-points",
      "source": "Portal/PortalManagement.cs",
      "title": "Save entry point",
      "description": "Saves an actual execution entry definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { id, applicationId, serviceId, kind, operation, path, expectedRevision }.",
      "response": "The saved actual entry-point definition."
    },
    {
      "method": "POST",
      "path": "/portal-api/entry-points/{id}/state",
      "source": "Portal/PortalManagement.cs",
      "title": "Entry-point state",
      "description": "Changes whether the selected entry definition is active.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/entry-points/{id}/update",
      "source": "Portal/PortalManagement.cs",
      "title": "Update entry point",
      "description": "Updates the identified entry definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/environments",
      "source": "Portal/PortalManagement.cs",
      "title": "Create environment",
      "description": "Creates an institutional operating environment.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/environments/{id}/retire",
      "source": "Portal/PortalManagement.cs",
      "title": "Retire environment",
      "description": "Retires the identified environment definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/institution-sources",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Institution record sources",
      "description": "Lists configured source connections for comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/institution-sources",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Save record source",
      "description": "Creates or updates a versioned source connection.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/institution-sources/{id}/retire",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Retire record source",
      "description": "Retires the selected source connection.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/institution-sources/{id}/versions",
      "source": "Portal/PortalLedgerControlConfiguration.cs",
      "title": "Source version history",
      "description": "Returns the version history of the selected connection.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/institutions",
      "source": "Portal/PortalManagement.cs",
      "title": "Institutions",
      "description": "Lists institutions visible to the authenticated user.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/institutions",
      "source": "Portal/PortalManagement.cs",
      "title": "Create institution",
      "description": "Creates an institution using the required administrative authority.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/integration-status",
      "source": "Portal/PortalLedgerMonitoring.cs",
      "title": "Integration status",
      "description": "Returns the current integration information for the selected scope.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/license",
      "source": "Portal/PortalLicensing.cs",
      "title": "Institution licence",
      "description": "Returns licence periods and observation availability for the institution.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/license/history",
      "source": "Portal/PortalLicensing.cs",
      "title": "Licence decision history",
      "description": "Returns imported licence decision history.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/license/import",
      "source": "Portal/PortalLicensing.cs",
      "title": "Import signed licence",
      "description": "Verifies a licence, renewal or revocation against the institution and installation. The issuer’s private key is not held at this endpoint.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { document: string }. Signed file text, up to 32 KiB.",
      "response": "Verified institution licence status or a specific licence error code."
    },
    {
      "method": "POST",
      "path": "/portal-api/license/request",
      "source": "Portal/PortalLicensing.cs",
      "title": "Licence request",
      "description": "Produces the installation-bound request used for offline licence issuance.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/local-agent/{runtime}",
      "source": "Portal/PortalAgentDownloads.cs",
      "title": "Download local agent",
      "description": "Downloads a published local-agent package after manifest size and SHA-256 verification.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "runtime: win-x64 or linux-x64. An authorised session and CSRF token are required.",
      "response": "application/zip; 503 local_agent_unavailable when the deployment package is unavailable."
    },
    {
      "method": "POST",
      "path": "/portal-api/login",
      "source": "Portal/PortalAuthentication.cs",
      "title": "Sign in",
      "description": "Authenticates user credentials and establishes a portal session.",
      "auth": "User credentials and same-origin validation.",
      "request": "JSON: { username: string, password: string }. Same-origin validation applies.",
      "response": "Session cookie and session response."
    },
    {
      "method": "POST",
      "path": "/portal-api/logout",
      "source": "Portal/PortalAuthentication.cs",
      "title": "Sign out",
      "description": "Ends the current portal session.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/operations/logs",
      "source": "Portal/PortalSystemOperations.cs",
      "title": "Operational logs",
      "description": "Returns authorised product operational-log entries.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/operations/snapshot",
      "source": "Portal/PortalLedgerMonitoring.cs",
      "title": "Product health",
      "description": "Returns the current product-health snapshot.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/registry",
      "source": "Portal/PortalManagement.cs",
      "title": "Definition registry",
      "description": "Returns the selected scope’s configuration registry.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/scope",
      "source": "Portal/PortalAuthentication.cs",
      "title": "Select institution and environment",
      "description": "Updates the authenticated session’s operating scope.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { institutionId: UUID, environmentId: UUID }.",
      "response": "Updated session scope."
    },
    {
      "method": "POST",
      "path": "/portal-api/sdk-download",
      "source": "Portal/PortalManagement.cs",
      "title": "Download SDK",
      "description": "Produces the service-specific SDK delivery package.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { applicationId, serviceId, language, expectedRevision }. language is dotnet, java or python.",
      "response": "Service-specific SDK download package."
    },
    {
      "method": "GET",
      "path": "/portal-api/sdk-packages",
      "source": "Portal/PortalManagement.cs",
      "title": "SDK package catalogue",
      "description": "Returns available SDK package information.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/security-alerts",
      "source": "Portal/PortalLedgerActivity.cs",
      "title": "Security alerts",
      "description": "Lists security findings in the authorised scope.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/security-alerts/{alert}",
      "source": "Portal/PortalLedgerActivity.cs",
      "title": "Security alert details",
      "description": "Returns the identified security finding.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/services",
      "source": "Portal/PortalManagement.cs",
      "title": "Create service",
      "description": "Creates a service definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/services/{id}/cancel",
      "source": "Portal/PortalManagement.cs",
      "title": "Cancel service",
      "description": "Cancels the service definition; this differs from disconnecting one application.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/services/{id}/update",
      "source": "Portal/PortalManagement.cs",
      "title": "Update service",
      "description": "Updates the identified service definition.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/session",
      "source": "Portal/PortalAuthentication.cs",
      "title": "Session details",
      "description": "Returns the current user session, scope and CSRF information.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions",
      "source": "Portal/PortalLedgerEndpoints.cs",
      "title": "Transaction records",
      "description": "Lists filtered transactions in the selected institution and environment. Business outcome and review readiness are separate fields.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}",
      "source": "Portal/PortalLedgerEndpoints.cs",
      "title": "Transaction details",
      "description": "Returns the identified transaction’s review metadata.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}/comparison-definition",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Attached comparison definition",
      "description": "Returns the definition bound to the completed transaction.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}/comparisons",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Comparison history",
      "description": "Lists saved comparison runs for the transaction.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Create comparison",
      "description": "Runs a comparison with the submitted transaction and source material.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Comparison run",
      "description": "Returns the saved result for the specified run.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/offline-package",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Offline transaction package",
      "description": "Downloads the related files as an offline-verification package.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/offline-setup",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Verifier setup package",
      "description": "Downloads the installer package for opening the selected comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/offline-tool",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Offline verifier",
      "description": "Downloads the verification tool for the selected comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/report",
      "source": "Portal/PortalLedgerReports.cs",
      "title": "Saved report",
      "description": "Returns the saved report for a comparison run.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/report/download",
      "source": "Portal/PortalLedgerReports.cs",
      "title": "Download report",
      "description": "Downloads the saved report with authorised access auditing.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/report/preview",
      "source": "Portal/PortalLedgerReports.cs",
      "title": "Report preview",
      "description": "Prepares a preview of the selected comparison report.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/source-keys",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Verification keys",
      "description": "Returns verification-key information for the selected comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/source-opening",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Private opening file",
      "description": "Downloads private opening material for the selected source comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/source-proof",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Evidence package",
      "description": "Downloads the source-comparison evidence package.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/source-report-key",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Report verification key",
      "description": "Downloads the report-signature verification key.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/source-seal-key",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Seal verification key",
      "description": "Downloads the seal verification key for the comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/{runId}/source-witness-key",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Witness verification key",
      "description": "Downloads the witness verification key for the comparison.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/comparisons/from-source",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Compare with source",
      "description": "Starts a run using the attached comparison definition and selected institution source. An identical request can reuse its runId.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: runId, definitionId, version, definitionSha256, sourceId, sourceVersion, sourceFingerprint, referenceValue.",
      "response": "New run or the existing run for an identical request. Reusing runId with different content returns 409."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/content",
      "source": "Portal/PortalLedgerEndpoints.cs",
      "title": "Open original content",
      "description": "Returns an authorised page of the transaction’s original content and records the access.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "Optional cursor in the JSON body, belonging to the same transaction.",
      "response": "An authorised page of the transaction content."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/execution-proof/{revision}/offline-tool",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Transaction evidence verifier",
      "description": "Downloads the offline tool for the selected sealed evidence revision.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/execution-proof/{revision}/proof",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Transaction evidence",
      "description": "Downloads the selected sealed transaction evidence.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/execution-proof/{revision}/seal-key",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Transaction seal key",
      "description": "Downloads the transaction seal verification key.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/execution-proof/{revision}/witness-key",
      "source": "Portal/PortalLedgerExports.cs",
      "title": "Transaction witness key",
      "description": "Downloads the transaction witness verification key.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/institution-sources",
      "source": "Portal/PortalLedgerComparison.cs",
      "title": "Resolve transaction sources",
      "description": "Resolves available institution-source information for the selected transaction.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/progress",
      "source": "Portal/PortalLedgerProgress.cs",
      "title": "Transaction progress",
      "description": "Reads observed steps and preparation state for an unfinished transaction. Reuse viewId while the same panel remains open.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { viewId: UUID }. Retain the same viewId while refreshing the open panel.",
      "response": "{ transaction, progress }: stage, reason, receivedRecords, completedSteps, runningSteps, failedSteps, steps and measuredAt. Details may be shortened for ready records."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/revalidate",
      "source": "Portal/PortalLedgerEndpoints.cs",
      "title": "Recheck integrity",
      "description": "Revalidates sealed record integrity and records the access.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "GET",
      "path": "/portal-api/transactions/{execution}/status",
      "source": "Portal/PortalLedgerEndpoints.cs",
      "title": "Transaction status",
      "description": "Returns current transaction and review status.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/transactions/{execution}/summary",
      "source": "Portal/PortalLedgerEndpoints.cs",
      "title": "Open transaction summary",
      "description": "Returns the prepared transaction summary with authorised content access.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks."
    },
    {
      "method": "POST",
      "path": "/portal-api/usages",
      "source": "Portal/PortalManagement.cs",
      "title": "Connect service",
      "description": "Connects a service to the selected application.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { applicationId, serviceId, expectedRevision }.",
      "response": "Updated application/service connection."
    },
    {
      "method": "POST",
      "path": "/portal-api/usages/disconnect",
      "source": "Portal/PortalManagement.cs",
      "title": "Disconnect service",
      "description": "Disconnects the service only from the selected application.",
      "auth": "Authorised portal session and institution/environment scope. Protected POST requests require CSRF and same-origin checks.",
      "request": "JSON: { applicationId, serviceId, expectedRevision }.",
      "response": "The selected application’s service connection is disabled."
    }
  ]
}