Zum Hauptinhalt springen

Admin API

Plattform-Administration. Alle Endpunkte erfordern die Rolle Platform Admin.

GET /api/v1/admin/tenants

Alle Tenants mit Statistiken auflisten.

Query-Parameter:

ParameterTypDefaultBeschreibung
searchstringSuche nach Tenant-Name
planstringFilter: trial / starter / pro / cancelled
statusstringactiveactive / suspended / all
limitnumber50Pagination (max 100)
offsetnumber0Offset

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:

  1. Stripe-Subscription kündigen
  2. Admin-Aktion loggen (mit Tenant-Snapshot)
  3. 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:

ParameterTypBeschreibung
tenant_idUUIDFilter nach Tenant
actionstringFilter nach Aktionstyp
limitnumberPagination
offsetnumberOffset

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
}