Sudoku-Rätsel-API
Ein kostenloser JSON-Endpunkt, der auf Anfrage ein neues Sudoku-Rätsel liefert. Keine Anmeldung, kein Schlüssel, 60 Anfragen pro Stunde und IP. Geeignet für Tutorials, Beispielanwendungen oder überall, wo ein Rätsel ohne eigenen Generator gebraucht wird.
Schnellstart
Ein GET-Request. Die Antwort enthält Rätsel und Lösung als 81 Zeichen lange Zeichenketten und den verwendeten Seed.
curl 'https://api.sudokumountain.com/v1/generate?mode=classic&difficulty=easy'Endpunkte
- GET /v1/generate
- Rätsel erzeugen.
- GET /v1/health
- Verfügbarkeitsprüfung.
Parameter
- mode
- Erforderlich. In v1 nur `classic`. Killer wartet auf eine Erweiterung des Antwortformats um Käfigdaten.
- difficulty
- Erforderlich. Eines aus: easy, medium, hard, expert, master, extreme. Die sechs Stufen entsprechen der Spielseite.
- seed
- Optional. Nichtnegative Ganzzahl bis 4.294.967.295. Derselbe Seed liefert in derselben Engine-Version dasselbe Rätsel — nützlich für Tests oder stabile Seitenbeispiele.
Antwort
Rätsel und Lösung sind 81 Zeichen lange Zeichenketten, von links nach rechts und oben nach unten gelesen. Jedes Zeichen ist eine Ziffer 1–9 — im Rätsel steht zusätzlich '0' für ein leeres Feld.
{
"puzzle": "530070000600195000098000060800060003400803001700020006060000280000419005000080079",
"solution": "534678912672195348198342567859761423426853791713924856961537284287419635345286179",
"mode": "classic",
"difficulty": "easy",
"seed": 1734567890
}- puzzle
- 81 Zeichen lange Zeichenkette. '0' steht für ein leeres Feld, '1'–'9' für ein vorgegebenes.
- solution
- 81 Zeichen lange Zeichenkette. Die eindeutige Lösung des Rätsels.
- mode
- Spiegelt den Modus der Anfrage. In v1 immer `classic`.
- difficulty
- Spiegelt die angefragte Schwierigkeit.
- seed
- Der tatsächlich verwendete Seed. Entspricht dem in der Anfrage, sofern angegeben; sonst eine zufällige 32-Bit-Ganzzahl.
JavaScript
const res = await fetch(
'https://api.sudokumountain.com/v1/generate?mode=classic&difficulty=medium',
);
const puzzle = await res.json();
console.log(puzzle.puzzle); // 81-char string, '0' = empty
console.log(puzzle.solution); // 81-char string, all 1–9Python
import urllib.request, json
url = "https://api.sudokumountain.com/v1/generate?mode=classic&difficulty=hard"
with urllib.request.urlopen(url) as r:
puzzle = json.load(r)
print(puzzle["puzzle"]) # 81-char string, '0' = empty
print(puzzle["solution"]) # 81-char string, all 1–9curl — health
curl 'https://api.sudokumountain.com/v1/health'Anfragelimits
60 Anfragen pro Stunde und IP. Jede Antwort enthält X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Unix-Sekunden, wann das Fenster zurückgesetzt wird). Bei Überschreitung gibt es einen 429 mit Retry-After-Header.
Fehler
Fehler werden als application/json mit `error`-Code und menschenlesbarer `message` zurückgegeben. Die Codes sind stabil und können sicher in switch-Anweisungen verwendet werden:
- 400
- invalid-mode, invalid-difficulty oder invalid-seed. Die Meldung beschreibt das Problem.
- 429
- rate-limit-exceeded. Nach den Sekunden in Retry-After (oder X-RateLimit-Reset) erneut versuchen.
- 500
- generation-failed. Selten. Mit anderem Seed oder ohne Seed wiederholen.
- 503
- rate-limit-unavailable. Der Zähler ist offline. In ein paar Sekunden erneut versuchen.
Versionierung
v1 ist stabil. Breaking Changes erscheinen unter v2, v1 bleibt dauerhaft erreichbar. Neue optionale Parameter und zusätzliche Felder in der Antwort sind keine Breaking Changes — schreiben Sie Parser, die unbekannte Felder ignorieren.
Nutzung
Kostenlos für jede Nutzung, kommerziell oder privat. Eine Erwähnung ist nett, aber nicht erforderlich. Wenn Sie etwas Schönes damit bauen, freuen wir uns über eine Nachricht.