API de generación de Sudoku
Un endpoint JSON gratuito que devuelve un Sudoku a demanda. Sin registro, sin clave, 60 peticiones por hora por IP.
Inicio rápido
Una petición GET. La respuesta contiene el puzzle y su solución como cadenas de 81 caracteres, más la semilla usada.
curl 'https://api.sudokumountain.com/v1/generate?mode=classic&difficulty=easy'Endpoints
- GET /v1/generate
- Generar un puzzle.
- GET /v1/health
- Comprobación de disponibilidad.
Parámetros
- mode
- Obligatorio. En v1, solo `classic`.
- difficulty
- Obligatorio. easy, medium, hard, expert, master o extreme.
- seed
- Opcional. Entero no negativo hasta 4.294.967.295.
Respuesta
El puzzle y la solución son cadenas de 81 caracteres, leídas de izquierda a derecha y de arriba a abajo. Cada carácter es un dígito 1–9; en el puzzle, '0' marca una celda vacía.
{
"puzzle": "530070000600195000098000060800060003400803001700020006060000280000419005000080079",
"solution": "534678912672195348198342567859761423426853791713924856961537284287419635345286179",
"mode": "classic",
"difficulty": "easy",
"seed": 1734567890
}- puzzle
- Cadena de 81 caracteres. '0' = celda vacía.
- solution
- Cadena de 81 caracteres. La solución única.
- mode
- Refleja el modo de la petición.
- difficulty
- Refleja la dificultad de la petición.
- seed
- La semilla usada.
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'Límites de petición
60 peticiones por hora por IP. Cada respuesta incluye X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset.
Errores
Los errores devuelven application/json con un código `error` y un `message` legible.
- 400
- invalid-mode, invalid-difficulty o invalid-seed. El mensaje explica el problema.
- 429
- rate-limit-exceeded. Reintentar después del Retry-After.
- 500
- generation-failed. Raro. Reintentar con otra semilla.
- 503
- rate-limit-unavailable. El contador está fuera de línea.
Versionado
v1 es estable. Los cambios incompatibles se publicarán bajo v2; v1 permanecerá indefinidamente.
Uso
Gratis para cualquier uso. Mención bienvenida pero no obligatoria.