Skip to content

REST API and MCP server

Book series data for your app or AI agent

Free REST API and MCP server for book series reading orders, author series and book-to-series lookups. Register, get an API key and start in minutes.

series
60,000+
authors
15,000+
books
500,000+

Quick start

Create a free key, then call any endpoint with GET. Send the key as Authorization: Bearer <key> or X-API-Key: <key>. Send it in a header only. Never put it in a query string, because query strings end up in access logs.
export LOB_API_KEY="lob_your_key_here"

Base URL: https://www.listofbooks.net/api/public/v1. Every 200 answer is { results, withheld, moreAt }.

results
The matches. An empty list means nothing matched.
results[].url
The listofbooks.net page the result came from. Link to it when you show the result.
withheld
Matches left out because the daily limit of distinct pages was reached.
moreAt
Where to keep browsing on listofbooks.net.

Search series

Find book series by name. Up to 5 matches, each with a link to its reading-order page.

  • query Required. 3 to 200 characters, with at least 3 letters or digits.
curl -G "https://www.listofbooks.net/api/public/v1/search-series" \
  --data-urlencode "query=harry potter" \
  -H "Authorization: Bearer $LOB_API_KEY"
{
  "results": [
    {
      "title": "Harry Potter",
      "kind": "series",
      "url": "https://www.listofbooks.net/series/harry-potter?utm_source=api&utm_medium=rest"
    }
  ],
  "withheld": 0,
  "moreAt": "https://www.listofbooks.net/series?utm_source=api&utm_medium=rest"
}

Search authors

Find authors by name. Up to 5 matches, each with a link to the author page.

  • query Required. 3 to 200 characters, with at least 3 letters or digits.
curl -G "https://www.listofbooks.net/api/public/v1/search-authors" \
  --data-urlencode "query=rowling" \
  -H "Authorization: Bearer $LOB_API_KEY"
{
  "results": [
    {
      "name": "J. K. Rowling",
      "url": "https://www.listofbooks.net/authors/j-k-rowling?utm_source=api&utm_medium=rest"
    }
  ],
  "withheld": 0,
  "moreAt": "https://www.listofbooks.net/series?utm_source=api&utm_medium=rest"
}

Get a reading order

The books of the best-matching series, in reading order, or in publication order when the series has no separate reading order.

  • series Required. 3 to 200 characters, with at least 3 letters or digits.
curl -G "https://www.listofbooks.net/api/public/v1/get-reading-order" \
  --data-urlencode "series=harry potter" \
  -H "Authorization: Bearer $LOB_API_KEY"
{
  "results": [
    {
      "title": "Harry Potter",
      "url": "https://www.listofbooks.net/series/harry-potter?utm_source=api&utm_medium=rest",
      "author": "J. K. Rowling",
      "order": "publication",
      "totalBooks": 7,
      "books": [
        {
          "position": 1,
          "title": "Harry Potter and the Philosopher's Stone",
          "year": 1997
        },
        {
          "position": 2,
          "title": "Harry Potter and the Chamber of Secrets",
          "year": 1998
        },
        {
          "position": 3,
          "title": "Harry Potter and the Prisoner of Azkaban",
          "year": 1999
        }
      ],
      "booksOmitted": 0
    }
  ],
  "withheld": 0,
  "moreAt": "https://www.listofbooks.net/series?utm_source=api&utm_medium=rest"
}

Shortened here to 3 of the 7 books.

List an author's series

The best-matching author and the titles of the series they wrote, up to 25.

  • author Required. 3 to 200 characters, with at least 3 letters or digits.
curl -G "https://www.listofbooks.net/api/public/v1/get-author-series" \
  --data-urlencode "author=rowling" \
  -H "Authorization: Bearer $LOB_API_KEY"
{
  "results": [
    {
      "name": "J. K. Rowling",
      "url": "https://www.listofbooks.net/authors/j-k-rowling?utm_source=api&utm_medium=rest",
      "series": [
        {
          "title": "Harry Potter",
          "bookCount": 7
        }
      ],
      "seriesOmitted": 0
    }
  ],
  "withheld": 0,
  "moreAt": "https://www.listofbooks.net/series?utm_source=api&utm_medium=rest"
}

Find the series of a book

The series a book belongs to, the position of the book in it, and the order of the series.

  • title Required. 1 to 200 characters, with at least one letter or digit.
  • author Required. 1 to 200 characters, with at least one letter or digit.
