v2.0 · production ready

🌸 Onimai API
Public Endpoints · groupler.onimai.eu

Lies das Verzeichnis, registriere User, reiche Gruppen ein — alles via klassisches REST über https://groupler.onimai.eu/api/*. Session-basiert mit Cookie + CSRF, JSON in/out.

Auth

GET /api/auth/me public
Aktueller Login-Status. Liefert User-Objekt wenn eingeloggt, sonst loggedIn:false. Setzt CSRF-Token im Response.
# Response (loggedIn):
{
  "loggedIn": true,
  "user": {
    "id": 12,
    "username": "senpai",
    "email": "senpai@onimai.eu",
    "role": "user",
    "isVerified": true
  },
  "csrfToken": "…"
}
POST /api/auth/register CSRF
Neuen Account anlegen. Username 3–50 Zeichen, Passwort mind. 8.
# Body:
{ "username": "…", "email": "…", "password": "…" }
POST /api/auth/login CSRF
Login mit Username oder E-Mail + Passwort.
# Body:
{ "usernameOrEmail": "senpai", "password": "…" }
POST /api/auth/logout CSRF
Session beenden. Keine Body-Parameter.

Groups

GET /api/groups public
Alle verifizierten Gruppen im Verzeichnis. Sortiert nach created_at DESC.
# Query (optional):
?platform=WhatsApp
?category=Gaming
?search=onimai
POST /api/groups Login + CSRF
Neue Gruppe einreichen. Multipart-Form mit optionalem Logo (max 2 MB).
# Felder:
title, platform, category, inviteLink,
description, tags?, logo?, externalImageUrl?
POST /api/groups/:id/like Login + CSRF
Like-Counter für eine Gruppe um +1 erhöhen.

Public Stats

GET /api/public/stats public
Anonyme Aggregat-Stats (Mitgliederzahl, Verified-Quote, Like-Total).
# Response:
{
  "members": 42,
  "groups_total": 8,
  "groups_verified": 7,
  "total_likes": 156,
  "platforms": ["WhatsApp", "Telegram", "Discord", "Signal"]
}

Admin ⚡ requires role=admin

GET /api/admin/stats Admin
Vollständige Dashboard-Stats: User-Counts nach Rolle/Status, Gruppen-Counts, Plattform-Verteilung, Kategorie-Verteilung.
GET /api/admin/users Admin
Die letzten 100 User mit Username, Email, Rolle, Verify-Status.
POST /api/admin/users/:id/verify Admin + CSRF
User verifizieren — setzt is_verified=TRUE.
GET /api/admin/groups Admin
Alle Gruppen inklusive unverifizierter (Moderations-Queue).
POST /api/admin/groups/:id/verify Admin + CSRF
Gruppe freischalten — wird sofort im öffentlichen Feed sichtbar.
DEL /api/admin/groups/:id Admin + CSRF
Gruppe permanent entfernen. Nicht rückgängig.

Quick Sample

JS-Beispiel für Login → eigene Gruppen liken:
// 1) CSRF holen
const me = await fetch('/api/auth/me').then(r=>r.json());
const csrf = me.csrfToken;

// 2) Login
await fetch('/api/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-csrf-token': csrf },
  body: JSON.stringify({ usernameOrEmail: 'senpai', password: '…' })
});

// 3) Liken
await fetch('/api/groups/12/like', {
  method: 'POST',
  headers: { 'x-csrf-token': csrf }
});