ZeugnyAI
ZeugnyAI Trust Center

Security you can check, not just trust.

Employment certificates hold some of the most sensitive data a company keeps. This page shows how ZeugnyAI handles it, which controls are in place, which are planned, and where your team can verify each one.

Scope: ZeugnyAI Cloud (app.zeugny.com), the Self-Hosted edition and the Zeugny Engine. ZeugnyAI Chat and the free Certificate Checker are consumer products with their own privacy notices.

Security controls

Every control, with its status

Each control states whether it is in place, partial or planned. Where it lives in the platform code, the source path is listed so Self-Hosted customers can check it.

28In place12Partial3Planned

Data protection & privacy

How personal data is pseudonymised, encrypted, kept and deleted.

  • Pseudonymisation before the engine

    In place

    Inside the platform, the PII boundary replaces the names of employees, managers and signatories, employer and company names, dates, work e-mail addresses and employee IDs with consistent pseudonyms before a request reaches the engine, and restores them in the answer. It wraps the engine calls of the HR platform, the lifecycle worker, ZeugnyAI Chat (which reaches the engine only through the platform) and the Word gateway.

    FADP Art. 7GDPR Art. 25ISO A.8.11SOC 2 C1.1
    Verify in source
    • platform/packages/ports/src/pii-boundary.ts
    • platform/packages/lifecycle/src/pii/wiring.ts
    • platform/packages/ports/test/pii-boundary.test.ts
  • Boundary inspector for every certificate

    In place

    For each certificate, HR can open every crossing to and from the engine: time, direction, the number of replaced items per category, the SHA-256 of the payload and the pseudonyms used. Real values are never shown there. The view exports as CSV.

    GDPR Art. 5(2)ISO A.8.15SOC 2 CC7.2AI Act Art. 12
    Verify in source
    • platform/apps/cloud/app/lib/pii-report.server.ts
    • platform/apps/cloud/app/routes/certificates.$id.pii-boundary.tsx
  • Encryption in transit

    In place

    All apps accept HTTPS only, with TLS 1.2 as the minimum; TLS 1.3 is negotiated in practice. The database server accepts TLS connections only, with TLS 1.2 as the minimum, and the platform's database connections request TLS.

    FADP Art. 8GDPR Art. 32ISO A.8.24SOC 2 CC6.7
  • Encryption at rest

    In place

    Azure encrypts the database, backups and file storage at rest. On top of that, the platform encrypts pseudonym mappings and engine API keys with AES-256-GCM under master keys held in Azure Key Vault. Other records rely on Azure's encryption.

    FADP Art. 8GDPR Art. 32ISO A.8.24SOC 2 CC6.1
    Verify in source
    • platform/packages/lifecycle/src/crypto/gcm.ts
    • platform/packages/lifecycle/src/pii/store.ts
    • platform/packages/lifecycle/src/engine-config.ts
  • Retention and automatic deletion

    Partial

    Once the retention period has passed (10 years after the end of employment by default), an hourly job redacts a former employee's name, e-mail address, date and place of birth and nationality, erases drafts and deletes the pseudonym mappings. Job assignments, the audit trail and issued certificates are kept; issued certificates still contain the name. We set a different period for your company on request; self-service configuration is planned.

    FADP Art. 6(4)GDPR Art. 5(1)(e)ISO A.8.10SOC 2 C1.2
    Verify in source
    • platform/apps/cloud/app/lib/retention.server.ts
    • platform/apps/worker/src/main.ts
  • Employee data requests

    Partial

    Employees file access and deletion requests themselves under My privacy, and HR tracks each one against a 30-day deadline. Erasure redacts the employee's records, removes vault entries and shares, and issues a receipt. An access request produces a summary; a downloadable copy of the data is planned.

    FADP Art. 25GDPR Art. 15, 17ISO A.5.34SOC 2 P5.1
    Verify in source
    • platform/apps/cloud/app/lib/dsar.server.ts
    • platform/apps/cloud/app/routes/me.privacy.tsx
  • Crypto-shredding per company

    Planned

    The platform can destroy a company's pseudonymisation key, which makes its stored mappings unreadable. The function is built and tested; making it available as an operator action is planned. Backup copies expire on the regular backup schedule.

    GDPR Art. 17ISO A.8.10SOC 2 C1.2
    Verify in source
    • platform/packages/lifecycle/src/pii/erasure.ts

AI governance

