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–9

Python

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–9

curl — 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.

Relacionado