# SaferPage API-Zugriff

Betreiber-Zugriffsmodell für SaferPage-APIs und Exporte mit Rollen, Scopes, Zugriffsstufen, Key-Rotation, Rate-Limits, Audit-Logs und sicherem Secret-Umgang.

> Dieses Paket beschreibt Zugriffsstufen und Sicherheitsanforderungen. Es erzeugt keine echten API-Keys und zeigt keine Secrets.

## Zugriffsstufen
- **Public Read**: keine, Scopes reports.public:read, schemas:read, badges.public:read
- **Operator Read**: API-Key oder OIDC, Scopes reports:read, portfolio:read, evidence:read, exports:read
- **Operator Workflow**: API-Key mit HMAC oder OIDC, Scopes nachweise:write, dispatch:write, integrations:dry_run
- **Admin Setup**: OIDC + Admin-Rolle, Scopes keys:rotate, integrations:manage, portfolio:manage

## Kontrollpunkte
- [ ] API-Keys nur gehasht speichern (planned): Nur Key-Prefix und Hash im Admin-Kontext; kein Klartext im Export.
- [ ] Scopes serverseitig erzwingen (planned): Jeder Endpoint mappt auf mindestens einen Scope.
- [ ] Rotation und Ablaufdatum (planned): Maximale Key-Laufzeit 90 Tage, Notfall-Sperrung sofort.
- [ ] Access Audit Log (planned): Key-Prefix, Scope, Endpoint, Statuscode, Zeitstempel und Request-ID protokollieren.
- [ ] Rate-Limit je Key und Scope (planned): Lesen, Schreiben und Admin getrennt limitieren.

## Developer Launch Kit
Developer-Experience für API-first Betreiber: Quickstarts, OpenAPI/Postman-Vertrag, SDK-Pfade, Sandbox, Webhook-Abnahme und Supportgrenzen sind öffentlich einordbar; echte Keys und Zielsysteme bleiben Go-live-Gates.
- **curl Public Probe** (curl): reports.public:read, kein Key für Public-Read-Beispiel
- **Node Operator Read** (Node.js): reports:read, Bearer-Key nur aus Server-Environment laden
- **PHP Export Client** (PHP): exports:read, Key nie in Querystring, Logs oder HTML ausgeben
- **Python HMAC Write Fixture** (Python): nachweise:write, HMAC-Secret nur serverseitig, negative Tests vor Live

### Postman/Smoke Collection
- URL: https://saferpage.de/api-zugriff/postman-json
- Requests: 8
- Grenze: No-Secret-Postman Collection als Dry-run-/Smoke-Vertrag mit Placeholdern. Sie enthält keine echten Keys, keine privaten Ziel-URLs, keine Empfänger und keine Servicezusage.

### Nicht live behaupten
- Keine produktive API-Key-Ausgabe ohne Key-Store, Pepper, Domain-Claim, Runtime-Gates und Betreiber-Signoff.
- Keine Write-/Webhook-Live-Zusage ohne HMAC-Secret, Idempotency, Receiver-Abnahme und Zielsystemfreigabe.
- Keine Service-, SDK- oder Sandbox-Garantie als öffentliches Angebot ohne freigegebenen Plan.
- Keine Roh-Keys, Hashes, DSN, Webhook-Ziel-URLs, Empfänger oder private Betreiberidentitäten in Public-Exports.
