Sikkerhed og compliance
Dataflow i AI Platform
Dokumentet følger data gennem AI Platform flow for flow: hvad der sendes, hvornår det sendes, hvem der modtager det, og hvad der bliver liggende bagefter. Det er skrevet til DPO'er, sikkerhedsfunktioner og indkøbere, der skal kunne svare på, hvor en optagelse eller en tekst konkret ender.
| Dokumenttitel | Dataflow i AI Platform |
|---|---|
| Version | 1.0 |
| Senest opdateret | 7. oktober 2026 |
| Dokumentejer | syv.ai ApS (mads@syv.ai) |
| Reviewfrekvens | Mindst årligt og ved væsentlige ændringer i platformen, databehandlingen eller risikobilledet |
| Hosting | Hele platformen hos Hetzner Online GmbH, datacenter i Nürnberg, Tyskland (eu-central) |
| Tilhørende dokumenter | Databehandleraftale |
1. Sådan læser du dette dokument
Beskrivelserne er udledt af den kørende kode, ikke af en produktbeskrivelse. Hvor et forhold ikke kan afgøres af koden, fx kryptering af diske eller backup, står det som et driftsmæssigt forhold, der dokumenteres særskilt (afsnit 12).
Hele platformen kører hos Hetzner Online GmbH i Nürnberg, Tyskland: webapplikationen, databasen og de GPU-servere, hvor syv.ai's egne modeller afvikles. Der er ingen ekstern AI-udbyder. De eneste parter uden for Hetzner, der modtager personoplysninger, er Lettermint (login-e-mails) og Stripe (betaling), og ingen af dem modtager lyd eller tekst.
Overblik
2. Sammenfatning: hvad forlader webapplikationen, og til hvem
Tabellen er den korte version af hele dokumentet.
| Modtager | Hvad modtager den | Udløses af | Gemmes indholdet hos modtageren? | Afsnit |
|---|---|---|---|---|
| GPU-server (Hetzner): tale-til-tekst | Taleudsnit af lyden som 16 kHz WAV samt model og sprog. Ikke filnavn, ikke brugerens identitet | Hver transskription | Nej, behandles i hukommelsen | 5 |
| GPU-server (Hetzner): talermarkering | Hele lyden som mono-WAV | Transskription af mono-lyd med talermarkering | Nej, behandles i hukommelsen | 5 |
| GPU-server (Hetzner): tekst-til-tale | Teksten og den valgte stemme; ved stemmekloning også referenceoptagelsen og dens filnavn | Hver talesyntese | Nej. En referenceoptagelse skrives til en midlertidig fil, der slettes efter syntesen | 6 |
| GPU-server (Hetzner): anonymisering | Teksten | Hver anonymisering | Nej, behandles i hukommelsen | 7 |
| Claes-server (Hetzner) | Teksten og spørgsmålene med svarmuligheder | Hvert Claes-kald | Tjenesten er ikke bygget til at gemme input (drives af syv.ai) | 7 |
| Lettermint | E-mailadresse og e-mail med engangslink | Loginforespørgsel | Leveringslog | 4 |
| Stripe | E-mailadresse, platformens bruger-id, beløb. Kortdata indtastes direkte hos Stripe | Køb af credits | Ja, efter Stripes vilkår og bogføringsregler | 8 |
| Brugerens egen browser | De seneste op til 50 transskriptioner med filnavn | Transskription i webgrænsefladen | Ja, på brugerens enhed, indtil brugeren sletter dem | 5 |
3. Hvor ligger data, når de ikke forlader platformen
Al varig lagring sker i webapplikationens database på en server hos Hetzner. Der bruges ingen objektlagring eller database hos tredjepart. Databasen indeholder ikke lyd, tekst eller filnavne.
| Datakategori | Tabel | Indhold |
|---|---|---|
| Brugerkonti | users | E-mailadresse, oprettelsestidspunkt, credit-saldo, Stripe-kunde- og betalingsmiddel-id samt indstillinger for automatisk optankning |
| API-nøgler | api_keys | Navn, SHA-256-hash og kort præfiks af nøglen, oprettet, senest brugt og eventuelt tilbagekaldt |
| Login | magic_tokens, sessions | Hashværdi af engangslink eller sessionsnøgle, udløb og tidspunkter |
| Forbrug | usage_records | Mængde (lydsekunder, tegn eller spørgsmål), model, sprog og tidspunkt. Filnavnsfeltet udfyldes aldrig |
| Credit-bevægelser | credit_ledger | Beløb i credits, type (forbrug, refusion, tilskud, optankning), model, mængde, API-nøgle og ved køb Stripes betalings-id |
Transport. Trafik fra browser og API-klienter til platformen går over HTTPS.
Administrativ adgang. Administratorvisningen i applikationen viser alle brugeres e-mail, saldo og forbrug pr. produkt, men ikke indhold. Den er begrænset til konfigurerede administratorer hos syv.ai ApS.
4. Registrering og login
Oprettelse er åben: en hvilken som helst e-mailadresse kan bede om et login-link, og findes der ingen bruger i forvejen, oprettes kontoen. Platformen begrænser ikke selv, hvem der kan oprette en konto på en virksomheds domæne.
- Brugeren indtaster sin e-mailadresse. Der dannes et engangslink, som er gyldigt i 15 minutter; kun dets hashværdi gemmes
- Linket sendes via Lettermint. Højst 6 links pr. adresse og 30 forespørgsler pr. IP-adresse i timen
- Linket åbner en bekræftelsesside, og først når brugeren bekræfter, forbruges linket og der udstedes en session. Det forhindrer, at e-mailsystemers linkscannere bruger linket
- Sessionen er en tilfældig nøgle i en HttpOnly-cookie, gyldig i højst 30 dage. Log ud sletter den på serveren
- Der er ingen adgangskoder, ingen to-faktor-login og ingen SSO
| Modtager | Data | Bemærkning |
|---|---|---|
| Lettermint | Modtagerens e-mailadresse, afsender, emne og e-mailens indhold med engangslinket | Den eneste e-mail, platformen sender. Indeholder aldrig lyd eller tekst fra brugeren |
5. Tale-til-tekst
Det vigtigste flow. Gælder både webgrænsefladen og det OpenAI-kompatible API.
- Upload. Lydfilen modtages over HTTPS og skrives til en midlertidig fil på webapplikationens server. Kun filtypen bevares; filnavnet gemmes ikke. Maksimalt 1 GB og 4 timer
- Måling og afregning. Varigheden måles, og prisen reserveres i credits. Der skrives en forbrugsrække med mængde, model og sprog
- Stemmeaktivitet. Lyden analyseres lokalt på serveren, og kun udsnit med tale sendes videre. Stilhed og musik når aldrig modellen
- Transskription. Hvert taleudsnit sendes som en kort WAV-fil til syv.ai's transskriptionsmodeller på GPU-serveren hos Hetzner. Udsnittene skrives kortvarigt til midlertidige filer og slettes, når svaret er modtaget
- Talermarkering. En stereooptagelse med én taler pr. kanal opdeles lokalt pr. kanal. En mono-optagelse sendes i sin helhed til talermarkeringsmodellen på GPU-serveren, som svarer med tidspunkter for, hvornår hvilken taler taler
- Efterbehandling. Tegnsætning, store bogstaver og retning af navne ud fra en ordliste sker lokalt på webapplikationens server. Tegnsætningsmodellen er hentet én gang og sender intet videre
- Svar og oprydning. Transskriptionen returneres til brugeren, og den midlertidige fil slettes, også hvis behandlingen fejler. Giver lyden ingen tale, eller fejler behandlingen, refunderes forbruget
| Modtager | Data | Bemærkning |
|---|---|---|
| GPU-server (Hetzner) | Taleudsnit som 16 kHz mono-WAV, model, sprog og afkodningsparametre | Ikke filnavn og ikke brugerens identitet. Behandles i hukommelsen |
| GPU-server (Hetzner), talermarkering | Hele lyden som 16 kHz mono-WAV | Kun mono-lyd med talermarkering slået til |
6. Tekst-til-tale og stemmekloning
- Brugeren sender en tekst på højst 5.000 tegn og vælger en indbygget stemme
- Ved stemmekloning medsender brugeren en referenceoptagelse af en stemme. Webapplikationen holder den i hukommelsen og sender den videre til talesyntesemodellen på GPU-serveren
- Modellen skriver referencen til en midlertidig fil, afkorter den til højst 15 sekunder, danner talen og sletter filen
- Den syntetiserede tale returneres som lydfil og gemmes ikke. Der registreres kun antallet af tegn til afregning
En referenceoptagelse er en optagelse af en bestemt persons stemme. Den dataansvarlige skal sikre, at der er grundlag for at bruge den, jf. databehandleraftalens bilag D.2.
7. Anonymisering og Claes
Anonymisering. Teksten (højst 50.000 tegn) sendes til anonymiseringsmodellen, der kører på GPU-serverens processor hos Hetzner. Svaret indeholder den maskerede tekst og en liste over de fundne personoplysninger med deres oprindelige ordlyd, så brugeren kan kontrollere resultatet. Intet gemmes; der registreres kun antallet af tegn.
Claes. Teksten og brugerens spørgsmål med svarmuligheder sendes til Claes, som kører som en selvstændig tjeneste hos Hetzner, drevet af syv.ai. Claes vælger blandt de svarmuligheder, brugeren selv har angivet, og returnerer sandsynligheder. Der registreres kun antallet af spørgsmål. Claes træffer ikke afgørelser; anvendes svarene i sager om fysiske personer, er den faglige kontrol den dataansvarliges.
8. Betaling
- Alle brugere får et månedligt gratis tilskud af credits. Betaling er kun relevant, når en bruger køber flere credits
- Ved første køb oprettes en kunde hos Stripe med brugerens e-mailadresse og platformens bruger-id
- Kortoplysninger indtastes i Stripes eget betalingsfelt, som indlæses fra Stripe på betalingssiden. Kortnummer, udløbsdato og kontrolcifre passerer aldrig platformens servere
- Platformen gemmer Stripes kunde- og betalingsmiddel-id, så brugeren kan slå automatisk optankning til
- Fakturaer og kvitteringer hentes direkte fra Stripe, når brugeren åbner betalingssiden, og gemmes ikke
| Modtager | Data | Bemærkning |
|---|---|---|
| Stripe | E-mailadresse, bruger-id, beløb, valuta og købets formål; kortdata direkte fra brugerens browser | Ingen lyd og ingen tekst. Mulig videreoverførsel til USA inden for Stripe-koncernen |
9. Logning og overvågning
- Applikationen logger driftshændelser: bruger-id'er, varighed og antal segmenter for en transskription, tekniske fejlmeddelelser og modtageradressen på afsendte login-e-mails
- Webserverens adgangslog indeholder IP-adresse, tidspunkt og den forespurgte adresse
- Lyd, transskriptioner og tekst fra brugerne logges ikke, hverken i applikationen eller på GPU-serverne
- Der bruges ingen analyseværktøjer, sporingscookies eller observability-tjenester fra tredjepart
10. Sletning og livscyklus
| Datatype | Automatisk | På anmodning eller af brugeren | Hvad bliver tilbage |
|---|---|---|---|
| Lyd og tekst sendt til behandling | Slettes, når forespørgslen er afsluttet | Ikke relevant | Intet |
| Lokal transskriptionshistorik | Nej, de ældste fjernes, når der er over 50 | Brugeren sletter enkelte eller alle i webgrænsefladen | Intet, når den er ryddet |
| API-nøgler | Nej | Brugeren tilbagekalder en nøgle med øjeblikkelig virkning | Hashværdi og navn, så forbrug fortsat kan henføres |
| Konto, forbrug og credit-bevægelser | Nej | Slettes af syv.ai ApS efter skriftlig anmodning, senest 30 dage. Sletning af kontoen fjerner alle tilhørende rækker i databasen | Kundeoplysninger og transaktioner hos Stripe; leveringslog hos Lettermint; driftslogs til de udløber |
| Engangslinks og sessioner | Udløber efter 15 minutter hhv. højst 30 dage | Log ud sletter sessionen | Udløbne poster med hashværdier, til kontoen slettes |
Fuld sletning af en konto er ikke selvbetjening i dag. Skriv til mads@syv.ai, så sletter vi og bekræfter skriftligt.
11. Hvad kunden selv kan gøre
- Beslut, hvilke optagelser og tekster der må behandles, og instruér brugerne, særligt om følsomme oplysninger
- Brug API'et frem for webgrænsefladen, hvis transskriptioner ikke må ligge i browseren på brugerens enhed, eller bed brugerne rydde historikken på delte computere
- Indhent samtykke fra den person, hvis stemme bruges til stemmekloning
- Lav en intern regel for, hvem der må oprette en konto på jeres e-maildomæne, og meld fratrådte medarbejdere til sletning
- Giv hver integration sin egen API-nøgle, så den kan tilbagekaldes alene, og forbruget kan følges pr. nøgle
- Kompensér for manglende to-faktor-login, fx med enhedskryptering og skærmlås på de maskiner, der bruges
12. Forhold, der dokumenteres særskilt
Følgende kan ikke afgøres af platformens kode. De dokumenteres over for den dataansvarlige ved kontraktindgåelse eller på anmodning.
| Forhold | Status |
|---|---|
| Kryptering af diske og database i hvile | Hosting-niveau; ikke konfigureret i applikationen |
| Backup: frekvens, opbevaring, placering og gendannelsestest | Hosting-niveau; ikke defineret i platformen |
| Opbevaringstid for driftslogs | Følger driftsplatformens standard |
| Underdatabehandleraftaler med Hetzner, Lettermint og Stripe | Indgået på leverandørernes standardvilkår; kopi på anmodning |
13. Revisionshistorik
| Version | Dato | Ændring | Ansvarlig |
|---|---|---|---|
| 1.0 | 7. oktober 2026 | Første udgave. Flowene er udledt af den kørende kode: login, tale-til-tekst, talermarkering, tekst-til-tale, anonymisering, Claes, betaling, logning og sletning | syv.ai ApS |
Kontakt
Spørgsmål til dokumentet, anmodning om supplerende dokumentation eller kopi af indgåede underdatabehandleraftaler rettes til:
syv.ai ApS
Rosenvængets Allé 11, 1. sal
2100 København Ø
CVR-nr. 44671247
E-mail: mads@syv.ai