How the AI is constrained, supervised and kept away from identities.

  • Model provider controls

    Partial

    Certificate text is written by models on Microsoft Azure AI Foundry, on a resource in Switzerland North with an EU Data Zone Standard deployment, so requests are processed within the EU data zone. Decision, extraction and retrieval steps also use Microsoft Decision-1 (an Azure AI Foundry resource in Sweden Central with an EU Data Zone Standard deployment), OpenRouter and Voyage AI, and the platform uses OpenRouter directly to suggest job titles and tasks. Providers receive pseudonymised text only. Every request the engine sends to OpenRouter requires providers that do not collect user data, with no setting to switch this off. Zero-data-retention routing is planned.

    FADP Art. 9, 16GDPR Art. 28, 44–46ISO A.5.19, A.5.23SOC 2 CC9.2

Identity & access

Who can sign in, and what each role can see and do.

  • Sign-in protection

    In place

    Passwords are hashed with scrypt and need at least 8 characters. E-mail addresses are verified before the first password sign-in, and passwordless magic links expire after 5 minutes. Sign-in attempts are rate-limited per IP address.

    FADP Art. 8GDPR Art. 32ISO A.8.5SOC 2 CC6.1
    Verify in source
    • platform/packages/auth/src/better-auth/instance.server.ts
  • Sessions

    In place

    Sessions are stored on the server and can be revoked. Session cookies are HttpOnly, Secure and SameSite=Lax and expire after 7 days. A deactivated account is refused on its next request.

    ISO A.8.5SOC 2 CC6.1
    Verify in source
    • platform/apps/cloud/app/lib/context.server.ts
  • Multi-factor authentication

    Partial

    With single sign-on, your identity provider's MFA applies to every sign-in. Staff accounts in our control plane need a second factor (an authenticator code or a backup code) for every session, and no engine operator login is issued without it. A built-in second factor for customer password sign-in is planned.

    FADP Art. 8GDPR Art. 32ISO A.8.5SOC 2 CC6.1
    Verify in source
    • platform/apps/control/app/lib/staff-mfa.server.ts
  • Single sign-on and SCIM

    In place

    Per-company single sign-on with OIDC or SAML, DNS-verified domains, group-to-role mapping and an optional SSO-only mode. It is switched on in the managed Cloud, and we connect your identity provider on request. SCIM 2.0 creates and deactivates users and ends their sessions; a user provisioned without a role gets the least-privileged HR role (HR coordinator), and the SCIM endpoints are rate-limited. Self-Hosted connects any OIDC provider.

    ISO A.5.16, A.5.18SOC 2 CC6.2
    Verify in source
    • platform/apps/cloud/app/lib/sso-provisioning.server.ts
    • platform/apps/cloud/app/lib/scim.server.ts
  • Roles and separation of duties

    In place

    Every route checks relationship-based permissions. HR coordinators can draft but cannot finalise, override a finding, sign or download the official document. Works councils see aggregate figures only; managers see their own direct reports.

    FADP Art. 8GDPR Art. 32ISO A.5.3, A.5.15, A.8.3SOC 2 CC6.3
    Verify in source
    • platform/packages/authz/src/schema.ts
    • platform/packages/authz/test/authz.test.ts
  • Company isolation

    Partial

    In the managed Cloud, companies share one Swiss database. The application confines every request to one company and checks permissions on each object. Self-Hosted gives each customer its own database. Row-level enforcement in the database is planned as a second layer.

    FADP Art. 8GDPR Art. 32ISO A.8.3SOC 2 CC6.1
    Verify in source
    • platform/apps/cloud/app/lib/tenant.server.ts
    • platform/apps/cloud/app/lib/tenant.server.test.ts
  • Single-purpose links

    In place

    People without an account, such as a rating manager, a draft reviewer or the employee collecting a certificate, get links that grant access to exactly one object, expire and can be revoked. The platform stores only a SHA-256 hash of each link token.

    ISO A.8.3SOC 2 CC6.1
    Verify in source
    • platform/apps/cloud/app/lib/capability.server.ts
    • platform/packages/lifecycle/src/stages/deliver.ts
  • Staff access

    In place

    Staff accounts are created by invitation only and need an administrator role, and each action in the control plane requires its own permission. Every staff session must pass a second factor (an authenticator code or a backup code) before it can use the control plane, and no engine operator login is issued without it. Staff cannot impersonate users: the admin impersonation endpoints are disabled. Changes to companies, engine keys and staff are logged.

    ISO A.8.2, A.5.18SOC 2 CC6.2, CC6.3
    Verify in source
    • platform/apps/control/app/lib/staff-mfa.server.ts

Application security

