OverDrive API: Check library availability
Finds ebook and audiobook editions a public library owns on OverDrive, with copies, holds and estimated wait when unavailable.
Unofficial. Not affiliated with or endorsed by OverDrive.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Title, required
title Book title, for example Lessons in Chemistry.
Lessons in Chemistry
- Author optional
author Optional author name, for example Bonnie Garmus.
Bonnie Garmus
- Format optional
format Choose any, ebook, or audiobook; for example audiobook.
any (default)
One of
any,ebook,audiobook.- Library, required
library Public library name or city, for example New York Public Library or Seattle.
New York Public Library
Input as JSON
{ "title": "Lessons in Chemistry", "author": "Bonnie Garmus", "library": "New York Public Library"}Output
{ "editions": [ { "title": "Lessons in Chemistry", "author": "Bonnie Garmus", "format": "ebook", "catalog_link": "https://nypl.overdrive.com/media/6384649" , "copies_owned": 17, "available_now": false, "number_of_holds": 76, "cover_image_link": "https://img1.od-cdn.com/ImageType-400/0111-1/{66227E65-A2C4-42E1-883A-43B8272BBE13}IMG400.JPG" , "copies_available_now": 0, "estimated_wait_weeks": 9.1 }, { "title": "Lessons in Chemistry", "author": "Bonnie Garmus", "format": "audiobook", "catalog_link": "https://nypl.overdrive.com/media/6397003" , "copies_owned": 81, "available_now": false, "number_of_holds": 6, "cover_image_link": "https://img2.od-cdn.com/ImageType-400/1191-1/{5AC0CB3C-7696-490C-9FBE-9D2E53167A7F}IMG400.JPG" , "copies_available_now": 0, "estimated_wait_weeks": 0.3 } ], "library_name": "New York Public Library"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"overdrive.com/check_library_availability","input":{"title":"Lessons in Chemistry","author":"Bonnie Garmus","library":"New York Public Library"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "overdrive.com/check_library_availability" , "input": { "title": "Lessons in Chemistry", "author": "Bonnie Garmus", "library": "New York Public Library" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "overdrive.com/check_library_availability" , "input": { "title": "Lessons in Chemistry", "author": "Bonnie Garmus", "library": "New York Public Library" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run overdrive.com/check_library_availability# with {"title":"Lessons in Chemistry","author":"Bonnie Garmus","library":"New York Public Library"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "title", "library" ], "properties": { "title": { "type": "string", "description": "Book title, for example Lessons in Chemistry." }, "author": { "type": "string", "description": "Optional author name, for example Bonnie Garmus." }, "format": { "enum": [ "any", "ebook", "audiobook" ], "type": "string", "default": "any", "description": "Choose any, ebook, or audiobook; for example audiobook." }, "library": { "type": "string", "description": "Public library name or city, for example New York Public Library or Seattle." } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "library_name", "editions" ], "properties": { "editions": { "type": "array", "items": { "type": "object", "required": [ "title", "author", "format", "copies_owned", "copies_available_now", "number_of_holds", "estimated_wait_weeks", "available_now", "cover_image_link", "catalog_link" ], "properties": { "title": { "type": "string" }, "author": { "type": [ "string", "null" ] }, "format": { "enum": [ "ebook", "audiobook" ], "type": "string" }, "catalog_link": { "type": "string" }, "copies_owned": { "type": [ "integer", "null" ] }, "available_now": { "type": "boolean" }, "number_of_holds": { "type": [ "integer", "null" ] }, "cover_image_link": { "type": [ "string", "null" ] }, "copies_available_now": { "type": [ "integer", "null" ] }, "estimated_wait_weeks": { "type": [ "number", "null" ] } }, "additionalProperties": false }, "description": "Matching editions in the public catalog." }, "library_name": { "type": "string", "description": "Public library collection name." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
overdrive.com/check_library_availability- Returns
- editions with title, author, format, copies owned and available, holds, estimated wait weeks, cover and catalog link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method overdrive.com/check_library_availability with the inputs above.
Ask your agent
- Is Lessons in Chemistry by Bonnie Garmus available as an audiobook at the Seattle Public Library right now, and how long is the hold wait?
- Check if my local library has the ebook version of Tomorrow, and Tomorrow, and Tomorrow, and how many copies are free to borrow.
- Find any audiobook editions of Project Hail Mary at New York Public Library with current holds and estimated wait time.
- Does the Austin library on OverDrive own a digital copy of The Midnight Library by Matt Haig, and what's the queue like?
- Search overdrive.com for the audiobook of Circe by Madeline Miller at the Chicago Public Library, showing copies owned and holds.
See more
Gets a book's catalog details from Open Library by its title, with an optional author or ISBN to identify the right book. Reading availability reflects listed editions; details may be missing when the catalog has none.
openlibrary.org/get_bookFinds Open Library books by search words, optionally narrowed by author and subject, sorted by relevance or publication age. Returns work-level results; free_online means at least one edition is marked public or borrowable, not that a loan is available now.
openlibrary.org/search_booksLooks up an audiobook in an Audible store by title (optionally narrowed by author) or by Audible book link, and returns its details, narrators, length, rating, visitor price, series, publisher summary and whether that store's Plus Catalog includes it.
audible.com/get_audiobookFinds free public-domain Project Gutenberg books by title, author or topic, with authors, languages, subjects, recent downloads, and reading and download links. Public-domain status is based on the United States.
gutenberg.org/search_free_booksGets one Goodreads book's details, reader ratings and edition information. The book can be a title, an ISBN or a book link; a title uses the best search match.
goodreads.com/get_bookFinds an Open Library author by name, link or key and lists their works with first publication year, edition count, cover and an author profile.
openlibrary.org/list_author_booksSearches Google Books by words, author, subject or ISBN, with language, free-ebook and newest-first options. Ratings counts are not shown by the public book feed; newest sorts the available matches by publication date.
books.google.com/search_booksSearches Library of Congress digital collections by keywords, material format and date range, in Library search relevance order. Rights notes may be unavailable for some records.
loc.gov/search_collections