Admin API
Plattform-Administration. Alle Endpunkte erfordern die Rolle Platform Admin.
GET /api/v1/admin/tenants
Alle Tenants mit Statistiken auflisten.
Query-Parameter:
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
search | string | — | Suche nach Tenant-Name |
plan | string | — | Filter: trial / starter / pro / cancelled |
status | string | active | active / suspended / all |
limit | number | 50 | Pagination (max 100) |
offset | number | 0 | Offset |
Response (200):
{
"data": [
{
"id": "uuid",
"name": "Meine Rösterei",
"plan": "pro",
"trial_ends_at": "2026-03-24T00:00:00Z",
"user_count": 3,
"last_active": "2026-03-10T14:30:00Z"
}
],
"total": 42,
"limit": 50,
"offset": 0
}
GET /api/v1/admin/tenants/{id}
Tenant-Detail mit Users, Usage und Audit-Log.
Response (200):
{
"tenant": { ... },
"users": [...],
"usage": [...],
"auditLog": [...]
}
DELETE /api/v1/admin/tenants/{id}
Tenant permanent löschen (CASCADE).
Logik:
- Stripe-Subscription kündigen
- Admin-Aktion loggen (mit Tenant-Snapshot)
- CASCADE Delete aller Tenant-Daten
PATCH /api/v1/admin/tenants/{id}/plan
Tenant-Plan überschreiben.
Request:
{ "plan": "pro" }
Response (200):
{ "success": true, "oldPlan": "trial", "newPlan": "pro" }
POST /api/v1/admin/tenants/{id}/suspend
Tenant suspendieren.
Request:
{ "reason": "Zahlungsrückstand seit 30 Tagen" }
DELETE /api/v1/admin/tenants/{id}/suspend
Tenant-Suspendierung aufheben.
GET /api/v1/admin/audit-log
Plattform-Audit-Log (paginiert, filterbar).
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
tenant_id | UUID | Filter nach Tenant |
action | string | Filter nach Aktionstyp |
limit | number | Pagination |
offset | number | Offset |
GET /api/v1/admin/metrics
Plattform-KPIs.
Response (200):
{
"mrr": 1580.00,
"totalTenants": 42,
"activeTenants": 38,
"suspendedCount": 1,
"trialCount": 8,
"activeSubscriptions": 30,
"conversionRate": 78.5,
"newThisMonth": 5,
"churnedThisMonth": 1
}