How the application protects itself at its boundaries.

  • Cross-site request forgery protection

    In place

    Sign-in and form submissions are checked against the request's origin, and session cookies are SameSite=Lax.

    ISO A.8.26SOC 2 CC6.6
  • Browser security headers

    In place

    The four web apps (app, control, chat and the website) send HSTS, a Content-Security-Policy with a per-response nonce, frame protection (X-Frame-Options DENY and frame-ancestors none), X-Content-Type-Options nosniff and a referrer policy. Sensitive pages also send no-store and no-referrer headers.

    ISO A.8.26SOC 2 CC6.6
    Verify in source
    • platform/packages/ports/src/security-headers.ts
  • Rate limits on sign-in, public links and SCIM

    In place

    Sign-in is rate-limited per IP address. Every public link page, including the verification pages behind the QR code, allows 60 requests per minute per client, and the SCIM endpoints allow 600 requests per minute per company and client.

    ISO A.8.26SOC 2 CC6.6
    Verify in source
    • platform/apps/cloud/app/lib/public-rate-limit.server.ts
    • platform/apps/cloud/app/routes/_public.tsx
  • Engine API keys

    In place

    Each company has its own engine key with a request rate limit; it can be rotated and revoked. The engine stores only a SHA-256 hash of it, and the platform stores it encrypted with AES-256-GCM. Results are readable only by the key or company that created them.

    ISO A.8.5, A.8.24SOC 2 CC6.1
    Verify in source
    • platform/packages/lifecycle/src/engine-config.ts
  • File handling

    In place

    Uploaded scans of signed paper certificates must be PDF, PNG or JPEG, up to 10 MB, and the file content must match the declared type.

    ISO A.8.26SOC 2 CC6.8
    Verify in source
    • platform/apps/cloud/app/lib/paper-completion.server.ts
    • platform/packages/lifecycle/src/branding.ts
  • Secrets management

    In place

    Production secrets live in Azure Key Vault with role-based access and soft delete, and reach the apps as Key Vault references. None are stored in source code, and production refuses to start without its keys.

    ISO A.5.17, A.8.24SOC 2 CC6.1

Infrastructure & network

Where the service runs and how it is locked down.

  • Managed platform services

    In place

    Production runs on managed services: Azure App Service containers and Azure Database for PostgreSQL for the platform, Cloudflare Workers for the engine. There are no virtual machines of our own to maintain.

    ISO A.5.23, A.8.8SOC 2 CC7.1
  • Network isolation

    Partial

    The apps reach the database through a private endpoint. The database also has a public endpoint. Its firewall allow-list holds Cloudflare's address ranges, so Cloudflare Workers, including the engine, can connect through Hyperdrive. During migrations, deployments and backups, a temporary rule admits the CI runner doing the work and is removed when the job ends. TLS and passwords protect every connection.

    ISO A.8.20, A.8.22SOC 2 CC6.6
  • Infrastructure as code

    In place

    Azure resources are defined in versioned templates, and app settings come from versioned files that reference Key Vault.

    ISO A.8.9SOC 2 CC8.1
  • E-mail security

    In place

    Notifications are sent from notifications.zeugny.com, which publishes a DMARC reject policy, and zeugny.com itself publishes a DMARC quarantine policy. Notifications contain the recipient's address, names and a link. security@, privacy@ and hello@zeugny.com are monitored mailboxes.

    ISO A.5.14SOC 2 CC6.7

Logging, monitoring & incidents

What is recorded, what is watched, and what happens when something breaks.

  • Tamper-evident audit trail

    In place

    Every lifecycle step and change is written to an audit log in which each entry carries the hash of the previous one, so an edited entry breaks the chain. The chain is checked when a dossier or verification page is opened, and each certificate's dossier can be downloaded with its audit entries.

    FADP Art. 8GDPR Art. 5(2)ISO A.8.15SOC 2 CC7.2AI Act Art. 12
    Verify in source
    • platform/packages/lifecycle/src/audit.ts
    • platform/packages/lifecycle/test/audit-race.test.ts
  • Synthetic monitoring

    In place

    Every five minutes, a separate monitor checks the health of the platform, worker and control plane. Once a day it runs a full analysis of a fictional certificate through the engine. Azure availability tests watch the monitor itself from three European locations, so an outage of either side raises an alert.

    ISO A.8.16SOC 2 CC7.2, A1.2
  • Central logging

    In place

    Application, HTTP and database logs go to Azure Log Analytics in Switzerland North and are kept for 30 days. Engine request logs hold metadata only; the engine's runtime logs on Cloudflare can contain fragments of pseudonymised text.

    ISO A.8.15SOC 2 CC7.2
  • Incident response and notification

    Partial

    If an incident affects your data, we inform your named contact without undue delay after we confirm it, with what happened, which data is affected and what we are doing about it. A written incident response plan is drafted and is published after legal review; regular exercises are planned.

    FADP Art. 24GDPR Art. 33ISO A.5.24, A.5.26SOC 2 CC7.3, CC7.4

