Skip to content
GET /v1/search

Search & filter puzzles

Try it live

10 free calls per day — no sign-up, no API key. Goes through the oanor gateway.

Custom headers (optional)
api.oanor.com/chesspuzzles-api

It works. Grab an API key and use it in your project.

Get an API key

Code snippets

curl "https://api.oanor.com/chesspuzzles-api/v1/search" \
  -H "x-oanor-key: oanor_test_..."
await fetch("https://api.oanor.com/chesspuzzles-api/v1/search", {
  headers: { "x-oanor-key": "oanor_test_..." }
});
$ch = curl_init("https://api.oanor.com/chesspuzzles-api/v1/search");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-oanor-key: oanor_test_..."]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$out = curl_exec($ch);
import requests
requests.get(
    "https://api.oanor.com/chesspuzzles-api/v1/search",
    headers={"x-oanor-key": "oanor_test_..."}
)

Example response

A real response from this endpoint, captured by the latest health check.

{
    "data": {
        "sort": "popularity",
        "count": 20,
        "limit": 20,
        "total": 1630,
        "offset": 0,
        "filters": {
            "theme": "fork",
            "max_rating": 2000,
            "min_rating": 1000
        },
        "results": [
            {
                "id": "01tr2",
                "fen": "8/5p1k/3q2pp/1R6/pP6/P1Q3PP/5PK1/3r4 w - - 1 37",
                "url": "https://lichess.org/training/01tr2",
                "moves": [
                    "b5b7",
                    "d6d5",
                    "c3f3",
                    "d1g1",
                    "g2g1",
                    "d5f3"
                ],
                "rating": 1348,
                "themes": [
                    "crushing",
                    "deflection",
                    "endgame",
                    "fork",
                    "long"
                ],
                "game_url": "https://lichess.org/S2AzvY4t#73",
                "nb_plays": 322,
                "popularity": 100,
                "opening_tags": [],
                "solver_color": "black"
            },
            {
                "id": "0APD2",
                "fen": "8/6kp/3qp1p1/1pp5/3nQ3/P6P/1P3P2/4R1K1 w - - 5 35",
                "url": "https://lichess.org/training/0APD2",
                "moves": [
                    "e4e5",
                    "d6e5",
                    "e1e5",
                    "d4f3",
                    "g1f1",
                    "f3e5"
                ],
                "rating": 1112,
                "themes": [
                    "attraction",
                    "crushing",
                    "endgame",
                    "fork",
                    "long"
                ],
                "game_url": "https://lichess.org/mJqU5nlL#69",
                "nb_plays": 1001,
                "popularity": 100,
                "opening_tags": [],
                "solver_color": "black"
            },
            {
                "id": "0AnXJ",
                "fen": "r5rk/pp3pp1/2q2P2/4p1QN/2Pn3P/3P4/P7/3K1R2 b - - 2 30",
                "url": "https://lichess.org/training/0AnXJ",
                "moves": [
                    "d4f3",
                    "f6g7",
                    "h8h7",
                    "h5f6",
                    "c6f6",
                    "g5f6"
                ],
                "rating": 1457,
                "themes": [
                    "advancedPawn",
                    "crushing",
                    "fork",
                    "long",
                    "middlegame"
                ],
                "game_url": "https://lichess.org/SVBn7vaL/black#60",
                "nb_plays": 280,
                "popularity": 100,
                "opening_tags": [],
                "solver_color": "white"
            },
            {
                "id": "0BI9t",
                "fen": "r2k3r/pp3Bpp/1bp1N2n/4pq2/Q3N1b1/8/PP3PPP/R1n2R1K b - - 3 17",
                "url": "https://l
…