books: List books

API: gutendex.com:gutendex-api
Endpoint: /books
Response format: application/json
Auth: none
Method: GET
Last Status: 200
Latency: 592ms

Description

Returns a paginated list of books with optional filtering by author year, copyright status, language, topic, and more.

Parameters (10)

author_year_end (integer, query, optional)

Filter by author death year (end range). Positive or negative integer values accepted.

author_year_start (integer, query, optional)

Filter by author birth year (start range). Positive or negative integer values accepted.

copyright (string, query, optional)

Filter by copyright status. Use 'true' for copyrighted books, 'false' for public domain in the USA, or 'null' for unknown. Multiple values can be comma-separated.

Constraints: {'enum': ['true', 'false', 'null']}

ids (string, query, optional)

Comma-separated list of Project Gutenberg ID numbers to retrieve specific books.

languages (string, query, optional)

Comma-separated list of two-character language codes (e.g., 'en' for English, 'fr,fi' for French and Finnish).

mime_type (string, query, optional)

Filter by MIME type prefix (e.g., 'text/html', 'application/epub').

page (integer, query, optional, default: 1)

Page number for pagination.

search (string, query, optional)

Search author names and book titles using space-separated keywords.

sort (string, query, optional, default: popular)

Sort order for results.

Constraints: {'enum': ['ascending', 'descending', 'popular']}

topic (string, query, optional)

Filter by bookshelves or subjects using case-insensitive key-phrases.

Examples (8)

Search for Shakespeare works curl
curl 'https://gutendex.com/books?search=Shakespeare&sort=popular'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'search': 'Shakespeare',
        'sort': 'popular',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", search="Shakespeare", sort="popular")

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?search=Shakespeare&sort=popular");
const data = await resp.json();
Public domain English books about science curl
curl 'https://gutendex.com/books?languages=en&topic=science&copyright=false'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'languages': 'en',
        'topic': 'science',
        'copyright': 'false',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", languages="en", topic="science", copyright="false")

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?languages=en&topic=science&copyright=false");
const data = await resp.json();
Books by authors alive in the 19th century curl
curl 'https://gutendex.com/books?author_year_start=1800&author_year_end=1900&page=1'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'author_year_start': '1800',
        'author_year_end': '1900',
        'page': '1',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", author_year_start=1800, author_year_end=1900, page=1)

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?author_year_start=1800&author_year_end=1900&page=1");
const data = await resp.json();
List books openapi-spec
curl 'https://gutendex.com/books?copyright=true%2Cfalse&ids=84%2C1342%2C2701&languages=en%2Cfr%2Cde&mime_type=text%2Fhtml&search=pride+prejudice&topic=science+fiction'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'copyright': 'true,false',
        'ids': '84,1342,2701',
        'languages': 'en,fr,de',
        'mime_type': 'text/html',
        'search': 'pride prejudice',
        'topic': 'science fiction',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", copyright="true,false", ids="84,1342,2701", languages="en,fr,de", mime_type="text/html", search="pride prejudice", topic="science fiction")

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?copyright=true%2Cfalse&ids=84%2C1342%2C2701&languages=en%2Cfr%2Cde&mime_type=text%2Fhtml&search=pride+prejudice&topic=science+fiction");
const data = await resp.json();
List and search books openapi-spec
curl 'https://gutendex.com/books?search=Frankenstein&author_year_start=1800&author_year_end=1900&languages=en%2Cfr&ids=84%2C85&mime_type=text%2Fhtml&topic=Science+fiction'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'search': 'Frankenstein',
        'author_year_start': '1800',
        'author_year_end': '1900',
        'languages': 'en,fr',
        'ids': '84,85',
        'mime_type': 'text/html',
        'topic': 'Science fiction',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", search="Frankenstein", author_year_start=1800, author_year_end=1900, languages="en,fr", ids="84,85", mime_type="text/html", topic="Science fiction")

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?search=Frankenstein&author_year_start=1800&author_year_end=1900&languages=en%2Cfr&ids=84%2C85&mime_type=text%2Fhtml&topic=Science+fiction");
const data = await resp.json();
List and search books openapi-spec
curl 'https://gutendex.com/books?ids=11%2C12%2C13&languages=en%2Cfr&mime_type=text%2Fhtml&search=dickens+great&topic=children'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'ids': '11,12,13',
        'languages': 'en,fr',
        'mime_type': 'text/html',
        'search': 'dickens great',
        'topic': 'children',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", ids="11,12,13", languages="en,fr", mime_type="text/html", search="dickens great", topic="children")

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?ids=11%2C12%2C13&languages=en%2Cfr&mime_type=text%2Fhtml&search=dickens+great&topic=children");
const data = await resp.json();
List books openapi-spec
curl 'https://gutendex.com/books?ids=11%2C12%2C13&languages=en%2Cfr&mime_type=text%2Fhtml&search=dickens+great&topic=science+fiction'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'ids': '11,12,13',
        'languages': 'en,fr',
        'mime_type': 'text/html',
        'search': 'dickens great',
        'topic': 'science fiction',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", ids="11,12,13", languages="en,fr", mime_type="text/html", search="dickens great", topic="science fiction")

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?ids=11%2C12%2C13&languages=en%2Cfr&mime_type=text%2Fhtml&search=dickens+great&topic=science+fiction");
const data = await resp.json();
List books probe-gate
curl 'https://gutendex.com/books?ids=11%2C12%2C13&languages=en%2Cfr&mime_type=text%2Fhtml&search=dickens+great&sort=popular&topic=science+fiction&page=1'
import requests

