Mobile-ID · Long-term digital evidence preservation
Customers and partnersWorkflow demoContact
Trusted LTANS
Evaluate
MOBILE-ID · TRUSTED LTANS

System Architecture

Trace the boundaries between channels, identity, core services, events, storage and trust infrastructure.

VI–EN terminology

01

Channels and applications

Business applications · Five portals

02

API gateway and security

WSO2 API Manager · HTTPS + OAuth2

03

Identity and authorization

Keycloak IAM · Token / claims

04

Services and adapter

Archive · Evidence

05

Events and orchestration

Kafka · Outbox / Inbox

06

Data and replicas

MariaDB / metadata · Object / evidence stores

07

Trust and cryptography

TSA / RFC 3161 · CA / OCSP / CRL

08

Operations and change

Java / WildFly · Observability

Architecture and responsibility boundariesREST and Core LTANS Adapter

01 · Channels and clients

Five portals, source records systems, REST clients and batch connectors. Channels do not confer business authorization.

Flow and boundary

Frozen record references and metadata enter; acknowledgements and results return to source.

Service portals
ViewLayer boundary
Input / flowUser/application commands carry no inherent permission.
OwnershipReturn authorized receipts/jobs/results; UI does not decide backend permissions.
Failure / recoveryDisconnect: retain idempotency key and query the original result before resubmission.

02 · API gateway and access security

Check tokens, scopes, environment-specific mTLS, limits and correlationId before routing.

Flow and boundary

Validated requests reach the owning service; authentication failures never become successful business jobs.

Authentication and API security
ViewLayer boundary
Input / flowToken/mTLS, scopes and correlation; file bytes use provisioned channels.
OwnershipEdge authentication does not replace owning-service object authorization.
Failure / recoveryTimeout is not backend failure proof; diagnose TLS separately from HTTP Problem.

03 · Identity and authorization

GoPaperless SSO over OIDC is a target integration; LTANS separately authorizes tenants, objects and operations.

Flow and boundary

Authenticated identity informs authorization; arbitrary body-supplied tenant values are not trusted.

GoPaperless SSO and identity integrations
ViewLayer boundary
Input / flowProvisioned issuer/verification keys and organization mapping.
OwnershipIdentity differs from authorization; a request tenant is not automatically authorized.
Failure / recoveryReevaluate expiry/permission changes; key-source failure never authorizes unknown keys.

04 · Preservation services

Nine logical groups divide ownership; jobs track long-running work without replacing evidence state.

Flow and boundary

Services update local transactions/outboxes, not one another’s domain stores.

Microservice ownership
ViewLayer boundary
Input / flowCanonical commands, policy snapshots and data references.
OwnershipA group owns its decisions/states; no direct writes to another group’s store.
Failure / recoveryDefine transaction/checkpoint boundaries; no assumed global rollback for external stores.

05 · Events and orchestration

Outbox/inbox, eventId, correlation, deduplication, bounded retry and authorized replay.

Flow and boundary

Events carry metadata, identifiers and references; binary content uses approved storage connectors.

Event catalog
ViewLayer boundary
Input / flowLocal transactional outbox, envelopes and references.
OwnershipSeparate business events from webhook attempts; no default binary payload transport.
Failure / recoveryDeduplicate inbox; late events reconcile current source state before irreversible effects.

06 · Data, evidence and replicas

Separate metadata, originals, evidence and backups. Custody defines byte ownership and durable reread rights.

Flow and boundary

Each data class has its own access, keys and recovery criteria; digests do not replace content.

Data Custody
ViewLayer boundary
Input / flowOriginal bytes, metadata, evidence, replicas and associated keys.
OwnershipCustody assigns store/key owners and reread rights; HASH_ONLY holds no originals.
Failure / recoveryRestore consistent recovery points and digests; bytes without keys remain unreadable.

07 · Trust and cryptography

Deployment-profile CA/TSA, certificate paths, OCSP/CRL and HSM/KMS; validation preserves historical context.

