Public utility interface

Eine API.
Klare Wege.

Versionierte Endpoints, konsistente Fehler, sichere Eingaben und eine zentrale Dokumentation für alle öffentlichen MarvinMC-Dienste.

API-Status

Status wird geprüft...

GET /v1/health
v1stabile Basis-URL
15zentrale Dienste
60sRate-Limit-Fenster
3.1OpenAPI-Schema
01 / Grundlagen

Schnellstart

Neue Integrationen verwenden die versionierte URL. Derselbe Endpoint ohne /v1 nutzt automatisch die aktuelle v1-Implementierung.

Basis-URL

https://marvinmc.dev/v1
/minecraft entspricht /v1/minecraft.

Antworten

JSON ist Standard. Einige Konverter liefern XML oder Bilddaten.

Fehler

HTTP-Status plus error.code, Nachricht und Request-ID.

curl "https://marvinmc.dev/v1/calculate?q=sqrt(144)%2B6"

{
  "expression": "sqrt(144)+6",
  "result": "18"
}
Fehlerformat: {"error":{"code":"...","message":"...","request_id":"..."}}. Die Request-ID gehört in Fehlermeldungen an den Betreiber.
02 / Ausprobieren

Live-Konsole

Die Konsole sendet nur sichere GET-Anfragen. Schreibende Endpoints testest du mit den dokumentierten cURL-Beispielen.

Bereit. Wähle einen Endpoint und sende die Anfrage.
03 / Endpoints

Basisdienste

Kleine, zustandslose Helfer für IP-Adressen, Berechnungen, Zufallswerte und Zeitkonvertierung.

GET/v1/ipJSON

Gibt die direkte Client-IP zurück. Weitergeleitete Header werden nur von konfigurierten, vertrauenswürdigen Proxies akzeptiert.

Keine Parameter.

{ "ip": "203.0.113.42" }
GET/v1/calculateJSON

Wertet einen begrenzten mathematischen Ausdruck ohne eval() aus. Unterstützt + - * / % ^, Klammern, pi, e und Funktionen wie sqrt, sin, log oder round.

ParameterTypBeschreibung
qstringAusdruck, maximal 512 Zeichen
curl "https://marvinmc.dev/v1/calculate?q=(5%2B5)*2"

{"expression":"(5+5)*2","result":"20"}
GET/v1/randomJSON
ParameterDefaultBeschreibung
length161 bis 256 Zeichen
lowercasetrueKleinbuchstaben
uppercasetrueGroßbuchstaben
numberstrueZiffern
specialfalseSonderzeichen
custom-Zusätzliche druckbare Zeichen
GET /v1/random?length=24&special=true

{
  "value": "7D...sicher-generiert...",
  "length": 24
}
GET/v1/timeJSON

Konvertiert entweder date nach Unix oder unix in ein Datum. Ohne beide Werte wird die aktuelle Zeit verwendet.

ParameterBeispielBeschreibung
date2026-07-03 16:00Datum oder now
unix1783087200Timestamp oder now
zoneEurope/BerlinIANA-Zeitzone, Default UTC
formatcPHP-Date-Format für Unix-Eingaben
GET /v1/time?unix=now&zone=Europe%2FBerlin&format=c

{
  "timezone": "Europe/Berlin",
  "date": "2026-07-03T...+02:00",
  "unix": 1783...
}
04 / Daten

Daten & Dateien

Konvertierung und Abfragen mit festen Größenlimits. Remote-URL-Imports wurden entfernt, um SSRF zu verhindern.

POST/v1/convert/xml-to-jsonJSON

XML bis 1 MB im Body. DTD- und Entity-Deklarationen sind gesperrt.

curl -X POST \
  -H "Content-Type: application/xml" \
  --data '<user id="7"><name>Marvin</name></user>' \
  https://marvinmc.dev/v1/convert/xml-to-json
{
  "root": "user",
  "data": {
    "@attributes": {"id": "7"},
    "name": "Marvin"
  }
}
POST/v1/convert/json-to-xmlXML

JSON bis 1 MB im Body. Der optionale Parameter root setzt das XML-Wurzelelement.

curl -X POST \
  -H "Content-Type: application/json" \
  --data '{"name":"Marvin","active":true}' \
  "https://marvinmc.dev/v1/convert/json-to-xml?root=user"
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <name>Marvin</name>
  <active>true</active>
