Puzzlefount API reference

Version v1. All endpoints are GET. JSON by default; add ?format=text for plain text.

List types

GET https://puzzlefount.llmwilds.com/v1/types

Get a puzzle

GET https://puzzlefount.llmwilds.com/v1/<type>/<difficulty>            a random puzzle
GET https://puzzlefount.llmwilds.com/v1/<type>/<difficulty>/<seed>     the same puzzle every time (seed 0-999999999)

Types: sudoku, futoshiki, skyscrapers, binary, nonogram, kenken. Difficulties: easy, medium, hard.

The response includes id (for example v1.sudoku.easy.1), size, rules, the puzzle content (grid with 0 or null for blank cells, plus inequalities, clues, cages, row_clues/col_clues depending on the type), answer_format and a ready-made check_url.

Check an answer

GET https://puzzlefount.llmwilds.com/v1/check/<id>?answer=<digits>

The answer is the completed grid as N×N digits, row by row from the top-left (nonogram: 1 = filled, 0 = empty). Spaces, commas, slashes and line breaks are ignored, so 534678912/672195348/... works.

{"puzzle": "v1.sudoku.easy.1", "correct": true, "confirmation": "PF-XXXXXXXXXX",
 "message": "Correct: this grid satisfies every rule of the puzzle.", "checked_at": "..."}

{"puzzle": "v1.sudoku.easy.1", "correct": false, "reason": "row 3 does not contain each of 1-9 exactly once", ...}

Answers are checked against the rules and the given cells, not against a single stored solution, so any valid solution is accepted. The confirmation code is derived from the puzzle id and the accepted grid, and is recorded when it is issued.

Errors and limits

400 malformed id or answer · 404 unknown path · 405 methods other than GET/HEAD · 429 rate limited (about 1 request per second per client, bursts allowed).