Flow and boundary

External responses are checked before use; fallback never bypasses policy or status checks.

Trust Infrastructure
ViewLayer boundary
Input / flowMessageImprint, tokens, certificates and status material.
OwnershipNetwork/CA/TSA sources are profiled; UNKNOWN/missing material is not GOOD.
Failure / recoveryFallback uses the same approved checks; rotation retains old tokens/context.

08 · Operations and change governance

Observe traces/jobs, renewal alerts, secrets, configuration revisions and recovery drills.

Flow and boundary

This is a cross-cutting control plane, not just the last ingestion step; a diagram does not establish an SLA.

Operations & Assurance
ViewLayer boundary
Input / flowTraces, checkpoints, revisioned configuration and alerts.
OwnershipThe privileged control plane cannot bypass business approvals.
Failure / recoveryReopen after reconciling data/evidence/schedules/outbox; record unrecovered scope.

Cross-layer transactions

Deposit and evidence

Deposit and evidenceTrusted LTANS · Deposit and evidenceTARGET DESIGN · NOT BACKEND EXECUTIONSourceAPI / ArchiveEvidenceTrust Adapter / TSAStorage1. POST /v1/archives · rights,digest, idempotency2. 202 · archiveId/jobId; notcomplete3. EvidenceGenerationRequested· outbox4. Read bytes under custody5. Timestamp for digest binding6. Token and validationmaterial7. Store revision after validation8. Reconcile job and evidencestateSuccessful HTTP processing does not imply a VALID result.
Target sequence; internal interactions are not new public APIs.
Download SVG diagram
StepSender → receiverAction
1Source → API / ArchivePOST /v1/archives · rights, digest, idempotency
2API / Archive → Source202 · archiveId/jobId; not complete
3API / Archive → EvidenceEvidenceGenerationRequested · outbox
4Evidence → StorageRead bytes under custody
5Evidence → Trust Adapter / TSATimestamp for digest binding
6Trust Adapter / TSA → EvidenceToken and validation material
7Evidence → StorageStore revision after validation
8Source → API / ArchiveReconcile job and evidence state

Context-bound verification

Context-bound verificationTrusted LTANS · Context-bound verificationTARGET DESIGN · NOT BACKEND EXECUTIONCallerAPI / VerificationStorageTrust AdapterReport1. POST/v1/archives/{archiveId}/verification2. Read authorizeddata/revision3. Time-bound paths, status and policy4. Step outcomes; evaluatedAt5. GET /v1/jobs/{jobId}6. GET /v1/verifications/{verificationId}Successful HTTP processing does not imply a VALID result.
Target sequence; internal interactions are not new public APIs.
Download SVG diagram
StepSender → receiverAction
1Caller → API / VerificationPOST /v1/archives/{archiveId}/verification
2API / Verification → StorageRead authorized data/revision
3API / Verification → Trust AdapterTime-bound paths, status and policy
4API / Verification → ReportStep outcomes; evaluatedAt
5Caller → API / VerificationGET /v1/jobs/{jobId}
6Caller → ReportGET /v1/verifications/{verificationId}

Renewal and continuity

Renewal and continuityTrusted LTANS · Renewal and continuityTARGET DESIGN · NOT BACKEND EXECUTIONApproverAPI / RenewalStore / dataEvidence / TSAReport1. POST /v1/renewals ·mode/approvalId2. Pin revision and rereadrights3. HASH_TREE needs originaldata4. Generate mode-specific continuation5. Validate before publication6. Retain history link andupdate scheduleSuccessful HTTP processing does not imply a VALID result.
Target sequence; internal interactions are not new public APIs.
Download SVG diagram
StepSender → receiverAction
1Approver → API / RenewalPOST /v1/renewals · mode/approvalId
2API / Renewal → Store / dataPin revision and reread rights
3API / Renewal → Store / dataHASH_TREE needs original data
4API / Renewal → Evidence / TSAGenerate mode-specific continuation
5Evidence / TSA → ReportValidate before publication
6API / Renewal → Store / dataRetain history link and update schedule