</user>
POST/v1/base64-imageIMAGE

Dekodiert PNG, JPEG, GIF oder WebP bis 5 MB. Das Bild wird vollständig validiert und neu kodiert, statt als ausführbare Datei gespeichert zu werden.

Body: Data-URI oder JSON mit Feld data.

curl -X POST \
  --data-binary @image-data-uri.txt \
  -o clean-image.png \
  https://marvinmc.dev/v1/base64-image
GET/v1/minecraftJSON / XML

Fragt den Status eines öffentlichen Java-Servers mit drei Sekunden Timeout ab. Private/reservierte Ziele und Ports unter 1024 sind blockiert. SRV-Records werden unterstützt.

serverstringHost oder host:port
formatjson/xmlOptionales Ausgabeformat
curl "https://marvinmc.dev/v1/minecraft?server=example.org:25565"
GET/v1/whoisJSON

Liest GeoIP-, Zeitzonen- und ASN-Daten ausschließlich aus der lokalen GeoLite2-Datenbank. Ohne Parameter wird die Client-IP verwendet.

ipIPv4 / IPv6Optional
{
  "ip": "1.1.1.1",
  "country_code": "AU",
  "timezone": {"id": "Australia/Sydney"},
  "connection": {"asn": 13335}
}
05 / Bilder

QR-Code

Erzeugt valide QR-Codes direkt als PNG oder SVG. Die Vorschau nutzt denselben öffentlichen Endpoint wie deine Integration.

GET/v1/qr-codePNG / SVG

Für kurze URLs reicht GET. POST akzeptiert ein JSON-Objekt mit denselben Parametern oder reinen UTF-8-Text im Body. Der unversionierte Alias /qr-code verwendet ebenfalls v1.

Herunterladen
Generierte QR-Code-Vorschau

PNG · 352 × 352 px · medium

Parameter

ParameterDefaultBeschreibung
content-Pflichtfeld, UTF-8-Text mit maximal 1024 Bytes
formatpngpng oder svg
size512QR-Matrix von 128 bis 2048 Pixeln; der Rand kommt außen hinzu
margin16Rand pro Seite von 0 bis 128 Pixeln
error_correctionmediumlow, medium, quartile oder high
foreground#101114Sechsstellige Hex-Farbe
background#ffffffSechsstellige Hex-Farbe; Kontrast mindestens 3:1
downloadfalseMit true als Dateianhang ausliefern
curl "https://marvinmc.dev/v1/qr-code?content=Hallo&format=png&size=512" \
  --output qr-code.png
curl -X POST \
  -H "Content-Type: application/json" \
  --data '{"content":"Hallo","format":"svg"}' \
  https://marvinmc.dev/v1/qr-code \
  --output qr-code.svg
Responses: 200 liefert direkt image/png oder image/svg+xml. Ungültige Werte liefern JSON mit 400, 413 oder 422.
06 / Schutz

CAPTCHA

Einmalig nutzbare Bild-CAPTCHAs mit kurzer Lebensdauer und optionaler Bindung an ein serverseitiges Geheimnis.

GET/v1/captchaJSON

Erstellt ein sechsstelliges CAPTCHA mit PNG- und WebP-Bild. validity liegt zwischen 1 und 600 Sekunden, Default 120. Ein optionaler Signature-Header bindet Erstellung und Prüfung an dasselbe Geheimnis.

curl -H "Signature: server-secret" \
  "https://marvinmc.dev/v1/captcha?validity=180"
{
  "images": {
    "png": "https://marvinmc.dev/captcha/images/...png",
    "webp": "https://marvinmc.dev/captcha/images/...webp"
  },
  "id": "...",
  "expire": 1783...
}
POST/v1/captcha/verifyJSON
ParameterPflichtBeschreibung
idjaID aus der Erstellung
codejaCode aus dem Bild
curl -X POST -H "Signature: server-secret" \
  "https://marvinmc.dev/v1/captcha/verify?id=ID&code=123456"

{"solved":true}
07 / Dokumente

PDF

Wandelt begrenztes, bereinigtes HTML in ein abrufbares PDF um, ohne externe Inhalte nachzuladen.

POST/v1/pdfJSON

Erzeugt ein PDF aus maximal 500 KB HTML. Skripte, Formulare, eingebettete Objekte und externe Bilder werden entfernt. Bilder sind nur als Base64-Data-URI erlaubt.

