Skip to main content

Puzzles API

Fetch, generate, and validate puzzles. All puzzle endpoints require a tenant API key via the X-API-Key header.

GET/api/v1/puzzles

List Puzzles

Paginated list of puzzles with optional filters.

ParameterTypeRequiredDescription
puzzleTypestringNoFilter by type (e.g. sudoku, wordsearch)
difficultystringNoFilter by difficulty (easy, medium, hard, expert)
localestringNoLocale filter
limitintegerNoItems per page (default: 20)
cursorstringNoCursor for next page
bash
curl -X GET "https://api.puzzlesection.app/api/v1/puzzles?puzzleType=sudoku&difficulty=medium&limit=10" \
-H "X-API-Key: ps_live_xxxxxxxxxxxx"
GET/api/v1/puzzles/daily/:date

Get Daily Puzzles

Returns all daily puzzles for a given date. Optionally filter by type.

ParameterTypeRequiredDescription
datestringYesDate in YYYY-MM-DD format (path parameter)
typestringNoFilter by puzzle type (query parameter)
bash
curl -X GET "https://api.puzzlesection.app/api/v1/puzzles/daily/2026-03-05?type=sudoku" \
-H "X-API-Key: ps_live_xxxxxxxxxxxx"

Response

JSON
1{
2 "date": "2026-03-05",
3 "puzzles": [
4 {
5 "id": "550e8400-e29b-41d4-a716-446655440000",
6 "type": "sudoku",
7 "difficulty": "medium",
8 "date": "2026-03-05",
9 "estimatedTime": 480,
10 "isPremium": false,
11 "data": {
12 "grid": [[0, 0, 3, 0, 2, 0, 6, 0, 0], ...],
13 "given": [[false, false, true, ...], ...],
14 "difficulty": "medium"
15 },
16 "createdAt": "2026-03-04T00:00:00Z",
17 "updatedAt": "2026-03-04T00:00:00Z"
18 }
19 ]
20}

SDK Equivalent

TypeScript
const { data } = await client.puzzles.getDaily({
date: '2026-03-05',
types: ['sudoku'],
});
GET/api/v1/puzzles/:id

Get Puzzle by ID

Retrieve a specific puzzle by its UUID.

ParameterTypeRequiredDescription
idstring (UUID)YesPuzzle identifier
bash
curl -X GET "https://api.puzzlesection.app/api/v1/puzzles/550e8400-e29b-41d4-a716-446655440000" \
-H "X-API-Key: ps_live_xxxxxxxxxxxx"
POST/api/v1/puzzles/generate

Generate Puzzle

Generate a new puzzle on demand.

ParameterTypeRequiredDescription
puzzleTypestringYesPuzzle type to generate
difficultystringNoDesired difficulty
localestringNoLocale for word-based puzzles
dictionaryIdstringNoCustom dictionary ID
contentTagsstring[]NoContent tags for themed puzzles
bash
curl -X POST "https://api.puzzlesection.app/api/v1/puzzles/generate" \
-H "X-API-Key: ps_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "puzzleType": "wordsearch", "difficulty": "easy", "locale": "en" }'
POST/api/v1/puzzles/batch

Batch Generate

Generate multiple puzzles in a single request.

JSON
{
"requests": [
{ "puzzleType": "sudoku", "difficulty": "medium" },
{ "puzzleType": "wordsearch", "difficulty": "easy", "locale": "en" }
]
}
POST/api/v1/puzzles/batch-lookup

Batch Lookup

Fetch multiple puzzles by ID in a single request.

JSON
{ "ids": ["uuid-1", "uuid-2", "uuid-3"] }
POST/api/v1/puzzles/:id/validate

Validate Solution

Check if a submitted solution is correct.

bash
curl -X POST "https://api.puzzlesection.app/api/v1/puzzles/550e8400-.../validate" \
-H "X-API-Key: ps_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "solution": { "grid": [[5, 3, 4, ...], ...] } }'

SDK Equivalent

TypeScript
const { data } = await client.puzzles.validateSolution('550e8400-...', {
grid: [[5, 3, 4, ...], ...]
});
// data: { valid: boolean, errors?: string[] }

The Puzzle Object

FieldTypeDescription
idstring (UUID)Unique identifier
typePuzzleTypeOne of 14 types: sudoku, wordsearch, crossword, nonogram, colornonogram, picturepath, crossmath, kakuro, slitherlink, mosaic, wordpath, wordladder, breadcrumb, hashi
difficultystringeasy, medium, hard, or expert
datestringPublication date (YYYY-MM-DD)
estimatedTimenumberEstimated solve time in seconds
isPremiumbooleanWhether this puzzle requires premium access
dataPuzzleDataType-specific puzzle data (grid, clues, etc.)
createdAtstringISO timestamp
updatedAtstringISO timestamp