Ga naar inhoud

Data model — wat we wel/niet bewaren

openai_users

Per pull-cycle vervangen we de hele snapshot van een org.

VeldBronHashed?
openai_user_iduser_... (OpenAI ID)nee
email_hashSHA256(lowercase email)
email_prefixEerste 4 chars vóór @ + ’…‘partial
role”owner” / “reader”nee
added_atUnix → TIMESTAMPTZnee

openai_projects

VeldBronHashed?
openai_project_idproj_...nee
nameOperator-supplied labelnee
status”active” / “archived”nee
created_at_openaiUnix → TIMESTAMPTZnee
archived_atUnix → TIMESTAMPTZnee

openai_api_keys

VeldBronHashed?
openai_key_idkey_...nee
nameOperator labelnee
type”user” / “service_account”nee
redacted_valuesk-...xxxx (laatste 4 chars)partial
owner_user_idVoor user-keys: user_...nee
created_at_openaiUnix → TIMESTAMPTZnee
last_used_atUnix → TIMESTAMPTZ of NULLnee

openai_events

Append-only. Idempotent op (connection_id, openai_event_id).

VeldBronHashed?
openai_event_idOpenAI’s id (audit_log_…)nee
event_typeOpenAI’s type fieldnee
actor_email_hashSHA256(lowercase actor.session.user.email)
actor_email_prefixEerste 4 chars + ’…‘partial
target_idproject.id (als event over project gaat)nee
occurred_atOpenAI’s effective_at (Unix)nee
payload_jsonRest van de payload, PII-velden gedroptpartial

Gefilterde payload-velden

Volgende keys worden uit de raw payload gedropt voor opslag (isOpenAIPIIField in openai_worker.go):

  • actor, user, email, actor_email, session — al opgeslagen als hash
  • name, full_name — display-namen

Wat we NIET hebben

  • Volledige e-mailadressen — gedropt bij ingest
  • De volledige API-key value — alleen sk-...4-char-redacted (de echte value heeft alleen OpenAI; wij krijgen die NIET via de API)
  • Wat een API-key heeft aangeroepenlast_used_at is het enige usage signal; OpenAI exposeert geen per-key request log
  • Prompt/completion content — niet in admin API
  • ChatGPT browser-conversaties — vereist Compliance API (Q4 2026)

Hoe een hash terugvinden naar een persoon

Het email_prefix veld toont jan… voor jan.peeters@company.be. Match dit prefix met je HR-systeem of LDAP/Azure AD om te weten wie het is. Wij hebben de mapping niet en willen die niet hebben.