Datenschutzerklärung — KYTH.Karl Shipping Intelligence
Stand: 27. Juli 2026 | Version: 3.7 | Anbieter: KYTH. Systems UG (haftungsbeschränkt)
1. Verantwortlicher
KYTH. Systems UG (haftungsbeschränkt)
Geschäftsführer: Stefan Grasse (CTO), Stephan Wittmann (CMO)
Prof.-Mederer-Str. 4, 92348 Berg, Deutschland
Notariell errichtet am 19.05.2026 (UR-Nr. 0674/2026, Notarin Dr. Christine Oberhofer, Altdorf b. Nürnberg)
Handelsregister: Amtsgericht Nürnberg, HRB 46313
E-Mail: datenschutz@kyth.systems
Web: www.kyth.systems
2. Gegenstand dieser Erklärung
Diese Datenschutzerklärung informiert über die Verarbeitung personenbezogener Daten bei Nutzung der Shopify-App „KYTH.Karl — Shipping Intelligence" (nachfolgend „KARL"). KARL ist eine Multi-Carrier-Versandlösung für Shopify-Shops und wird als Shopify Embedded App betrieben.
Die App richtet sich ausschließlich an gewerbliche Nutzer (B2B). Die Verarbeitung personenbezogener Daten von Endkunden (Empfänger) erfolgt ausschließlich im Auftrag des jeweiligen Shopify-Händlers (Art. 28 DSGVO — Auftragsverarbeitung).
3. Welche Daten verarbeiten wir?
Quelle der Empfängerdaten: Shopify Order GraphQL API (ausschließlich lesend) sowie — nur wenn der Händler das optionale Add-On „eBay Connector" gebucht und sein eBay-Konto verbunden hat — die eBay Sell API (Bestellungen mit Empfängername, Adresse, Telefon, E-Mail; siehe Abschnitt 6a). KARL verarbeitet nur Daten, die für den Versandprozess zwingend erforderlich sind (Datenminimierung, Art. 5 Abs. 1 lit. c DSGVO).
| Kategorie | Daten | Schutz | Aufbewahrung |
|---|---|---|---|
| Shop-Daten | Shop-Domain, OAuth-Token, Plan, Scopes, Installations-Zeitpunkt | Access-Token AES-256-GCM verschlüsselt | Bis Deinstallation |
| Empfängerdaten | Name, Firma, Straße, PLZ, Stadt, Land, Bundesland, Telefon, E-Mail | Name, Firma, Straße, Adresszusatz, Telefon, E-Mail AES-256-GCM (PLZ/Stadt/Land/Bundesland Klartext für Versand-Routing); Multi-Tenant-Isolation (shop_id) | 90 Tage |
| Versanddaten | Bestell-Nr., Carrier, Service, Tracking-Nr., Gewicht, Maße, Incoterm, EAS/ODA-Flags, Kosten | Multi-Tenant-Isolation | 90 Tage |
| Tracking-Events | Status, Zeitstempel, Ort, Roh-Event-JSON des Carriers | Multi-Tenant-Isolation; bei customers/redact werden Ort + Roh-JSON auf NULL gesetzt | 90 Tage |
| Label-PDFs | Versandetiketten als Base64 (enthalten Empfänger-Adresse) | AES-256-GCM verschlüsselt (label_archive) | Standard 30 Tage; vom Händler konfigurierbar zwischen 14 und 180 Tagen (Einstellungen → System) |
| Carrier-API-Zugangsdaten | API-Keys, Kundennummern, OAuth-Tokens (inkl. BYOAK — Bring Your Own API Keys) | AES-256-GCM verschlüsselt | Bis Deinstallation |
| Portokasse-Tokens | OAuth Access/Refresh Tokens (Deutsche Post Internetmarke) | AES-256-GCM verschlüsselt | Bis Deinstallation |
| eBay-OAuth-Tokens (optional, nur mit Add-On „eBay Connector") | OAuth Access/Refresh Tokens des verbundenen eBay-Kontos | AES-256-GCM verschlüsselt (ebay_accounts) | Bis Trennung der Verbindung / Deinstallation |
| UPS-OAuth-Tokens (optional, „Mit UPS verbinden") | OAuth Access/Refresh Tokens des verbundenen UPS-Kontos des Händlers | AES-256-GCM verschlüsselt (ups_oauth_accounts) | Bis Trennung der Verbindung / Deinstallation |
| Manuelle Label-Entwürfe (optional, per Klick „Als Entwurf speichern") | Kompletter Formularstand des manuellen Labels inkl. Empfänger-Name, Adresse, Telefon, E-Mail, Paketdaten | AES-256-GCM verschlüsselt (manual_label_drafts); max. 20 Entwürfe pro Shop (älteste werden verdrängt) | Bis Löschung durch den Händler, automatisch nach erfolgreicher Label-Erstellung aus dem Entwurf, spätestens bei Deinstallation |
| Shop-Einstellungen / Absender-PII | Firmenadresse, Kontaktperson, Telefon, USt-IdNr., EORI des Händlers | settings_json AES-256-GCM verschlüsselt | Bis Deinstallation |
| Admin-Zugangsdaten | E-Mail, Name, Rolle | E-Mail + Name AES-256-GCM; Lookup per HMAC-SHA256-Hash; Passwort: PBKDF2-SHA256 (310.000 Iter.) | Bis Deinstallation |
| Audit-Trail (API-Logs) | Carrier API-Request/Response-JSON (können Adressen enthalten) | api_request_json + api_response_json AES-256-GCM verschlüsselt | 90 Tage; bei DSGVO-Anfrage: sofort NULL |
| Audit-Log (DSGVO) | Zeitstempel, Aktion (shop_redact / customer_redact / data_request), Shop-Domain, verarbeitete IDs | Multi-Tenant-Isolation (Art. 30 DSGVO — Verzeichnis von Verarbeitungstätigkeiten) | 365 Tage |
| Retouren | Kundenname, E-Mail, Bestell-Nr., Grund, Status | Multi-Tenant-Isolation | 90 Tage |
| Retouren-Portal-Tokens | Einmal-Token für Self-Service-Retourenportal, Kunden-E-Mail, Ablaufzeit | Token + E-Mail verschlüsselt; Multi-Tenant-Isolation | Bis Ablauf/Verbrauch; spätestens 90 Tage |
| Druckwarteschlange | Label-PDF, Bestell-Nr. | Multi-Tenant-Isolation | 24 Stunden nach Druck (gedruckt/fehlgeschlagen); 7 Tage für noch nicht gedruckte Einträge |
| Tarif-Vergleiche | Bestell-Nr., Empfänger-PLZ, Empfänger-Land, Gewicht, gewählter Carrier/Service/Preis, Alternativen, Ersparnis (Analytik des Preisvergleichs) | Multi-Tenant-Isolation; bei customers/redact werden PLZ + Land auf NULL gesetzt | 90 Tage |
| Zolldaten (nur Drittland-Sendungen) | HS-Codes, Warenbeschreibung/Ursprung/Gewicht, MRN, ABD-Ausfuhrbegleitdokument (enthält Empfängeradresse), Empfänger-Korrekturen (Telefon/PLZ/Ort) | MRN, ABD-PDF, Empfänger-Korrekturen AES-256-GCM verschlüsselt; Multi-Tenant-Isolation (order_customs_data) | Empfänger-PII (MRN/ABD/Korrekturen) 90 Tage; HS-Codes/Warenangaben (kein Personenbezug) darüber hinaus |
| Pick-Listen (Kommissionierung, nur mit Add-On „Pick & Pack") | Bestell-Nr., SKU, Produkttitel, Variante, Menge, Kommissionierer (Mitarbeiter-Name) | Multi-Tenant-Isolation (pick_lists) | 90 Tage |
| E-Mail-Benachrichtigungen | Empfänger-E-Mail, Bestell-Nr., Tracking-Nr., Carrier, Versandstatus (Log) | Multi-Tenant-Isolation | 180 Tage (Versandhistorie) |
| Support-Chat-Nachrichten | Nachrichtentext, Absender-Rolle (Shop/Support), Absender-E-Mail des Händlers, Anhänge | Multi-Tenant-Isolation | 180 Tage |
| Mobile-Scanner-Events | Gescannte Bestell-Nr., Zeitstempel, Shop-Zuordnung (Handy→PC SSE-Relay) | Multi-Tenant-Isolation; append-only Event-Log | 24 Stunden (täglich 03:50 UTC) |
| Mobile-Scanner-SSE-Tickets | Kurzlebige Auth-Tickets für Handy-Browser-Verbindung | Multi-Tenant-Isolation | Bis Ablauf (kurzlebig, min. einmal täglich bereinigt) |
| Branded-Tracking-Konfiguration | Logo, Brand-Farben, Text-Bausteine, Social-Links des Händlers | Multi-Tenant-Isolation (keine End-Kunden-PII) | Bis Deinstallation |
| OAuth-Nonces | Kurzlebige State-Token für Shopify OAuth-Flow | Server-seitig nur, nicht im Browser | Unmittelbar nach Callback (max. wenige Minuten) |
| Legal-Akzeptanzen | Shop-ID, Dokumententyp (AGB/AVV/Privacy), Version, Akzept-Zeitstempel, pseudonymisierte IP (/24 bzw. /64), User-Agent | IP wird vor Speicherung auf /24 (IPv4) bzw. /64 (IPv6) gekürzt — keine direkt re-identifizierbare Adresse. Multi-Tenant-Isolation. Rechtsgrundlage: Art. 7 Abs. 1 DSGVO + § 14 BGB Nachweispflicht. | 10 Jahre (§ 147 AO Aufbewahrungspflicht für Vertragsunterlagen) |
4. Zweck der Verarbeitung
Alle Daten werden ausschließlich zur Erbringung des Versanddienstes verarbeitet:
- Erstellung von Versandetiketten (Labels) bei den vom Händler konfigurierten Carriern
- Berechnung von Versandkosten und Zuschlägen (EAS/ODA-Prüfung, 229 Surcharge-Zonen in 12+ Ländern)
- Smart Routing in 3 Modi: „günstigster Tarif", „feste Priorität" oder „Checkout-Methode"
- Sendungsverfolgung und Fulfillment-Synchronisierung mit Shopify (GraphQL)
- Buchung und Stornierung von Carrier-Abholungen
- Erstellung von Zolldokumenten (ETD/Paperless Trade, DDP/DAP/DDU Incoterms)
- Retouren-Management inklusive öffentliches Self-Service-Retourenportal (Einmal-Link)
- Versand transaktionaler E-Mail-Benachrichtigungen (Versandbestätigung, Retouren-Einladung) — optional gebrandet pro Shop
- Branded-Tracking-Seite (öffentlich zugänglich, nur Tracking-Status und Stadt/Land, keine vollständige Adresse)
- Mobile-Scanner: Übertragung von Barcode-Scans vom Handy des Mitarbeiters an den Desktop-Browser desselben Shops (SSE-Relay)
- Analytics und Tagesabschluss-Reports (aggregiert, shop-intern)
Es erfolgt keine Verarbeitung zu eigenen Werbezwecken des Anbieters, kein Profiling, keine automatisierte Entscheidungsfindung im Sinne von Art. 22 DSGVO. Aktiviert der Händler in den Versand-E-Mails optionale Bausteine (Rabattcode, Bewertungs-Link), verarbeitet KARL diese ausschließlich weisungsgebunden für den Händler und über dessen eigenen SMTP-Server; die werbliche Verantwortung und die Rechtsgrundlage dafür liegen beim Händler.
5. Rechtsgrundlage
Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung): Die Verarbeitung ist zur Erfüllung des Vertrages zwischen dem Händler und KYTH. Systems erforderlich. Der Händler beauftragt KARL mit der Label-Erstellung — hierfür ist die Verarbeitung von Empfängerdaten zwingend notwendig.
Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse): Für die Optimierung des Versandprozesses (Zuschlagsprüfung, Carrier-Routing, Adress-Autocomplete, Analytics) besteht ein berechtigtes Interesse des Händlers an effizientem Versandmanagement.
Art. 28 DSGVO (Auftragsverarbeitung): In Bezug auf Endkunden-Daten (Empfänger) handelt KARL als Auftragsverarbeiter im Auftrag des Shopify-Händlers. Der Händler bleibt Verantwortlicher für die Daten seiner Kunden. Der Auftragsverarbeitungsvertrag (AVV) wird mit Installation der App und Akzeptanz im Onboarding-Prozess (Klick-through) rechtsverbindlich abgeschlossen. Der vollständige Vertragstext mit allen 10 Pflichtinhalten gemäß Art. 28 Abs. 3 DSGVO ist unter karl.kyth.systems/avv einsehbar; die zugehörigen technisch-organisatorischen Maßnahmen (TOMs) gemäß Art. 32 DSGVO unter karl.kyth.systems/toms.
6. Datenweitergabe und Drittlandtransfer
Versandadressen werden ausschließlich an die vom Händler aktiv konfigurierten Carrier weitergegeben — und nur im Moment der Label-Erstellung bzw. der Abholungs-Buchung:
| Carrier | Unternehmen / Sitz | Rechtsgrundlage Transfer |
|---|---|---|
| DHL Paket | Deutsche Post DHL Group, Bonn (EU) | Kein Drittlandtransfer |
| DHL Express | DHL Express, Bonn (EU) | Kein Drittlandtransfer |
| FedEx | FedEx Corporation, Memphis (USA) | EU-US Data Privacy Framework + Standardvertragsklauseln (SCCs) |
| UPS | United Parcel Service, Atlanta (USA) | EU-US Data Privacy Framework + Standardvertragsklauseln (SCCs) |
| DPD | DPD Deutschland GmbH, Aschaffenburg (EU) | Kein Drittlandtransfer |
| Österreichische Post | Österreichische Post AG, Wien (EU) | Kein Drittlandtransfer |
| Deutsche Post / Internetmarke | Deutsche Post AG, Bonn (EU) | Kein Drittlandtransfer |
Drittlandtransfer durch eingesetzte Infrastruktur-Dienste: Über die Carrier hinaus findet im Rahmen des Betriebs ein Drittlandtransfer bei folgenden Diensten statt (vollständige Sub-Processor-Liste siehe Abschnitt 7):
| Dienst | Land | Garantie für den Transfer |
|---|---|---|
| Shopify Inc. (Bestelldatenquelle, Embedded-App-Hosting, Webhook-Zustellung) | Kanada / global | Angemessenheitsbeschluss der EU-Kommission für Kanada (kommerzielle Organisationen) + Shopify DPA |
Cloudflare, Inc. (DNS-Auflösung für kyth.systems) | USA | EU-Standardvertragsklauseln (SCCs) / Cloudflare DPA |
Third-Party-Billing (optional): Wenn der Händler im Carrier-Setup die Option „Versandkosten-Billing auf anderes Konto" aktiviert, wird zusätzlich zur Empfänger-Adresse die Kundennummer / PLZ / Länderkennung des Rechnungsempfängers an den Carrier übermittelt. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO.
Empfänger-E-Mail-Adresse (optional, Standard: aus): Die E-Mail-Adresse des Bestellers wird nur dann an den Carrier übermittelt, wenn der Händler die Option „Empfänger-E-Mail an Carrier übermitteln" in den Einstellungen aktiv eingeschaltet hat. Der Carrier versendet in diesem Fall eigene Versandbenachrichtigungen an den Empfänger. Die Einholung der hierfür erforderlichen Rechtsgrundlage (Einwilligung des Empfängers, Art. 6 Abs. 1 lit. a DSGVO) obliegt dem Händler als Verantwortlichem — die Zustellung der Sendung selbst erfordert keine E-Mail-Übermittlung an den Carrier.
6a. eBay Connector (optional, nur mit gebuchtem Add-On)
Wenn der Händler das Add-On „eBay Connector" bucht und sein eBay-Verkäuferkonto per OAuth verbindet, verarbeitet KARL zusätzlich Bestelldaten aus der eBay Sell API (eBay Inc., San Jose, USA): Käufername, Lieferadresse, Telefon und E-Mail der eBay-Bestellungen werden gelesen, um Versandlabels zu erstellen. Nach dem Label-Druck meldet KARL die Tracking-Nummer und den Carrier aktiv an eBay zurück (Fulfillment-Bestätigung), damit der Käufer seine Sendung verfolgen kann. eBay ist dabei — wie Shopify — eigenständiger Verantwortlicher für die Daten der eBay-Plattform; Grundlage des Drittlandtransfers (USA) sind das EU-US Data Privacy Framework bzw. Standardvertragsklauseln (SCCs) sowie das bestehende Vertragsverhältnis des Händlers mit eBay. Die OAuth-Tokens des verbundenen Kontos speichert KARL AES-256-GCM-verschlüsselt (siehe Abschnitt 3); ohne gebuchtes Add-On findet keinerlei Datenaustausch mit eBay statt.
Darüber hinaus erfolgt keine Weitergabe an sonstige Dritte, keine Datenweitergabe zu Werbezwecken, kein Cross-Site-Tracking und keine Analyse durch Drittanbieter. KARL setzt keine Tracking- oder Marketing-Cookies; die eingebettete App authentifiziert sich über Shopify-Session-Token, nicht über Cookies. Ein technisch notwendiges Session-Cookie wird ausschließlich im internen Verwaltungsbereich des Anbieters gesetzt, zu dem Händler und Endkunden keinen Zugang haben.
7. Unterauftragsverarbeiter (Sub-Processors)
| Dienstleister | Zweck | Standort | DPA / AVV |
|---|---|---|---|
| IONOS SE | Application Hosting (VPS, Coolify/Docker), PostgreSQL-Datenbank, verschlüsselter Backup-Storage (Object Storage) | Berlin, Deutschland (EU) | Ja (AVV) |
| Shopify Inc. | E-Commerce-Plattform (Datenquelle der Bestellungen, Embedded-App-Hosting, Webhook-Zustellung) | Kanada / Global (Shopify ist eigenständiger Verantwortlicher für Shop-Daten) | Ja (Shopify DPA) |
| Cloudflare, Inc. | DNS-Auflösung für die Domain kyth.systems (nur DNS, kein Reverse-Proxy, keine TLS-Terminierung durch Cloudflare) | USA (Anycast, EU-Edge-Server) | Ja (Cloudflare DPA / SCCs) |
| Geoapify GmbH | Adress-Autocomplete und Geocoding für Versandlabels (aktiv seit v0.0.281) | Wien, Österreich (EU) | Ja |
| INWX GmbH & Co. KG | Versand transaktionaler KARL-System-E-Mails (Passwort-Reset, App-Uninstall-Feedback, Waitlist-Eingang). Versandbestätigungen und Retouren-Einladungen an Endkunden werden über den vom Händler konfigurierten eigenen SMTP-Server verschickt — nicht über INWX. | Berlin, Deutschland (EU) — Mail-Server smtp.webspace.bz | Ja (AVV) |
Shopify stellt Bestelldaten über die GraphQL API bereit. KARL liest diese ausschließlich lesend. Shopify ist eigenständiger Verantwortlicher für die Shop-Daten im Sinne der DSGVO.
Geoapify GmbH, Wien, Österreich — Adress-Autocomplete und Geocoding. Übermittelt werden ausschließlich eingegebene Adress-Fragmente (Straße, PLZ, Stadt, Land). Keine Weitergabe von Kundennummern, Shop-Daten oder personenbezogenen Identifikatoren. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO. Datenschutzerklärung: geoapify.com/privacy-policy
INWX GmbH & Co. KG — Transaktionaler E-Mail-Versand der KARL-eigenen
System-Mails (Passwort-Reset, App-Uninstall-Feedback, Waitlist-Eingang) seit rc.166.
Sitz Berlin, Deutschland (EU). Mail-Server smtp.webspace.bz. Übermittelt werden
Empfänger-E-Mail-Adresse, Absender-Domain, Betreff und Inhalt der E-Mail. Keine Drittland-
Übermittlung. AVV abgeschlossen. Rechtsgrundlage: Art. 6 Abs. 1 lit. b / f DSGVO.
Datenschutzerklärung: inwx.de/de/datenschutz
Hinweis: E-Mails an Endkunden des Händlers (Versandbestätigungen, Retouren- Einladungen) werden NICHT über INWX verschickt, sondern über den vom Händler in der App hinterlegten eigenen SMTP-Server — eigene Verantwortung des Händlers.
Nicht als Sub-Processor zu werten: Coolify (self-hosted auf IONOS-VPS, nur internes Deployment-Tool,
keine Weitergabe von Kundendaten), wal-g + IONOS Object Storage (verschlüsseltes Backup-Target,
Zugriff auf Klartext technisch ausgeschlossen, siehe Abschnitt 8).
Hinweis zu internen Admin-Benachrichtigungen (seit v0.0.609): Der Betreiber verwendet einen Telegram-Bot ausschließlich für interne Push-Benachrichtigungen über neue Bug-Reports und Support-Chat-Nachrichten, die im Intranet eingehen. Übertragen werden ausschließlich technische Identifikatoren (Ticket-ID, Shop-Domain-Kurzform, interner Deep-Link sowie der vom Shop-Inhaber selbst eingegebene Bug-Titel, gekürzt auf 80 Zeichen). Keine Endkunden-Daten, keine Nachrichten-Inhalte, keine E-Mail-Adressen, keine Adressdaten und keine personenbezogenen Identifikatoren von Shop-Kunden werden über diesen Kanal übertragen. Telegram fungiert hier als Telekommunikationskanal des Verantwortlichen (vergleichbar mit SMS oder Push-Benachrichtigung) und ist kein Auftragsverarbeiter im Sinne der DSGVO Art. 28. Der Empfänger der Benachrichtigung ist der Verantwortliche selbst (Selbst-Benachrichtigung). Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO.
8. Hosting, Speicherung und Sicherheit (Art. 32 DSGVO — TOMs)
8.1 Hosting und Datenbank
- Hosting: IONOS VPS, Rechenzentrum Berlin (Deutschland) — kein Drittlandtransfer. Deployment via Coolify (Docker, Multi-Stage-Build).
- Datenbank: PostgreSQL 16 (IONOS Berlin, EU). Multi-Tenant-Isolation durch
shop_idauf allen relevanten Tabellen, Foreign Key +ON DELETE CASCADE. - TLS-Terminierung: Traefik mit Let's Encrypt (ECDSA P-256, HSTS
max-age=63072000; includeSubDomains).
8.2 Verschlüsselung at rest (AES-256-GCM)
Die folgenden Felder werden in PostgreSQL verschlüsselt gespeichert. Der Schlüssel liegt als ENV-Variable am Application-Server und ist in Backups nicht enthalten:
shops.access_token_encrypted— Shopify OAuth-Tokencarrier_credentials.credential_value_encrypted— Carrier API-Keys / BYOAK-Credentialscarrier_accounts.password_encrypted— Carrier Account-Passwörterportokasse_accounts.access_token_encrypted+refresh_token_encryptedshipments.recipient_name+recipient_company— Empfänger-PIIshipments.api_request_json+api_response_json— Carrier API-Logs (enthalten Adressen)shop_settings.settings_json— Absender-PII, SMTP-Zugangsdaten, Branding-Datenlabel_archive.label_base64— Label-PDF mit Empfänger-Adresseadmin_users.email+name— verschlüsselt; zusätzlich HMAC-SHA256-Lookup-Hash für SQL-Suchereturn_portal_tokens.token+customer_email
Bewusst im Klartext (für Routing, Filter, Performance erforderlich):
shipments.recipient_zip, _city, _country, tracking_number,
carrier, service. Stammdaten wie routing_rules, surcharge_zones,
carrier_*-Tabellen enthalten keine PII.
8.3 Authentifizierung und Integrität
- Passwort-Hashing: PBKDF2-SHA256 mit 310.000 Iterationen + timing-sicherer Vergleich (
hmac.compare_digest). - Shopify-Anbindung: OAuth 2.0 + Session-Tokens (JWT HS256). Alle Shopify-Webhooks werden per HMAC-SHA256 verifiziert (Header
X-Shopify-Hmac-Sha256). - Session-Management: Shop-Isolation wird server-seitig aus dem Session-Token abgeleitet, nicht aus Client-Headern.
- Rate-Limits: In-DB-Rate-Limit (
rate_limit_log) auf kritischen Endpunkten (Login, Password-Reset, Carrier-API-Calls). - Security-Headers: Content-Security-Policy (
frame-ancestorsbeschränkt auf Shopify-Admin), X-Content-Type-Options:nosniff, Referrer-Policy:strict-origin-when-cross-origin, Permissions-Policy:camera=(), microphone=(), geolocation=(). - Scopes (Least Privilege): KARL fordert ausschließlich die für Versand erforderlichen Shopify-Scopes an (read_orders, read_products, read/write_merchant_managed_fulfillment_orders).
8.4 Backups
- Stündliches
pg_dump:pg_dump | gzip | gpg --symmetric --cipher-algo AES256→ IONOS Object Storage (Deutschland). Der GPG-Schlüssel ist nicht im Objektspeicher enthalten. - Kontinuierliches WAL-Streaming (
wal-g): client-seitigelibsodium-AES-256-Verschlüsselung +lz4-Kompression → IONOS S3. Point-in-Time Recovery im Sekundenbereich. Tägliches Base-Backup um 03:00 UTC; aufbewahrt werden die letzten 7 Basis-Backups. - Unveränderlichkeit: Der Objektspeicher für die
pg_dump-Backups ist mit Objektsperre (WORM, Modus GOVERNANCE, 30 Tage) und Versionierung konfiguriert. Ein einmal geschriebenes Backup kann in dieser Zeit weder überschrieben noch gelöscht werden — auch nicht durch einen Angreifer mit gültigen Zugangsdaten. Das ist eine Schutzmaßnahme nach Art. 32 DSGVO gegen Ransomware und Manipulation. - Die von Coolify eingebaute (nicht client-seitig verschlüsselte)
pg_dump-Backup-Funktion ist bewusst deaktiviert.
8.4.1 Backup-Löschkonzept (Art. 17 DSGVO)
Nach einem Löschersuchen (shop/redact, customers/redact oder manueller Deinstallation)
werden die Produktionsdaten sofort gelöscht. Backups werden bewusst nicht spontan nachbearbeitet
(das würde die Integrität zerstören und ist nach WP29/EDPB-Leitlinien auch nicht gefordert). Stattdessen
greift die rollierende Retention:
- Stündliche
pg_dump-Backups: spätestens nach 30 Tagen gelöscht. Diese Frist ist nicht frei wählbar — sie ist an die oben beschriebene Objektsperre gebunden, die eine frühere Löschung technisch ausschließt. Der Schutz vor Manipulation und die kürzestmögliche Aufbewahrung stehen hier in einem Zielkonflikt; wir haben ihn zugunsten der Unveränderlichkeit entschieden. Lokale Kopien auf dem Server werden bereits nach 7 Tagen entfernt. wal-g-Base-Backups: es werden die letzten 7 täglichen Basis-Backups behalten (wal-g delete retain FULL 7), ältere samt zugehöriger Transaktionsprotokolle gelöscht — in der Praxis rund 7 Tage.
Sollten innerhalb dieser Fristen Daten aus einem Backup wiederhergestellt werden müssen (Notfall-Restore), würden die betroffenen Löschersuchen im Anschluss erneut ausgeführt.
8.5 Self-Hosted Fonts, keine Tracking-Ressourcen
Alle Schriftarten (u. a. Bricolage Grotesque, Plus Jakarta Sans, IBM Plex Mono, Fraunces, Playfair — je nach Branding-Stil) sind vom KARL-Server selbst ausgeliefert (self-hosted). Dadurch entfällt jeder Transfer von Nutzer-IP-Adressen an Google Fonts, Adobe Fonts oder ein CDN. Es werden keine Tracking-Pixel, Analytics-Dienste oder Werbenetzwerke eingebunden.
Einzige externe Ressource: Im eingebetteten Shopify-Admin lädt die Oberfläche
Shopifys App-Bridge-Bibliothek (cdn.shopify.com). Sie ist von Shopify für eingebettete
Apps vorgeschrieben und dient ausschließlich der Einbettung (Navigation, Größenanpassung,
Session-Token). Dabei wird die IP-Adresse des Händler-Browsers gegenüber Shopify sichtbar — also
gegenüber der Plattform, in der der Händler ohnehin gerade angemeldet ist. Kundenseitige Seiten
(Sendungsverfolgung, Retouren-Portal) laden diese Bibliothek nicht.
9. Branding-Stile und gebrandete Render-Oberflächen
KARL bietet dem Händler vier Branding-Stile (modern, classic, minimal, boutique), die auf mehrere kundenseitige Oberflächen wirken. Der Datenumfang ändert sich dadurch nicht — lediglich Layout, Fonts und Farbgebung. Betroffene Oberflächen:
- Versanddokumente (Lieferschein, Retourenschein, Proforma-Rechnung) als PDF.
- Branded-Tracking-Seite — öffentlich über Tracking-Link zugänglich. Angezeigt werden Carrier, Tracking-Nummer, Status-Historie und als Lokalisierung nur Stadt + Land, nicht die vollständige Adresse.
- Self-Service-Retourenportal — über Einmal-Link des Händlers zugänglich. Der Endkunde sieht seine eigene Bestellung, kann Retoure-Grund wählen und ein Retouren-Label anfordern.
- Transaktionale E-Mails (Versandbestätigung, Retouren-Einladung) im Stil des Shops — versendet über den vom Händler in der App hinterlegten eigenen SMTP-Server (eigene Verantwortung des Händlers).
10. Mobile Scanner (Handy als kabelloser Barcode-Scanner)
Der Mobile Scanner erlaubt es Mitarbeitern des Händlers, im gleichen Netzwerk mit einem Handy Paket-Barcodes zu scannen und an den Desktop-Browser derselben KARL-Installation zu übertragen (SSE-Relay via PostgreSQL LISTEN/NOTIFY):
- Die Handy-Seite ist nicht öffentlich, sondern nur über einen vom Händler generierten Token-Link
erreichbar (
/mobile-scan/<token>). - Es werden ausschließlich der gescannte Barcode, Shop-Zuordnung und Zeitstempel verarbeitet — keine Kamera-Bilder, keine Empfängerdaten, keine Geräte-Identifier.
- Scan-Events werden nach spätestens 24 Stunden automatisch gelöscht (Cleanup-Job täglich 03:50 UTC).
- SSE-Tickets zur Authentifizierung der Desktop-Browser-Verbindung sind kurzlebig und werden im selben Cleanup-Job bereinigt.
- Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO — berechtigtes Interesse des Händlers an effizientem Lager-Workflow.
11a. Manuelles Adressbuch — Empfänger-Wiederverwendung
Im Bereich „Manuelles Label" können Sie nach erfolgreicher Label-Erstellung auf „Im Adressbuch speichern" klicken, um die Empfänger-Daten für spätere Sendungen wiederzuverwenden. Diese Speicherung ist rein optional und erfolgt nur durch Ihren expliziten Klick — KARL legt niemals automatisch Adressbuch-Einträge an.
- Daten: optionaler Kurzname, Vor- und Nachname, Firma, Straße + Hausnummer, Adresszusatz, Postleitzahl, Stadt, Ländercode, Telefon, E-Mail. Alle Felder bis auf Ländercode und Postleitzahl sind AES-256-GCM verschlüsselt at-rest (Art. 32 DSGVO).
- Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse — Erleichterung wiederkehrender Versand-Vorgänge an bekannte Empfänger). Sie haben jederzeit das Recht zu widersprechen und einzelne Einträge oder das gesamte Adressbuch zu löschen.
- Speicherdauer: bis Sie den jeweiligen Eintrag manuell
löschen oder Ihren Shop von KARL deinstallieren. Bei Deinstallation werden
alle Adressbuch-Einträge automatisch durch den
shop/redact- Webhook gelöscht (ON DELETE CASCADE auf dershops-Tabelle). - Customer-Redact: Wenn ein Endkunde von Shopify aus einen
Löschanspruch stellt (
customers/redact-Webhook), löscht KARL alle Adressbuch-Einträge mit übereinstimmender E-Mail-Adresse (Lookup über einen pseudonymisierten HMAC-Hash, ohne den Klartext zu kennen). - Multi-Tenant-Isolation: Jeder Adressbuch-Eintrag ist
strikt einem einzelnen Shop zugeordnet (
shop_id-Filter in jeder Query). Kein Cross-Shop-Zugriff möglich. - Audit-Log: Anlage und Löschung jedes Eintrags werden im Verzeichnis von Verarbeitungstätigkeiten (Art. 30 DSGVO) protokolliert.
11. Newsletter (Marketing-Mails)
Auf www.kyth.systems können sich Interessenten freiwillig für unseren Newsletter (Produkt-Updates, Versand-Tipps, Branchen-News) anmelden:
- Daten: ausschließlich die E-Mail-Adresse plus IP zum Zeitpunkt der Anmeldung und Bestätigung (auf
/24pseudonymisiert). - Doppel-Opt-In-Verfahren: nach der Anmeldung verschicken wir eine Bestätigungs-Mail. Erst nach Klick auf den darin enthaltenen Link wird die Adresse in den Verteiler aufgenommen. Ohne Bestätigung wird der Datensatz nach automatischer Aufräum-Frist gelöscht.
- Rechtsgrundlage: Art. 6 Abs. 1 lit. a DSGVO (Einwilligung) i. V. m. § 7 Abs. 2 UWG.
- Versand: über den E-Mail-Dienstleister INWX (Berlin, EU) — siehe Sub-Processor-Liste. KARL verwendet kein Open-/Click-Tracking-Pixel.
- Speicherdauer: bis zum Widerruf. Jede Newsletter-Mail enthält einen One-Click-Abmelde-Link. Bei Widerruf wird die Adresse sofort und vollständig aus der Datenbank gelöscht — keine Suppression-List, keine Audit-Aufbewahrung.
- Empfänger: keine Weitergabe an Dritte für Werbezwecke. Newsletter werden ausschließlich von der KYTH. Systems UG versendet.
12. Browser-Speicherung
KARL speichert im Browser nur betriebsnotwendige Daten und keine Tracking-/Marketing-Profile:
- sessionStorage: Admin-Sitzungs-Kennung (Shop-interne Admin-ID + Rolle, kein Name/keine E-Mail), die Shopify-Admin-Domain und die eigene Shop-Domain des Händlers (für die Navigation im eingebetteten App-Frame und die Fehler-Wiederherstellung), ein technischer Zähler gegen Endlos-Neuladen bei Anzeigefehlern sowie ein temporärer Aktivitäts-Verlauf der letzten bis zu zehn Label-Erstellungen (Bestell- und Tracking-Nummer, Carrier, Status — ohne Empfänger-Adresse und ohne Label-PDF). Diese Einträge werden beim Schließen des Tabs automatisch gelöscht. localStorage nur für UI-Präferenzen (z. B. zuletzt gesehene Changelog-Hinweise, Tabellen-Filter, Spalten-Sets).
- Formular-Entwurf „Manuelles Label" (tab-lokal): Während der Eingabe eines manuellen Labels (oder nach dem Scan eines Adress-QR-Codes in Scan & Ship) hält KARL den aktuellen Formularstand — einschließlich der eingegebenen Empfängeradresse, Telefon und E-Mail — im sessionStorage des Tabs vor. Zweck: Eingaben überleben einen versehentlichen Seiten-Reload und gehen bei Fehlern nicht verloren (Art. 6 Abs. 1 lit. f DSGVO). Der Entwurf bleibt ausschließlich im Browser des Arbeitsplatzes, wird nach erfolgreicher Label-Erstellung sofort und beim Schließen des Tabs automatisch gelöscht und verlässt das Gerät nicht.
- Keine Tracking-/Marketing-Cookies: Die App selbst setzt keine Tracking- oder Marketing-Cookies. Das interne Admin-/Intranet-Portal verwendet ein technisch notwendiges, HMAC-signiertes Session-Cookie (einwilligungsfrei nach § 25 Abs. 2 Nr. 2 TTDSG).
- Keine Tracker: Kein Google Analytics, kein Facebook Pixel, keine sonstigen Tracking-Skripte.
- Print-Token: Der Token für den lokalen Print-Service liegt ausschließlich in PostgreSQL, nicht im Browser-Storage.
Die Authentifizierung gegenüber Shopify erfolgt ausschließlich über Shopify Session-Tokens (kurzlebige JWTs, nicht persistent im Browser gespeichert).
13. Speicherdauer und automatische Löschung
| Datenkategorie | Aufbewahrung | Löschmechanismus |
|---|---|---|
| Versandprotokolle (shipments) | 90 Tage | Cleanup-Job |
| Tracking-Events | 90 Tage | Cleanup-Job |
| Zolldaten – Empfänger-PII (order_customs_data) | 90 Tage (MRN, ABD-PDF, Empfänger-Korrekturen auf NULL; HS-Codes bleiben) | Cleanup-Job |
| Pick-Listen (pick_lists) | 90 Tage | Cleanup-Job |
| Abholungen (pickups) | 90 Tage | Cleanup-Job |
| Retouren | 90 Tage | Cleanup-Job |
| Label-PDFs (label_archive) | Standard 30 Tage; vom Händler konfigurierbar 14–180 Tage | Cleanup-Job (wendet die Shop-Einstellung an) |
| Manuelle Label-Entwürfe (manual_label_drafts) | Bis Löschung durch den Händler bzw. nach Label-Erstellung; max. 20 pro Shop | Auto-Delete nach Label / manuell / shop/redact |
| Druckwarteschlange (print_queue) | 24 Stunden (gedruckt/fehlgeschlagen) bzw. 7 Tage (noch nicht gedruckt) | Cleanup-Job |
| Tarif-Vergleiche (rate_comparisons) | 90 Tage | Cleanup-Job |
| E-Mail-Versandhistorie (notifications) | 180 Tage | Cleanup-Job |
| Support-Chat-Nachrichten (support_messages) | 180 Tage | Cleanup-Job |
| Audit-Log (DSGVO-Aktionen) | 365 Tage | Cleanup-Job |
| eBay Käufer-/Bestell-Zuordnung (ebay_order_buyers, nur mit Add-On „eBay Connector") | 180 Tage | Cleanup-Job |
| eBay-Tracking-Nachmeldungen (ebay_pushback_queue, nur mit Add-On) | 30 Tage nach Abschluss | Cleanup-Job |
| Wiederholversuche für Versandbestätigungen (email_retry_queue) | Empfängerdaten werden bei Erfolg bzw. Aufgabe sofort gelöscht; die Statuszeile nach 30 Tagen | Cleanup-Job |
| Fehlermeldungen des Händlers inkl. beigefügter Screenshots (intranet_bug_reports) | Screenshots 90 Tage, Meldung im Übrigen 365 Tage | Cleanup-Job |
| Mobile-Scan-Events | 24 Stunden | Cleanup-Job 03:50 UTC |
| Mobile-Scan-SSE-Tickets | Bis Ablauf, max. 1 Tag | Cleanup-Job 03:50 UTC |
| OAuth-Nonces | Unmittelbar nach Callback (wenige Minuten) | Cleanup + Expiry |
| Shop-Daten, Credentials, Settings | Bis Deinstallation | shop/redact-Webhook (bzw. 7-Tage-Fallback) |
| Endkunden-PII (auf Anfrage) | Sofort | customers/redact-Webhook |
| Alle Daten (auf Anfrage) | Sofort | E-Mail an datenschutz@kyth.systems |
14. Ihre Rechte nach DSGVO
Als betroffene Person haben Sie folgende Rechte:
- Auskunft (Art. 15): Export aller gespeicherten Daten — automatisiert über Shopify GDPR-Webhook oder per E-Mail. Export-Format: JSON (maschinenlesbar).
- Berichtigung (Art. 16): Korrektur unrichtiger Daten
- Löschung (Art. 17): Vollständige Löschung aller personenbezogenen Daten — auch vor Ablauf der Aufbewahrungsfrist
- Einschränkung (Art. 18): Einschränkung der Verarbeitung
- Datenübertragbarkeit (Art. 20): Export in maschinenlesbarem Format (JSON)
- Widerspruch (Art. 21): Widerspruch gegen Verarbeitung auf Basis berechtigter Interessen
- Beschwerde (Art. 77): Beschwerderecht bei der zuständigen Datenschutz-Aufsichtsbehörde
Kontakt: datenschutz@kyth.systems
Zuständige Aufsichtsbehörde: Bayerisches Landesamt für Datenschutzaufsicht (BayLDA), Promenade 18, 91522 Ansbach, www.lda.bayern.de
15. Shopify GDPR Compliance
KARL implementiert alle 3 Pflicht-Webhooks gemäß Shopify App Store Anforderungen. Alle Webhooks werden per HMAC-SHA256 verifiziert:
customers/data_request(Art. 15): Exportiert alle gespeicherten Daten eines Kunden als JSON — unter anderem ausshipments,returns,notifications,tracking_events,label_archive.customers/redact(Art. 17): Anonymisiert sämtliche PII-Felder des betroffenen Kunden (Name, Adresse, E-Mail, API-Logs, Label-PDFs, Tracking-Event-Location + Roh-JSON) in allen relevanten Tabellen.shop/redact(Deinstallation): Löscht alle Shop-Daten vollständig — inklusive Admin-Users, Credentials, Carrier-Accounts, Settings, Shipments, Labels, Retouren, Retouren-Portal-Tokens, Pick-Listen, Tracking-Events, Mobile-Scan-Events, Routing-Modi sowie aller weiteren shop-gebundenen Tabellen.
Fallback bei ausbleibendem Shopify-Webhook: Falls nach einer Deinstallation kein
shop/redact-Webhook innerhalb von 7 Tagen eintrifft, werden die Shop-Daten durch einen internen
Cleanup-Prozess automatisch gelöscht.
16. Multi-Tenant-Isolation
Jeder Shopify-Shop hat in KARL eine eigene, strikt isolierte Datenpartition. Alle Datenbank-Tabellen mit
PII sind über shop_id mit Foreign-Key-Constraint auf die shops-Tabelle gebunden
(ON DELETE CASCADE). Ein Shop kann technisch ausschließlich auf seine eigenen Daten zugreifen
— die Isolation wird server-seitig aus dem authentifizierten Shopify Session-Token abgeleitet und auf
jedem API-Call neu verifiziert.
17. Änderungen dieser Erklärung
Wir behalten uns vor, diese Datenschutzerklärung bei Bedarf anzupassen — beispielsweise bei Änderungen der App-Funktionalität oder der Rechtslage. Die aktuelle Version ist immer unter /privacy abrufbar. Wesentliche Änderungen werden dem Händler mit angemessener Vorlaufzeit über die App-Oberfläche oder per E-Mail angekündigt.