Backup & continuity

How data is backed up and how releases are protected.

  • Backups

    In place

    The database can be restored to any point in the last 35 days. In addition, a scheduled job dumps all databases every night. It runs on a ZeugnyAI-operated CI runner, which connects over TLS, writes each dump to a temporary file, uploads it to Azure Storage in Switzerland North and deletes the file. The last 30 dumps of each database are kept, and deleted dumps stay recoverable for 30 more days. The stored backups, point-in-time and dumps, are kept in Switzerland North and replicated to Switzerland West, a second Swiss region.

    FADP Art. 8GDPR Art. 32ISO A.8.13SOC 2 A1.2
  • Restore tests

    Partial

    The restore procedure is documented. Restore tested on 9 November 2026: a point-in-time restore of the production database to a temporary server completed in 7 minutes and its contents were checked. Further restore tests on a recurring schedule are planned.

    ISO A.8.13, A.5.30SOC 2 A1.3
  • Redundancy

    Partial

    The managed Cloud runs in Azure Switzerland North. Database backups and file storage are replicated to a second Swiss region, Switzerland West. A restore of the database backup into Switzerland West was tested on 10 November 2026. A standby database with automatic failover is planned.

    ISO A.8.14SOC 2 A1.2
    Verify in source
    • platform/infra/azure/main.bicep
  • Staged releases

    In place

    Every change on the main branch that passes the checks is deployed to a separate staging environment. A production release requires a passing smoke test on staging for the same commit. The engine reaches production only from commits that passed the checks: a CI job moves the release branch to the tested commit, and Cloudflare deploys from that branch.

    ISO A.8.32SOC 2 CC8.1

Secure development

How changes are built, tested and shipped.

  • Automated checks on every change

    In place

    Type checks, unit and integration tests and production builds run for every change, and end-to-end tests run for changes that affect them. Dependencies install from a frozen lockfile.

    ISO A.8.25, A.8.29SOC 2 CC8.1
  • Separate environments

    In place

    Development, staging and production use separate databases, keys and key vaults. Tests never use production data or credentials.

    ISO A.8.31, A.8.33SOC 2 CC8.1
  • Change review and release gates

    Partial

    Production releases pass automated gates. The engine's production pipeline deploys only from a release branch, which CI moves to a commit after the tests have passed for that commit on main. The platform's production pipeline runs only for commits on main with a successful CI run, and only after an acceptance run on the staging environment. Self-Hosted customers can review every change in their repository. Enforced independent review of every change is planned.

    ISO A.8.25, A.8.32SOC 2 CC8.1
  • Dependency and secret scanning

    Partial

    Customer source snapshots are checked for secret-shaped strings and forbidden paths before release. Dependency vulnerability alerts (Dependabot) are enabled on the platform and engine repositories. Code scanning and repository secret scanning are planned.

    ISO A.8.8SOC 2 CC7.1
  • Source delivery for Self-Hosted

    In place

    Self-Hosted customers receive an allowlisted snapshot of the platform as a private repository and build the containers themselves. Internal tooling is excluded, and a release stops if forbidden paths or secret-shaped strings are found.

    ISO A.8.4SOC 2 CC8.1
    Verify in source
    • platform/scripts/bootstrap.mjs
    • platform/docker-compose.selfhost.yml

Organisation & vendors

People, policies and the third parties we rely on.

  • Production access

    Partial

    Production access is limited to named administrators on a need-to-have basis. Formal separation of duties between development and operations is planned.

    ISO A.5.2, A.5.3SOC 2 CC1.3
  • Subprocessor list

    In place

    Every provider that processes data for the Cloud is listed on this page with its purpose, the data it receives and its location.

    FADP Art. 9GDPR Art. 28ISO A.5.19, A.5.21SOC 2 CC9.2
  • Written security policies

    Planned

    Formal written policies for information security, access control, incident response and vendors are drafted and are published after legal review. This page describes current practice.

    ISO A.5.1, A.5.37SOC 2 CC2.1, CC5.3
  • Independent penetration test

    Planned

    An external penetration test is planned. Self-Hosted customers are welcome to test their own installation at any time; for the managed Cloud we agree scope and timing with you.

    ISO A.8.8SOC 2 CC4.1