resp = requests.get(
    "https://gutendex.com/books",
    params={
        'ids': '11,12,13',
        'languages': 'en,fr',
        'mime_type': 'text/html',
        'search': 'dickens great',
        'sort': 'popular',
        'topic': 'science fiction',
        'page': '1',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("gutendex")
result = api.fetch("books", ids="11,12,13", languages="en,fr", mime_type="text/html", search="dickens great", sort="popular", topic="science fiction", page=1)

for item in result:
    print(item)
const resp = await fetch("https://gutendex.com/books?ids=11%2C12%2C13&languages=en%2Cfr&mime_type=text%2Fhtml&search=dickens+great&sort=popular&topic=science+fiction&page=1");
const data = await resp.json();

Probe History

Latency

Status Codes

TimeStatusLatencySize
2026-04-16 03:52:48.429528 200 592ms
2026-04-16 03:51:43.060666 200 4167ms
2026-04-16 03:43:17.879710 200 1629ms
2026-04-16 03:42:11.400935 200 561ms
2026-04-16 02:38:31.431188 200 278ms
2026-04-16 01:53:31.833735 200 1110ms
2026-04-16 01:49:21.013621 200 1312ms
2026-04-16 00:57:05.976327 200 5424ms
2026-04-15 04:08:34.462072 200 284ms
2026-04-15 03:43:54.003490 200 3017ms
2026-04-15 03:30:54.020541 200 3989ms
2026-04-15 03:12:07.359654 200 757ms
2026-04-15 01:29:33.178064 200 337ms
2026-04-15 01:15:02.254204 200 300ms
2026-04-15 00:20:00.567999 200 264ms
2026-04-15 00:02:41.691014 200 907ms
2026-04-14 04:09:12.577726 200 1813ms
2026-04-14 03:54:58.282406 200 376ms
2026-04-14 03:40:26.035031 ERR
2026-04-14 03:20:41.336124 200 654ms
2026-04-14 02:49:05.431483 200 358ms
2026-04-14 02:08:04.091668 200 5299ms
2026-04-14 01:38:55.791689 200 1161ms
2026-04-14 00:22:06.468548 200 6694ms
2026-04-12 16:47:38.186456 200 862ms
2026-04-12 16:45:54.748811 200 913ms
2026-04-12 15:51:49.849125 200 361ms
2026-04-12 15:34:27.483247 200 364ms
2026-04-12 15:21:11.053571 200 11558ms
2026-04-12 15:13:13.388927 200 807ms
2026-04-12 14:00:13.455830 ERR
2026-04-12 13:20:47.630406 ERR
2026-04-10 05:08:53.541308 200 2100ms
2026-04-10 04:10:27.479777 200 316ms
2026-04-10 02:53:57.246344 200 446ms
2026-04-10 01:57:24.410495 200 3854ms
2026-04-10 01:39:34.764130 200 557ms
2026-04-10 01:02:08.582600 200 36644ms
2026-04-10 00:26:00.259860 200 21385ms
2026-04-10 00:20:32.106652 200 271ms
2026-04-09 02:58:52.855722 200 4138ms
2026-04-09 02:34:40.849525 ERR
2026-04-09 02:17:20.367974 200 4315ms
2026-04-09 01:57:49.709041 200 17744ms
2026-04-09 01:33:09.012353 200 284ms
2026-04-09 01:18:04.960348 200 2586ms
2026-04-09 00:18:40.788119 200 583ms
2026-04-09 00:11:27.022289 200 864ms
2026-04-03T14:56:58.430688 200 548ms
2026-03-23 09:18:44.081080 200 182ms