ParameterDefaultBeschreibung
titleunnamedTitel und Dateiname
authorMarvinMC.devPDF-Metadaten
tags-Schlüsselwörter
topic-Betreff
curl -X POST \
  -H "Content-Type: text/html" \
  --data '<h1>Report</h1><p>Sicheres HTML</p>' \
  "https://marvinmc.dev/v1/pdf?title=Report"
{
  "id": "aB3...",
  "file": "Report.pdf",
  "path": {
    "view": "/pdf/view/aB3.../Report.pdf",
    "download": "/pdf/download/aB3.../Report.pdf"
  }
}
08 / Integrierte Dokumentation

MarvinLobby API

Persistente JSON-Daten pro Datenbank-ID. Globale Werte und Spielerwerte sind getrennt; Dot-Notation bildet verschachtelte Keys ab.

Base URL: /v1/marvinlobby. /marvinlobby ist ein Alias derselben v1-Implementierung. Secrets gehören in Authorization: Bearer ... oder X-API-Key, nicht in URLs.

Registrieren

register ist die einzige Aktion ohne ID. Neue Secrets benötigen 8 bis 256 Zeichen und werden mit Argon2id gespeichert.

actionregisterPflicht
secretstringAlternativ X-API-Key
licenseOwnerstringOptional mit licenseId
licenseIdstringOptional mit licenseOwner
curl -X POST \
  -H "X-API-Key: sehr-langes-secret" \
  -d "action=register" \
  https://marvinmc.dev/v1/marvinlobby

{"status":"ok","id":12}

Aktionen

set
Wert setzen oder überschreiben.
add
Zahl addieren, Text anhängen oder Liste erweitern.
remove
Zahl reduzieren oder Listenwert entfernen.
reset
Einen Key entfernen.
get / getAll
Wert oder kompletten Scope lesen.
deleteAll
Kompletten Scope entfernen.
listUuids
Vorhandene Scopes auflisten.
leaderboard
Numerischen Stat-Key sortieren.
register
Neue Datenbank-ID anlegen.

Daten schreiben

ParameterBeschreibung
actionset, add, remove oder reset
idDatenbank-ID
uuidSpieler-UUID oder global
keyDot-Key, z. B. economy.coins
valueTypisierter JSON-Wert, außer bei reset
curl -X POST \
  -H "Authorization: Bearer sehr-langes-secret" \
  -d "action=add" -d "id=12" \
  -d "uuid=069a79f4-44e9-4726-a5be-fca90e38aaf5" \
  -d "key=economy.coins" -d "value=25" \
  https://marvinmc.dev/v1/marvinlobby

Leaderboard

Parameter: stat ist Pflicht, limit liegt zwischen 1 und 100, reverse=1 sortiert absteigend. positionOf sucht die Position einer UUID, place liefert einen bestimmten Rang.

curl -X POST \
  -H "X-API-Key: sehr-langes-secret" \
  -d "action=leaderboard" -d "id=12" \
  -d "stat=woolbattle.wins" -d "reverse=1" -d "limit=5" \
  https://marvinmc.dev/v1/marvinlobby

Period-Keys

Abgelaufene Perioden werden beim Zugriff bereinigt: wins@D2026-07-03 für Tag, wins@W2026-W27 für ISO-Woche, wins@M2026-07 für Monat und wins@Y2026 für Jahr.

09 / Migration

Alte URLs

Bestehende Integrationen funktionieren weiter. Neue Projekte sollten ausschließlich die v1-Routen verwenden.

AltNeuHinweis
/ip/json/v1/ipJSON bleibt gleich
/calc/json/v1/calculateq statt nacktem Query empfohlen
/random/v1/randomNeu mit random_int()
/time/v1/timeValidierte Zeitzonen
/minecraft/json/v1/minecraftPrivate Ziele blockiert
/whois/json/v1/whoisKeine externen WHOIS-Aufrufe
/captcha/json/v1/captchaTTL maximal 600 Sekunden
/pdf/create/json/v1/pdfNur bereinigtes HTML
10 / Anwendungen

Eigenständige Projekte

Diese Bereiche sind keine Utility-API und werden deshalb nicht durch den zentralen API-Controller geschleust.

Kein Endpoint passt zu deiner Suche.