Authentifizierung
Erstelle im Dashboard unter Integrationen → API-Schlüssel einen Schlüssel (rgy_…). Er gilt für genau einen Server, hat feste Rechte (Scopes) und ein Limit pro Minute. Sende ihn bei jeder Anfrage:
curl -H "Authorization: Bearer rgy_…" https://api.regyhub.de/api/v1/guilds/<SERVER_ID>/server
Die API ist nur lesend. Antworten enthalten X-RateLimit-Limit und X-RateLimit-Remaining; bei 429 sagt Retry-After, wann du es erneut versuchen darfst. Fehler: 401 Schlüssel fehlt/ungültig/widerrufen/abgelaufen, 403 falscher Server oder fehlender Scope.
Endpunkte
Lädt …
OpenAPI-Spezifikation (JSON) – automatisch aus dem Code erzeugt.
Kalender (iCal)
Mit einem Schlüssel, der nur den Scope calendar:read hat, kannst du den Feed direkt abonnieren: https://api.regyhub.de/api/v1/guilds/<SERVER_ID>/calendar.ics?key=rgy_…. Alle anderen Schlüssel müssen den Header nutzen (URLs landen in Logs).
Webhooks
Im Dashboard legst du eine https-Adresse und Ereignisse fest: ticket.created, ticket.closed, giveaway.ended, moderation.action, member.joined. Jede Anfrage ist ein POST mit JSON (id, type, guild_id, created, data) und den Headern X-Regy-Event, X-Regy-Delivery, X-Regy-Signature. Antworte innerhalb von 8 Sekunden mit 2xx; sonst wird bis zu 6 Mal wiederholt (1 Min., 5 Min., 30 Min., 2 Std., 6 Std.). Weiterleitungen werden nicht verfolgt.
# Python – Signatur prüfen (Header X-Regy-Signature: t=<unix>,v1=<hex>)
import hmac, hashlib, time
def verify(secret: str, header: str, body: bytes, tolerance: int = 300) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
if abs(time.time() - int(parts["t"])) > tolerance:
return False # Replay-Schutz
mac = hmac.new(secret.encode(), parts["t"].encode() + b"." + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, parts["v1"])