API Dokumentation
Vollständige Referenz aller rl-dev.de API-Endpunkte
Base URL
https://rl-dev.de
Alle Endpunkte sind unter dieser Base URL erreichbar.
Browser Auth API
Registrierung und Login für Browser-Benutzer. Nach dem Login erhältst du einen Token, der für Sync- und Plugin-Endpunkte benötigt wird.
/api/browser/register
Neuen Browser-Account registrieren. Gibt Token zurück.
Request Body (JSON):
{
"username": "meinuser",
"password": "meinpasswort",
"email": "user@example.com"
}
Response (201):
{
"status": "ok",
"token": "a1b2c3d4e5f6...",
"user": { "id": 1, "username": "meinuser", "email": "user@example.com" }
}
/api/browser/login
Login mit Username & Passwort. Gibt neuen Token zurück.
Request Body (JSON):
{
"username": "meinuser",
"password": "meinpasswort"
}
Response (200):
{
"status": "ok",
"token": "a1b2c3d4e5f6...",
"user": { "id": 1, "username": "meinuser", "email": "user@example.com" }
}
/api/browser/me
🔐 Auth
Aktuelle User-Daten abrufen. Zeigt auch ob User ein Browser Dev ist.
Authentifizierung: Sende den Token als Header bei allen geschützten Endpunkten:
Authorization: Bearer <token> oder X-Browser-Token: <token>
Browser Sync API
Synchronisiere Browser-Daten wie Lesezeichen, Passwörter, Startseiten und Einstellungen. Alle Endpunkte erfordern Authentifizierung.
Unterstützte Datentypen:
bookmarks,
passwords,
homepages,
settings
/api/browser/sync
🔐 Auth
Alle Sync-Daten abrufen. Gibt ein Objekt mit allen Datentypen zurück.
/api/browser/sync
🔐 Auth
Einen Datentyp speichern/aktualisieren.
{
"type": "bookmarks",
"data": [
{ "title": "Google", "url": "https://google.com" },
{ "title": "rl-dev.de", "url": "https://rl-dev.de" }
]
}
/api/browser/sync/<type>
🔐 Auth
Einzelnen Datentyp abrufen. <type> = bookmarks | passwords | homepages | settings
/api/browser/sync/<type>
🔐 Auth
Einzelnen Datentyp speichern. Body: { "data": ... }
Plugin Store API
Plugins durchsuchen, herunterladen und (als Browser Dev) hochladen. Downloads sind öffentlich, Uploads erfordern Dev-Rechte.
/api/browser/plugins
Alle aktiven Plugins auflisten. Query-Parameter: ?category=general und ?q= suchbegriff
/api/browser/plugins/<slug>
Details eines Plugins abrufen.
/api/browser/plugins/<slug>/download
Plugin-Datei herunterladen (ZIP). Öffentlich – kein Token nötig. Download-Counter wird hochgezählt.
/api/browser/plugins
🔐 Browser Dev
Neues Plugin hochladen. Nur Browser Devs! Multipart Form-Data:
name: "Mein Plugin" (required)
description: "Beschreibung" (optional)
version: "1.0.0" (optional, default: 1.0.0)
category: "general" (optional)
file: <plugin.zip> (required, .zip/.tar.gz/etc)
icon: <icon.png> (optional, Bild-Datei)
/api/browser/plugins/<slug>
🔐 Dev/Author
Plugin bearbeiten. JSON-Felder: name, description, version, category, is_active
/api/browser/plugins/<slug>
🔐 Dev/Author
Plugin löschen (inkl. Dateien). Nur der Author oder ein Dev.
Projekt-Fortschritt API
Projekt-Fortschritt abrufen und verwalten. Lesen ist öffentlich, Schreiben erfordert Admin-Login.
/api/projects
Alle Projekte auflisten (öffentlich)
/api/projects/<id>
Einzelnes Projekt abrufen (öffentlich)
/api/projects
🔐 Admin
Neues Projekt erstellen
/api/projects/<id>
🔐 Admin
Projekt aktualisieren
/api/projects/<id>
🔐 Admin
Projekt löschen
Copyright Check API
Prüft ob Inhalte urheberrechtlich geschützt sind.
/api/copyright-check
Copyright-Check durchführen. Body: JSON mit dem zu prüfenden Inhalt.
Browser Extra APIs
/api/browser/sync/last-sync
🔐 Auth
Gibt Timestamps der letzten Aktualisierung pro Datentyp zurück. Nützlich für Delta-Sync – nur synchronisieren wenn sich etwas geändert hat.
{
"status": "ok",
"last_sync": {
"bookmarks": "2026-08-09T06:00:00+02:00",
"passwords": "2026-08-09T05:30:00+02:00",
"homepages": null,
"settings": "2026-08-08T22:15:00+02:00"
}
}
/api/browser/telemetry
🔐 Auth
Browser-Statistiken senden (Tabs, Bookmarks, Plugins, Session-Dauer, etc.).
{
"client_version": "1.2.0",
"os_name": "Windows 11",
"tab_count": 12,
"bookmark_count": 85,
"plugin_count": 3,
"session_duration": 3600,
"extra": { "custom_field": "value" }
}
/api/browser/changelog
Browser-Update-Changelog abrufen. Query: ?type=release|beta|hotfix|dev und ?limit=20
/api/browser/feedback
Optional Auth
User-Feedback aus dem Browser senden. Token optional – mit Token wird der User zugeordnet.
{
"type": "bug",
"subject": "Tabs crash on close",
"message": "When I close multiple tabs quickly...",
"client_version": "1.2.0"
}
Typen: general, bug, feature, praise
/api/browser/featured-plugins
Editor's Choice / Featured Plugins für Browser-Startseite. Query: ?limit=6
/api/browser/user-plugins
🔐 Auth
Vom eingeloggten User hochgeladene Plugins auflisten (inkl. inaktive).
Browser Version / Update API
/api/browser/version
Prüft ob ein Update verfügbar ist. Query: ?current=1.1.0&channel=stable
{
"status": "ok",
"update_available": true,
"can_auto_update": true,
"latest": {
"version": "1.2.0",
"channel": "stable",
"release_notes": "New sync engine, bug fixes",
"file_size": 52428800,
"checksum": "a1b2c3...",
"min_client_version": "1.0.0",
"download_url": "/api/browser/download/3",
"created_at": "2026-08-09T12:00:00+02:00"
}
}
/api/browser/update
Client meldet seine Version und erhält Update-Anweisungen.
{
"current_version": "1.1.0",
"channel": "stable"
}
{
"status": "ok",
"update_available": true,
"can_auto_update": true,
"action": "download",
"latest_version": "1.2.0",
"download_url": "/api/browser/download/3",
"checksum": "a1b2c3...",
"file_size": 52428800,
"release_notes": "New sync engine",
"min_client_version": "1.0.0"
}
/api/browser/download/latest
Lädt die neueste Version herunter. Query: ?channel=stable|beta|dev
/api/browser/download/<version_id>
Lädt eine spezifische Version herunter. Zählt Download-Counter hoch.
/api/browser/versions
Alle veröffentlichten Versionen auflisten. Query: ?channel=stable&limit=10
Code-Beispiele
Python – Browser Login & Sync
import requests
BASE = "https://rl-dev.de/api/browser"
# Registrieren
r = requests.post(f"{BASE}/register", json={
"username": "meinuser",
"password": "sicherespasswort",
"email": "user@example.com"
})
token = r.json()["token"]
# Token für alle weiteren Requests
headers = {"Authorization": f"Bearer {token}"}
# Lesezeichen synchronisieren
requests.post(f"{BASE}/sync", json={
"type": "bookmarks",
"data": [
{"title": "Google", "url": "https://google.com"},
{"title": "rl-dev.de", "url": "https://rl-dev.de"}
]
}, headers=headers)
# Lesezeichen abrufen
r = requests.get(f"{BASE}/sync/bookmarks", headers=headers)
print(r.json()["data"])
Python – Plugin herunterladen
import requests
# Plugin-Liste abrufen
r = requests.get("https://rl-dev.de/api/browser/plugins")
plugins = r.json()["plugins"]
# Plugin herunterladen (kein Token nötig)
r = requests.get("https://rl-dev.de/api/browser/plugins/mein-plugin/download")
with open("mein-plugin.zip", "wb") as f:
f.write(r.content)
Python – Plugin hochladen (als Browser Dev)
import requests
headers = {"Authorization": "Bearer "}
r = requests.post("https://rl-dev.de/api/browser/plugins",
headers=headers,
data={
"name": "Mein Plugin",
"description": "Ein cooles Plugin",
"version": "1.0.0",
"category": "tools"
},
files={
"file": open("plugin.zip", "rb"),
"icon": open("icon.png", "rb")
}
)
print(r.json())
JavaScript / Browser
// Login
const r = await fetch("https://rl-dev.de/api/browser/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username: "meinuser", password: "passwort" })
});
const { token } = await r.json();
// Lesezeichen abrufen
const syncR = await fetch("https://rl-dev.de/api/browser/sync/bookmarks", {
headers: { "Authorization": `Bearer ${token}` }
});
const { data } = await syncR.json();
console.log(data);
JSON Schemas
Plugin Objekt
{
"id": 1,
"slug": "mein-plugin",
"name": "Mein Plugin",
"description": "Beschreibung",
"version": "1.0.0",
"category": "general",
"author": "meinuser",
"icon_path": "/static/uploads/browser_plugins/mein-plugin.png",
"download_count": 42,
"file_size": 102400,
"created_at": "2026-08-09T06:00:00+02:00",
"updated_at": "2026-08-09T06:00:00+02:00"
}
Sync Data (bookmarks Beispiel)
{
"status": "ok",
"data": [
{ "title": "Google", "url": "https://google.com" },
{ "title": "rl-dev.de", "url": "https://rl-dev.de" }
],
"updated_at": "2026-08-09T06:00:00+02:00"
}
Projekt Objekt
{
"id": 1,
"name": "Projektname",
"description": "Beschreibung",
"progress": 75,
"created_at": "2026-06-16T19:00:00+02:00",
"updated_at": "2026-06-16T20:30:00+02:00"
}
HTTP Status Codes
200 – Erfolgreich
201 – Erstellt (Register, Plugin Upload)
400 – Ungültige Anfrage (fehlende Felder)
401 – Nicht authentifiziert (Token fehlt/ungültig)
403 – Keine Berechtigung (kein Browser Dev)
404 – Nicht gefunden
409 – Konflikt (Username bereits vergeben)