curl -G "https://www.listofbooks.net/api/public/v1/find-series-for-book" \
  --data-urlencode "title=Harry Potter and the Goblet of Fire" \
  --data-urlencode "author=J. K. Rowling" \
  -H "Authorization: Bearer $LOB_API_KEY"
{
  "results": [
    {
      "title": "Harry Potter",
      "url": "https://www.listofbooks.net/series/harry-potter?utm_source=api&utm_medium=rest",
      "order": "publication",
      "position": 4,
      "totalBooks": 7,
      "books": [
        {
          "position": 3,
          "title": "Harry Potter and the Prisoner of Azkaban",
          "year": 1999,
          "isCurrent": false
        },
        {
          "position": 4,
          "title": "Harry Potter and the Goblet of Fire",
          "year": 2000,
          "isCurrent": true
        },
        {
          "position": 5,
          "title": "Harry Potter and the Order of the Phoenix",
          "year": 2003,
          "isCurrent": false
        }
      ],
      "booksOmitted": 0
    }
  ],
  "withheld": 0,
  "moreAt": "https://www.listofbooks.net/series?utm_source=api&utm_medium=rest"
}

Shortened here to 3 of the 7 books.

MCP server

The same 5 lookups as tools for AI agents. The server speaks Streamable HTTP at https://www.listofbooks.net/api/public/mcp. Listing the tools needs no key. Calling a tool needs Authorization: Bearer <key>.

Cursor and other clients with custom headers

Add this to the MCP settings of a client that takes a server URL and headers, such as Cursor, and replace the key.

