---
name: Supabase Legacy-Key-Cutover (sb_publishable_/sb_secret_)
description: Supabase hat Ende 2025 die JWT-basierten ANON_KEY und SERVICE_ROLE_KEY deprecated — neue Keys sind sb_publishable_ und sb_secret_. Bei Auth-Fehler "Legacy API keys are disabled" Env-Migration nötig
type: reference
originSessionId: 08a27d91-b2ef-411c-9b56-62842a3c506c
---
Supabase Legacy-API-Keys (JWT-basierter `eyJ…` ANON_KEY und SERVICE_ROLE_KEY) sind seit Ende 2025 deprecated. Wenn ein Projekt Legacy disabled hat, schlagen Auth-Calls mit alten Keys fehl mit Fehlermeldung **"Legacy API keys are disabled"** (sichtbar als rote Box auf Login-Form).

**Neue Naming-Convention:**
- `sb_publishable_<random>` = client-side, ersetzt `NEXT_PUBLIC_SUPABASE_ANON_KEY`. In Next.js: `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY`
- `sb_secret_<random>` = server-side, ersetzt `SUPABASE_SERVICE_ROLE_KEY`. In Code: `SUPABASE_SECRET_KEY`

**Wo Keys checken (Supabase Dashboard):**
Settings → API Keys → "Publishable" + "Secret" Tabs. Old "Legacy API Keys" Tab zeigt JWT-Variants mit "Disable" Toggle.

**Migration-Pfad (z.B. für Vercel-deployed Next.js App):**
1. Supabase Dashboard → API Keys → Publishable + Secret kopieren
2. Vercel Project Settings → Environment Variables für ALLE Scopes (Production, Preview, Development):
   - Add `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` = sb_publishable_…
   - Add `SUPABASE_SECRET_KEY` = sb_secret_…
3. App-Code prüfen: `lib/supabase/client.ts` etc. müssen `PUBLISHABLE_KEY` lesen statt `ANON_KEY`
4. Redeploy
5. Dann erst Legacy-Keys disablen, sonst broken
6. Optional: Old Env-Vars `NEXT_PUBLIC_SUPABASE_ANON_KEY` + `SUPABASE_SERVICE_ROLE_KEY` aus Vercel entfernen

**Eigene Project-Status (Stand 11.05.2026):**
- `/root/aria/.env` Server-side: `KADI_V2_SUPABASE_PUBLISHABLE` + `KADI_V2_SUPABASE_SECRET` ✓ rotiert
- Kadi-v2 Vercel-Env-Vars: NICHT migriert → KAR-60 (Login broken)
- Aria-eigenes Supabase (qiamvqfaszbgohczjsuz): `SUPABASE_SERVICE_ROLE_KEY` ist `sb_secret_…` ✓