Reconcilable export

Reconcilable exportTrusted LTANS · Reconcilable exportTARGET DESIGN · NOT BACKEND EXECUTIONSenderAPI / ArchiveStoragePackageRecipient1. POST/v1/archives/{archiveId}/exports2. Read authorized components3. Manifest, bytes, evidence and context4. GET /v1/exports/{exportId}5. Deliver over an agreedchannel6. Inventory, digest andindependent checksSuccessful HTTP processing does not imply a VALID result.
Target sequence; internal interactions are not new public APIs.
Download SVG diagram
StepSender → receiverAction
1Sender → API / ArchivePOST /v1/archives/{archiveId}/exports
2API / Archive → StorageRead authorized components
3API / Archive → PackageManifest, bytes, evidence and context
4Sender → API / ArchiveGET /v1/exports/{exportId}
5Package → RecipientDeliver over an agreed channel
6Recipient → PackageInventory, digest and independent checks

Acknowledged custody transfer

Acknowledged custody transferTrusted LTANS · Acknowledged custody transferTARGET DESIGN · NOT BACKEND EXECUTIONSenderAPI / TransferPackageRecipientDecision1. POST/v1/archives/{archiveId}/transfers2. Freeze package and scope3. Deliver; retain sourcebefore acknowledgement4. Check package and acceptanceconditions5. POST /v1/transfers/{transferId}/acknowledgements6. Record agreed handover point7. Source deletion requires a separate decisionSuccessful HTTP processing does not imply a VALID result.
Target sequence; internal interactions are not new public APIs.
Download SVG diagram
StepSender → receiverAction
1Sender → API / TransferPOST /v1/archives/{archiveId}/transfers
2API / Transfer → PackageFreeze package and scope
3Package → RecipientDeliver; retain source before acknowledgement
4Recipient → DecisionCheck package and acceptance conditions
5Recipient → API / TransferPOST /v1/transfers/{transferId}/acknowledgements
6API / Transfer → DecisionRecord agreed handover point
7Decision → SenderSource deletion requires a separate decision
Technology and deployment
Reference choiceRoleStatus
WSO2API managementcurrent diagram reference; no deployed build/configuration supplied.
KeycloakIdentity/OIDCcurrent diagram reference; no deployed build/configuration supplied.
KafkaEventscurrent diagram reference; no deployed build/configuration supplied.
MariaDBService-owned transactional storescurrent diagram reference; no deployed build/configuration supplied.
Java / WildFlyService runtimecurrent diagram reference; no deployed build/configuration supplied.

Topology, HA, RTO/RPO and load need environment-specific measurements and acceptance; logical groups are not server counts.

Deployment Model Comparison
Reference architecture image
Reference architecture
Reference architecture · Target interface illustration; source images may contain English text.

Transactions, bytes and consistency points

SituationTarget design ruleAcceptance method
Metadata committed, outbox undeliveredUse local transaction/outbox reconciliation; no duplicate intake.Inject failure after commit/before send, recover and count effects.
Bytes present, metadata incompleteQuarantine unbound objects; garbage collection considers retention/custodian.Reconcile inventory against intake, without blind deletion.
Evidence persisted, projection lateOwner record is authoritative; dashboards expose lag.Rebuild projection without altering evidence revisions.
Lost key, retained ciphertextByte recovery and decryption authority are separate gates.Exercise exact-byte retrieval and verification after authorized key recovery.

API, adapter and Core boundaries

WSO2 GatewayGateway controlsLTANS API ServicesBusiness grants / JobsCore LTANS AdapterProtocol / profile / ID mappingCore LTANSProfile-driven engine

Keycloak issues tokens/identity rather than executing archive work on every request. Nine service groups include Webhook Delivery; adapter/infrastructure do not change the group count. Deployment determines topology.

Next steps

Search LTANS documentation

Expanded illustration