{
  "mcpServers": {
    "listofbooks": {
      "url": "https://www.listofbooks.net/api/public/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Claude Code

Run this once. It reads the key from the environment variable you set above.

claude mcp add --transport http listofbooks \
  https://www.listofbooks.net/api/public/mcp \
  --header "Authorization: Bearer $LOB_API_KEY"

Claude Desktop

Claude Desktop does not send a key header to a remote server, so it connects through the mcp-remote bridge, which needs Node.js. Open Settings, Developer, Edit Config, add this to claude_desktop_config.json, replace the key and restart Claude Desktop.

{
  "mcpServers": {
    "listofbooks": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://www.listofbooks.net/api/public/mcp",
        "--header",
        "Authorization:${LOB_AUTH_HEADER}"
      ],
      "env": {
        "LOB_AUTH_HEADER": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Tools

  • search_seriesFind book series by name. Up to 5 matches, each with a link to its reading-order page.Input: query
  • search_authorsFind authors by name. Up to 5 matches, each with a link to the author page.Input: query
  • get_reading_orderThe books of the best-matching series, in reading order, or in publication order when the series has no separate reading order.Input: series
  • get_author_seriesThe best-matching author and the titles of the series they wrote, up to 25.Input: author
  • find_series_for_bookThe series a book belongs to, the position of the book in it, and the order of the series.Input: title, author

A missing or invalid key answers with a JSON-RPC error whose data holds the same error code as the REST API. A limit or a failure comes back as a tool result with isError.

Pricing

Start free. Contact us when you need more.
Free
Register with an email address and a password.

$0

  • 10 calls per minute
  • 60 calls per hour
  • 200 calls per day
  • 50 distinct series or author pages per day
  • REST API and MCP server

Requires a visible link back to each result page

Paid
For products that need more calls or no link back.

Custom

  • Higher limits, agreed with you
  • No attribution requirement
  • Priority email support
  • The same REST API and MCP server

Free compared with Paid

FeatureFreePaid
API key
Included
Included
REST API and MCP server
Included
Included
Calls
10/min, 60/hour, 200/day
Higher, agreed with you
Distinct pages per day
50
Higher, agreed with you
Link back to each result page
Required
Not required
Support
Contact form
Priority email

Errors and rate limits

An error answer is { "error": { "code", "message" } }. Switch on the code, not the message.
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit reached: 10 calls per minute. Retry after 2026-11-13T06:45:00.000Z. Do not retry sooner. Browse https://www.listofbooks.net/series?utm_source=api&utm_medium=rest for more."
  }
}
  • Status 400invalid_parametersA query parameter is missing, unknown, repeated or out of bounds.Fix the request. The message names the parameter.
  • Status 401missing_api_keyThe request carries no API key.Send the key as Authorization: Bearer <key> or X-API-Key.
  • Status 401api_key_in_queryThe key was sent in the URL query string, which the API never reads.Move the key to the Authorization: Bearer <key> or X-API-Key header. A URL is logged along the way, so replace a key that was sent in one.
  • Status 401invalid_api_keyThe key is not valid, or it was revoked.Check the key, or create a new one in your account.
  • Status 403forbiddenThe request did not come through the public API address.Call https://www.listofbooks.net.
  • Status 404not_foundNo such endpoint.Use one of the endpoints listed above.
  • Status 429rate_limitedThe member reached a per-minute, per-hour or per-day call limit.Wait for the Retry-After seconds. All keys of one member share the limits.
  • Status 429page_limit_reachedThe member reached the daily limit of distinct series and author pages.Wait for the Retry-After seconds, or ask for higher limits.
  • Status 500internal_errorThe lookup failed.Retry later.
  • Status 503over_capacityThe API as a whole reached its capacity.Wait for the Retry-After seconds.
  • Status 503busyThe service is busy.Wait for the Retry-After seconds.
  • Status 503timed_outThe lookup took too long.Wait for the Retry-After seconds.

Rate limits

The free plan allows 10 calls per minute, 60 calls per hour, 200 calls per day, 50 distinct series or author pages per day. All keys of one account share these limits.

X-RateLimit-Limit
On 200 and 429 answers, the limit of the window closest to running out (minute, hour or day).
X-RateLimit-Remaining
On 200 and 429 answers, the calls left in that window.
X-RateLimit-Reset
On 200 and 429 answers, when that window resets, in Unix epoch seconds.
Retry-After
On 429 and 503, the seconds to wait before the next call.

What counts toward the limits

A call counts once the service has accepted it, before it looks anything up. These answers count: a 200, then page_limit_reached (429), internal_error (500) and timed_out (503). A 500 from the lookup itself, or a timeout, still uses a call. These do not count: invalid_parameters (400), missing_api_key (401), api_key_in_query (401), invalid_api_key (401), forbidden (403), not_found (404), rate_limited (429) and busy (503), and a 405 (any method but GET, HEAD included). An over_capacity answer counts only when the shared daily page budget raised it, after the call was accepted. When the API is switched off, every endpoint answers 404 with an empty body.

Parallel calls

The service handles 2 catalog calls at once per server process. Parallel calls from one key can therefore get busy (503) with a Retry-After header. A busy answer does not count. Call one at a time, or wait for Retry-After before you retry.

Terms of use

These rules apply to every API key and MCP client. They add to the site terms.
  • Link back to the result page

    On the free plan, wherever you show a result, show a visible link to the listofbooks.net page it came from. Use the url field of that result as the link target.

  • No bulk copying

    Use the API to answer a question or enrich a page. Do not crawl it to copy the catalog, build a competing dataset, or train a model on it. The limits exist to stop this, and a client that works around them can lose its key.

  • Keys can be revoked

    We can revoke a key for abuse, for working around the limits, or for hiding the link back. Keep your key private. Anyone who has it uses your limits.

  • No warranty

    The catalog is compiled from public sources and can contain mistakes. The API is provided as is, and the endpoints and limits can change. The site terms apply as well.

Frequently asked questions

Keys, limits and links.

Is the API free?

Yes. Register with an email address and a password, create a key in your account and call the API. The free plan allows 10 calls per minute, 60 per hour and 200 per day.

How do I get an API key?

Create a free account on the sign-up page, confirm your email address and open the API keys page in your account. You can have up to 2 keys. The key is shown once, so copy it when you create it.

What are the limits?

10 calls per minute, 60 per hour, 200 per day, and 50 distinct series or author pages per day. All keys of one account share them. Successful REST answers carry X-RateLimit headers, and 429 and 503 answers carry Retry-After.

What do I have to credit?

Show a visible link to the listofbooks.net page each result came from, using the url field of the result. Paid plans have no attribution requirement.

How do I get higher limits or priority support?

Contact us and tell us what you are building and how many calls you need. We agree higher limits with you, and paid plans include priority email support. There is no checkout.

Which MCP clients work?

Any client that supports Streamable HTTP servers with a custom header, such as Cursor, VS Code and Claude Code. Claude Desktop connects through the mcp-remote bridge, which the MCP section shows. Listing the tools needs no key. Calling a tool needs your key, sent as Authorization: Bearer or X-API-Key.

Is there a machine-readable description?

Yes. The OpenAPI 3.1 document is at https://www.listofbooks.net/openapi.json.